質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
87.20%
Verilog

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

FPGA

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

HDL

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

受付中

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

JJJJJJJJJamm
JJJJJJJJJamm

総合スコア0

Verilog

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

FPGA

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

HDL

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

1回答

0評価

0クリップ

1283閲覧

投稿2020/12/15 08:05

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

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

verilog

module decideLED (CLK, num3, num2, num1, num0, outnum, outLED); input CLK;//50MHz input [3:0] num3; //number of LED3 input [3:0] num2; //number of LED2 input [3:0] num1; //number of LED1 input [3:0] num0; //number of LED0 output [3:0] outnum; //number to show output [3:0] outLED; //LED to light reg [16:0] count; reg [1:0] led_count; always@(posedge CLK)begin count <= count + 1'b1; end wire led_clk = count[16]; //381Hz always@(posedge led_clk)begin if(led_count== 2'b11) led_count <=2'b00; else led_count <= led_count + 2'b01; end assign outLED = (led_count == 2'b00) ? 4'b0001 : (led_count == 2'b01) ? 4'b0010 : (led_count == 2'b10) ? 4'b0100 : (led_count == 2'b11) ? 4'b1000 : 4'b0000; assign outnum = (led_count == 2'b00) ? num0 : (led_count == 2'b01) ? num1 : (led_count == 2'b10) ? num2 : (led_count == 2'b11) ? num3 : 4'b0000; endmodule

Verilog

module keyboardtest(CLK, reset_in, row, col, keyboardnum); input CLK; //50MHz input reset_in; //リセット input [3:0] row; output [3:0] col; output [3:0] keyboardnum; //キーボードの入力値 reg [3:0] col; reg [3:0] keyboardnum; reg [19:0] count; always@(posedge CLK, negedge reset_in)begin if(!reset_in)begin count <= 0; end else begin count <= count + 1'b1; end end wire key_clk = count[19]; parameter Not_Pressed = 6'b000_001; // 押されてない parameter SCAN_COL0 = 6'b000_010; // 0列をスキャン parameter SCAN_COL1 = 6'b000_100; // 1列をスキャン parameter SCAN_COL2 = 6'b001_000; // 2列目をスキャン parameter SCAN_COL3 = 6'b010_000; // 3列目をスキャン parameter PRESSED = 6'b100_000; // 押された reg [5:0] current, next; always @ (posedge key_clk, negedge reset_in)begin if(!reset_in)begin current <= Not_Pressed; end else begin current <= next; end end always@* begin case (current) Not_Pressed : // ボタンを押されてない if (row != 4'hF) next = SCAN_COL0; else next = Not_Pressed; SCAN_COL0 : // 0列目をスキャン if (row != 4'hF) next = PRESSED; else next = SCAN_COL1; SCAN_COL1 : // 1列目をスキャン if (row != 4'hF) next = PRESSED; else next = SCAN_COL2; SCAN_COL2 : // 2列目をスキャン if (row != 4'hF) next = PRESSED; else next = SCAN_COL3; SCAN_COL3 : // 3列目をスキャン if (row != 4'hF) next = PRESSED; else next = Not_Pressed; PRESSED : // 押された if (row != 4'hF) next = PRESSED; else next = Not_Pressed; endcase end reg key_pressed_flag; // ボタンが押されたかどうか reg [3:0] col_val, row_val; // column, row always@(posedge key_clk, negedge reset_in) if (!reset_in)begin col <= 4'h0; key_pressed_flag <= 0; end else begin case (next) Not_Pressed : begin col <= 4'h0; key_pressed_flag <= 0; // 押されてない end SCAN_COL0 : // 0列目をスキャン col <= 4'b1110; SCAN_COL1 : // 一列目をスキャン col <= 4'b1101; SCAN_COL2 : // 2列目をスキャン col <= 4'b1011; SCAN_COL3 : // 3列目をスキャン col <= 4'b0111; PRESSED : begin col_val <= col; // columnを保存 row_val <= row; //rowを保存 key_pressed_flag <= 1; // 押された end endcase end //以下、入力値を保存 always@(posedge key_clk, negedge reset_in)begin if (!reset_in) keyboardnum <= 4'h0; else if(key_pressed_flag) case({col_val, row_val}) 8'b1110_1110 : keyboardnum <= 4'hF; 8'b1110_1101 : keyboardnum <= 4'hE; 8'b1110_1011 : keyboardnum <= 4'hD; 8'b1110_0111 : keyboardnum <= 4'hC; 8'b1101_1110 : keyboardnum <= 4'hB; 8'b1101_1101 : keyboardnum <= 4'hA; 8'b1101_1011 : keyboardnum <= 4'h0; 8'b1101_0111 : keyboardnum <= 4'h9; 8'b1011_1110 : keyboardnum <= 4'h8; 8'b1011_1101 : keyboardnum <= 4'h7; 8'b1011_1011 : keyboardnum <= 4'h6; 8'b1011_0111 : keyboardnum <= 4'h5; 8'b0111_1110 : keyboardnum <= 4'h4; 8'b0111_1101 : keyboardnum <= 4'h3; 8'b0111_1011 : keyboardnum <= 4'h2; 8'b0111_0111 : keyboardnum <= 4'h1; endcase end endmodule

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Verilog

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

FPGA

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

HDL

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