?? convert.v
字號:
/*轉換模塊
用于將鍵盤碼轉換為ASCII碼,并處理shift鍵和capslock鍵;
*/
module convert
( clk,
scan,
prepared,
clr,
data
);
input clk;
input [7:0] scan;
input prepared;
input clr;
output [7:0] data;
reg [7:0] tmpASCII;
reg [7:0] ASCII;
reg keypressed;
reg shifted;
reg capslocked;
reg pre_prepared;
reg now_prepared;
reg prepared_r;
always @(posedge clk)
begin
pre_prepared <= prepared;
now_prepared <= pre_prepared;
if(now_prepared==pre_prepared)
prepared_r <= now_prepared;
end
always @(posedge prepared_r or negedge clr)
begin
if(!clr) begin
shifted <= 0;
capslocked <= 0;
keypressed <= 0;
end
else begin
keypressed <= (scan == 8'hF0)? 1'b1 : 1'b0;//有鍵按下keypressed=1,;
/*shift鍵按下*/
shifted <= ((scan == 8'h12 || scan == 8'h59) && keypressed == 1'b1)? !shifted : shifted;
/*capslock鍵按下*/
capslocked <= (scan == 8'h58 && keypressed == 1'b1)? !capslocked : capslocked;
end
end
/*轉換表*/
always @(scan or shifted or clr)
begin
if(!clr) begin
tmpASCII <= 0;
end
else begin
case (scan) /*synthesis full_case*/
8'b00001101 : tmpASCII <= 8'h09;
8'b00001110 : tmpASCII <= shifted ? 8'h7E : 8'h60;//~,`
8'b00010101 : tmpASCII <= 8'h51;//Q
8'b00010110 : tmpASCII <= shifted ? 8'h21 : 8'h31;//!,1
8'b00011010 : tmpASCII <= 8'h5A;//Z
8'b00011011 : tmpASCII <= 8'h53;//S
8'b00011100 : tmpASCII <= 8'h41;//A
8'b00011101 : tmpASCII <= 8'h57;//W
8'b00011110 : tmpASCII <= shifted ? 8'h40 : 8'h32;//@,2
8'b00100001 : tmpASCII <= 8'h43;//C
8'b00100010 : tmpASCII <= 8'h58;//X
8'b00100011 : tmpASCII <= 8'h44;//D
8'b00100100 : tmpASCII <= 8'h45;//E
8'b00100101 : tmpASCII <= shifted ? 8'h24 : 8'h34;//$,4
8'b00100110 : tmpASCII <= shifted ? 8'h23 : 8'h33;//#,3
8'b00101001 : tmpASCII <= 8'h20;//space
8'b00101010 : tmpASCII <= 8'h56;//V
8'b00101011 : tmpASCII <= 8'h46;//F
8'b00101100 : tmpASCII <= 8'h54;//T
8'b00101101 : tmpASCII <= 8'h52;//R
8'b00101110 : tmpASCII <= shifted ? 8'h25 : 8'h35;//%,5
8'b00110001 : tmpASCII <= 8'h4E;//N
8'b00110010 : tmpASCII <= 8'h42;//B
8'b00110011 : tmpASCII <= 8'h48;//H
8'b00110100 : tmpASCII <= 8'h47;//G
8'b00110101 : tmpASCII <= 8'h59;//Y
8'b00110110 : tmpASCII <= shifted ? 8'h5E : 8'h36;//^,6
8'b00111010 : tmpASCII <= 8'h4D;//M
8'b00111011 : tmpASCII <= 8'h4A;//J
8'b00111100 : tmpASCII <= 8'h55;//U
8'b00111101 : tmpASCII <= shifted ? 8'h26 : 8'h37;//&,7
8'b00111110 : tmpASCII <= shifted ? 8'h2A : 8'h38;//*,8
8'b01000001 : tmpASCII <= shifted ? 8'h3C : 8'h2C;//<,,
8'b01000010 : tmpASCII <= 8'h4B;//K
8'b01000011 : tmpASCII <= 8'h49;//I
8'b01000100 : tmpASCII <= 8'h4F;//O
8'b01000101 : tmpASCII <= shifted ? 8'h29 : 8'h30;//),0
8'b01000110 : tmpASCII <= shifted ? 8'h28 : 8'h39;//(,9
8'b01001001 : tmpASCII <= shifted ? 8'h3E : 8'h2E;//>,.
8'b01001010 : tmpASCII <= shifted ? 8'h3F : 8'h2F;//?,/
8'b01001011 : tmpASCII <= 8'h4C;//L
8'b01001100 : tmpASCII <= shifted ? 8'h3A : 8'h3B;//:,;
8'b01001101 : tmpASCII <= 8'h50;//P
8'b01001110 : tmpASCII <= shifted ? 8'h5F : 8'h2D;//_,-
8'b01010010 : tmpASCII <= shifted ? 8'h22 : 8'h27;//",'
8'b01010100 : tmpASCII <= shifted ? 8'h7B : 8'h5B;//{,[
8'b01010101 : tmpASCII <= shifted ? 8'h2B : 8'h3D;//+,=
8'b01011010 : tmpASCII <= 8'h0D;//CR
8'b01011011 : tmpASCII <= shifted ? 8'h7D : 8'h5D;//},]
8'b01011101 : tmpASCII <= shifted ? 8'h7C : 8'h5C;//|,\,
8'b01100110 : tmpASCII <= 8'h08;//
8'b01110110 : tmpASCII <= 8'h1B;// ESC
endcase
end
end
/*字母大小寫轉換*/
always @(tmpASCII or shifted or clr or keypressed or capslocked)
begin
if(!clr) begin
ASCII <= 0;
end
else begin
if (keypressed) begin
if (((!shifted & !capslocked)|(shifted & capslocked)) && (tmpASCII > 8'h40) && (tmpASCII <= 8'h5A)) begin
ASCII <= tmpASCII + 8'h20;
end
else begin
ASCII <= tmpASCII;
end
end
else begin
ASCII <= 8'b1000_0000;
end
end
end
assign data = ASCII;
endmodule
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -