刚刚接触verilog,一段代码仿真错误

[复制链接]
3337|8
 楼主| xb 发表于 2007-12-20 22:41 | 显示全部楼层 |阅读模式
检测两个输入信号的上升沿,控制输出为高或者为低<br />module&nbsp;test(OpenA,CloseA,A_Output);<br />&nbsp;&nbsp;&nbsp;&nbsp;input&nbsp;OpenA,CloseA;<br />&nbsp;&nbsp;&nbsp;&nbsp;output&nbsp;A_Output;<br />&nbsp;&nbsp;&nbsp;&nbsp;reg&nbsp;A_Output;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;always<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@(posedge&nbsp;OpenA&nbsp;or&nbsp;posedge&nbsp;CloseA)&nbsp;begin<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A_Output&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(OpenA)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A_Output&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(CloseA)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A_Output&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;end<br />endmodule<br /><br />但仿真的结果跟预想的不同,请哪位高手帮我看下程序有什么问题。多谢!
McuPlayer 发表于 2007-12-23 11:36 | 显示全部楼层

硬件的思考逻辑跟软件不同

比如软件要先初始化成0,再根据情况赋值<br />而硬件要直接给定赋值状况<br />你看下面的代码是不是跟你的意图是一致的<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;always&nbsp;@(posedge&nbsp;OpenA&nbsp;or&nbsp;posedge&nbsp;CloseA)<br />&nbsp;&nbsp;&nbsp;&nbsp;begin<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A_Output&nbsp;=&nbsp;OpenA;<br />&nbsp;&nbsp;&nbsp;&nbsp;end
pumac 发表于 2007-12-27 21:42 | 显示全部楼层

我也初学,说说

初始赋值用<br />initial&nbsp;&nbsp;A_Output&nbsp;=&nbsp;0;<br /><br />不知能否达到初始话。&nbsp;时序仿真,用非阻塞赋值更好
日之泉 发表于 2008-1-2 10:34 | 显示全部楼层

仿真后的波形

&nbsp;
日之泉 发表于 2008-1-2 10:36 | 显示全部楼层

仿真后的结果不是我想要的,不知怎么解决

  
xjg121 发表于 2008-1-27 20:46 | 显示全部楼层

楼住的意思

是不是这样:<br />module&nbsp;test(OpenA,CloseA,A_Output);<br />&nbsp;&nbsp;&nbsp;&nbsp;input&nbsp;OpenA,CloseA;<br />&nbsp;&nbsp;&nbsp;&nbsp;output&nbsp;A_Output;<br />&nbsp;&nbsp;&nbsp;reg&nbsp;A_Output;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;always<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@(posedge&nbsp;OpenA&nbsp;or&nbsp;posedge&nbsp;CloseA)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(OpenA)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A_Output&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(CloseA)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A_Output&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br /><br /><br />endmodule
awey 发表于 2008-1-28 09:57 | 显示全部楼层

有冲突,如果 posedge OpenA 有效

前面有&nbsp;A_Output&nbsp;=&nbsp;0;<br />后面有&nbsp;if(OpenA)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A_Output&nbsp;=&nbsp;1;<br /><br /><br />A_Output到底是0还是1?<br />
vongy 发表于 2008-1-28 20:23 | 显示全部楼层

4楼的,datain明明是四位的,你干什么只写三位啊

  
vongy 发表于 2008-1-28 20:28 | 显示全部楼层

再说楼主的问题

根据楼主所给的条件,做出的电路根本就是没有办法工作的<br /><br />暂且不说电路不能工作的问题。<br />楼主说结果根预想不一样,那是一定的<br />试想如果在OpenA为1时来了一个CloseA的上升沿,这些输出应该变为0,可是楼主那样写,又如何变为0
您需要登录后才可以回帖 登录 | 注册

本版积分规则

xb

2

主题

6

帖子

0

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