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
コメント
コメントを投稿