2016-10-26 3 views
-2

私はこのプログラムをFIRフィルター用に書いており、遅延のためにDフリップフロップを使用しました。私はインパルス応答h(n)= {1、-1}を使用してフィルタを実装する必要がありました。次のプログラムがエラーQを表示し、Dが宣言されないのはなぜですか?

DおよびQが正しく定義/宣言されていないのと同じエラーが表示されます。 Qが違法に再宣言されているという別のエラーがありました。そのため、Q出力レジスタを定義した行を2番目のモジュールで削除しました。エラーを指摘し、修正方法を教えてください。

module firfilter(dout, din, clock); 
input din, clock; 
output dout; 

parameter b0 = 1'd1; 
parameter b1 = 1'd1; 

assign dout = b0 - b1 * Q; 

[email protected] (posedge clock) 

     D < = din; 

endmodule 

module dff (D, clock, Q); 
input D, clock; 
output Q; 


[email protected] (posedge clock) 

     Q <= #(1) D; 

endmodule 

答えて

2

Verilogでは、モジュールで宣言されたすべての信号は、このモジュールでのみ表示されます。ポートDとQはモジュールdffの入出力ポートとして宣言されていますが、モジュールdffのDとQについては何も知らないfirfilterモジュールでDとQを使用しようとしています。あなたがすべきことは、モジュールfirfilterにモジュールDFFのインスタンスを入れて、このような信号にそのポートを接続します

module firfilter( 
    input din, 
    input clock, 
    output dout 
); 
    parameter b0 = 1'd1; 
    parameter b1 = 1'd1; 

    wire Q; 
    reg D; 
    // instance of dff module: 
    dff dff_inst(.D(D), .clock(clock), .Q(Q)); 

    assign dout = b0 - b1 * Q; 

    [email protected] (posedge clock) 
     D <= din;  
endmodule 

module dff ( 
    input D, 
    input clock, 
    output reg Q 
); 
    [email protected] (posedge clock) 
     Q <= #(1) D; 

endmodule 

また、あなたは、私がregsはそれらを変更するので、あなたは常にブロックの内側にワイヤー信号を駆動することができないことを知っておく必要があります。

スニペットがほとんど読めないため、コードの書式設定にもっと注意を払う必要があります。

関連する問題