always @(posedge clk or negedge rst) begin
if(!rst)begin
cnt_wait <=26'd0;
end elseif(flag_nege || flag_pose)begin
cnt_wait <=26'd1;
end elseif(cnt_wait == MAX_CNT) begin
cnt_wait <=26'd0;
end elseif(cnt_wait >26'd0 && cnt_wait < MAX_CNT)begin
cnt_wait <= cnt_wait +26'd1;
end
end
always @(posedge clk or negedge rst) begin
if(!rst)begin
key_scan1 <=4'b1111;
key_scan2 <=4'b1111;
end elseif(cnt_wait == MAX_CNT)begin
key_scan1 <= key_in;
key_scan2 <= key_scan1;
end else begin
key_scan2 <= key_scan1;
end
end
3. 仿真波形
4. 源代码
module key(
input clk ,
input rst ,
input [3:0] key_in ,
output [3:0] key_out_down ,
output [3:0] key_out_up
);
wire key_tmp =&key_in ;
reg key_in_r2 ;
reg key_in_r1 ;
always @(posedge clk or negedge rst)begin
if(!rst)begin
key_in_r1 <=1'b1;
key_in_r2 <=1'b1;
end else begin
key_in_r1 <= key_tmp;
key_in_r2 <= key_in_r1;
end
end
wire flag_nege = key_in_r2 &!key_in_r1;//
wire flag_pose =!key_in_r2 & key_in_r1;//
reg [25:0] cnt_wait ;// localparam MAX_CNT = 50_000_000/50;
localparam MAX_CNT =1_000_000 -1;
always @(posedge clk or negedge rst) begin
if(!rst)begin
cnt_wait <=26'd0;
end elseif(flag_nege || flag_pose)begin
cnt_wait <=26'd1;
end elseif(cnt_wait == MAX_CNT) begin
cnt_wait <=26'd0;
end elseif(cnt_wait >26'd0 && cnt_wait < MAX_CNT)begin
cnt_wait <= cnt_wait +26'd1;
end
end
reg [3:0] key_scan1 ;
reg [3:0] key_scan2 ;
always @(posedge clk or negedge rst) begin
if(!rst)begin
key_scan1 <=4'b1111;
key_scan2 <=4'b1111;
end elseif(cnt_wait == MAX_CNT)begin
key_scan1 <= key_in;
key_scan2 <= key_scan1;
end else begin
key_scan2 <= key_scan1;
end
end
// wire [ 3:0] kay_val = !key_scan1 & key_scan2; !不行 !的优先级低
wire [3:0] kay_val_down =~key_scan1 & key_scan2;//
wire [3:0] kay_val_up = key_scan1 &~key_scan2;//
assign key_out_down = kay_val_down;
assign key_out_up = kay_val_up;
endmodule
开发环境与工具
C#的主要开发环境是Visual Studio,这是一个功能强大的集成开发环境(IDE),集成了代码编辑、调试、项目管理、版本控制等功能。此外,Visual Studio Code也是一个轻量级的跨平台代码编辑器,支…