FPGA概念
AI summary
FPGA概念包括生产厂商(如Xilinx和Altera)、学习方法(如使用FPGA板卡和开发工具)、内部结构(可编程逻辑单元、I/O资源和互连线)、设计规范(命名和文件放置规范)、Verilog基本语法(I/O格式、数据类型、运算符等),以及建模方法(数据流建模、行为建模和结构化建模)。FPGA设计涉及组合逻辑和时序逻辑电路的实现,强调模块化设计和仿真测试。
Last edited time
Dec 16, 2024 03:45 PM
Last edited by
Tags
Fpga Basics
Digital Circuit Design
Verilog Syntax
FPGA概念
一:生产厂商
(1):Xilinx
开发工具:ISE14.7/Vivado 测试工具:Modelsim-SE/Questasim…
(2):Altera
开发工具:Quartus II 测试工具:Modelsim-SE/ASE/Questasim…
二:如何学习
- FPGA板卡(Altera EP4CE10F17C8)(EPCS16)
- 开发工具
- 开发语言
- 开发书籍:先修课程
- 最基础FPGA学习书籍:数字电路
- 通信原理
- 信号与系统
- DSP
- 图像算法
- …
信号,数制和码值,电路符号/真值表/逻辑表达式,组合/时序逻辑电路(组合:门电路/选择器/比较器/编码器/译码器/加法器/三态门… 时序:D触发器/计数器/分频器/存储器…),同步/异步电路,亚稳态/毛刺/竞争冒险…状态机/FPGA/Verilog语言…
三:FPGA内部结构
典型FPGA内部一般有3个部分:可编程逻辑单元、可编程I/O资源、可编程互连线资源。
可以详见Cyclone IV.datasheet手册。
除此之外:基本还会有时钟管理单元、片内存储器资源,乘除法器资源…
EP4CE10F17C8N有2个PLL,1个PLL可以最多输出5个不同时钟,那么2个PLL可以最多输出10个不同时钟。
EP4CE10F17C8N有50多K存储器大小,一般一块存储大小M9K,可以分为几块。
四:FPGA设计规范
- 命名规范:采用合法字符
合法字符:字母/数字/下划线 xxxxxx_123
非法字符:中文/中文字符… 测试文件/《》
FPGA设计当中,文件命名和模块命名/路径名必须使用合法字符,文件夹命名时也使用合法字符同时尽可能以设计功能去命名。
- 文件放置规范
Altera软件为准:工程文件/设计文档/功能代码/测试代码/IP核/图像处理文件…
- 代码规范
以上课代码为准,以后面为标准。
五:Verilog基本语法
- I/O格式说明
输入端口:input 数据类型 [位宽-1:0] 端口1;
输出端口:output 数据类型 [位宽-1:0] 端口2;
- 数据类型
wire型 reg型
wire型:当信号不指名数据类型时,默认为wire型。
reg型:视情况而定。
mem型:寄存器型
- 数据位宽
默认不写时,是1位。
例:4位位宽 [3:0]
一般使用的二进制编码采用8421码;
4’b1111=4’d15=4’hf;
计算位宽:计数器计数16个数。
计数器计数范围0~15 0000~1111
采用4位位宽即可。2^N=16 N为宽度
例:计数12345678,所需位宽为N,N=?
2^N=12345678 N=24
- 数字表示形式
- <位宽><进制><数字> //全面表示形式
- <进制><数字> //位宽由机器系统决定的
- <数字>
4’b1111=4’d15=4’hf;
‘b1111
12
//表示10进制数,不再是二进制数- 整数书写规范
- 较长的数值之间可以采用下划线进行区分
- 十进制数不说明位宽时,默认是32位
- X(不定态)/Z(高阻态)
- 定义位宽较大时,往往高位补0
16’b0011_1101_1110_0101
//在VHDL不允许的cnt=456
确定态:0/1
在二进制中表示1位X/Z,在16进制中表示4位X/Z。
- 运算符
- 条件运算符(三目运算符)
- 算术运算符
- 位运算
- 逻辑运算符
- 关系运算符
- 拼接符
- 移位运算符
- 等式运算符
- 缩减运算符
? :
+ - * / %(求余) **(幂次方)…
& | ~
&& || !
< > >= <=…
{}
1:拼接功能
2:移位功能(循环移位)
<<(左移) >>(右移)
==/!=
测试:Quartus II自带仿真器(.VWF文件)
说明:该测试只适用于简单设计。
使用简单,不需要写测试代码(只做了解)。
任务安排:
- PPT(PLD/EDA…)
- 数字电路
- 安装开发软件(Quartus II 13.0/1)
- 熟悉Quartus II软件
六:FPGA建模(建模:写代码方式)
建模方式:数据流建模/行为建模/结构化建模
数据流建模
描述电路功能时以“assign”为关键字出现,只能够描述组合逻辑电路。
组合逻辑电路:选择器/门电路/编码器/译码器/比较器/加法器/三态门…
组合逻辑电路特性:任意时刻的输出仅仅只取决于当前时刻的输入,与电路原来的状态无关(输入发生变化,输出立刻发生变化)。
Verilog语言语法规定:所有的组合逻辑电路赋值方式都采用阻塞赋值(=)。
在assign描述时,赋值号左侧信号定义为wire型。
赋值方式:阻塞赋值(=) 非阻塞赋值(<=)
数据类型:线型(wire) 寄存器型(reg)
举例1:组合逻辑电路(门电路:与/或/非/同或/异或门…)
仿真测试1:VWF文件
仿真测试2:Modelsim测试
- 书写测试代码(模拟输入情况)
- 做设置(让软件知道咱们写的属于测试代码)
- 打开Modelsim软件之前,需要分析综合一次(CTRL+K)
- 提示(需要提前设置好Modelsim路径)
- RTL SIM(运行仿真工具)
- Modelsim界面(
- 点击停止(STOP)
- 去除信号路径
- 如果是一个模块,不需要分组,如果是多个模块需要分组
- 对所有信号进行先清除(restart),再刷新(run -all)
- 对波形全局缩小(Zoom Full)
- 可以设置信号进制和时间标线(方便观测)
)
举例2:组合逻辑电路(比较器/半加器/1位全加器/三态门)
- 比较器
a | b | s | 说明 |
0 | 0 | 0 | a>b |
1 | 0 | 1 | |
0 | 1 | 0 | |
1 | 1 | 0 |
- 半加器
- 三态门
en | sda_buff | sda |
1 | 0/1 | 0/1 |
0 | 0/1 | z |
练习:
- 完成上课内容(门电路:测试代码书写/Modelsim操作 比较器/半加器/三态门)。
- 完成编码器/译码器部分(数据流建模实现)
练习分享:完成3-8译码器建模
行为建模
以“always”为关键字,不仅可以描述组合逻辑电路,也可以描述时序逻辑电路。
时序逻辑电路:D触发器/计数器/分频器/存储器…
时序逻辑电路特性:任意时刻的输出不仅取决于当前时刻的输入,而且还取决于电路原来的状态(输入发生变化,输出不一定发生变化)。
如果描述的是组合逻辑电路,括号内部为电平信号;
Verilog规定:组合逻辑电路赋值方式为阻塞赋值(=);
在always块中位于赋值号左侧的信号(被赋值的信号)必须定义为reg型。
if-else和case语句:条件语句
可以参考Verilog-HDL的基本`语法.PDF。
如果描述的是时序逻辑电路,括号内部为时钟沿触发信号;
Verilog规定:时序逻辑电路赋值方式为非阻塞赋值(<=);
在always块中位于赋值号左侧的信号(被赋值的信号)必须定义为reg型。
时钟信号:如图示
时钟极性:CPOL
CPOL=0时,时钟初始值为低电平;CPOL=1时,时钟初始值为高电平。
时钟相位:CPHA
CPHA=0,表示时钟第一个沿;CPHA=1,表示时钟第二个沿。
SPI四线制协议中:CPOL=0 CPHA=0(0模式) CPOL=1 CPHA=1(3模式)。
时序逻辑电路举例1:D触发器(时序逻辑电路中最小单元)
F=50MHZ T=1/F=1/50MHZ=10^9/50_000_000ns=20ns(高低电平持续时间各10ns)。
时序逻辑电路举例2:模10计数器(简单计数器逻辑功能)
总结:时序逻辑电路=组合逻辑电路+D触发器(最小单元)。
时序逻辑电路举例2:计数器拓展
要求:两个计数器进行计数,第一个计数器先进行计数,时钟上升沿来时,进行加1;当第一个计数器计数10个数时,第二个计数器开始计数(第一个计数器每次计数10个时),时钟上升沿来时,进行加1,直到第二个计数器计数10个。
练习:
- 完成3-8译码器实现(数据流建模/行为建模:3种方式)
- 时序逻辑电路(D触发器/计数器实现)
- 总结两种建模特点(都是完成电路功能的)
结构化建模
结构化建模也可以称为层次化设计,一般不用描述电路功能,完成各个模块间的连线。
一般来说,有顶层模块(TOP),有子模块。
- 画图(.BDF/BSF文件:了解)
- 写代码(掌握)
举例1:3输入与门电路
- 画图(.BDF/BSF文件:了解)
- 库中存在文件(直接调用图形)
- 库中不存在文件(自己完成端口,生成图形,再加载在图形文件中)
- 写代码(掌握)
- 完成顶层模块端口描述(top)
- 完成各个子模块端口描述(and_gate)
- 在顶层模块中对各个子模块进行连线(在RTL视图中看到和框图一致)
- 完成子模块功能描述
实现步骤:
举例2:16位加法器实现
16位加法器(4个4位加法器)----->1个4位加法器(4个1位加法器)---->1位加法器(2个半加器组成的)。
1位全加器由两个半加器构成,结构如下图:
仿真结果:
七:练习
- 完成上课内容(16位串行进位加法器:层次化设计)
- 完成下述架构
定义参数:三种方式
练习2技巧:
强制传参:
- 在调用模块中对参数进行更改
- 在测试模块中查找参数路径对其更改
仿真结果:
Loading...