微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > verilog HDL中的@

verilog HDL中的@

时间:10-02 整理:3721RD 点击:
各位大侠,请问在verilog中,一个always语句,在@后面的信号处于一个不确定状态(X),将会怎么执行?

always后面跟的是信号的跳变沿,比如always @(posedge a)
如果此时a是从逻辑“0”跳变为不定态“x”,仿真器一般认为是上升沿;
同理,如果此时a是从逻辑“1”跳变为不定态“x”,仿真器一般认为是下降沿。

   谢谢啦!是这样的,有关的一道题:               事件A分别在10,20,30发生,而B一直保持X状态,问在30时Count的值是多少。
               reg[7:0]Count;
               initial
                      Count=0;
               always
                        begin
                        @(A) Count=Count+1;
                        @(B) Count=Count+1;
                        end;
   答案说是Count=1,因为A第一次发生时,Count的值由0变1,然后事件控制@(B)阻挡了进程。 那么这个解释是不是就是说因为B处于不定状态,所以会阻断进程呢?



    你确定你这段代码编译通过了?不报错?
    @(a)和@(b),这个语法就错了啊,
    如果你希望在a,b跳变沿发生变化时,执行动作,你要么写@(posedge a),要么@(negedge a)
    如果你的意图是希望在a,b发生电平变化时,执行动作,你就该写
    always @(a or b)    或者    always @(*)
    begin                                 begin   
            xxxx                                  xxxx
    end                                   end
    再回答你的问题,其实这边不管你b是逻辑“1”、逻辑“0”还是不定态“x”,在沿触发电路中只要检测不到他的上升/下降沿,在电平触发电路中,只要检测不到他的信号变化,都不会执行@(xxx)后面的动作。所以你这边,在b不变的情况下(1,0,x都一样),怎么写,代码都只会执行到a那一句,即count=1

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

网站地图

Top