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
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。