PLD与数字系统课程实验报告Word下载.docx
- 文档编号:18344988
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:16
- 大小:53.24KB
PLD与数字系统课程实验报告Word下载.docx
《PLD与数字系统课程实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《PLD与数字系统课程实验报告Word下载.docx(16页珍藏版)》请在冰豆网上搜索。
(3)把时钟线拉低;
(4)延时40μs;
(5)释放时钟线;
(6)延时20μs。
②ps/2设备从pc机接收一个字节
由于ps/2设备能提供串行同步时钟,因此,如果pc机发送数据,则pc机要先把时钟线和数据线置为请求发送的状态。
pc机通过下拉时钟线大于100μs来抑制通讯,并且通过下拉数据线发出请求发送数据的信号,然后释放时钟。
当ps/2设备检测到需要接收的数据时,它会产生时钟信号并记录下面8个数据位和一个停止位。
主机此时在时钟线变为低时准备数据到数据线,并在时钟上升沿锁存数据。
而ps/2设备则要配合pc机才能读到准确的数据。
具体连接步骤如下:
(1)等待时钟线为高电平。
(2)判断数据线是否为低,为高则错误退出,否则继续执行。
(3)读地址线上的数据内容,共8个bit,每读完一个位,都应检测时钟线是否被pc机拉低,如果被拉低则要中止接收。
(4)读地址线上的校验位内容,1个bit。
(5)读停止位。
(6)如果数据线上为0(即还是低电平),ps/2设备继续产生时钟,直到接收到1且产生出错信号为止(因为停止位是1,如果ps/2设备没有读到停止位,则表明此次传输出错)。
(7输出应答位。
(8)检测奇偶校验位,如果校验失败,则产生错误信号以表明此次传输出现错误。
(9)延时45μs,以便pc机进行下一次传输。
读数据线的步骤如下:
(1)延时20μs;
(2)把时钟线拉低 (3)延时40μs (4)释放时钟线 (5)延时20μs (6)读数据线。
下面的步骤可用于发出应答位;
(1)延时15μs;
(2)把数据线拉低;
(3)延时5μs;
(4)把时钟线拉低;
(5)延时40μs;
(6)释放时钟线;
(7)延时5μs;
(8)释放数据线。
PS/2总线时序波图如下:
(4)主要实验仪器
1、XUP(FPGA:
Spartan3S400AN)实验开发板
2、电脑及一键盘
3、一个字模小软件(基于T6963c的12864液晶驱动和电路)
(五)实验操作步骤
1、学习并理解PS/2协议,用verilogHDL语言编写程序,实现pc机与PS/2端之间的对话。
在ISE10.1上编写程序,进行综合、实现,不断调试直至成功。
程序如下:
moduleps2keyboard(clk,rst,ps2_clk,ps2_data,cs1,cs2,reset,di,rw,e,dat,vee,bl);
inputclk;
inputrst;
inputps2_clk;
//ps2时钟信号
inputps2_data;
//ps2数据信号
outputreset,cs1,cs2,di,rw,e,vee,bl;
output[7:
0]dat;
regreset_r,cs1_r,cs2_r,di_r,rw_r,e_r,vee_r,bl_r;
reg[7:
0]dat_r;
assignreset=reset_r;
assigncs1=cs1_r;
assigncs2=cs2_r;
assigndi=di_r;
assignrw=rw_r;
assigne=e_r;
assignvee=vee_r;
assignbl=bl_r;
assigndat=dat_r;
regps2_clk_r0,ps2_clk_r1,ps2_clk_r2;
wireneg_ps2_clk;
//ps2时钟下降沿标志
always@(posedgeclk)
begin
if(!
rst)
ps2_clk_r0<
=1'
b0;
ps2_clk_r1<
ps2_clk_r2<
end
else
=ps2_clk;
=ps2_clk_r0;
=ps2_clk_r1;
assignneg_ps2_clk=(~ps2_clk_r1)&
(ps2_clk_r2);
//检测ps2时钟下降沿
0]temp_data;
//当前接收数据寄存器
reg[3:
0]num;
//计数寄存器
num<
=4'
d0;
temp_data<
=8'
elseif(neg_ps2_clk)
case(num)
4'
d0:
=num+1'
b1;
//第一位是起始位,不接收
d1:
beginnum<
temp_data[0]<
=ps2_data;
end//bit0
d2:
temp_data[1]<
end//bit1
d3:
temp_data[2]<
end//bit2
d4:
temp_data[3]<
end//bit3
d5:
temp_data[4]<
end//bit4
d6:
temp_data[5]<
end//bit5
d7:
temp_data[6]<
end//bit6
d8:
temp_data[7]<
end//bit7
d9:
//奇偶校验位
d10:
num<
//停止位
default:
;
endcase
reg[7:
0]ps2_byte_r;
regkey_f0;
wireps2_state;
/键盘当前状态,表示有键按下
regps2_state_r;
assignps2_state=ps2_state_r;
key_f0<
ps2_state_r<
elseif(num==4'
d10)//刚接受完一个字节的数据
if(temp_data==8'
hf0)
//表示松键
Begin
if(!
key_f0)//若接受到的不是f0,且之前一个数据也不是f0,则表示有键按下
//有键按下
ps2_byte_r<
=temp_data;
//锁存当前键值
else
end//assignps2_byte=ps2_byte_r;
`defineL1COM_S1cs1_r<
=1;
cs2_r<
=0;
di_r<
rw_r<
=0//写CS1指令第一步
`defineL1DAT_S1cs1_r<
=0//写CS1数据第一步
`defineL2COM_S1cs1_r<
=0//写CS2指令第一步
`defineL2DAT_S1cs1_r<
=0//写CS2数据第一步
`defineL1COM_S2e_r<
=1//写CS1指令第二步
`defineL1DAT_S2e_r<
=1//写CS1数据第二步
`defineL2COM_S2e_r<
=1//写CS2指令第二步
`defineL2DAT_S2e_r<
=1//写CS2数据第二步
`defineL1COM_S3e_r<
=0//写CS1指令第三步
`defineL1DAT_S3e_r<
=0//写CS1数据第三步
`defineL2COM_S3e_r<
=0//写CS2指令第三步
`defineL2DAT_S3e_r<
=0//写CS2数据第三步
`defineL1COM_S4cs1_r<
=0//写CS1指令第四步
`defineL1DAT_S4cs1_r<
=0//写CS1数据第四步
`defineL2COM_S4cs1_r<
=0//写CS2指令第四步
`defineL2DAT_S4cs1_r<
=0//写CS2数据第四步
parameterLCD_DISPON=8'
h3f;
parameterLCD_DISPOFF=8'
h3e;
parameterLCD_STARTROW=8'
hc0;
/*显示起始行0,可以用LCD_STARTROW+x设置起始行。
(x<
64)*/
parameterLCD_ADDRSTRY=8'
hb8;
/*页起始地址,可以用LCD_ADDRSTRX+x设置当前页(即行)。
8)*/
parameterLCD_ADDRSTRX=8'
h40;
/*LCD_ADDRSTRY+x设置当前列。
reg[9:
0]addr;
0]q;
always@(addr)
case(addr)
10'
q<
h00;
h70;
h18;
h38;
hf8;
he0;
d11:
h80;
d12:
d13:
d14:
d15:
d16:
h20;
d17:
d18:
h30;
d19:
h3c;
d20:
h27;
d21:
h23;
d22:
h02;
d23:
d24:
d25:
d26:
d27:
d28:
d29:
d30:
d31:
//A
d32:
d33:
h08;
d34:
d35:
d36:
d37:
h88;
d38:
d39:
d40:
d41:
d42:
d43:
d44:
d45:
d46:
d47:
d48:
d49:
d50:
d51:
d52:
d53:
h21;
d54:
d55:
d56:
d57:
d58:
d59:
h31;
d60:
d61:
h1e;
d62:
h0c;
d63:
//B
d64:
d65:
d66:
d67:
hf0;
d68:
d69:
d70:
d71:
d72:
d73:
d74:
d75:
d76:
d77:
d78:
d79:
d80:
d81:
h07;
d82:
h0f;
d83:
h1f;
d84:
d85:
d86:
d87:
d88:
d89:
d90:
d91:
d92:
h10;
d93:
d94:
d95:
//C
default:
reg[29:
0]cnt;
wireen_5ms;
regen_5ms_r;
assignen_5ms=en_5ms_r;
cnt<
=30'
en_5ms_r<
elseif(cnt<
=50000-1)
=cnt+1'
reg[5:
0]count0;
reg[4:
0]initcount;
reg[2:
0]setxycount;
reg[1:
0]senddatacount;
reg[4:
0]i;
count0<
=6'
initcount<
=5'
setxycount<
=3'
senddatacount<
=2'
addr<
=10'
i<
elseif(en_5ms)
if(count0==6'
d0)
case(initcount)
5'
beginvee_r<
bl_r<
reset_r<
begin`L1COM_S1;
dat_r<
=LCD_DISPON;
begin`L1COM_S2;
begin`L1COM_S3;
begin`L1COM_S4;
=LCD_STARTROW;
begin`L2COM_S1;
begin`L2COM_S2;
begin`L2COM_S3;
begin`L2COM_S4;
d1;
i<
end//EndoftheInitiation
default:
endcase
initcount<
=initcount+1'
end
elseif(count0==6'
d1)//s
case(setxycount)
3'
begin`L1COM_S1;
=LCD_ADDRSTRY;
begin`L1COM_S2;
begin`L1COM_S3;
begin`L1COM_S4;
=LCD_ADDRSTRX;
d2;
senddatacount<
end
=setxycount+1'
case(ps2_byte_r)
8'
h1c:
addr<
h32:
d32;
h21:
d64;
//C
end
d2)
if(i<
=15)
case(senddatacount)
2'
begin`L1DAT_S1;
=q;
begin`L1DAT_S2;
begin`L1DAT_S3;
begin`L1DAT_S4;
addr<
=addr+1'
=i+1'
=senddatacount+1'
d3;
d3)
dat_
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PLD 数字 系统 课程 实验 报告