110 lines
2.2 KiB
Verilog
110 lines
2.2 KiB
Verilog
// fpga2.v
|
|
|
|
// simple test module for scancode module
|
|
|
|
module fpga (clka,
|
|
clkb,
|
|
reset_n,
|
|
ps2_clk,
|
|
ps2_data,
|
|
vga_blue0,
|
|
vga_blue1,
|
|
vga_blue2,
|
|
vga_green0,
|
|
vga_green1,
|
|
vga_green2,
|
|
vga_red0,
|
|
vga_red1,
|
|
vga_red2,
|
|
vga_hsync_n,
|
|
vga_vsync_n,
|
|
fpga_din_d0,
|
|
fpga_d1,
|
|
fpga_d2,
|
|
fpga_d3,
|
|
fpga_d4,
|
|
fpga_d5,
|
|
fpga_d6,
|
|
fpga_d7
|
|
);
|
|
|
|
input clka; // 100mhz
|
|
input clkb; // 50mhz
|
|
input reset_n;
|
|
|
|
input ps2_clk, ps2_data;
|
|
|
|
output vga_blue0, vga_blue1, vga_blue2;
|
|
output vga_green0, vga_green1, vga_green2;
|
|
output vga_red0, vga_red1, vga_red2;
|
|
output vga_hsync_n, vga_vsync_n;
|
|
|
|
output fpga_din_d0, fpga_d1, fpga_d2, fpga_d3,
|
|
fpga_d4, fpga_d5, fpga_d6, fpga_d7;
|
|
|
|
//
|
|
wire hsync, vsync;
|
|
wire [8:0] pixel;
|
|
|
|
// signals to create a 25MHz clock from the 100MHz input clock
|
|
wire clk25;
|
|
reg [1:0] gray_cnt;
|
|
|
|
// clock divider by 4 to for a slower clock
|
|
// uses grey code for minimized logic
|
|
always @(posedge clka or negedge reset_n)
|
|
if (~reset_n)
|
|
gray_cnt <= 2'b00;
|
|
else
|
|
case (gray_cnt)
|
|
2'b00: gray_cnt <= 2'b01;
|
|
2'b01: gray_cnt <= 2'b11;
|
|
2'b11: gray_cnt <= 2'b10;
|
|
2'b10: gray_cnt <= 2'b00;
|
|
default: gray_cnt <= 2'b00;
|
|
endcase
|
|
|
|
// assign the clock that this entity runs off
|
|
assign clk25 = gray_cnt[1];
|
|
|
|
reg [7:0] kb_scancode;
|
|
reg kb_rdy;
|
|
|
|
wire [7:0] kb_ascii;
|
|
wire kb_release;
|
|
wire kb_ascii_rdy;
|
|
|
|
scancode_convert scancode_convert(.clock(clk25),
|
|
.reset_n(reset_n),
|
|
.scancode(kb_scancode),
|
|
.ascii(kb_ascii),
|
|
.key_up(kb_release),
|
|
.strobe_in(kb_rdy),
|
|
.strobe_out(kb_ascii_rdy));
|
|
|
|
//xc2s200-5fg256
|
|
|
|
reg [2:0] clk8;
|
|
always @(posedge clk25 or negedge reset_n)
|
|
if (~reset_n)
|
|
clk8 = 3'b111;
|
|
else
|
|
clk8 = clk8 + 1;
|
|
|
|
always @(posedge clk25 or negedge reset_n)
|
|
if (~reset_n)
|
|
kb_scancode = 0;
|
|
else
|
|
if (clk8 == 8'b111)
|
|
begin
|
|
kb_scancode = kb_scancode + 1;
|
|
kb_rdy = 1;
|
|
end
|
|
else
|
|
kb_rdy = 0;
|
|
|
|
assign {fpga_din_d0, fpga_d1, fpga_d2, fpga_d3,
|
|
fpga_d4, fpga_d5, fpga_d6, fpga_d7} = kb_ascii;
|
|
|
|
endmodule // fpga
|