1
热度 1|
EP4CE22F17I7 FPGA的C6424 DSP HPI接口设计
项目是通过EP4CE22F17I7 FPGA做输入数据的缓存转换和对外IO控制,利用DSP的HPI接口和FPGA进行通信,使DSP获取相关数据进行后续的处理操作,同时FPGA还可以获取DSP的相应地址的数据指令状态,根据需要进行相应的操作,达到双机相互通信的目的,可以优化电路设计。
下面简单介绍下HPI接口: HPI(Host-Port Interface)主机接口,是TI高性能DSP上配置的与主机进行通信的片内外设。通过HPI接口,主机可以非常方便地访问DSP的所有地址空间,从而实现对DSP的控制。TMS320C6424的HPI接口是一个16bit宽的并行端口。主机(host)对CPU地址空间的访问是通过EDMA控制器实现的。HPI接口的访问主要通过三个专用寄存器来实现,它们分别是HPI控制寄存器(HPIC)、HPI地址寄存器(HPIA)和HPI数据寄存器(HPID)。HPI接口主要信号简介如下:
(1) HD[15∶0](数据总线)
(2) HCNTL[1∶0](控制HPI访问类型)
HCNT1 |
HCNT0 |
备注 |
0 |
0 |
读写HPIC |
0 |
1 |
读写HPIA |
1 |
0 |
地址自增模式 |
1 |
1 |
地址固定模式 |
(3) HHWIL (半字指示选择)
HHWIL指示当前的为第一个或是第二个半字传输,对于第一个半字,HHWIL为低电平;对于第二个半字,HHWIL为高电平。
(4) HR/W (读/写操作指示)
HR/W为高电平,表示从HPI接口读;HR/W为低电平,表示向HPI接口写。
(5) HRDY (输出准备好)
(6) HCS,HDS1,HDS2(选通信号)
当HCS有效,并且HDS1和HDS2中仅有一个有效时,内部触发信号HSTROBE有效。这三个信号的组合逻辑其实就是片选和读/写信号构成的组合逻辑。
读写时序如下所示:
由上图时序和HPI读写数据流可知,主机对HPI 的一次总线访问周期为分三个阶段:主机发起访问,HPI 响应,主机结束访问周期。
A. 主机发起访问:即对HPI 寄存器的读,或者写命令。主机送出的硬件信号为HSTROBE(由HCS, HDS1/2产生),HR/W,HCNTL0/1,HWIL,以及HD[0:n]。HPI 在HSTROBE 的下降沿采样控制信号HR/W,HCNTL0/1,HWIL 判断主机的操作命令。
B. HPI 响应:HPI 在HSTROBE 的下降沿采样控制信号,根据控制信号做出相应的响应。如果是写(HR/W为低)命令,则在HSTROBE 的上升沿将数据线上的信号锁存到HCNTL0/1 和HWIL 指向的寄存器。如果是读命令(HR/W 为高),如果是读HPIC,或者HPIA 寄存器,HPI 将寄存器的值直接送到数据总线上;如果读HPID,HPI 先将HRDY 置为忙状态,HPI DMA 将数据从HPIA 指向的内存单元读到HPID,再送到数据线上,并清除HRDY 忙状态,在读HPID 后半字时,数据从寄存器直接送到数据总线上,不会出现HRDY 信号忙状态。
C. 主机结束访问周期:对于写操作,主机将数据送出后,只要满足芯片手册中HPI 对HCS 的最小宽度要求,即可结束访问周期。对于读HPID 操作,要等HRDY 信号由忙变为不忙,主机才能结束访问周期。两次连续的HPI 操作的间隔,在芯片手册的HPI 时序参数表里有要求,最小间隔为两个HPI 功能模块时钟周期。
下面是Verilog程序模块的相关描述:
module HPI_IN_OUT //端口定义
( input reset,clk,enable,
input [7:0] IN_DATA,
input [11:0] ADDR,
input UB,LB,CS,WR,RD,
input HRDY,
output reg [7:0] OUT_DATA,
output reg [1:0] HCNT,
output reg HDS1,HDS2,HAS,HCS,HBIL,HINT,HRW
);
关键语句
else if(enable==1&&CS==0&&WR==0&&HRDY==0)//使能、片选、HRDY和写有效时表示写开始
begin
cont<=cont+1;
if(cont==1&&WR_FLAG==0)//传送HPIC的低字节,写HWOB=1
begin
HCNT=0;
HRW=0;
HBIL=0;
HCS=0;
OUT_DATA=1;
end
else if(cont==4&&WR_FLAG==0)//置HCS为1,指示数据锁存
HCS=1;
else if(cont==6&&WR_FLAG==0)//传送HPIC的高字节,写HWOB=1
begin
HBIL=1;
HCS=0;
OUT_DATA=0;
end
else if(cont==10&&WR_FLAG==0)//置HCS为1,指示数据锁存
HCS=1;
else if(cont==12&&WR_FLAG==0) //传送HPIA的低字节,写低字节地址为0x50
begin
HCNT=1;
HRW=0;
HBIL=0;
HCS=0;
OUT_DATA=50;
end
else if(cont==16&&WR_FLAG==0)//置HCS为1,指示数据锁存
HCS=1;
else if(cont==18&&WR_FLAG==0) //传送HPIA的高字节,写低字节地址为ADDR
begin
HBIL=1;
HCS=0;
OUT_DATA=ADDR[7:0];
end
else if(cont==22&&WR_FLAG==0) //置HCS为1,指示数据锁存
HCS=1;
else if(cont==24&&WR_FLAG==0&&DATA_UL_FLAG==1)//传送HPIA的低字节,写低字节数据为IN_DATA[7:0]
begin
HCNT=1;
HRW=0;
HBIL=1;
HCS=0;
OUT_DATA=IN_DATA;
DATA_UL_FLAG=0;
end
else if(cont==24&&WR_FLAG==0&&DATA_UL_FLAG==0)//传送HPIA的低字节,写低字节数据为IN_DATA[7:0]
begin
HCNT=1;
HRW=0;
HBIL=0;
HCS=0;
OUT_DATA=IN_DATA;
DATA_UL_FLAG=1;
end
else if(cont==26&&WR_FLAG==0)//置HCS为1,指示数据锁存
begin
HCS=1;
WR_FLAG=1;
end
end
参考文献:
1.TMS320C6000 EMIF to TMS320C6000 Host Port Interface (http://www.ti.com/lit/an/spra536b/spra536b.pdf)
2. TMS320C6424 Fixed-Point Digital Signal Processor数据手册
3. HPI接口在 TI SOC的应用详解(http://www.ti.com.cn/cn/lit/an/zhca430/zhca430.pdf)