Verilogの割り当ては、Icestormを使用して合成を中断します

Aug 23 2020

「警告:デザインにクロックが見つかりません」という警告を表示するこのコードがあり、FPGAはフラッシュ後に何も実行していません。

module syncRX(clk, signal, detect);
    input clk, signal;
    output reg [7:0] detect = 0;
    reg [7:0] detect_sig = 0;
    
    always @(posedge signal)
     begin
        detect_sig <= detect_sig + 1;
     end
    assign detect = detect_sig;

endmodule // top

この変更でうまく機能するため、「割り当て」で問題を継ぎ合わせます。

module syncRX(clk, signal, detect);
    input clk, signal;
    output reg [7:0] detect = 0;
    //reg [7:0] detect_sig = 0;
    
    always @(posedge signal)
     begin
        detect <= detect + 1;
     end
    //assign detect = detect_sig;

endmodule // top

誰もが最初のバージョンで何が悪いのか知っていますか?ありがとう!

回答

4 awjlogan Aug 23 2020 at 21:59

Verilogでは、型変数でassignのみ使用できwireます。として宣言した場合、output [7:0] detectまたは正常に機能する場合output wire [7:0] detectwire最初の宣言で暗黙的に推測されます)。この質問も関連しています。

また、ここで行ったような初期化は、FPGAで合成可能であるとは限らず、ASICでも合成可能であるとは限らないことにも注意してください。リセット入力が必要であり、それを使用してdetect_sig変数をにリセットします8'h00。また、裸01;ではなく、定義された幅を割り当てに指定する必要があることにも注意してください。そうしないと、ツールが幅の切り捨てについて文句を言う可能性があり、意図がより明確になります。