簡體   English   中英

Verilog生成帶有always @(*)塊的語句

[英]Verilog generate statement with always@(*) block

我有一個我認為應該在其下面工作的generate塊,但是我看到else塊下always @(*)部分的問題。 使用VCS時, temp_in[i+1][j]始終分配為'x'。 我希望將其設置為“ 0”。 如果我實例化模塊/門而不是始終阻塞,就像我對if部分所做的那樣,那么它將正常工作。 搜尋使用foreach,generate,always的正確語法,並且如果在單個塊內也不會產生任何有用的結果。 我知道此修復程序是次要的更改,但我對所有語言結構都不熟悉,因此,我將不勝感激。

ceil()是一個返回整數的函數。 它僅使用在編譯時固定的參數,因此我希望循環展開能夠正確進行。

  genvar i, j, k;
  generate
    for (i = 0; i < NUM_STAGES; i = i + 1) begin:gen_stage
      for (j = 0; j < (TOTAL_LENGTH/(2**(i+1))); j = j + 1) begin:gen_or
        if(j < ceil(i)) begin
          for (k = 0; k < CPU_DATA_WIDTH; k = k + 1) begin:gen_bit
            msw_mem_out_mux_bit_or U_msw_mem_out_mux_bit_or (
              .in_1 (temp_in[i][2*j][k]),
              .in_2 (temp_in[i][(2*j)+1][k]),
              .out  (temp_in[i+1][j][k])
            );
          end
        end else begin
          always @(*) begin
            temp_in[i+1][j] = {CPU_DATA_WIDTH{1'b0}};
          end
        end
      end
    end
  endgenerate

always @*等待,直到推斷出的靈敏度列表中的信號發生變化。 ij是常數(從模擬時間的角度出發, always @*評估always @*時),因此always塊在​​靈敏度列表中沒有信號。

如果使用SystemVerilog, always_comb always @*更改為always_comb ,它將在時間0運行。對於Verilog,添加一個initial塊。

參考: IEEE Std 1800-2012§9.2.2.2.2 always_combalways @*

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM