簡體   English   中英

Verilog Latch在always @(posedge clk)中

[英]Verilog Latch in always@(posedge clk)

如果我正確理解閂鎖,則會在組合塊中創建該閂鎖,其中在將變量分配給值時並未聲明所有可能的條件。 我如何在順序塊中獲取鎖存器?

當我通過Quartus編譯代碼時,它撤回了2 Fmax,這表明我有一個鎖存器。

   always@(posedge clk or negedge nreset) begin
      case(counter)
         0: begin
            if(state == IDLE) begin
               // DOES SOMETHING
            end
         end

         1: begin
           // DOES ASSIGNMENT
         end // PROLOG

         81: begin
           // DOES ASSIGNMENT
         end // EPILOG


         82: begin
            // DOES ASSIGNMENT
         end // POSTPROC

         default: begin
            // DOES ASSIGNMENT
         end // ROUNDS

      endcase  

我已經檢查了每種情況,並確保所有分配都沒有阻塞。 知道為什么我會閂鎖嗎?

我的代碼正在計算SHA1

我有2個always @(posedge clk),一個計算下一個Wt,上面計算一個下一個A,B,C,D,E值。

if您的if語句上沒有elseif合成器對於接下來需要做什么感到困惑,從而推斷出鎖存器。

如果這不是故意的,而只是您為堆棧溢出示例編寫的內容,那么問題可能出在您的其他always塊中。

鎖存器只是沒有時鍾的觸發器。 合成器認為它們很差的原因是因為它們可能導致時序錯誤。 閂鎖也不總是一個問題,實際上有時您可能已經知道,它們是有意的。

檢查您的assign語句,看看是否在always初始化為0或某個值的Always塊之外聲明了任何reg。

在這種情況下,您可能想嘗試初始塊。 句法:

 initial
 begin

 value = 0;
 input = 0; // or something

 end

暫無
暫無

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

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