请教高手,使用FPGA扩展F2812并口应用的问题
在系统应用中,DSP(F2812)与FPGA(Xilinx Spartan-3 AN)通过F2812的XINTF并口相连接,需要在Xilinx FPGA中扩展出一个并口。两者之间的硬件连接如图所示:
有四路开入信号引入到FPGA中,DSP通过并口总线读取四路开入信号的状态。
初学FPGA,为了简化设计,想扩展异步并口,写了以下Verilog代码,实际测试发现,将此代码配置下载到FPGA后,DSP一旦通过并口开始读取FPGA中的数据,DSP程序就会无法运行而导致死机。
//四路DI开入结果输入到FPAG,使用DSP通过异步并口从FPGA中读取开入状态
`define DIAddrOffset_Ch0 16'h2100 //定义DSP寻址四路开入通道的地址
`define DIAddrOffset_Ch1 16'h2101
`define DIAddrOffset_Ch2 16'h2102
`define DIAddrOffset_Ch3 16'h2103
`define DSPAddrWidth 19
//位宽定义
`define DSPDataWidth 16
`define DIBitWidth 4
module DI_Test(
DSP_XR_Wn,
//DSP总线读写控制信号,DSP_XR_Wn为高表示总线读;为低表示总线写
DSP_XZCS0AND1n, //DSP片选
DSP_XZCS2n,
DSP_XA, //DSP地址和数据总线
DSP_XD,
DI_24V,
//24V外部开入
);
input DSP_XR_Wn;
input DSP_XZCS0AND1n;
input DSP_XZCS2n;
input [`DSPAddrWidth-1 : 0] DSP_XA;
inout [`DSPDataWidth-1 : 0] DSP_XD;
reg [`DSPDataWidth-1 : 0] DSP_XD_out;
input [`DIBitWidth-1 : 0] DI_24V;
initial
begin
DSP_XD_out
<= 16'hzzzz;
end
//当片选无效时,将数据总线设置为高阻输出状态
assign DSP_XD = (!DSP_XZCS0AND1n) ? DSP_XD_out : 16'hzzzz;
//always @ (DSP_XR_Wn or DSP_XZCS0AND1n or DSP_XA)
always @ (DSP_XR_Wn or DSP_XZCS0AND1n or DI_24V or DSP_XA)
begin
//当片选信号有效且XRWn信号有效则读取DI开入状态并将数据结果写到数据总线
if((!DSP_XZCS0AND1n) && DSP_XR_Wn) //DSP_XR_Wn为高表示读;为低表示写
begin
if(DSP_XA==`DIAddrOffset_Ch0)
//读DI开入通道Ch0,将开入状态写到数据总线
DSP_XD_out <= DI_24V[0];
else if(DSP_XA==`DIAddrOffset_Ch1)
//读DI开入通道Ch1
DSP_XD_out <= DI_24V[1];
else if(DSP_XA==`DIAddrOffset_Ch2)
//读DI开入通道Ch2
DSP_XD_out <= DI_24V[2];
else if(DSP_XA==`DIAddrOffset_Ch3)
//读DI开入通道Ch3
DSP_XD_out <= DI_24V[3];
end
end
endmodule
|