打印

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

[复制链接]
1741|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xb|  楼主 | 2007-12-20 22:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
检测两个输入信号的上升沿,控制输出为高或者为低
module test(OpenA,CloseA,A_Output);
    input OpenA,CloseA;
    output A_Output;
    reg A_Output;
        
    always
        @(posedge OpenA or posedge CloseA) begin
            A_Output = 0;
       if(OpenA)      A_Output = 1;
       else if(CloseA)     A_Output = 0;
    end
endmodule

但仿真的结果跟预想的不同,请哪位高手帮我看下程序有什么问题。多谢!

相关帖子

沙发
McuPlayer| | 2007-12-23 11:36 | 只看该作者

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

比如软件要先初始化成0,再根据情况赋值
而硬件要直接给定赋值状况
你看下面的代码是不是跟你的意图是一致的

    always @(posedge OpenA or posedge CloseA)
    begin
           A_Output = OpenA;
    end

使用特权

评论回复
板凳
pumac| | 2007-12-27 21:42 | 只看该作者

我也初学,说说

初始赋值用
initial  A_Output = 0;

不知能否达到初始话。 时序仿真,用非阻塞赋值更好

使用特权

评论回复
地板
日之泉| | 2008-1-2 10:34 | 只看该作者

仿真后的波形

 

使用特权

评论回复
5
日之泉| | 2008-1-2 10:36 | 只看该作者

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

使用特权

评论回复
6
xjg121| | 2008-1-27 20:46 | 只看该作者

楼住的意思

是不是这样:
module test(OpenA,CloseA,A_Output);
    input OpenA,CloseA;
    output A_Output;
   reg A_Output;
        
   always
        @(posedge OpenA or posedge CloseA) 
           begin
                  if(OpenA)      A_Output = 1;
             else if(CloseA)     A_Output = 0;
           end


endmodule

使用特权

评论回复
7
awey| | 2008-1-28 09:57 | 只看该作者

有冲突,如果 posedge OpenA 有效

前面有 A_Output = 0;
后面有 if(OpenA)      A_Output = 1;


A_Output到底是0还是1?

使用特权

评论回复
8
vongy| | 2008-1-28 20:23 | 只看该作者

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

使用特权

评论回复
9
vongy| | 2008-1-28 20:28 | 只看该作者

再说楼主的问题

根据楼主所给的条件,做出的电路根本就是没有办法工作的

暂且不说电路不能工作的问题。
楼主说结果根预想不一样,那是一定的
试想如果在OpenA为1时来了一个CloseA的上升沿,这些输出应该变为0,可是楼主那样写,又如何变为0

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

xb

2

主题

6

帖子

0

粉丝