自己写的一个控制SRAM的程序,不能编译,请大家指点

[复制链接]
2117|2
 楼主| 1dqmoon 发表于 2008-8-29 13:55 | 显示全部楼层 |阅读模式
程序如下<br /><br />SRAM是通过地址加数据,用8080时序完成的,&nbsp;我想用CPLD转成类似6800时序的操作。&nbsp;<br /><br />写数据时,在e的下降沿下,&nbsp;第一次送高位地址,第二次是低位地址,第三次是数据,再有两次来产生SRAM的写信号。<br /><br />读数据与上面方式类似,只是后面产生SRAM的读信号。<br /><br />程序编译时停在<br />temp&nbsp;&lt=&nbsp;Internal_bus1;<br />RamDa&lt=temp;<br />和<br />hostda&lt=Internal_bus2;<br /><br />这里,RamDa是cpld到sram的数据口,hostda是单片机到CPLD的数据口,两个为双向口。<br /><br />这个是怎么回事啊,要怎么改好呢?<br /><br /><br />module&nbsp;ram(e,&nbsp;rw,&nbsp;rst,&nbsp;hostda,&nbsp;RamAddrH,&nbsp;RamAddrL,&nbsp;RamDa,&nbsp;RamWr,&nbsp;RamRd);<br />&nbsp;&nbsp;&nbsp;&nbsp;input&nbsp;e;<br />&nbsp;&nbsp;&nbsp;&nbsp;input&nbsp;rw;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input&nbsp;rst;<br />&nbsp;&nbsp;&nbsp;&nbsp;inout&nbsp;[7:0]&nbsp;hostda;<br />&nbsp;&nbsp;&nbsp;&nbsp;output&nbsp;[7:0]&nbsp;RamAddrH;<br />&nbsp;&nbsp;&nbsp;&nbsp;output&nbsp;[7:0]&nbsp;RamAddrL;<br />&nbsp;&nbsp;&nbsp;&nbsp;inout&nbsp;[7:0]&nbsp;RamDa;<br />&nbsp;&nbsp;&nbsp;&nbsp;output&nbsp;RamWr;<br />&nbsp;&nbsp;&nbsp;&nbsp;output&nbsp;RamRd;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />reg&nbsp;[7:0]&nbsp;RamAddrH;<br />reg&nbsp;[7:0]&nbsp;RamAddrL;<br />reg&nbsp;RamWr;<br />reg&nbsp;RamRd;<br />integer&nbsp;temp;<br /><br />reg&nbsp;[7:0]&nbsp;Internal_bus1;<br />reg&nbsp;[7:0]&nbsp;Internal_bus2;<br />reg&nbsp;[3:0]&nbsp;e_counter;<br />assign&nbsp;hostda=(rw==0)?Internal_bus1:8'bz;<br />assign&nbsp;RamDa=(rw==1)?Internal_bus2:8'bz;<br /><br />always&nbsp;@(negedge&nbsp;e&nbsp;or&nbsp;rw)<br />begin<br />&nbsp;&nbsp;if(rst==0)<br />&nbsp;&nbsp;begin<br />&nbsp;&nbsp;&nbsp;&nbsp;RamAddrH=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RamAddrL=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RamWr=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RamRd=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e_counter&lt=0;<br />&nbsp;&nbsp;end<br />&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;begin<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(rw==0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e_counter&lt=e_counter+1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(e_counter==1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RamAddrH&lt=Internal_bus1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(e_counter==2)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RamAddrL&lt=Internal_bus1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(e_counter==3)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;////RamDa&lt=Internal_bus1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;&lt=&nbsp;Internal_bus1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RamDa&lt=temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(e_counter==4)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RamWr&lt=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(e_counter==5)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RamWr&lt=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e_counter&lt=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e_counter&lt=e_counter+1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(e_counter==1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RamAddrH&lt=Internal_bus1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(e_counter==2)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RamAddrL&lt=Internal_bus1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(e_counter==3)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RamRd&lt=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(e_counter==4)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hostda&lt=Internal_bus2;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(e_counter==5)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RamRd&lt=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e_counter&lt=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />&nbsp;&nbsp;&nbsp;&nbsp;end<br />end<br />end&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />endmodule
steventsan 发表于 2008-8-29 23:55 | 显示全部楼层

这是在写软件,看来阁下根本没有入门

从头到尾一个&nbsp;always&nbsp;块&nbsp;,没有时序的概念&nbsp;组合逻辑中&nbsp;阻塞赋值&nbsp;非阻塞赋值&nbsp;混用&nbsp;。。。。实在看不下去
flyingwxj 发表于 2008-9-11 15:15 | 显示全部楼层

确实没法看

always&nbsp;@(negedge&nbsp;e&nbsp;or&nbsp;rw)<br />这算什么?边沿和电平敏感信号一起出现。后面就更没法看了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

63

主题

253

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部