Verilog HDLの問題ですが、わからなくなりました。どこが間違えているのでしょうか?プログラムを載せますね。 問題文 KEY[0]をリセット信号として使います。負論理ですので、押したときに0になります。negedgeでリセット処理してください。 KEY[1]をクロック信号として使います。負論理ですので、押したときに0になります。negedgeでカウントアップを実行してください。 4ビットのレジスタQの状態を、LEDR[3]、LEDR[2]、LEDR[1]、LEDR[0]に出力してください。 assign LEDR[3:0] = Q; 4ビットのレジスタQの状態をサブモジュールの7セグメントLEDデコーダに、戻ってきた7ビットのデータをHEX0に出力してください。 SevenSegDecorder U1(.IN(Q), OUT(HEX0)); 10進数のカウンタですので、4ビットの1001まで数えたら、次のクロックで0000に戻します。つまり、else if( ~KEY[1] )の中にさらにif文の条件分岐があって、Q <= Q + 4'b1、もしくはQ <= 4'b0;のどちらかを実行します。 プログラ厶 //SW[0] is the input port. //KEY[1] and KEY[0] are the input ports. //LEDR[3], LEDR[2], LEDR[1] and LEDR[0] are the output ports. //HEX0 is the 7-bit output ports. reg [3:0]Q; assign LEDR[3:0] = Q; SevenSegDecorder U1( .IN( Q ), .OUT( HEX0 )) always@( negedge KEY[0] or posedge KEY[1] ) if( ~KEY[0] ) Q <= 4'b0; end else if( KEY[1] ) begin Q <= Q + 4'b1; end else begin Q <= Q; end endmore module SevenSegDecorder( IN, OUT); input [3:0]IN; output [6:0]OUT; wire [3:0]IN; reg [6:0]OUT; always@( negedge KEY[0] or KEY[1] ) case { negedge KEY[0] or KEY[1] ) always`( IN ) case ( IN ) 4'd0: OUT = 7'b0000000; 4'd1: OUT = 7'b0000001; 4'd2: OUT = 7'b0000010; 4'd3: OUT = 7'b0000011; 4'd4: OUT = 7'b0000100; 4'd5: OUT = 7'b0000101; 4'd6: OUT = 7'b0000110; 4'd7: OUT = 7'b0000111; 4'd8: OUT = 7'b0001000; 4'd9: OUT = 7'b0001001; default: OUT = 7'bxxxxxxx; endcase endmodule
プログラミング