EDA基础知识:什么是EDA/HDL/仿真/综合/与或门阵列/查找表……
读前须知
- 本合集参考资料:EDA技术实用教程——VHDL版
- 本集合仅适用于EDA技术/VHDL课程考试前的临时抱佛脚,具体内容可能有所疏漏,请根据你的实际课程情况选择合适的复习资源,希望深度学习VHDL的人不应该阅读此文
EDA电子设计自动化技术
什么是EDA技术
- EDA技术,全称electronic design automation电子设计自动化,是现代电子技术的核心
- 其本质是在EDA软件平台上,通过用硬件描述语言HDL来描述系统逻辑,从而生成设计文件,再自动地对这一设计文件进行逻辑化简、分割、综合,布局布线,以及逻辑优化和仿真测试,最终产出实现所描述的系统逻辑的电子线路系统
EDA技术的目标
-
完成专用集成电路ASIC或印刷电路板PCB的设计
-
专用集成电路ASIC分类
作为EDA设计最终目标的ASIC,有三种实现途径
- 使用可编程逻辑器件:FPGA和CPLD,对其编程得到所需硬件,通常称可编程ASIC
- 定制ASIC:通过EDA工具创建指定的金属互联路径文件,这种方法与可编程ASIC相比不具备面向用户的灵活可编程性
- 混合ASIC:既有面对用户的FPGA可编程功能,也有可以调用和配置的硬件标准单元模块
HDL硬件描述语言
什么是HDL
- HDL,全称硬件描述语言,用于在更高层次上描述系统和元件的行为,本笔记所用的VHDL(全称超高速集成电路硬件描述语言)是HDL的一种
- 在描述完成之后,利用软件工具(综合器)把HDL源码转化为基本逻辑元件连接图,即网表文件:比如,一句VHDL语句C<=A OR B; 就可以转化为电路图中的一个或门,其输入是A和B,输出是C
- 通过HDL,我们就可以像通过编程语言制作程序那样,通过描述系统的功能,设计出具有符合描述功能的电路,免去了电路设计的大量繁琐工作
HDL综合
-
综合的定义
将用行为和功能层次表达的电子系统转换为低层次的便于具体实现的模块组合装配的过程就是综合
-
综合器的作用
而综合器就是能够自动将一种设计表述形式向另一种设计表述形式转换的计算机程序,或协助进行手 工转换的程序。可以将高层次的表述转化为低层次的表述,可以从行为域转化为结构域。
-
简而言之,综合就是把代码转换成网表文件
-
综合过程
综合是EDA的关键一步。综合的含义是把抽象的实体结合成统一的实体,EDA的综合就是将高层次的描述转换到低层次的描述:
- 从自然语言(两个输入有一个为1就输入1)到VHDL语言算法表述(C<=A OR B)
- 从VHDL算法转换为寄存器传输级RTL的表述(行为综合)
- 从RTL表述转换为逻辑门与触发器的描述(用一个与门完成A OR B,输出到C)
- 从逻辑门表述转换为版图级表述(版图综合)或转换到FPGA配置网表文件(结构综合)
类似C语言通过编译器转换成CPU指令,VHDL语言则是通过综合器这个软件工具变成为ASIC设计提供的网表文件,有了网表文件就可以进行电路的生产了
仿真
-
仿真的定义
对EDA设计进行模拟测试,以验证设计、排除错误,这就是仿真
-
仿真器的作用
仿真器的作用囊括行为模型的表达、电子系统的建模、逻辑电路的验证和门级系统的测试
-
时序仿真
接近真实器件运行特性的仿真,仿真文件中已包含了器件硬件特性参数, 因而仿真精度高
-
功能仿真
直接对HDL、原理图描述或其他描述形式的逻辑功能进行测试模拟,以了 解其实现的功能是否满足原设计的要求。其好处是设计耗时短,对硬件库、综合器等没有任何要求
PLD可编程逻辑器件
PLD的分类
-
根据原理分类
- 上文提到的对硬件的编程,便是依托于可编程逻辑器件实现的,其根据实现原理的不同可分为两大类:与或门阵列(乘积项原理)和查找表阵列
- 另外根据实现编程的方法不同也可以进一步分类:熔丝、反熔丝、EPROM、EEPROM等
-
根据集成度为PLD分类
- 简单PLD:使用与或门结构的PROM、以及PLA、PAL、GAL这些改进结构,逻辑门数在500以下
- 复杂PLD:CPLD;FPGA也属于复杂PLD,不过其不依托与或门结构,而是使用LUT查找表原理
与或门阵列
-
数字电路系统由基本门(与门、或门、非门等)构成,而任何的组合逻辑函数都可以用与门-或门的二级电路实现,同理,任何时序逻辑电路都可以由组合电路加存储元件构成,这就为可编程器件提供了理论基础
-
有了用与或门阵列实现一切逻辑电路的基础后,接下来的关键便是找到配置这个阵列的方法,另外与或门阵列具体的结构如何实施也是需要考虑的问题
-
一次性可编程器件OTP
通过熔丝进行编程,根据设计的熔丝图烧断对应的熔丝形成开路进行编程;反熔丝是对熔丝的改进,通过在编程处击穿漏层形成通路进行编程,两种方法都不可逆,形成了一次性可编程器件OTP
- PROM:或阵列可编程,与阵列固定,其缺点是在输入变量多时利用效率低,
- PLA:与阵列或阵列都可以编程,尽可能使用公共的与项来提高利用率;虽然提升了利用率,但是由于涉及的软件算法复杂,运行速度下降
- PAL:与阵列可编程,或阵列固定,克服了PLA的一些缺点
-
电可擦写编程器件EEPROM
为了克服OTP的劣势,创造可复用元件,形成了紫外线擦除电可编程EPROM与电可擦写编程器件EEPROM工艺,使用紫外线或电将之前的编程内容清除后可再次使用
- GAL:通用阵列逻辑,在PAL的基础上,使用了EEPROM工艺
LUT查找表
-
依托与或门阵列的PLD功能比较简单,在之后又创造了另一种可编程结构:SRAM查找表
-
SRAM查找表
查找表(LUT, look up table)即采用RAM数据查找的方式来实现逻辑函数,并使用多个查找表构成一个查找表阵列,称为可编程门阵列programmable gate array
- LUT具体实现方法是:对于一个N输入LUT,用静态随机储存器SRAM保存N个输入构成的真值表,实现N输入的任何逻辑功能(比如N个变量与、异或等等)
- 显然储存N输入的真值表需要2^N个SRAM,因此N不可能很大,所以需要使用数个查找表构成查找表阵列分开实现
查找表本质就是RAM,它是FPGA的实现原理结构
-
Flash型工艺
SRAM将信息存放在RAM中,掉电后信息丢失需要重新配置
现在的CPLD器件采用Flash工艺作为SRAM的迭代,其将信息保存在闪存中,掉电后不需要重新配置
FPGA的组成
-
逻辑阵列块LAB
FPGA的可编程资源,每个LAB由多个逻辑宏单元LE构成
LE是最基本的可编程单元,包括一个4输入的LUT,可以完成所以4输入1输出的组合逻辑功能
而每一个LE的输出都可以连接到行、列、直连通路、寄存器链等布线资源,LAB之间存在行互联、列互联、直连通路互联、局部互联等
-
嵌入式储存器块EAB
用于储存LAB的配置数据,实现RAM、ROM、移位寄存器、FIFO等,并且可以与可编程资源互联
-
嵌入式硬件乘法器
提高处理DSP任务的能力
-
I/O控制块
与板上的其他芯片沟通,允许每个I/O引脚被单独配置为输入/输出/双向的工作方式
Quartus软件使用
创建工程
-
打开Quartus II软件,在工具栏File菜单中选择New Project Wizard进入创建新项目向导
- 选择工作目录,储存工程文件
- 为工程命名,工程的名字将自动作为该工程中顶层实体的名称
- 添加已有的源代码文件,如果没有则跳过此步
- 选择使用的FPGA芯片型号
- 选择使用的综合、仿真、时序分析工具和使用的编程语言
添加文件
-
创建新项目完成后,要向项目中添加文件
- 选择创建新文件,在弹出菜单中选择VHDL File,开始在此文件中写VHDL代码
- 写完代码保存时要让文件名和module后定义的实体名一致,比如在创建工程时将工程命名为decoder3_8,在保存代码文件时就要把文件命名为decoder3_8.vhd
将源文件设置为顶层文件
- 顶层文件相当于C语言中的main函数,一个工程可以包含多个源代码文件,但是只有一个顶层文件,它可以引用工程目录中的其他文件
- 在Project Navigator窗口下方切换到Files选项
- 右键要设置的文件,选择Set as top-level Entity
- 切换回Hierachy选项,可看到实体架构,检查当前文件是否为顶层文件
编译工程
- 选择工具栏Processing菜单的Start Compilation选项进行编译
- 信息窗口会提示编译结构,如果出现错误提示则修正,直到编译通过
分配引脚
-
将代码中定义的输入输出端口分配到具体的FPGA引脚上
- 在工具栏Assignment菜单中选择Pin Planner,打开引脚分配窗口
- 再次编译代码
下载配置
-
在之前的工作完成后,就可以把编译好的程序下载到FPGA中了,一般借助USB-Blaster
- 点击Programmer按钮,
- 单击Hardware Setup,配置下载方式为USB-Blaster
- 点击Start,开始下载.sof文件
仿真
-
常使用波形仿真,生成电路的波形图
- 新建文件,选择VWF文件类型
- 在文件中将程序定义的各个端口导入
- 对输入端口定义其信号
- 进行仿真
-
也有使用testbeach文件进行更复杂的可编程有条件测试
本文来自博客园,作者:无术师,转载请注明原文链接:https://www.cnblogs.com/untit1ed/p/18613644
本文使用知识共享4.0协议许可 CC BY-NC-SA 4.0
请注意: 特别说明版权归属的文章以及不归属于本人的转载内容(如引用的文章与图片)除外