verilog初心者です。テキストのソースコードにわからない部分があったので解説お願いいたします。
###分からないこと①
LEDを赤、緑、青、白、消灯の5つの状態に変化させる回路のソースコードです。
26ビットの分周カウンタで125MHzのクロック信号を分周して約1.86Hzにしています。
17行目の以下の文の==の意味が分かりません。==は等しいという意味だと思いますが、代入するものに対して等しいとはどういう意味なのでしょうか。条件式に出てくるのならわかるのですが…
また、26'h3ffffffは2進数で言う1が26桁並んだ数値ですが、なぜここで出てきているのでしょうか。
わからない部分①
wire ledcnten = (cnt26==26'h3ffffff);
###分からないこと②
以下の文はRST≠0のときcnt26に0を代入して、RST=0のときcnt26+1を代入していると思うのですが、テキストのブロック図にはALL1検出と書いてあります。この記述がなぜ26ビットで分周できるのでしょうか。システムクロックを分周というソースコード自体があまりよく分かっていないのかもしれません。
わからない部分②
if ( RST ) cnt26 <= 26'h0; else cnt26 <= cnt26 + 1'h1;
該当のソースコード
verilog
1 2module blink ( 3 input CLK, 4 input RST, 5 output reg [2:0] LED_RGB 6); 7 8/* システムクロックを分周 */ 9reg [25:0] cnt26; 10 11always @( posedge CLK ) begin 12 if ( RST ) 13 cnt26 <= 26'h0; 14 else 15 cnt26 <= cnt26 + 1'h1; 16end 17 18wire ledcnten = (cnt26==26'h3ffffff); 19 20/* LED用5進カウンタ */ 21reg [2:0] cnt3; 22 23always @( posedge CLK ) begin 24 if ( RST ) 25 cnt3 <= 3'h0; 26 else if ( ledcnten ) 27 if ( cnt3==3'd4) 28 cnt3 <=3'h0; 29 else 30 cnt3 <= cnt3 + 3'h1; 31end 32 33/* LEDデコーダ */ 34always @* begin 35 case ( cnt3 ) 36 3'd0: LED_RGB = 3'b100; 37 3'd1: LED_RGB = 3'b010; 38 3'd2: LED_RGB = 3'b001; 39 3'd3: LED_RGB = 3'b111; 40 3'd4: LED_RGB = 3'b000; 41 default:LED_RGB = 3'b000; 42 endcase 43end 44 45endmodule
###わかっていること
・@( posedge CLK ) beginでクロック信号の立ち上がりのタイミングでbegin以下が実行されること。
・if(RST)でRST≠0の時だということ。
・26'h0は26ビットの16進数で0の数値という意味だということ。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/01 07:43
2021/09/01 08:13
2021/09/02 07:02
2021/09/02 07:10
2021/09/02 07:20