基于FPGA的PCI总线接口原理研究与设计
● 时序控制
在时序控制程序中采用状态机模型来实现不同时序的转换。各种命令、数据交换、控制均在状态机的管理下进行工作。PCI总线上的信号是并行工作的,因此,对应每个状态必须明确其执行的任务。这些任务要用VHDL的进程语句来描述所发生的事件。本设计中的状态机共使用了6种状态,它以从设备响应状况为依据,主要以DEVSEL#信号和TRDY#信号的状况为依据。状态机如图1所示,分别对应空闲状态(此状态DEVSEL#、TRDY#和STOP#以及其他输出信号为高阻态);准备状态、DEVSEL#和TRDY#均为高电平状态,DEVSEL#为低电平且TRDY#为高电平状态,DEVSEL#和TRDY#均为低电平状态;操作结束状态(此状态使DEVSEL#、TRDY#和STOP#维持一个周期高电平)。本系统接到复位信号后对系统进行复位,然后转入空闲状态,在空闲状态中采样总线,并根据总线的变化来决定下一个时钟上升沿后状态机转入何种状态,这些时序和程序中用到的信号都是基本且必须的,在进行开发时可以根据需要增添必要的状态和信号,VHDL对状态机的描述如下。
type pci_state is (Idle, Ready, DevTrdyHi, DevLoTrdyHi, DevTrdyLo, OprOver);
signal c_state :pci_state;
Idle为空闲状态;Ready为准备状态;DevTrdyHi表示DEVSEL#和TRDY#均为高电平状态;DevLoTrdyHi表示DEVSEL#为低电平且TRDY#为高电平状态;DevTrdyLo表示DEVSEL#和TRDY#均为低电平状态;OprOverr表示操作结束状态。
程序如下。
下一步应列出每个状态所对应的并发事件,写出相关的进程。进程语句是一个并行语句,它定义进程被激活时将要执行的特定行为。例如,在Ready状态时,就要判断从主设备方发来的地址信息是否与从设备地址相同,因此要写出地址比较进程。
评论