【问题标题】:I want to give various values in one vector我想在一个向量中给出各种值
【发布时间】:2022-01-16 04:31:10
【问题描述】:
    module processor_testbench (
           input [7:0]  o_cmd_status_reg,                                   
           input          o_start_ack,                                        
                                                                                                                 
           output  reg [7:0]  i_transmit_data, // transmit data port              
           input    o_transmit_data_request, // transmit data required 

           output   reg i_rst_n,
           output   reg i_clk
    );

    initial begin
       i=1'b0;
    end

     initial begin    //-> Where the problem is
        @(posedge(o_start_ack));
        i=i+1;
        if(i==1)
        i_transmit_data = 8'bxxx00000;
        else if(i==2)
        i_transmit_data=8'b00000000;
        else if(i==3)
        i_transmit_data=8'b11110000;
        else if(i==4)
        i_transmit_data=8'b00000000;
        //stop trasmission @start acknowledge
    end

    endmodule

我想看看o_start_ack 上升沿时的结果(模拟)。

i_transmit_data 正在改变

8'bxxx00000 -> 8'b00000000 -> 8'b11110000 -> 8'b00000000

但是,模拟只显示8'bxxx00000

在这种情况下未使用的代码由我删除。

如何让i_transmit_data 具有不同的价值?

【问题讨论】:

    标签: verilog


    【解决方案1】:

    将您的第二个 initial 块更改为 always 块:

     always begin
         @(posedge(o_start_ack));
         i=i+1;
         // ...
    

    您的代码的问题是initial 块只等待o_start_ack 信号的一个posedge。一旦它看到第一个 posedge,它就会设置 i=1 和 i_transmit_data=8'bxxx00000,然后块停止执行。

    使用always 块允许代码在每次出现o_start_ack 的姿势时执行。

    【讨论】:

      猜你喜欢
      • 2012-12-15
      • 2018-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-16
      • 1970-01-01
      相关资源
      最近更新 更多