1

以下は、同期イネーブルを備えたDFFに関する簡単なVerilogの例です。

module d-ff-en_2seg 
(
input wire clk,reset, 
input wire en,
input wire d, 
output reg q
); 
    // signal declaration 
    IU reg r_reg, r_next;
    // body
    // D FF
    always @(posedge clk, posedge reset)
        if (reset)
            r_reg <= 1'bO;
        else 
            r_reg <= r_next;
    // next-state logic 
    always @* 
        if (en)
            r_next = d; 
        else 
            r_next = r_reg;
    // output logic 
    always @*
        q = r_reg; 
endmodule

私の質問は、なぜここに出力ロジックが必要なのかということです。無視できますか?r_regを出力regとして定義するだけですか?

4

1 に答える 1

2

Verilogでは、出力としてDFFを使用することは完全に合法で一般的です。

VHDLでは、出力信号から読み取ることは違法です。 http://vhdl.renerta.com/mobile/source/vhd00051.htm

したがって、この場合、行「r_next=r_reg;」この行をVHDLに変換し、r_regが出力された場合、不正である可能性があります。

このため、VerilogとVHDLの両方で一貫性を保つ必要があるRTLコーディングガイドラインでは、すべての出力を個別の「出力ロジック」セクションに割り当てる必要があります。これは、最終的にVHDLでコードを書き直したい場合に(少し)役立ちます。

于 2012-04-15T18:50:57.137 に答える