建议下载下来放大看
初识FPGA
基本概念
-
field programmable gate array
现场可编程逻辑阵列 -
FPGA/ASIC/ASSP
-
FPGA
- 可编程
-
ASIC
- 专用标准芯片
-
ASSP
- 专用标准产品
-
-
FPGA/ARM/DSP
都是可编程的
三者的区别
https://blog.youkuaiyun.com/woshiyuzhoushizhe/article/details/102815561 -
FPGA/ARM/DSP
-
FPGA
- 一个里面没有任何现成的硬件,需要自己设计
-
ARM
- 公司,微处理器
-
DSP
- 数字信号处理器
-
-
verilog和VHDL
-
Altera/Xilinx/Lattice
-
Altera
- Quartus II
-
Xilinx
- vivado
-
lattice
- 低端市场
-
ACTEL
- 其他都是基于sram技术 断电会丢失
actel基于flash技术 断电不会丢失
-
基本结构
-
查找表LUT :look-up table
- 用于执行最基本的逻辑操作
- !!!数据存储单元
-
触发器FF:flip-flop
- 存储单元
-
线
-
wires
- 用于连接各个不同的模块单元
-
-
输入输出端口
-
input/output pads
- FPGA器件与外部芯片互连的引脚
-
-
DSP48块
- 运算单元,相当于内嵌在fpga的alu
-
额外的资源
-
内嵌的存储器单元
-
BRAM
-
双口RAM
单口与双口的区别
单口只有一组数据线与地址线,因此读写不能同时进行;
而双口有两组数据线与地址线,读写可同时进行伪双口RAM和真双口RAM
伪双口RAM,一个端口只读,另一个端口只写
而双口RAM两个端口都又能读又能写
-
-
-
用于产生不同时钟频率的锁相环pll
- eg:lab3单周期CPU中pll器件用于降低时钟频率
-
高速串行收发器
-
片外存储器控制器
-
乘累加模块
-
开发流程
综合 实现 翻译 映射 布局布线
https://www.xiaopingtou.cn/article-40327.html
-
综合 synthesis
-
”假电路“
-
将设计代码转化为底层的逻辑门 ram 触发器等基本逻辑单元相互连接而成的网表
网表
在电路设计中,网表(netlist)是用于描述电路元件相互之间连接关系的,一般来说是一个遵循某种比较简单的标记语法的文本文件
-
并非真正的门级电路,相当于一个逻辑电路
-
-
-
实现 implement
-
“真电路”
- implementation是一个place和route的过程
- 综合后的网表是门与门之间的虚拟连接关系,并没有规定每个门的位置以及连线的长度。布局布线就是一个将网表中的门的位置以及连线信息确定下来的过程
-
-
翻译 translate
- 主要完成统一标准工作,将各种网表文件(EDN、NGC、NMC)及约束文件翻译成Xilinx 标准的NGD文件格式,全部由各种NGD原语构成
-
映射 map
- 具体工作为把由NGD原语描述的网表映射到特定FPGA器件中的相应资源(CLB, IOB等)。
输入为NGD文件,输出为NCD文件(本地电路描述文件),该文件是由目标器件的特定资源所表示的原始设计。
- 具体工作为把由NGD原语描述的网表映射到特定FPGA器件中的相应资源(CLB, IOB等)。
-
布局布线 place&route
-
布局的过程就是将门级网表中的每一个门“安置”到CLB中的过程,这个过程是一个映射的过程
-
布线是利用FPGA中丰富的布线资源将CLB根据逻辑关系连接在一起的过程。
-
行为仿真 功能仿真 时序仿真
-
行为级仿真
- 模拟fpga实际运行状态输出响应,通过观察波形判断功能代码是否正确。该阶段可以是不可综合的代码
-
功能仿真
- 综合后进行,针对综合后成为硬件的门级网表进行验证。不包含布局布线的延时信息
-
时序仿真
- 实现之后进行,包含延时信息,最接近实际板级电路
开发流程
-
分析需求划分模块
-
写设计文件
-
行为仿真
-
激励文件
- 测试脚本
-
-
综合实现
-
约束文件
- 针对开发板将代码中的端口和开发板的引脚连起来
-
-
上板调试
- 把生成的比特流文件下载到fpga上,真正转换为实际电路。根据电路实际表现进行调试
应用领域
逻辑黏合
-
也叫黏合逻辑 glue logic
- 定义一:一些与、或、非、等逻辑门电路简单拼凑的组合逻辑
- 定义二:通过小型或中型集成电路把不同数字芯片的协议和总线连在一起
-
CPLD
实时控制
- eg:视频图像处理
信号采集处理
- 可编程 根据不同需求 定制化专属的特殊处理功能
协议实现
- 接口多,可以实现各种不同的协议
- 有些算法或者标准更新快,fpga的可编程又发挥优势
IC原型验证
- 检验设计是否正确
基本语法
https://www.yunliyunwai.cn/blog/detail/33ee840258e99260630d68396151d29d
代码书写规范
对于低电平有效的消耗,通常加后缀“_n”表示
- 后边的rst_n 复位信号 低电平有效
代码风格
代码风格概述
- 设计习惯和代码风格会影响器件的时序性能,逻辑资源的利用率以及系统的可靠性
寄存器电路的设计方式
-
简单的寄存器
-
带异步复位信号的寄存器
-
带异步置位信号的寄存器
-
既带异步复位又带异步置信号的寄存器
-
优先级
-
复位优先
-
置位优先
-
-
同步以及时钟的设计原则
-
同步电路 异步电路
-
时钟
-
组合逻辑 时序逻辑
- 组合逻辑(没有时钟):输入变 输出立马变
- 时序电路(有时钟):时钟信号控制所有输入、输出信号的进出
-
门控时钟 使能时钟
-
双向引脚
http://blog.sina.com.cn/s/blog_66c807290101d1nd.html(王海澎学长发的那个网站巨好)
提升性能
-
减少关键路径的逻辑等级
https://blog.youkuaiyun.com/qq_15026001/article/details/102547113
- 综合工具就只是工具,虽然会对你的代码进行一些优化,但是最主要的还是依据设计者的代码一层一层综合为基础电路。以书上的例子,为了输出同一个变量,逻辑表达式嵌套的层数越多,关键路径的输入到输出经过的门级就越多,导致的延迟也就越多。在综合前可以先考虑把逻辑表达式提前进行一步化简,然后再去写逻辑代码再去进行综合。
-
逻辑复制和资源共享
-
逻辑复制
-
如果某个信号扇出比较大,插入buffer可以解决,但是会增加延时。通过逻辑复制,即复制产生这个信号的逻辑来驱动后续电路,既使平均扇出降低又不增加延时,但面积会增大
- 扇出:是指该模块直接调用的下级模块的个数。扇出大表示模块的复杂度高,需要控制和协调过多的下级模块;
-
简单说就是牺牲面积 改善时序
-
-
资源共享
- 资源共享是逻辑复制的逆过程,可以节省面积,但以牺牲速度为代价
- 不追求速度的前提,相同功能可以用一个部件实现,以节省一些硬件资源
-
-
消除组合逻辑的毛刺
基本可编程逻辑单元由查找表(LUT)和寄存器(Register)组成的
每个CLB模块不仅可以用于实现组合逻辑、时序逻辑,还可以配置为分布式RAM和分布式ROM。
时序收敛
什么是时序,时间顺序,有先有后,不能错乱。时序收敛就指的是某一系统电路能按既定的顺序来执行特定功能
通俗地讲,就是 满足设计时序要求,即电路能在要求频率下正常工作
毛刺
由于信号在FPGA的内部走线和通过逻辑单元时造成的延迟,在多路信号变化的瞬间,组合逻辑的输出常常产生一些小的尖峰,即毛刺信号
- 延时的大小不仅和连线的长短和逻辑单元的数目有关,而且也和器件的制造工艺、工作环境等有关
毛刺的出现会影响电路工作的稳定性,可靠性,严重时会导致整个数字系统的误动作和逻辑紊乱
解决方法
- 在输出信号端并联一个电容,将脉冲很小的毛刺滤除
- 引入时序逻辑,加一个寄存器
为啥组合电路容易产生毛刺
- 个人理解:组合逻辑没有时钟控制
多个信号同时变化时,由于布局布线的延迟产生竞争冒险,从而导致输出不稳定,产生毛刺
为啥时序就不会呢?
因为加入了时钟 可以控制输入输出 避免了竞争和冒险
所以不容易产生毛刺