微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 关于cpld和arm通讯的问题

关于cpld和arm通讯的问题

时间:10-02 整理:3721RD 点击:
我想实现的功能是,arm给cpld发地址,cpld根据不同的地址向8位数据总线发数,把数传给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大坏蛋!

呵呵, 得五分,下软件用

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top