2015-02-05 58 views
1

我目前有一個fpga上的按鈕去抖動器的代碼(下面),但是我收到一個錯誤,指出「在一個始終/初始化過程塊中的多個事件控制語句在此不受支持案件。」每當我嘗試綜合設計。導致問題的線是@(posedge clk),但我想知道如何替換這個邏輯。我基本上需要的是always @ (quarter & posedge clk)作爲第一個始終阻擋的靈敏度列表,但這也不起作用。我是相當新的語言,所以我還在工作了代碼的幾個語法kinks.Snippet低於:Verilog事件控制語句

always @(quarter) 
     begin 

      @(posedge clk) 
      begin 
       if (quarter != new) begin new <= quarter; count <= 0; end 
       else if (count == DELAY) cleanq <= new; 
       else count <= count+1; 
       end 
      end 

回答

-1

僞代碼:

[email protected](something1) 
      @(something2) 
       do something 

看在評論中看到解釋爲什麼這是不是合成的

always @(posedge clk) 
      /* over here you'll have to set the default values 
       for everything that's being changed in this always block, 
       you'll otherwise generate latches. Which is likely 
       not what you want */ 
      begin 
       if (quarter != new) begin new <= quarter; count <= 0; end 
       else if (count == DELAY) cleanq <= new; 
       else count <= count+1; 
       end 

我沒有在時刻訪問我的Verilog鑽機,所以我不能確認語法的正確性

+0

我對你在你的評論區放入什麼感到困惑。你的意思是你基本上初始化你的「變量」?如果是的話,我很難看到這代表了同樣的邏輯。代碼塊應在posedge上和「四分之一」按下時執行。 – Antoninus 2015-02-06 00:04:30

+1

這個答案是錯誤的。 「always @(something1)@(something2)do something」被解釋爲等待something1事件,然後等待接下來的something2事件。沒有辦法爲兩個事件在同一時間發生而編寫或合成代碼。大多數綜合工具只允許一個always塊中的一個事件。 – 2015-02-06 00:14:13

+0

@ dave_59我可能錯了。安東尼努斯你是什麼意思的「季度新聞」,它的價值已經改變了?我的意思並不是初始化這些值,我的意思是明確他們的價值。所以如果一個值不變,你會把值<=值; – Qwertyzw 2015-02-06 00:31:45