|
绝对的初学者。
我想实现这样一个功能:cpu给cpld发四个地址,cpld接收到地址后根据不同地址给数据总线赋不同的值,把值送给cpu。
我完全是按书上语法来写的,查错编译综合也都通过了,但下到cpld里就是传不了数,用仿真器在cpu里读不到数。
对应的引脚都连好了,UCF的定义也没问题。哪位好心的高手能指导我一下。。。
如果有好的学习方法也欢迎指导。。。我以前接触的硬件主要是画原理图和PCB图或者做手工焊板子。。。
现在学fpga,除了看书,就是照着例子写代码,下到芯片里实验。但写好的代码实现不了功能,我很迷茫。。。
十分感谢路过的各位!
`define SctrByte0 8'h00 //定义地址
`define SctrByte1 8'h01
`define SctrByte2 8'h02
`define SctrByte3 8'h03
module transmit(DataBus,AddressBus,WE,OE,CS1,inclk);
input [7:0] AddressBus; //地址总线
input WE; //cpu写使能
input OE; //cpu读使能
input CS1;
input inclk; //cpld时钟
inout [7:0] DataBus; //数据总线
reg pre_rd;
reg [7:0] DataReg = 8'b00000000;
reg [7:0] AddressReg;
assign DataBus = DataReg;
always @(posedge inclk)
begin
if (CS1 == 0 && WE == 0)
begin
AddressReg <= AddressBus; //cpu向cpld写地址
end
end
always @(posedge inclk)
begin
if (OE == 0)
begin
pre_rd <= 1;
end
else
begin
pre_rd <= 0;
end
end
always @(posedge inclk)
begin
if (pre_rd)
begin
case(AddressReg) //根据不同地址赋值
`SctrByte0:
begin
DataReg <= 8'b00000011;
end
`SctrByte1:
begin
DataReg <= 8'b00001100;
end
`SctrByte2:
begin
DataReg <= 8'b00110000;
end
`SctrByte3:
begin
DataReg <= 8'b11000000;
end
endcase
end
else
begin
DataReg <= 8'bzzzzzzzz;
end
end
endmodule |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|