FPGA学习心得
语法 、 工具的使用流程 、 实际项目原理
Verilog语法
- input、output和inout默认类型是wire型,连续赋值assign语句针对线网变量赋值。线网变量一般对应到FPGA中的一段连线,连线的值会随着他的驱动源的变化而变化,故称连续赋值语句。对于实际的数字电路,线网类型实际上对应着硬件连线,起连接作用。wire是线网最常用的一种数据类型,常用来表示以assign关键字指定的组合逻辑信号。
- Verilog HDL中绝大多数运算操作符都是可综合的:+、-、!(逻辑非)、~、&、~&、|、~|、^、~^、*、/、%、<<、>>、<、<=、>、>=、==、!(逻辑不等于)、&&、||。
- 行为级描述方式:always@(A,B,C)—@是事件等待语句,always不断循环等待A、B和C是从高变低,还是从低变高,都会执行always下的begin……end中语句,若ABC都没有变化,always也将不往下执行,一直循环等待。
可写always@(*)组合逻辑电路的描述方式,()表示全部的敏感变量,只要有任何输入信号变化,其输出立即发送变化。 - RTL,寄存器传输级。quartus中 RTL综合工具RTLViewer Technology MapViewer。综合结束后,设计者希望看到综合后的原理图,以分析综合结果是否与设想中的设计一致。
(1)RTL Viewer:是编译后的结果,反应的是模块见得连接,显示的图形都是调用标准单元的结果,跟工艺库,FPGA类型都没有关系。【tools–Netlist Viewer–RTL Viewer】
(2)Technology Map Viewer:已经映射到FPGA器件的,可直接看到内部们电路的连接。
ModelSim仿真 【Processing–start–Start testbench Template writer】自动创建一个仿真文件模板,在工程路径下/simulation/modelsim下,使用记事本打开修改编辑即可。也可使用quartus打开。
开始仿真:【assignment–settings–EDAToolSetting–simulation】
Compile Test Bench —-TestBenches—New—
综合编译完成并验证设计的正确性后。分配引脚【assignments—PinPlanner】,若NodeName一列内没有出现顶层文件的信号,建议对工程重新编译。 - 时序电路基础: 锁存器、触发器、寄存器、计数器
- 数字时钟设计:实现方法(1)数字时钟的基本功能是时分秒,模60计数器过于复杂,可拆分为模6计数器 与 模10计数器两个,模6计十位,模10计个位。两个计数器时钟信号不同,模10计数器时钟端,信号上升沿间隔1秒一次,模6计数器时钟端信号上升沿间隔10秒来一次。实现方法(2):当模10计数器从9变到0的时候输出给模6计数器,让模6计数器工作一次来完成整个电路功能。
- 晶振只要加电就可以输出时钟。无源晶振(crystal)有2个引脚的无极性原件,需借助时钟电路才能产生震荡信号,自身无法震荡。有源晶振叫振荡器(oscillator),有4只引脚。无源晶体输出正弦波,有源晶体输出正弦波或方波。FPGA所用的晶振必须是有源的,因FPGA内部没有无源晶振启动电路。一般要接入全局时钟引脚。
- 8.