值
end else begin 制数字 ps2_state_r <= 1'b0; key_f0 <= 1'b0; end end end end
数码管显示部分:
always @ (ps2_byte_r) begin case (ps2_byte_r) //键值转换为ASCII码,只处理十六进
8'h24: ps2_asci <= 8'h45; //E
8'h1c: ps2_asci <= 8'h41; //A 8'h23: ps2_asci <= 8'h44; //D 8'h2b: ps2_asci <= 8'h46; //F 8'h21: ps2_asci <= 8'h43; //C 8'h32: ps2_asci <= 8'h42; //B 8'h45: ps2_asci <= 8'h30; //0 8'h16: ps2_asci <= 8'h31; //1 8'h1e: ps2_asci <= 8'h32; //2 8'h26: ps2_asci <= 8'h33; //3 8'h25: ps2_asci <= 8'h34; //4 8'h2e: ps2_asci <= 8'h35; //5 8'h36: ps2_asci <= 8'h36; //6 8'h3d: ps2_asci <= 8'h37; //7 8'h3e: ps2_asci <= 8'h38; //8 8'h46: ps2_asci <= 8'h39; //9 default: ps2_asci <= 8'h30; endcase end
always @(ps2_asci)
begin //oSEG的7位和数码管的7段的code case(ps2_asci)
8'd14: oSEG <= 7'b0000110; // ---t-- //reference:DE0
demonstration default
8'h41: oSEG <= 7'b0001000; // | | 8'h44: oSEG <= 7'b0100001; // lt rt 8'h46: oSEG <= 7'b0001110; // | | 8'h43: oSEG <= 7'b1000110; // ------ 8'h42: oSEG <= 7'b0000011; // | | 8'h30: oSEG <= 7'b1000000; // lb rb 8'h31: oSEG <= 7'b1111001; // | | 8'h32: oSEG <= 7'b0100100; // ---b-- 8'h33: oSEG <= 7'b0110000; 8'h34: oSEG <= 7'b0011001; 8'h35: oSEG <= 7'b0010010; 8'h36: oSEG <= 7'b0000010; 8'h37: oSEG <= 7'b1011000; 8'h38: oSEG <= 7'b0000000; 8'h39: oSEG <= 7'b0010000; endcase end /*
clk PIN_G21 rst_n PIN_H2 //BUTTON0 ps2k_clk PIN_P22 ps2k_data PIN_P21 oSEG[0] PIN_E11 oSEG[1] PIN_F11 oSEG[2] PIN_H12 oSEG[3] PIN_H13 oSEG[4] PIN_G12 oSEG[5] PIN_F12 oSEG[6] PIN_F13 */
VGA显示部分: reg [1:0] c; wire clk_25m; pll u1
(.inclk0(clk), .c0(clk_25m));
//-------------------------------------------------- // 坐标计数 reg[9:0] x_cnt; //行坐标
reg[9:0] y_cnt; //列坐标 reg[7:0]
char_line0,char_line1,char_line2,char_line3,char_line4,char_line5;
reg[7:0] char_line6,char_line7,char_line8,char_line9,char_linea; reg[7:0] char_lineb,char_linec,char_lined,char_linee,char_linef;
always @ (posedge clk_25m or negedge rst_n) if(!rst_n) x_cnt <= 10'd0;
else if(x_cnt == 10'd799) x_cnt <= 10'd0; else x_cnt <= x_cnt+1'b1;
always @ (posedge clk_25m or negedge rst_n) if(!rst_n) y_cnt <= 10'd0;
else if(y_cnt == 10'd524) y_cnt <= 10'd0;
else if(x_cnt == 10'd799) y_cnt <= y_cnt+1'b1;
//-------------------------------------------------- // VGA场同步,行同步信号 reg hsync_r,vsync_r; //同步信号
always @ (posedge clk_25m or negedge rst_n) if(!rst_n) hsync_r <= 1'b1; else if(x_cnt == 10'd0) hsync_r <= 1'b0; //产生hsync信号 else if(x_cnt == 10'd96) hsync_r <= 1'b1;
always @ (posedge clk_25m or negedge rst_n) if(!rst_n) vsync_r <= 1'b1; else if(y_cnt == 10'd0) vsync_r <= 1'b0; //产生vsync信号 else if(y_cnt == 10'd2) vsync_r <= 1'b1;
assign hsync = hsync_r; assign vsync = vsync_r;
//-------------------------------------------------- //有效显示标志位产生 reg valid_yr;//行显示有效信号
always @ (posedge clk_25m or negedge rst_n) if(!rst_n) valid_yr <= 1'b0;
else if(y_cnt == 10'd32) valid_yr <= 1'b1; else if(y_cnt == 10'd512) valid_yr <= 1'b0;
wire valid_y = valid_yr;
reg valid_r; // VGA有效显示区标志位
always @ (posedge clk_25m or negedge rst_n) if(!rst_n) valid_r <= 1'b0;
else if((x_cnt == 10'd141) && valid_y) valid_r <= 1'b1; else if((x_cnt == 10'd781) && valid_y) valid_r <= 1'b0;
wire valid = valid_r;
//wire[9:0] x_dis; //横坐标显示有效区域相对坐标值0-639 wire[9:0] y_dis; //竖坐标显示有效区域相对坐标值0-479
//assign x_dis = x_cnt - 10'd142; assign y_dis = y_cnt - 10'd33;
//--------------------------------------------------
//-------------------------------------------------- // VGA色彩信号产生 /*
RGB = 000 黑色 RGB = 100 红色 = 001 蓝色 = 101 紫色 = 010 绿色 = 110 黄色 = 011 青色 = 111 白色 */
/*EDN字模参数*/ always @(ps2_asci) begin
if(ps2_asci==8'h30) begin
char_line0<= 8'h00; char_line1 <= 8'h00; char_line2 <= 8'h00; char_line3 <= 8'h18; char_line4 <= 8'h24; char_line5 <= 8'h42; char_line6 <= 8'h42; char_line7 <= 8'h42; char_line8 <= 8'h42; char_line9 <= 8'h42; char_linea <= 8'h42; char_lineb <= 8'h42; char_linec <= 8'h24; char_lined <= 8'h18; char_linee <= 8'h00; char_linef <= 8'h00; //0
end
else if(ps2_asci==8'h31) begin
char_line0<= 8'h00; char_line1 <= 8'h00; char_line2 <= 8'h10; char_line3 <= 8'h70; char_line4 <= 8'h10; char_line5 <= 8'h10; char_line6 <= 8'h10; char_line7 <= 8'h10; char_line8 <= 8'h10; char_line9 <= 8'h10; char_linea <= 8'h10; char_lineb <= 8'h10; char_linec <= 8'h7C; char_lined <= 8'h00; char_linef <= 8'h00; //1 end
else if(ps2_asci==8'h32) begin char_line0<= 8'h00; char_line1 <= 8'h00; char_line2 <= 8'h3C; char_line3 <= 8'h42; char_line4 <= 8'h42; char_line5 <= 8'h42; char_line6 <= 8'h04; char_line7 <= 8'h04; char_line8 <= 8'h08; char_line9 <= 8'h10; char_linea <= 8'h20; char_linec <= 8'h42; char_lined <= 8'h7E; char_linee <= 8'h00; char_linef <= 8'h00; //2 end
else if(ps2_asci==8'h33) begin char_line0<= 8'h00; char_line1 <= 8'h00; char_line2 <= 8'h00; char_line3 <= 8'h3C; char_line4 <= 8'h42; char_line5 <= 8'h42;