关于cpld和arm通讯的问题
以下是我写的cpld的程序。语法检查编译啥的都通过,ucf里端口定义也没问题,但下到cpld里,arm那边就是读不到数。不知道问题出在哪里?
我是彻底的初学者。完全都按书上例子来做的。
`define SctrByte0 8'h00 //定义地址,arm那边发的地址是0x81000000~0x81000003
`define SctrByte1 8'h01
`define SctrByte2 8'h02
`define SctrByte3 8'h03
module transmit(DataBus,AddressBus,WE,OE,CS1); //WE是arm写,OE是arm读
input [7:0] AddressBus; //地址总线和数据总线在电路板上都是跟arm的对应端口相连的
input WE;
input OE;
input CS1;
inout [7:0] DataBus;
reg [7:0] DataReg;
reg [7:0] AddressReg;
initial
begin
DataReg = 8'h00;
end
always @(negedge WE) //当arm写使能信号有效时
begin
if (CS1 == 1'b0) //片选CS1低电平有效
begin
AddressReg = AddressBus; //从arm读地址
end
if (AddressReg == `SctrByte0)
begin
DataReg = 8'b00000011;
end
else if (AddressReg == `SctrByte1)
begin
DataReg = 8'b00001100;
end
else if (AddressReg == `SctrByte2)
begin
DataReg = 8'b00110000;
end
else if (AddressReg == `SctrByte3)
begin
DataReg = 8'b11000000;
end
end
assign DataBus = (OE == 1'b0)?DataReg:8'bz; //当arm读信号有效时,将reg值送数据总线
endmodule
ps:我用仿真器在keil Uvision里看arm没读到数,那么可以用什么手段来查看cpld有没有接收到arm传来的地址,以及cpld的引脚端口有没有输出呢?
如果有人能帮我解决这个问题,我会连续一周吃斋帮你祈福>_<言出必践!
我觉得,应该是ARM 的静态总线来读取CPLD吧?不需要ARM向CPLD发地址吧?直接在CPLD里年做一个地址译码器,读取不同数据就可以了
那段verilog 太差了。 好好学学 verilog 然后再做。 尤其是可综合电路。 错误太多。
LS的高手。我就是看了verilog的书做的啊,查错综合什么的都通过了,没错呀。您能不能详细给我讲一下啊。拜托了。新手没人可以问,只能看书,要是按书上做的都不行,我还能怎么办啊T_T
initial //这个不能有
begin
DataReg = 8'h00;
end
/////没有时钟,不能做寄存器,还是做个 逻辑电路,类似rom译码
always @(*) //we,cs addressbus
begin
if( (CS1 == 1'b0)&&(we==1'b0)) //片选CS1低电平有效
begin
AddressReg = AddressBus; //从arm读地址
end
else
AddressReg = 0;
if (AddressReg == `SctrByte0)
begin
DataReg = 8'b00000011;
end
else if (AddressReg == `SctrByte1)
begin
DataReg = 8'b00001100;
end
else if (AddressReg == `SctrByte2)
begin
DataReg = 8'b00110000;
end
else if (AddressReg == `SctrByte3)
begin
DataReg = 8'b11000000;
end
else
begin
DataReg = 0;
end
end
非常感谢!我把代码修改了,今天会用示波器测一下>_<
我不太会用行不行啊!LS大坏蛋!
呵呵, 得五分,下软件用
