简易通用型PCI接口的VHDL-CPLD设计
的准备阶段;状态S3标识读/写访问周期;状态S4标识最后一个数据传输阶段;状态S5标识操作中的等待时期。
3.2状态功能的确定
各状态所应执行的功能如下:
状态S0~S2用于对PCI总线置高信号TRDY和DEVSEL;对双口RAM则置高片选信号CS,以使读/写信号处于读状态,此时地址呈现三态。此外,在S1态还应依据地址信号来确定是不是对本机的选择,并识别是不是读或写操作。
状态S3~S4用于对PCI总线置低信号TRDY和DEVSEL;对双口RAM则产生片选信号CS、读或写信号,同时确定适当的读写访问地址。
状态S5用于对PCI总线置低信号TRDY和DEVSEL;并且对双口RAM置高片选信号CS,以使读/写信号处于读状态,此时地址呈现三态。
3.3状态变化的确定
根据对PCI总线传输时序的分析,影响各个状态相互转化的因素是:帧同步信号FRAME、主设备准备好信号IRDY、从设备选择信号CS-MAP、读识别信号READ以及写识别信号WRITE。这里,可用CS-MAP、READ、WRITE来标识状态S1产生的中间识别信号。
图3
需要注意,在状态S1时要寄存收到的首地址,而在状态S3变化时要适时进行地址递增。
还要注意状态机设计时产生的容错问题,以便在非设计状态下能够无条件回到空闲态S0。
由于采用的是高速双口RAM,并且规划分开了RAM两侧的写操作区域,因此可以认为:RAM是可以任意访问的。
3.4状态图的规划
综上所述便可得出如图4所示的设计规划图。
4VHDL语言的描述
设计时,使用三个进程和几个并行语句可实现整个CPLD的功能:一个进程用于完成从设备及其读写操作的识别;一个进程用于完成操作地址的获取与地址的递增;第三个进程完成状态机的变化。用几个并行语句完成操作信号的产生时,需要注意,各状态所完成的功能要用并行语句实现,不能再用进程,否则就会引起逻辑综合的麻烦,有时甚至根本不能综合。整个程序如下:
LIBRARYieee;
USEieee.std_logic_1164.All;
USEieee.std_logic_unsigned.ALL;
ENTTTYcpciIS
PORT(clk,rst,frame,irdy:INSTD_LOGIC;
ad_high:INSTD_LOGIC_VECTOR(31downto24);
ad_low:INSTD_LOGIC_VECTOR(12downto0);
c_be:INSTD_LOGIC_VECTOR(3downto0);
trdy,devsel:OUTSTD_LOGIC;
cs,r_w:OUTSTD-LOGIC;
addr:OUTSTD_LOGIC_VECTOR(12downto0);
ENDcpci;
ARCHITECTUREbehaveOFcpciI 《简易通用型PCI接口的VHDL-CPLD设计(第2页)》
本文链接地址:http://www.oyaya.net/fanwen/view/169506.html
3.2状态功能的确定
各状态所应执行的功能如下:
状态S0~S2用于对PCI总线置高信号TRDY和DEVSEL;对双口RAM则置高片选信号CS,以使读/写信号处于读状态,此时地址呈现三态。此外,在S1态还应依据地址信号来确定是不是对本机的选择,并识别是不是读或写操作。
状态S3~S4用于对PCI总线置低信号TRDY和DEVSEL;对双口RAM则产生片选信号CS、读或写信号,同时确定适当的读写访问地址。
状态S5用于对PCI总线置低信号TRDY和DEVSEL;并且对双口RAM置高片选信号CS,以使读/写信号处于读状态,此时地址呈现三态。
3.3状态变化的确定
根据对PCI总线传输时序的分析,影响各个状态相互转化的因素是:帧同步信号FRAME、主设备准备好信号IRDY、从设备选择信号CS-MAP、读识别信号READ以及写识别信号WRITE。这里,可用CS-MAP、READ、WRITE来标识状态S1产生的中间识别信号。
图3
需要注意,在状态S1时要寄存收到的首地址,而在状态S3变化时要适时进行地址递增。
还要注意状态机设计时产生的容错问题,以便在非设计状态下能够无条件回到空闲态S0。
由于采用的是高速双口RAM,并且规划分开了RAM两侧的写操作区域,因此可以认为:RAM是可以任意访问的。
3.4状态图的规划
综上所述便可得出如图4所示的设计规划图。
4VHDL语言的描述
设计时,使用三个进程和几个并行语句可实现整个CPLD的功能:一个进程用于完成从设备及其读写操作的识别;一个进程用于完成操作地址的获取与地址的递增;第三个进程完成状态机的变化。用几个并行语句完成操作信号的产生时,需要注意,各状态所完成的功能要用并行语句实现,不能再用进程,否则就会引起逻辑综合的麻烦,有时甚至根本不能综合。整个程序如下:
LIBRARYieee;
USEieee.std_logic_1164.All;
USEieee.std_logic_unsigned.ALL;
ENTTTYcpciIS
PORT(clk,rst,frame,irdy:INSTD_LOGIC;
ad_high:INSTD_LOGIC_VECTOR(31downto24);
ad_low:INSTD_LOGIC_VECTOR(12downto0);
c_be:INSTD_LOGIC_VECTOR(3downto0);
trdy,devsel:OUTSTD_LOGIC;
cs,r_w:OUTSTD-LOGIC;
addr:OUTSTD_LOGIC_VECTOR(12downto0);
ENDcpci;
ARCHITECTUREbehaveOFcpciI 《简易通用型PCI接口的VHDL-CPLD设计(第2页)》