用户编程控制的FPGA 是通过加载比特位流配置内部的存储单元实现的。该存储单元就是所谓的配置单元,它必须在器件上电后进行配置,从而设置查找表(LUT)的属性、连线方式、IOB 电压标准和其它的用户设计。
1.配置帧
以Xilinx 公司的Virtex-II 系列为例,配置数据是以配置帧(Frame)为配置单元进行读写的。每一帧以一个比特为宽度,从器件的最顶端一直延伸到最底端。
不同器件型号的尺寸和容量不同,所以,对应的帧长也不同。但在同一器件中,所有类型的帧,其长度一致。
下表列出不同型号的帧长度以及总的帧数,单位为32bit 字。
2.配置列
多个配置帧构成了更大的配置单位称为配置列(Column)。以配置列为单位,可以将FPGA 资源分成三类:类一,CLB 列、IOB 列、IOI 列、GCLK 列;类二,BRAM 列;类三,BRAM Interconnect 列。下图展示了三类资源在FPGA 上的物理映射。
在Virtex-II 系列FPGA 中,IOB、IOI 和GCLK 列数是一致的,而CLB、BRAM和BRAM Interconnect 的列数则是根据器件的尺寸有所差异。对于不同类别的列所含有的帧数以及不同器件型号所含有的列数由下表所示。
IOB 列:配置器件最左和最右两端的I/O 电平标准;
IOI 列:配置乘法器、器件最左端和最右端IOB 中的三态缓冲、IOB 中的寄存器;
CLB 列:配置CLB 单元、布线、大部分的内连和器件最上端和最下端IOB;
BRAM 列:配置在BRAM 中的用户存储空间属性;
BRAM Interconnect 列:配置除了用户存储空间以外的BRAM 空间以及乘法器的属性;
GCLK 列:配置大部分的全局时钟资源,包括时钟缓冲和数字时钟管理器(DCM)。
3.配置单元的寻址
在整个配置过程中,每个配置帧都有唯一的32 位地址与之相对应。该地址由块地址(Block Address,BA)、主地址(Major Address,MJA)、次地址(Minor Address,MNA)和字节数(Byte number)组成。其中,字节数为全‘0’,它是在配置过程中,自动为器件中的帧长计数器所使用,用户不能够对其进行设置。下表说明了地址的组成。
根据块地址(BA),可以将地址划分为三类(BA00,BA01,BA10),对应着FPGA 三类的内部资源:
BA00 包括了所有的CLB 列、IOB 列、IOI 列、GCLK 列;
BA01 包括了所有的BRAM 列;
BA10 包括了所有的BRAM Interconnect 列。
主地址(MJA)指定了一列在某块中的位置,次地址(MNA)则是说明一帧在某一列中的次序。下图说明了帧地址的映射,需要注意的是,帧的排列并不是硬件上的映射,而是逻辑上的映射。在配置过程中,帧地址会自动累加,即:帧的配置顺序在下图中是从左到右的一个配置过程。
4.比特流的组成
配置 Virtex-II 的比特流由同步字和大量的数据包组成,其长度均为以32bit 字为单位。同步字(0xAA995566)对配置逻辑进行同步,当FPGA 接收到这一同步字后,数据通道打开,开始以32bit 字为基本单位进行数据包的接收。在比特文件中的位置由下图所示。
而数据包则是先指定相应寄存器然后再对其进行配置,它是由包头和不定长的实体构成,其仍然以32bit 字进行基本的操作。
数据包的包头分为两种类型:TYPE1 和TYPE2。
TYPE1的包头如下表所示,在TYPE1 包头中,“WR”或“RD”指定了读写操作,“Register Address”指定配置寄存器的地址,“Word Count”指定了跟在TYPE1 包头后面的32bit 字的字数,对应需要配置到“Register Address”所指定的寄存器。
TYPE2的包头如下表所示。
通常,TYPE1 用于比较小的包的配置,例如对地址寄存器(FAR)的配置。而TYPE2 则是用于较大包的配置,例如对FPGA 三类资源的配置。
但在全比特位流中,通常是两种类型的包头结合使用,组织形式为“TYPE1+TYPE2”,形式如下图所示。
5.配置控制逻辑
Virtex-II FPGA 的配置控制逻辑是由包处理器、一系列的配置寄存器及其控制的全局信号组成。其中,包处理器将从数据通道进来的数据流配置到相应的寄存器,而配置寄存器则是根据不同的值进行配置过程中的相应操作。
5.1包处理器
上电后,识别到同步字后,包处理器开始等待有效的包头。接收到有效包头后,包处理器就会将包头后的数据配置到其所指定的寄存器中,直至包头中的字计数器(Word Count)减到零,才会去等待下一个有效的包头。数据通道的数据流在进入包处理器之前都会经过一个64bit 的缓冲单元,如下图所示。
包处理器本身则是以32bit 字为基本单位去识别所有的指令。所以,在比特流中配置指令的结束位置必须有至少2 个32bit 的无效字,如下表所示,从而将还位于缓冲区的的指令送至包处理器中
5.2配置寄存器
FPGA 配置的实现过程也是所有配置指令的执行过程。根据写入配置寄存器不同的值,就可以执行相应的操作。下表就给出了FPGA 一些关键的内部配置寄存器及其对应的地址。
学习例程
我给小白们准备了一份礼物,下面是我精心整理的n多verilog代码。帮助小白们由浅至深的“模仿”。在模仿的过程中能够进一步的巩固之前了解的语法知识。
这些Verilog例程基本涵盖了以后可能遇到的所有用法,参考这些代码,可以做出你想要的任何设计。
当你想要用Verilog编写一段代码实现某个功能时,如果你能够想到参考哪段代码能够实现你的设计,那么恭喜你,你已经入门了!!!
所有示例代码,点击链接获取。
01-锁存器、触发器、寄存器、移位寄存器等
【免费】VerilogHDL示例代码之01-锁存器、触发器、寄存器、移位寄存器等资源-CSDN文库
02-逻辑门、三态门、mux等
【免费】VerilogHDL示例代码之02-逻辑门、三态门、mux等资源-CSDN文库
03-各种计数器
【免费】VerilogHDL示例代码之03-各种计数器资源-CSDN文库
04-各类加法器
【免费】VerilogHDL示例代码之04-各类加法器资源-CSDN文库
05-乘法器
【免费】VerilogHDL示例代码之05-乘法器资源-CSDN文库
06-异步复位同步释放
【免费】VerilogHDL示例代码之06-异步复位同步释放资源-CSDN文库
07-分频
【免费】VerilogHDL示例代码之07-分频资源-CSDN文库
08-语法语句
【免费】VerilogHDL示例代码之08-语法语句资源-CSDN文库
09-串并转换
【免费】VerilogHDL示例代码之09-串并转换资源-CSDN文库
10-状态机设计
【免费】VerilogHDL示例代码之10-状态机设计资源-CSDN文库
11-编解码应用
【免费】VerilogHDL示例代码之11-编解码应用资源-CSDN文库
12-仿真语法举例
【免费】VerilogHDL示例代码之12-仿真语法举例资源-CSDN文库
13-进阶设计
【免费】VerilogHDL示例代码之13-进阶设计资源-CSDN文库
我将Verilog的语法进行了总结,写了13篇文章,让小白“快速见识猪如何跑”,每一篇讲解一类语法,结合正确的示例代码和错误的示例代码,有的章节对个别语法进行了归纳总结,帮助初学者加深理解。详情点击
小白如何快速入门Verilog?-CSDN博客
Verilog语法之〇:Verilog HDL简介/Verilog语法介绍-CSDN博客
Verilog语法之一:简单的Verilog HDL模块-CSDN博客
Verilog语法之二:常量-CSDN博客
Verilog语法之三:变量-CSDN博客
Verilog语法之四:运算符-CSDN博客
。。。。。。
更多课程,敬请期待