verilog当中仿真的时候赋值用=还是<=

【总结:<=是所有数据同时变化,而=是顺序执行。如果是左边数据的赋值都是不关联的,那么就可以用<=,使所有赋值同时有效。如果有a和b都需要赋值,且b的值跟a有关的同时还需要一起变化,那么可以用=】

一般情况下可以用<=,因为如果信号需要寄存打一拍,如果给的激励刚好打在要寄存那一拍的时钟上,可能从仿真波形看不出来打拍

比如要实现以下逻辑:(也就是b_sig_reg_sync_pos比b_sig_s_1晚一拍

 always @(posedge input_b_clk_sig)
    begin
      if (input_b_rst_ogsr == 1'b1)
        begin
          b_sig_reg_sync_pos <= 0;
        end
      else if (input_b_ce_sig == 1'b1)
        begin
      if(REG2_INPUTB_BYP=="ENABLED")
            b_sig_reg_sync_pos <= b_sig_s_1;
      else
        b_sig_reg_sync_pos <= b_sig_reg_sync_pos_r;
        end
    end

最开始的输入来自din_0_B (从tb激励里面给)

1.直接用“=”进行赋值,并没有寄存一拍

 

 task generate_signals;

        input integer num_sets;

        integer i;

        begin

            for (i = 0; i < num_sets; i = i + 1) begin

                @(posedge Clock)

                begin

                din_0_B = i + 1;

                end

                #100;

            end

        end

    endtask

2.直接用“<=”进行赋值,有寄存一拍

 

 task generate_signals;

        input integer num_sets;

        integer i;

        begin

            for (i = 0; i < num_sets; i = i + 1) begin

                @(posedge Clock)

                begin

                din_0_B <= i + 1;

                end

                #100;

            end

        end

    endtask

注:(还要一种方式是)

 @(posedge Clock)

  Begin

  #10;

    din_0_B = i + 1;

     end

    #100;

那么数据就会在上升沿之后错过一点点有效,最后的结果也会是在下一个上升沿发生变化

3.用时钟下降沿去赋值,会在下一个时钟上升沿来的时候变化,相当于打半拍

 

task generate_signals;

        input integer num_sets;

        integer i;

        begin

            for (i = 0; i < num_sets; i = i + 1) begin

                @(negedge Clock)

                begin

                din_0_B <= i + 1;

                end

                #100;

            end

        end

    endtask

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值