reg [3:0] key_value_r;
always @(posedge clk or negedge rst_n)
begin
if (!rst_n)
begin
key_value_r <= 4'd0;
end
else begin
if(key_mark==1'b1)
begin
case ({col_reg,row_reg})
8'b1110_1110: key_value_r<=4'd0;
8'b1110_1101: key_value_r<=4'd1;
8'b1110_1011: key_value_r<=4'd2;
8'b1110_0111: key_value_r<=4'd3;
8'b1101_1110: key_value_r<=4'd4;
8'b1101_1101: key_value_r<=4'd5;
8'b1101_1011: key_value_r<=4'd6;
8'b1101_0111: key_value_r<=4'd7;
8'b1011_1110: key_value_r<=4'd8;
8'b1011_1101: key_value_r<=4'd9;
8'b1011_1011: key_value_r<=4'd10;
8'b1011_0111: key_value_r<=4'd11;
8'b0111_1110: key_value_r<=4'd12;
8'b0111_1101: key_value_r<=4'd13;
8'b0111_1011: key_value_r<=4'd14;
8'b0111_0111: key_value_r<=4'd15;
default: key_value_r <= 4'd1;
endcase
end
end
end
assign key_value = key_value_r;
//--------------------------------------------------------------------------------------//
reg [3:0] key_value_r_t;
reg [15:0] key_flag=16'b0;
always @(posedge clk)
key_value_r_t<=key_value;
always @(posedge clk)
if(key_value_r_t != key_value_r)
case(key_value_r)
8'd0:key_flag[0]<=1'b1;
8'd1:key_flag[1]<=1'b1;
8'd2:key_flag[2]<=1'b1;
8'd3:key_flag[3]<=1'b1;
8'd4:key_flag[4]<=1'b1;
8'd5:key_flag[5]<=1'b1;
8'd6:key_flag[6]<=1'b1;
8'd7:key_flag[7]<=1'b1;
8'd8:key_flag[8]<=1'b1;
8'd9:key_flag[9]<=1'b1;
8'd10:key_flag[10]<=1'b1;
8'd11:key_flag[11]<=1'b1;
8'd12:key_flag[12]<=1'b1;
8'd13:key_flag[13]<=1'b1;
8'd14:key_flag[14]<=1'b1;
8'd15:key_flag[15]<=1'b1;
endcase
else
begin
key_flag[15:0] <= 16'b0;
end
assign key_sig = key_flag;
你说的比较两拍的数值发生变化,这个意思我懂,可效果没实现额,是代码出问题了吗 |