🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Verilog

Verilogは、デジタル回路設計用の論理シミュレータ。また、ハードウェアの電子回路設計の際に用いるハードウェア記述言語を指すこともあります。両者を見分けるために、言語を「Verilog-HDL」と呼ぶ場合もあります。

FPGA

FPGAは、製造後でも設計者によって書き換えができる論理回路です。即時に書き換えが可能なため、開発期間を短縮することが可能。何度でも書き換えられるといった柔軟性があるため、製造や開発における費用も削減できるといったメリットがあります。

HDL

HDL(ハードウェア記述言語)は、デジタル回路の設計などを行うための記述言語です。プログラミング言語に似ており、回路の設計や構成を記述することが可能。VHDL/Verilog HDL/SFLなどのHDLが広く使用されています。

Q&A

1回答

3503閲覧

FPGA ボタン入力とダイナミック点灯

JJJJJJJJJamm

総合スコア10

Verilog

Verilogは、デジタル回路設計用の論理シミュレータ。また、ハードウェアの電子回路設計の際に用いるハードウェア記述言語を指すこともあります。両者を見分けるために、言語を「Verilog-HDL」と呼ぶ場合もあります。

FPGA

FPGAは、製造後でも設計者によって書き換えができる論理回路です。即時に書き換えが可能なため、開発期間を短縮することが可能。何度でも書き換えられるといった柔軟性があるため、製造や開発における費用も削減できるといったメリットがあります。

HDL

HDL(ハードウェア記述言語)は、デジタル回路の設計などを行うための記述言語です。プログラミング言語に似ており、回路の設計や構成を記述することが可能。VHDL/Verilog HDL/SFLなどのHDLが広く使用されています。

0グッド

0クリップ

投稿2020/12/15 08:05

Verilog HDLでボタンで入力した数字をダイナミック点灯で表示する回路を作っていますが、上手くできません。どこで間違っているのか教えて頂きたいです。ボタンで入力し、それを0003, 0008, 000Cのように表示したいのですが、どのボタンを押しても0000としか表示されません。また、図の7segdecは問題ないと他の回路で確認済みです。宜しくお願い致します。

また、ここで入力に使う4*4のボタンは下のサイトのようなものです。
4*4 matrix keypad

verilog

1module decideLED (CLK, num3, num2, num1, num0, outnum, outLED); 2 3input CLK;//50MHz 4input [3:0] num3; //number of LED3 5input [3:0] num2; //number of LED2 6input [3:0] num1; //number of LED1 7input [3:0] num0; //number of LED0 8output [3:0] outnum; //number to show 9output [3:0] outLED; //LED to light 10 11reg [16:0] count; 12reg [1:0] led_count; 13 14always@(posedge CLK)begin 15 count <= count + 1'b1; 16end 17 18wire led_clk = count[16]; //381Hz 19 20always@(posedge led_clk)begin 21 if(led_count== 2'b11) led_count <=2'b00; 22 else led_count <= led_count + 2'b01; 23end 24 25assign outLED = (led_count == 2'b00) ? 4'b0001 : 26 (led_count == 2'b01) ? 4'b0010 : 27 (led_count == 2'b10) ? 4'b0100 : 28 (led_count == 2'b11) ? 4'b1000 : 4'b0000; 29 30assign outnum = (led_count == 2'b00) ? num0 : 31 (led_count == 2'b01) ? num1 : 32 (led_count == 2'b10) ? num2 : 33 (led_count == 2'b11) ? num3 : 4'b0000; 34 35endmodule

Verilog

