2016-05-03 21 views
0

私はシンクロナイズされた入力を受け取り、入力がアサートされるとリセットが有効になるまでその状態を保持する単純なレジスタを作成しています。reg出力を入力として使用Verilog

私のコードはかなり自明です。このチェックアウトの出力は問題を引き起こすでしょうか?

module walk_reg(
     input Walk_Sync, //pedestrian set walk-request 
     input WR_Reset,  //FSM reset, for during the walk service 
     input clk,  //clock 
     output reg WR //output 
     ); 


    always @(posedge (clk)) 
    begin 
     if(WR_Reset) //if reset enables, output goes to 0 
      WR <= 1'b0; 
     else if (WR) //if WR is already on, keep it on 
      WR <= WR; 
     else 
      WR <= Walk_Sync; //if reset is not enabled and WR isn't already one, assign output to Walk_Sync 
    end 

    endmodule // walk_reg 

EDIT変数の社名変更、コメントのために答えるが、あまりないコード

+0

WR_Resetがclkと同期していないと問題が発生することがあります。 – toolic

+0

申し訳ありませんが、Walk_SyncとWR_Requestは同じ変数ですが、名前を変更してコード内で実際に変更するのを忘れてしまいました。これは修正されました。また、WR_Resetは同期されます – qasddd

+0

それから私は何の問題も見ません。 – toolic

答えて

2

でそれを変更するのを忘れました。何の条件が満たされていない場合

always @(posedge clk) 
begin 
    if (WR_Reset) //if reset enables, output goes to 0 
    WR <= 1'b0; 
    else if (!WR)  
    WR <= Walk_Sync; 
end 

フリップフロップはその値を保持します:

always @(posedge (clk)) 
    begin 
     if(WR_Reset) //if reset enables, output goes to 0 
      WR <= 1'b0; 
     else if (WR) //if WR is already on, keep it on 
      WR <= WR; 
     else 
      WR <= Walk_Sync; //if reset is not enabled and WR isn't already one, assign output to Walk_Sync 
    end 

は同じです。 duskwuffから

さらに良い提案:サイドノートに

always @(posedge clk) 
begin 
    if (WR_Reset) //if reset enables, output goes to 0 
    WR <= 1'b0; 
    else if (Walk_Sync)  
    WR <= 1'b1; 
end 
+1

あるいは、おそらくもっと鮮明な: '... else if(Walk_Sync)WR <= 1'b1'。 – duskwuff

0

、WR_Resetはクロックのみが動作しているだけプをリセットします。 ほとんどのフロップ設計では、ASYNCリセッ​​トエッジ検出とクロックに基づくリセット検出を使用します。 always @(posedge (clk) or posedge(WR_Reset))

VS

always @(posedge (clk))そうでない場合、条件付き割り当てのWRを使用することに問題はありません。

関連する問題