2016-03-11 128 views
2

我正在做一個數字模塊的綜合,我需要一個D觸發器與2異步復位。 (原因是,我將推動一個復位與可用的時鐘,我將使用第二個重置我的數碼塊的所有寄存器) 我準備了下面的代碼:D觸發器與2重置:綜合錯誤

module dff_2rst(q,qn,clk,d, rst,clear); 
    input clk,d, rst, clear ; 
    output q,qn; 
    reg q,qn; 
    always @(posedge clk or posedge rst or posedge clear) //asynchronous reset  
    begin 
    (* full_case, parallel_case *) 
    case({rst, clear}) 
     2'b00: begin 
       q <= d; 
       qn<=~d; 
       end 
     default: begin  
        q <= 1'b0; 
        qn <=1'b1; 
       end 
    endcase 
    end 



endmodule  

,但我得到以下錯誤:

The statements in this 'always' block are outside the scope of the synthesis policy. Only an 'if' statement is allowed at the top level in this always block. (ELAB-302) 
*** Presto compilation terminated with 1 errors. *** 

我也試圖與

if(~rst & ~clear) 

,但我有錯誤了。

你有想法糾正我的代碼嗎?非常感謝!

回答

1

寫一個異步復位,以Verilog RTL設定(全部清除)觸發器的標準方法是:

always @(posedge clk or posedge rst or posedge clear) begin 
    if (rst) begin 
    // Aysnc Reset 
    q <= 'b0 ; 
    end 
    else if (clear) begin 
    // Async Clear 
    q <= 'b0 ; 
    end 
    else begin 
    // Sync logic here 
    q <= d; 
    end 
end 

assign qn = ~n; 

爲QN的小動作需要它QN是線,當前定義爲一個reg。 reg q,qn;應該只是reg q;

而且更清潔的代碼的新頭型更清潔,並避免重複:

module dff_2rst(
    input  clk, 
    input  d, 
    input  rst, 
    input  clear, 
    output reg q, 
    output  qn); 
0

謝謝摩根。你的代碼給我鼓舞。我不能使用

assign qn=~q; 

因爲我得到了錯誤:

qn is not a valid left-hand side of a continuous assignment. 

但是我修改代碼以下列方式和它的作品:

module dff_2rst(q,qn,clk,d, rst,clear); 
    input clk,d, rst, clear ; 
    output q,qn; 
    reg q,qn; 
    always @(posedge clk or posedge rst or posedge clear) //asynchronous reset  
// 
    begin 
     if (rst) begin 
     // Aysnc Reset 
      q <= 'b0 ; 
      qn<= 'b1 ; 
     end 
     else if (clear) begin 
     // Async Clear 
      q <= 'b0 ; 
      qn<= 'b1 ; 
     end 
     else begin 
     // Sync logic here 
      q <= d; 
      qn<= ~d; 
     end 
    end 
endmodule 
+0

不要定義爲REG,作爲電線離開。 – Morgan

+0

'reg q,qn;'應該是'reg q;' – Morgan

+0

我試過了,但是我得到錯誤'Assigment to'qn'要求它是一個寄存器。 (VER-952)' –