||
简介
设计实例概览
地址译码(Address Decoding)
引脚控制
寄存器映象(Register Mapping)
软件控制
ATEasy 例程 (使用ATEasy GX3500驱动)
“C” 例程
LabView例程
摘要:本文以基于PXI平台的Marvin Test Solutions 3U FPGA板卡GX3500为设计对象,通过设计实例讲解如何使用寄存器级读&写控制FPGA,并提供FPGA设计相关文件(如SVF)和软件控制例程。
为了更好地理解如何访问GX3500 FPGA的寄存器,需要有一个使用寄存器的设计。本篇文章分为两部分内容:第一部分,以读者已经熟练使用Altera Quartus II设计工具为前提(参考《GX3500 User’s Guide: GXFPGA Tutorial and Examples》的第五章),概述了如何使用GX3500设计128通道的静态I/O。此设计实例配置为4组32通道双向引脚,双缓冲结构支持同步更新128通道逻辑状态的读和写。
本篇文章的第二部分讲述了如何向GX3500 FPGA内加载设计文件,如何连接GX3500 I/O引脚,为了实现FPGA静态数字I/O的操作如何对寄存器进行读和写。
图1 MTS-GX3500 FPGA板卡
GX3500支持对两种类型的PCI总线读和写操作:一类是针对寄存器,使用PCI BAR 1;另一类是针对RAM,使用PCI BAR 2。静态数字I/O设计实例使用寄存器控制对I/O引脚的读和写,所以使用PCI BAR 1片选信号进行地址译码 — 与Chip Select 1 (CS[1])同意。BAR 1信号可以访问的地址范围为1024 byte(0x400),访问时必须以4-byte为准对齐。 图2为地址译码逻辑单元,将5路地址信号(Addr[6..2]))译码后,可提供32路“写使能”信号(WE[31..0])和32路“读使能”信号(RE[31..0]),这些信号用于控制锁存寄存器的向I/O引脚写入(WE[x]) )和从I/O引脚读取(RE[x])功能。
图2:寄存器地址译码
本设计实例中有四组完全相同的I/O引脚(见图4),每组有32路通道。每路通道都支持双向传输,并可以独立配置传输方向。输出寄存器为双缓冲结构,支持四组I/O引脚(128路通道)同步更新。第一阶段,通过WE_Data控制信号,将输出数据使用写入第一级数据寄存器,通过WE_Tristate写入三态控制信号。以上这些信号来自于WE[31..0]信号,并且这些信号在每组I/O引脚间独立。第二阶段,通过WE_UpdatePort控制信号,将第一级输出的数据和三态控制信号写入第二级寄存器。以上这些信号也来自于WE[31..0]信号,但是四组I/O引脚共用以实现四组I/O引脚数据的同步更新。使用RE_Tristatelatch,RE_DataLatch,RE_TristatePort和RE_DataPort控制信号访问输出寄存器两个阶段的数据和三态控制寄存器从而进行读操作。
图3:引脚控制逻辑单元(图4中的Port_Control)
通过RE_SamplePortIO控制信号可实现四组I/O引脚(128路通道)的所有通道同时被采样,采样数据被储存在锁存寄存器中以用于后续的数据检索。分别通过RE_PortIO 控制信号实现数据检索。因为每组I/O引脚的三态控制信号可以被读,所以可以推断出GX3500或UUT是否处于采样输入状态(读状态)。
下面是控制四组I/O引脚(A组、B组、C组、D组)的读和写寄存器偏移地址:
写功能: |
||
偏移量 |
(HEX) |
功能 |
0 |
(0x0) |