|
楼主 |
发表于 2008-7-29 22:46:36
|
显示全部楼层
已经加奇偶校验啦~~不过还是有1%——2%的误码~~
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date: 23:44:11 07/22/2008
// Design Name:
// Module Name: PS2
// Project Name:
// Target Devices:
// Tool versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
module PS2(data,clock,led,clk,num,cat);
input data;
input clock;
input clk;
output [7:0]led;
output [6:0]num;
output cat;
wire data;
wire clock;
wire clk;
reg [7:0]led;
reg [6:0]num;
reg cat;
reg [7:0]data_ram;
reg start;
reg [3:0]count;
reg [2:0]i;
reg pass;
reg [3:0]num_high;
reg [3:0]num_low;
initial
begin
led=0;
data_ram=0;
start=0;
count=11;
i=0;
num_high=0;
num_low=0;
num=0;
cat=0;
end
always@(negedge clock)
begin
if(data==0)
begin
start=1;
pass=0;
end
else
start=start;
if(start==1)
begin
count=count-1;
if(count>1&&count<10)
begin
data_ram=data;
i=i+1;
end
else if(count==1)
begin
if(data!=^data_ram)
pass=1;
else
pass=0;
end
else if(count==0)
begin
count=11;
i=0;
start=0;
end
else
count=count;
end
else
count=count;
end
always@(negedge start)
begin
if(pass==1)
begin
led=data_ram;
{num_high,num_low}=data_ram;
end
else
led=led;
end
always@(posedge clk)
begin
cat=~cat;
if(cat==1)
seven(num_high,num);
else
seven(num_low,num);
end
/////////////////////////////////////////////////////////////////////////////
task seven;
input [3:0]num;
output [6:0]seg_task;
reg [6:0]seg_reg;
begin
case(num)
4'h0:seg_reg=7'b1000000;
4'h1:seg_reg=7'b1111001;
4'h2:seg_reg=7'b0100100;
4'h3:seg_reg=7'b0110000;
4'h4:seg_reg=7'b0011001;
4'h5:seg_reg=7'b0010010;
4'h6:seg_reg=7'b0000010;
4'h7:seg_reg=7'b1111000;
4'h8:seg_reg=7'b0000000;
4'h9:seg_reg=7'b0010000;
4'ha:seg_reg=7'b0001000;
4'hb:seg_reg=7'b0000000;
4'hc:seg_reg=7'b1000110;
4'hd:seg_reg=7'b1000000;
4'he:seg_reg=7'b0000110;
4'hf:seg_reg=7'b0001110;
default:seg_reg=7'b1111111;
endcase
seg_task=~seg_reg;
end
endtask
endmodule |
|