FPGA:LED点灯点滅:プッシュスイッチで色パターン変更

課題のLED点滅回路のでプッシュスイッチで色パターンを切り替える
debounce.vはそのままコピーしてきて使う事が前提


一応黄色く目視だと光っているが、写真では上手く色が出ない(人間の目は鈍感で2つのLEDが近接して光っているろ黄色に認識するが、CCDカメラはそうはいかない・・)

以下が編集して作ったソース。colorという1ビットのレジスタを用意してスイッチを押す旅に1足すようにしている。

「レジスタ」(reg)は、「データを保持する記憶素子の概念」を持ち、一度代入されてから次に代入されるまで値を保つ機能をもつ。

 reg <[MSB:LSB]> レジスタ名 ;

reg [2:0] cnt3; という記載は、cnt3という名前で3ビットのレジスタの宣言している事になる。
1ビットならば
reg [0:0] xxxx;
と記載すればよいが、 reg  xxxx;と定義しても同じになる。

少しづつ、理解してきたようだが、まだまだ・・・
以下はボタンを押すと色が変わるようにする

module blinkpat (
    input               CLK,
    input               RST,
    input       [0:0]   BTN,
    output  reg [2:0]   LED_RGB
);

/*chattering elimination circuit*/
wire btnon;

debounce d0 (.CLK(CLK), .RST(RST), .BTNIN(BTN),. BTNOUT(btnon));

/*Register for color setting*/
reg [0:0] color;

always @( posedge CLK ) begin
    if ( RST )
        color  <= 2'h0;
    else if ( btnon )
        color <= color + 1'h1;
end

/* Divides the system clock */
reg [25:0] cnt26;

always @( posedge CLK ) begin
    if ( RST )
        cnt26 <= 26'h0;
    else
        cnt26 <= cnt26 + 1'h1;
end

wire ledcnten = (cnt26==26'h3ffffff);

/* Hexadecimal counter for LED */
reg [2:0] cnt3;

always @( posedge CLK ) begin
    if ( RST )
        cnt3 <= 3'h0;
    else if ( ledcnten )
        if ( cnt3==3'd4)
            cnt3 <=3'h0;
        else
            cnt3 <= cnt3 + 3'h1;
end

/* LED decoder*/
always @* begin
 if (color)
    case ( cnt3 )
        3'd0:   LED_RGB = 3'b100;
        3'd1:   LED_RGB = 3'b010;
        3'd2:   LED_RGB = 3'b001;
        3'd3:   LED_RGB = 3'b111;
        3'd4:   LED_RGB = 3'b000;
        default:LED_RGB = 3'b000;
    endcase
 else
     case ( cnt3 )
        3'd0:   LED_RGB = 3'b110;
        3'd1:   LED_RGB = 3'b011;
        3'd2:   LED_RGB = 3'b101;
        3'd3:   LED_RGB = 3'b111;
        3'd4:   LED_RGB = 3'b000;
        default:LED_RGB = 3'b000;
    endcase
 
end

endmodule

コメント

このブログの人気の投稿

Attiny85とAQM0802A(LCD)のI2C接続

CH9329で日本語キーボード109で正しく表示する方法