[D-I] 认识FPGA Verilog HDL
来源:互联网 发布:约瑟夫环 c语言链表 编辑:程序博客网 时间:2024/06/05 21:09
第一天学习FPGA。
1 FPGA
FPGA(Field-Programmable Gate Array,现场可编程门阵列)是20世纪80年代中期发展起来的一种可编程器件。可编程逻辑器件是一种以数字形态的集成电路、芯片(数字电路),内部的数字电路可以在出厂后才规划决定,有些可编程逻辑器件也可以在规划决定其数字电路后再对其内部电路进行变更、改变。【而一般数字芯片在出厂前就已经决定其内部电路,无法在出厂后再次改变,事实上一般的模拟芯片、混合信号芯片也都一样,都是在出厂后就无法再对其内部电路进行调修。】
FPGA是以门阵列(Gate Array)技术为基础所发展成的一种PLD。FPGA运用一种逻辑门式的网格(Grid),这种网格与普通的“门阵列”相类似,网格可以在FPGA芯片出厂后才进行组态配置的程序性规划。若通过手动输入更改FPGA内组态配置就太繁琐甚至不能完成,故而FPGA的输入来自电脑程序。这种程序(程序)称为“逻辑编译器,logic compiler”,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始程序码(也称:源代码)也得用特定的编程语言(也称:程序语言、编程语言)来撰写,此称之为硬件描述语言(hardware description language, HDL)。
通过编程决定FPGA芯片的功能来支持我们设计的外围电路。当设计电路有变时,需要FPGA芯片的功能有更改时则可对FPGA芯片重新编程决定FPGA芯片的功能来支持新的电路。不过,电路更改需要的FPGA芯片功能需要在FPGA芯片最强大的功能范围之内。如此,生产FPGA的商家的利润空间似乎也变大了。
2 FPGA开发软件和硬件描述语言
当通过原理图或硬件语言描述了一个逻辑电路以后,FPGA开发软件会自动计算逻辑电路的所有可能的结果,并把结果写入SRAM,此后SRAM中内容始终保持不变,就确定了对应的逻辑功能,这一过程就是所谓的编程。SRAM具有数据易失性,即一旦断电原有的值就会丢失,所以FPGA有一个外部的PROM保存编程数据。上电后,FPGA首先从PROM中读入编程数据进行初始化,然后才开始正常工作。
FPGA的开发软件看FPGA的厂家,ALTERA用的是QUARTUS II,XILINX用的是ISE。硬件描述语言包括Verilog HDL、VHDL等。
被随机到采用ALTERA的QUARTUSII平台,采用Verilog HDL语言来学习FPGA。
3 QUARTUS II安装和Verilog HDL基础
(1) QUARTUS II
进入官网www.altera.com (注册账号)>> 设计工具及服务 >> 设计软件 >> Quartus II订购版本 >> 下载30天免费试用 >> 选择操作系统与下载方式(如直接下载,独立文件)>> 下载所选择的文件。
下载过程漫长。下载好后运行QuartusSetup-xxxx根据提示进行安装。并寻找破解软件按照其破解步骤将其破解。然后就可以用Quartus II建立工程用Verilog HDL写一个程序来用一下Quartus II,一试牛刀。
(2) Verilog HDL基础
硬件描述语言Verilog HDL类似高级程序设计语言(如C语言),它是一种以文本形式来描述数字系统硬件的结构和行为的语言。用它可以表示逻辑电路图、逻辑表达式,还可以表示更复杂的数字逻辑系统所完成的逻辑功能(行为)。计算机对HDL的处理包括两个方面:逻辑仿真和逻辑综合。
逻辑仿真是指用计算机仿真软件对数字逻辑电路的结构和行为进行预测,仿真器对HDL描述进行解释,以文本形式或时序波形图形给出电路的输出。逻辑综合是指从HDL描述的数字逻辑电路模型中导出电路基本元件列表以及元件之间的连接关系(门级网表)的过程。经过这个过程,产生门级元件及其连接关系的数据库,根据这个数据库可以制作出集成电路或印刷电路板(PCB)。
[1] Verilog的基本语法规则
Verilog规定了一套完整的语法结构。它包括对间隔符、注释符、标识符、关键词、逻辑值集合、常量及其表示的规定。[ 《电子技术技术基础》数字部分(第五版)P.57 – P.59 ]
[2] 变量的数据类型
在Verilog中,变量有两大类数据类型。线网类型(net type)是硬件电路中元件之间实际连线的抽象,这些类型包括wire,wand,wor,tri,triand,trior,trireg等。线网型变量定义的格式:net type [n-1:0] 变量1, 变量2, …, 变量n;。寄存器类型表示一个抽象的数据存储单元,它具有状态保持作用。寄存器型变量只能在initial或always内部被赋值,未被赋值前的默认值为x。在Verilog中,有4种寄存器类型的变量:
具体描述在《电子技术技术基础》数字部分(第五版)P.60 – P.61
[3] Verilog 程序的基本结构
在Verilog中使用大约100个预定义的关键词定义该语言的结构,Verilog使用一个或多个模块对数字电路建模。一个模块可以包括整个设计模型或者设计模型的一部分,模块的定义总是以关键词module开始,以关键词endmodule来结尾。模块定义的一般语法如下:
具体描述在《电子技术技术基础》数字部分(第五版)P.61 – P.63
4 简单门电路的Verilog模型
[1] 预描述的门电路
out = a & sel’ + b & sel。
[2] Verilog模型
新建工程
开始 >> Altera >> Quartus II >> Quartus II xxxx(64 bit) >> File >> New Project Wizard >> Next >> 将新建的工程保存到想要的目录下,填写工程名为gate_circle >> Next(不填) >> Next(默认) >> 在EDA Tool Settings页面将Simulation 行后的Tool Name项选为ModelSim-Altera,Formats项选为Verilog HDL >> Next >> Finish。
添加Verilog HDL文件
File >> New>> Verilog HDL File,敲下以下Verilog 代码以文本的形式来描述[1]中的电路。
//Gate-level description of simple circuitmodulemux(a, b, sel, out);inputa, b, sel;outputout;wireselnot, a1, b1;not U1(selnot, sel);and U2(al, a, selnot);and U3(b1, b, sel);or U4(out, a1, b1);endmodule
在module…endmodule中定义了mux来描述[1]电路。mux内的前三行定义了端口的类型,后4行对所描述的电路的行为即逻辑功能。电路逻辑功能的描述在在《电子技术技术基础》数字部分(第五版)P.62中有描述。Ctrl+s保存,勾选“Add file to current project”选项。
[3] 逻辑功能的仿真
编译
在[2]后点击start compilation进行编译。会弹出“Top-level design entity “gate_circle”(工程名) is undefined。解决方法为Assignments>> Settings >> 选择Top-level entity为[2]中的模块名mux >> ok,再编译。等待编译完成。
仿真
File >> New >> University Program VWF >> 双击Simulation Waveform Editor窗口的左子窗口 >> 在Insert Nodeor Bus窗口中点击Node Finder… >> 在Node Finder窗口中点击List 后再点“>>” >> OK。
在Simulation Waveform Editor中选中各输入信号,然后点击overwrite clock设置输入信号的周期。然后点击Run Functional Simulation,在弹出的的窗口中点击yes。生成以下时序图:
可对照[1]中的门电路看Verilog的建模是否正确。若有错则纠正Verilog程序。
FPGA Note Over.
- [D-I] 认识FPGA Verilog HDL
- FPGA Verilog HDL 系列实例--------D 触发器
- 认识Verilog Hdl语言
- 深入浅出FPGA-3-verilog HDL
- FPGA Verilog HDL 系列实例
- 深入浅出FPGA-3-verilog HDL
- Verilog HDL Operators Part-I
- FPGA学习笔记3-verilog HDL
- FPGA Verilog HDL 系列实例--------寄存器
- FPGA Verilog HDL 系列实例--------双向移位寄存器
- FPGA Verilog HDL 系列实例--------数据选择器
- FPGA Verilog HDL 系列实例--------序列信号发生器
- FPGA Verilog HDL格雷码的产生
- Quartus/FPGA/Verilog HDL【学习笔记001】
- Image processing on FPGA using Verilog HDL
- FPGA学习之Verilog HDL 一
- Verilog HDL In One Day Part-I
- Verilog HDL Syntax And Semantics Part-I
- NineoldAndroids动画库源码分析
- Windows下搭建PHP开发环境
- 将h.264视频流封装成flv格式文件(二.开始动手)
- c#调用API(GetModuleFileName)获取程序路径返回乱码有关问题
- 如何提高sql语句的执行效率
- [D-I] 认识FPGA Verilog HDL
- 令牌环网学习笔记1
- hdu3853
- wxPython中list的简单使用
- hdu_moving tables 区间重叠
- Eclipse背景颜色修改
- STL 之 vector源代码实现(云算法<< [] = 重载, new delete,throw catch)
- Android中设置半个屏幕大小且居中的按钮布局 (layout_weight属性)
- 基于JDBC封装的极简BaseDAO