用CPLD实现单片机读写模块
7:0]CONREG1;//内部控制寄存器
reg[7:0]CONREG2;//内部控制寄存器
assignMCU_DATA=RD?8'bzzzzzzzz:LAMCU_DATA;
initial//寄存器初始化
begin
LAMCU_DATA<=0;
ADDRESSREG<=0;
CONREG1<=0;
CONREG2<=0;
end
always@(negedgeALE)
begin
ADDRESSREG<=MCU_DATA;//地址锁存
End
always@(posedgeWE)
begin
if(!CS&&ADDRESSREG[0]==0))LAMCU_DATA
<=CONREG1;//从地址为0的CONREG1寄存器读数据
elseif(!CS&&(ADDRESSREG[0]==1))LAMCU_DATA<=CONREG2;
//从地址为1的CONREG2寄存器读数据
elseLAMCU_DATA<=8'bzzzzzzzz;
end
else
LAMCU_DATA<=8'bzzzzzzzz;
End
Endmodule
使用Modelsim5.5f仿真结果如图3和图4所示。图中ALE、CS、RD、WE、MCU_DATA是测试激励源信号,代表AT89C52接口信号;CONREG1和CONREG2的内部寄存器;ADDRESSREG是内部地址锁存寄存器。
图3CONREG1写过程图4CONREG1读过程
图3是CONREG1写过程。首先,在ALE信号的下降沿,锁存MCU_DATA的数据到ADDRESSREG内部地址锁存寄存器。然后,在WE信号的上升沿,把MCU_DATA(0XAA)的数据锁存到寄存器CONREG1。
图4是CONREG1读过程。首先,在ALE信号的下降沿,锁存MCU_DATA(0X00)的数据到ADDRESSREG内部地址锁存寄存器。然后,在RD信号的低电平期间,把MCU_DATA(0XAA)的数据锁存到寄存器CONREG1。
从图3和图4可以看出,对CONREG1寄存器的读、写过程完全满足进序要求,CONREG2的读写过程同CONREG1一样,也完全满足时序要求,实现了期望的功能。
结语
本文实现CPLD与单片机接口设计是笔者设计的高速采样设备的一部分,经实际验证完全正确。简单地修改该模块,笔者已成功地将其应用于多个CPLD或FPGA与单片机接口的项目中 《用CPLD实现单片机读写模块(第2页)》
本文链接地址:http://www.oyaya.net/fanwen/view/177602.html
reg[7:0]CONREG2;//内部控制寄存器
assignMCU_DATA=RD?8'bzzzzzzzz:LAMCU_DATA;
initial//寄存器初始化
begin
LAMCU_DATA<=0;
ADDRESSREG<=0;
CONREG1<=0;
CONREG2<=0;
end
always@(negedgeALE)
begin
ADDRESSREG<=MCU_DATA;//地址锁存
End
always@(posedgeWE)
begin
if(!CS&&ADDRESSREG[0]==0))LAMCU_DATA
<=CONREG1;//从地址为0的CONREG1寄存器读数据
elseif(!CS&&(ADDRESSREG[0]==1))LAMCU_DATA<=CONREG2;
//从地址为1的CONREG2寄存器读数据
elseLAMCU_DATA<=8'bzzzzzzzz;
end
else
LAMCU_DATA<=8'bzzzzzzzz;
End
Endmodule
使用Modelsim5.5f仿真结果如图3和图4所示。图中ALE、CS、RD、WE、MCU_DATA是测试激励源信号,代表AT89C52接口信号;CONREG1和CONREG2的内部寄存器;ADDRESSREG是内部地址锁存寄存器。
图3CONREG1写过程图4CONREG1读过程
图3是CONREG1写过程。首先,在ALE信号的下降沿,锁存MCU_DATA的数据到ADDRESSREG内部地址锁存寄存器。然后,在WE信号的上升沿,把MCU_DATA(0XAA)的数据锁存到寄存器CONREG1。
图4是CONREG1读过程。首先,在ALE信号的下降沿,锁存MCU_DATA(0X00)的数据到ADDRESSREG内部地址锁存寄存器。然后,在RD信号的低电平期间,把MCU_DATA(0XAA)的数据锁存到寄存器CONREG1。
从图3和图4可以看出,对CONREG1寄存器的读、写过程完全满足进序要求,CONREG2的读写过程同CONREG1一样,也完全满足时序要求,实现了期望的功能。
结语
本文实现CPLD与单片机接口设计是笔者设计的高速采样设备的一部分,经实际验证完全正确。简单地修改该模块,笔者已成功地将其应用于多个CPLD或FPGA与单片机接口的项目中 《用CPLD实现单片机读写模块(第2页)》