在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3128|回复: 8

[求助] 关于cpld和arm通讯的问题

[复制链接]
发表于 2012-7-5 15:19:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
我想实现的功能是,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的引脚端口有没有输出呢?
如果有人能帮我解决这个问题,我会连续一周吃斋帮你祈福>_<言出必践!
发表于 2012-7-5 15:30:14 | 显示全部楼层
我觉得,应该是ARM 的静态总线来读取CPLD吧?不需要ARM向CPLD发地址吧?直接在CPLD里年做一个地址译码器,读取不同数据就可以了
发表于 2012-7-5 22:02:52 | 显示全部楼层
那段verilog 太差了。 好好学学 verilog 然后再做。 尤其是可综合电路。  错误太多。
 楼主| 发表于 2012-7-6 09:36:03 | 显示全部楼层
回复 3# xujin2002ji


    LS的高手。。。我就是看了verilog的书做的啊,查错综合什么的都通过了,没错呀。您能不能详细给我讲一下啊。。。拜托了。新手没人可以问,只能看书,要是按书上做的都不行,我还能怎么办啊T_T
发表于 2012-7-6 19:40:56 | 显示全部楼层
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
 楼主| 发表于 2012-7-9 08:38:24 | 显示全部楼层
回复 5# xujin2002ji


    非常感谢!我把代码修改了,今天会用示波器测一下>_<
 楼主| 发表于 2012-7-9 08:39:16 | 显示全部楼层
回复 6# 卖女孩的小火柴


    我不太会用行不行啊!LS大坏蛋!
发表于 2012-7-10 10:58:00 | 显示全部楼层
呵呵, 得五分,下软件用
发表于 2019-1-29 18:37:55 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-20 04:47 , Processed in 0.041205 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表