【QuartusII入門】LED点灯回路の作成4(寄り道:Verilogの解説2, TB_LED_BLINK)

前回に引き続き今回はテストベンチのVerilogソースについて解説していきます。

テストベンチのソースはこんな感じでした。

`timescale 1 ns/ 1 ps
module tb_led_blink();

reg clk;
reg reset_n;
wire [7:0] led;

led_blink i1 (
.clk(clk),
.led(led),
.reset_n(reset_n)
);

always #10 clk <= !clk;

initial
begin
clk <= 1'b0;
reset_n <= 1'b1;
#100 reset_n <= 1'b0;
#100 reset_n <= 1'b1;

end
endmodule

“【QuartusII入門】LED点灯回路の作成4(寄り道:Verilogの解説2, TB_LED_BLINK)” の続きを読む

【QuartusII入門】LED点灯回路の作成3(寄り道:Verilogの解説1, LED_BLINK)

前回までに使ったVerilogの解説をしていきます。

まずはLED_BLINKから。全体はこんな感じ。

`timescale 1ns/1ps
module led_blink(
    clk         , //クロック50MHz
    reset_n     , //リセット信号(ローアクティブ)
    led           //LED
    );
    input  wire        clk     ; //クロック50MHz
    input  wire        reset_n ; //リセット信号(ローアクティブ)
    output reg  [ 7:0] led     ; //LED

    reg  [31:0] ctr; //時間計測用カウンタ

    always @(posedge clk)
    begin
        if(!reset_n)//リセットボタンが押された時
        begin
            ctr <= 32'd1; //カウンタの値を1にリセット
        end
        else if(ctr == 32'd25000) //25000回クロックをカウント(=0.5ms経過)した時
        begin
            ctr <= 32'd1;//カウンタの値を1にリセット
        end
        else  begin
            ctr <= ctr + 32'd1; //それ以外の時はカウンタを加算
        end
    end

    always @(posedge clk)
    begin
        if(!reset_n)
        begin
            led <= 8'hFF;
        end
        else if(ctr == 32'd25000) //0.5ms経った時、LEDを反転
        begin
            if(led == 8'hFF)
            begin
                led <= 8'h00;
            end
            else begin
                led <= 8'hFF;
            end
        end
    end
endmodule

“【QuartusII入門】LED点灯回路の作成3(寄り道:Verilogの解説1, LED_BLINK)” の続きを読む