VHDL のコースを受講した後、Verilog を独学で学び始めたところです。行動ステートメントが実行される順序を理解するのに苦労しています。これが問題のコードです。
//This files is an experiment into the order in which verilog executes it's statements
module MainCircuit(clk, start);
parameter cycles = 8;
input clk;
input start;
//input [15:0] data;
integer i;
always @(posedge clk)
begin
if(start)
begin
i=0;
repeat(cycles)
begin
@(posedge clk) $display("%d\ti = %d", $time, i);
i = i + 1;
end
end
end
endmodule
module tester;
reg clk;
wire start;
assign start = 1'b1;
initial clk = 1'b0;
MainCircuit myMain(clk, start);
initial repeat(40)
begin
#5 clk = 1'b1;
#5 clk = 1'b0;
end
endmodule
そしてここに出力があります
15 i = 0
25 i = 1
35 i = 2
45 i = 3
55 i = 4
65 i = 5
75 i = 6
85 i = 7
105 i = 0
115 i = 1
125 i = 2
135 i = 3
145 i = 4
155 i = 5
165 i = 6
175 i = 7
195 i = 0
205 i = 1
215 i = 2
225 i = 3
235 i = 4
245 i = 5
255 i = 6
265 i = 7
285 i = 0
295 i = 1
305 i = 2
315 i = 3
325 i = 4
335 i = 5
345 i = 6
355 i = 7
375 i = 0
385 i = 1
395 i = 2
正のクロック エッジごとにゼロにリセットされない理由がわかりません。myMain は実行中の場所を覚えており、クロックが呼び出されるたびにそこから続行しますか? もしそうなら、それはどこで止まっていますか?そして、これらすべてをどのように合成するのでしょうか?
その他の 2 つの小さな質問:
start <= 1'b01; と書いてみました。assign start = 1'b01; の代わりに 2番目のモジュールでは機能しません。なぜだめですか?
2番目は、出力の奇妙な間隔の原因は何ですか?
お時間をいただきありがとうございます。