1module keyboardtest(CLK, reset_in, row, col, keyboardnum); 2 3input CLK; //50MHz 4input reset_in; //リセット 5input [3:0] row; 6output [3:0] col; 7output [3:0] keyboardnum; //キーボードの入力値 8reg [3:0] col; 9reg [3:0] keyboardnum; 10reg [19:0] count; 11 12always@(posedge CLK, negedge reset_in)begin 13 if(!reset_in)begin 14 count <= 0; 15 end 16 else begin 17 count <= count + 1'b1; 18 end 19end 20 21wire key_clk = count[19]; 22 23parameter Not_Pressed = 6'b000_001; // 押されてない 24parameter SCAN_COL0 = 6'b000_010; // 0列をスキャン 25parameter SCAN_COL1 = 6'b000_100; // 1列をスキャン 26parameter SCAN_COL2 = 6'b001_000; // 2列目をスキャン 27parameter SCAN_COL3 = 6'b010_000; // 3列目をスキャン 28parameter PRESSED = 6'b100_000; // 押された 29 30reg [5:0] current, next; 31 32always @ (posedge key_clk, negedge reset_in)begin 33 if(!reset_in)begin 34 current <= Not_Pressed; 35 end 36 else begin 37 current <= next; 38 end 39end 40 41always@* begin 42 case (current) 43 Not_Pressed : // ボタンを押されてない 44 if (row != 4'hF) 45 next = SCAN_COL0; 46 else 47 next = Not_Pressed; 48 49 SCAN_COL0 : // 0列目をスキャン 50 if (row != 4'hF) 51 next = PRESSED; 52 else 53 next = SCAN_COL1; 54 55 SCAN_COL1 : // 1列目をスキャン 56 if (row != 4'hF) 57 next = PRESSED; 58 else 59 next = SCAN_COL2; 60 61 SCAN_COL2 : // 2列目をスキャン 62 if (row != 4'hF) 63 next = PRESSED; 64 else 65 next = SCAN_COL3; 66 67 SCAN_COL3 : // 3列目をスキャン 68 if (row != 4'hF) 69 next = PRESSED; 70 else 71 next = Not_Pressed; 72 73 PRESSED : // 押された 74 if (row != 4'hF) 75 next = PRESSED; 76 else 77 next = Not_Pressed; 78 endcase 79end 80 81reg key_pressed_flag; // ボタンが押されたかどうか 82reg [3:0] col_val, row_val; // column, row 83 84always@(posedge key_clk, negedge reset_in) 85 if (!reset_in)begin 86 col <= 4'h0; 87 key_pressed_flag <= 0; 88 end 89 90 else begin 91 case (next) 92 93 Not_Pressed : begin 94 col <= 4'h0; 95 key_pressed_flag <= 0; // 押されてない 96 end 97 98 SCAN_COL0 : // 0列目をスキャン 99 col <= 4'b1110; 100 101 SCAN_COL1 : // 一列目をスキャン 102 col <= 4'b1101; 103 104 SCAN_COL2 : // 2列目をスキャン 105 col <= 4'b1011; 106 107 SCAN_COL3 : // 3列目をスキャン 108 col <= 4'b0111; 109 110 PRESSED : begin 111 col_val <= col; // columnを保存 112 row_val <= row; //rowを保存 113 key_pressed_flag <= 1; // 押された 114 end 115 116 endcase 117 end 118 119 //以下、入力値を保存 120always@(posedge key_clk, negedge reset_in)begin 121 122 if (!reset_in) 123 keyboardnum <= 4'h0; 124 125 else if(key_pressed_flag) 126 case({col_val, row_val}) 127 8'b1110_1110 : keyboardnum <= 4'hF; 128 8'b1110_1101 : keyboardnum <= 4'hE; 129 8'b1110_1011 : keyboardnum <= 4'hD; 130 8'b1110_0111 : keyboardnum <= 4'hC; 131 8'b1101_1110 : keyboardnum <= 4'hB; 132 8'b1101_1101 : keyboardnum <= 4'hA; 133 8'b1101_1011 : keyboardnum <= 4'h0; 134 8'b1101_0111 : keyboardnum <= 4'h9; 135 8'b1011_1110 : keyboardnum <= 4'h8; 136 8'b1011_1101 : keyboardnum <= 4'h7; 137 8'b1011_1011 : keyboardnum <= 4'h6; 138 8'b1011_0111 : keyboardnum <= 4'h5; 139 8'b0111_1110 : keyboardnum <= 4'h4; 140 8'b0111_1101 : keyboardnum <= 4'h3; 141 8'b0111_1011 : keyboardnum <= 4'h2; 142 8'b0111_0111 : keyboardnum <= 4'h1; 143 144 endcase 145end 146 147 148endmodule

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

まずは、ボタン関係なく、どこかのレジスタの内容(例えば1234)を表示させることはできるでしょうか
まずそれをしっかり実装してください

それができたなら、あとはボタンの押下によって、そのレジスタの内容を変えれば完了となります。
で、これらのどこまでができてどれができないというはなしでしょうか。」

投稿2020/12/15 08:44

編集2020/12/15 09:50
y_waiwai

総合スコア88038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問