Verilogでは、assignを使用してリセットを実装することは合法ですか?
Aug 25 2020
カウンターにリセットを追加しようとしていますが、完全に合成される次のコードがあります。
module syncRX(clk, signal, detect);
input clk, signal;
output [7:0] detect;
reg [7:0] detect_aux = 8'b0;
reg rst;
assign detect = detect_aux & ~rst;
freq_div div(.clk(clk), .clk_1khz(clk_1khz));
always @(posedge signal)
rst <= 1;
always @(posedge clk_1khz)
detect_aux <= detect_aux + 1;
endmodule // top
module freq_div(input clk, output reg clk_1khz);
reg [12:0] count = 0;
always @(posedge clk)
begin
if(count == 6000)
begin
clk_1khz <= ~clk_1khz;
count <= 0;
end
else
count <= count + 1;
end
endmodule
問題はそれです
reg rst;
assign detect = detect_aux & ~rst;
継ぎ目は何もしません。私が試みていることは合法ですか?ありがとう
回答
1 schnedan Aug 25 2020 at 04:03
すでに述べたように、値をrstから「1」に変更することはありません。
次に、最初はチップ設計の観点からリセットされませんが、明確な信号なので、名前をclrに変更します。
モジュールの実際のリセットに関する「すべて」: http://www.asic-world.com/tidbits/all_reset.html
3 ThePhoton Aug 25 2020 at 03:51
コメントで指摘されているように、コードでrstは常に0であるため、の値に影響を与えることはありませんdetect。リセットを実行したい場合はrst、モジュールに入力を行い、テストベンチのある時点でそれを高く設定する必要があります。
ただし、これは実際にはリセット動作ではないことにも注意してください。rstHighに設定するdetectと、モジュールの出力は強制的にゼロになりますが、rstLowdetectに戻るとすぐに、に格納されている以前の値に戻りdetect_auxます。これが適切なリセットである場合、rstリリース後に0からカウントが新たに開始されると予想されます。