固件开发指的就是
FPGA 开发,也就是使用硬件描述语言(VHDL 或者 VerilogHDL)编写 FPGA 内部程序。FPGA 的作用就是和 PDIUSBD12 进行
通信,从 PDIUSBD12 中获取数据并且根据主机的要求发送数据。PDIUSBD12 和 FPGA 之间的通信就是 8 位数据总线加上若干控制信号(A0、WR_N、RD_N 等),只要控制 FPGA 产生符合 PDIUSBD12 输入/输出时序的脉冲,即可实现两者之间的通信。
FPGA 固件的模块图如图 6-34 所示,各个模块的功能如下。
(1)分频器模块
由于 PDIUSBD12 在读写时序上有时间限制,例如每次读写操作之间的间隔不能小于 500ns,而 FPGA 的系统时钟一般频率都比较高,所以不能直接使用系统时钟控制 PDIUSBD12,必须进行分频。分频器模块的功能就是按照要求由系统时钟生成所需频率的时钟信号。
(2)沿控制器模块
PDIUSBD12 的读写操作都各自有一个读写控制信号 WR_N 和 RD_N,每次读写操作都在对应的控制信号的下降沿触发,沿控制模块的功能就是可控地产生一个下降沿信号,用于控制读写操作。
(3)输入/输出切换模块
输入/输出切换模块在整个系统中非常重要,因为 FPGA 芯片和 PDIUSBD12 芯片之间的数据总线是双向的总线,所以当读写操作之一在进行的时候另一个操作的信号源必须关闭,否则就会造成双驱动,这不但不能得到正确的数据还会损害芯片。输入/输出切换模块的功能就是根据当前的读写状况控制信号源,保证在一个时刻只有一个信号源在驱动总线。
(4)设备收发器模块
这个模块是整个固件的核心模块,它完成的工作包括配置 PDIUSBD12 芯片、处理 PDIUSBD12产生的中断、完成从缓存读取数据,并且根据需要将数据通过 PDIUSBD12 发送。设备收发器模块完成对每个主机请求的解析工作,此外,还要将解析完成的请求数据传递给请求处理模块。
(5)请求处理模块
请求处理模块的作用是接收设备收发器模块解析完成的主机请求,并且决定如何处理此请求。
模块划分完毕之后就可以使用 ISE 创建工程了,然后就各个模块分别编写实现代码和测试平台,最后将所有模块整合起来作为一个实体并且对其进行
仿真、测试,这样就是一次完整的FPGA 开发过程。ISE 的一些基本使用方法在前面的章节已有详细介绍,在此不详细说明,以后介绍一下各个模块的实现方法。