FPGA学习手记 FPGA入门及建立FPGA开发环境:本人使用的是EP2C5T144核心板+专业版USB Blaster下载线(我不是卖板子的,品牌隐去),板上只有一片FPGA和配置芯片EPCS4。受了阿杜的蛊惑,买的仓促,后来才注意没有外部RAM(没法做大量数据的处理了),既然已经买了,暂且用着。另外自己焊了一块MCU入门外设板,包括LED、按键、AD、蜂鸣器和简易RS232串口。如下:
<ignore_js_op style="font: 14px/21px Tahoma, Helvetica, SimSun, sans-serif; margin: 0px auto; color: rgb(68, 68, 68); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; -ms-word-wrap: break-word; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; background-color: rgb(255, 255, 255); -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">
丑了点,不过很好用。 关键是可以省钱 ^_^,无论核心板还是外设板都能够重复利用,总觉得买个功能简陋的外设板不划算,如果没有条件自己搭设的童鞋可以买一块带外设的开发板,当然要买就买个齐全一些的,只有些小灯数码管EEPROM什么的就算了吧。
<ignore_js_op style="font: 14px/21px Tahoma, Helvetica, SimSun, sans-serif; margin: 0px auto; color: rgb(68, 68, 68); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; -ms-word-wrap: break-word; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; background-color: rgb(255, 255, 255); -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">
HDL语言采用VerilogHDL,听老师说如果不做系统级设计Verilog和VHDL是差不多的,而VHDL或稍逊色一些。开发环境Quartus II 9.1,Altera路线,要走Xilinx路线的可绕道。
如果作为入门,可以选一本书或者看视频(比如特权同学的)。看视频当然更易于入门,不过稍显繁琐了,书本一般比较简要,急性子的人可以通过视频快速上手以后,转而通过专业书学习。不过不管再怎么学,不动手做些东西是不行的,做个小项目或者DIY可以使你摆脱四脚书橱的命运。好了,不说废话了。
EP2C5T144的最小系统包括电源稳压、配置芯片、晶振、JTAG/ASP接口和I/O接口等。
运行Quartus II,通过New Project Wizard<ignore_js_op style="font: 14px/21px Tahoma, Helvetica, SimSun, sans-serif; margin: 0px auto; color: rgb(68, 68, 68); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; -ms-word-wrap: break-word; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; background-color: rgb(255, 255, 255); -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">建立工程,设置工程路径、名称以及顶层实例的名称。这里都是HelloFPGA。
<ignore_js_op style="font: 14px/21px Tahoma, Helvetica, SimSun, sans-serif; margin: 0px auto; color: rgb(68, 68, 68); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; -ms-word-wrap: break-word; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; background-color: rgb(255, 255, 255); -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">
之后添加文件,如果有已完成的文件,可以添加尽力啊,这里将在稍后新建文件,直接跳过。
<ignore_js_op style="font: 14px/21px Tahoma, Helvetica, SimSun, sans-serif; margin: 0px auto; color: rgb(68, 68, 68); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; -ms-word-wrap: break-word; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; background-color: rgb(255, 255, 255); -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">
选择芯片,这里是Cyclone II系列的EP2C5T144C8。Cyclone是Altera的低成本产品系列,更高性能的可以选择Stratix系列。
<ignore_js_op style="font: 14px/21px Tahoma, Helvetica, SimSun, sans-serif; margin: 0px auto; color: rgb(68, 68, 68); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; -ms-word-wrap: break-word; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; background-color: rgb(255, 255, 255); -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">
设置其他工具接口,根据已安装的第三方工具设置,如仿真工具中常用的ModelSim,此处不进行仿真,Next跳过,建立工程。
<ignore_js_op style="font: 14px/21px Tahoma, Helvetica, SimSun, sans-serif; margin: 0px auto; color: rgb(68, 68, 68); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; -ms-word-wrap: break-word; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; background-color: rgb(255, 255, 255); -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">
工程建好后,通过File -> New新建Verilog文件,保存为HelloFPGA.v
<ignore_js_op style="font: 14px/21px Tahoma, Helvetica, SimSun, sans-serif; margin: 0px auto; color: rgb(68, 68, 68); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; -ms-word-wrap: break-word; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; background-color: rgb(255, 255, 255); -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">
这里写一个按键控制小灯的程序,实现按下按键点亮板载LED。用过MCU的童鞋都知道按键是需要消抖的,FPGA的按键消抖常采用边缘检测+延时的方法,这里只是演示……代码如下:
module HelloFPGA(Key, LED);
input Key;
output LED;
wire LED=~Key;
endmodule
其中module HelloFPGA(Key, LED); 声明了名为HelloFPGA的模块和端口(注意后面的分号),建议模块名称与文件名相同。Key和LED分别定义为输入和输出信号,在不声明的情况下,信号默认为wire型。
wire LED=~Key; 一句相当于:
wire LED;
assign LED=~Key;
由于核心板上LED高电平点亮,因而对按键输入信号取反。然后按<ignore_js_op style="font: 14px/21px Tahoma, Helvetica, SimSun, sans-serif; margin: 0px auto; color: rgb(68, 68, 68); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; -ms-word-wrap: break-word; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; background-color: rgb(255, 255, 255); -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">进行分析、综合。完成后会提示错误和警告数
<ignore_js_op style="font: 14px/21px Tahoma, Helvetica, SimSun, sans-serif; margin: 0px auto; color: rgb(68, 68, 68); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; -ms-word-wrap: break-word; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; background-color: rgb(255, 255, 255); -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">
再点击<ignore_js_op style="font: 14px/21px Tahoma, Helvetica, SimSun, sans-serif; margin: 0px auto; color: rgb(68, 68, 68); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; -ms-word-wrap: break-word; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; background-color: rgb(255, 255, 255); -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">分配引脚,FPGA可以灵活分配引脚,极大地方便了PCB布线和后续设计。这里根据原理图上LED的位置和按键插线位置设置引脚,以及电平标准。
<ignore_js_op style="font: 14px/21px Tahoma, Helvetica, SimSun, sans-serif; margin: 0px auto; color: rgb(68, 68, 68); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; -ms-word-wrap: break-word; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; background-color: rgb(255, 255, 255); -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">
完成配置后,点击<ignore_js_op style="font: 14px/21px Tahoma, Helvetica, SimSun, sans-serif; margin: 0px auto; color: rgb(68, 68, 68); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; -ms-word-wrap: break-word; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; background-color: rgb(255, 255, 255); -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">编译工程,这样就生成了可以下载到FPGA和配置芯片的文件。在编译之前,还需要进行一些设置,在Settings中选择Device,再选择Device and Pin Options。
<ignore_js_op style="font: 14px/21px Tahoma, Helvetica, SimSun, sans-serif; margin: 0px auto; color: rgb(68, 68, 68); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; -ms-word-wrap: break-word; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; background-color: rgb(255, 255, 255); -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">
在中将不用的管脚设置为三态输入:
<ignore_js_op style="font: 14px/21px Tahoma, Helvetica, SimSun, sans-serif; margin: 0px auto; color: rgb(68, 68, 68); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; -ms-word-wrap: break-word; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; background-color: rgb(255, 255, 255); -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">
在配置选项卡里选择配置芯片,超出配置芯片容量的代码会得到提示。
<ignore_js_op style="font: 14px/21px Tahoma, Helvetica, SimSun, sans-serif; margin: 0px auto; color: rgb(68, 68, 68); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; -ms-word-wrap: break-word; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; background-color: rgb(255, 255, 255); -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">
点击进行下载,请确保正确安装了下载线驱动。点击Hardware Setup配置下载线,选择识别到的USB-Blaster,如果没有识别,请检查硬件连接和驱动。
<ignore_js_op style="font: 14px/21px Tahoma, Helvetica, SimSun, sans-serif; margin: 0px auto; color: rgb(68, 68, 68); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; -ms-word-wrap: break-word; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; background-color: rgb(255, 255, 255); -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">
JTAG模式可下载到FPGA中,掉电后会丢失,AS方式可下载到EPCS4配置芯片里(非易失),再次上电时配置芯片会对FPGA进行配置。通过Add File打开HelloFPGA.sof文件,选择Program/Configure,按Start下载。
<ignore_js_op style="font: 14px/21px Tahoma, Helvetica, SimSun, sans-serif; margin: 0px auto; color: rgb(68, 68, 68); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; -ms-word-wrap: break-word; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; background-color: rgb(255, 255, 255); -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">
结果如下,未按按键时小灯熄灭。
<ignore_js_op style="font: 14px/21px Tahoma, Helvetica, SimSun, sans-serif; margin: 0px auto; color: rgb(68, 68, 68); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; -ms-word-wrap: break-word; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; background-color: rgb(255, 255, 255); -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">
点亮!
<ignore_js_op style="font: 14px/21px Tahoma, Helvetica, SimSun, sans-serif; margin: 0px auto; color: rgb(68, 68, 68); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; -ms-word-wrap: break-word; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; background-color: rgb(255, 255, 255); -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">
如果采用AS方式,载入HelloFPGA.pof文件,设置如下:
<ignore_js_op style="font: 14px/21px Tahoma, Helvetica, SimSun, sans-serif; margin: 0px auto; color: rgb(68, 68, 68); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; -ms-word-wrap: break-word; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; background-color: rgb(255, 255, 255); -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">
断电后拔掉下载线,重新上电,没有产生想要的效果,可以更改这里的设置,就是前面配置EPCS芯片的地方。貌似是个BUG呀
<ignore_js_op style="font: 14px/21px Tahoma, Helvetica, SimSun, sans-serif; margin: 0px auto; color: rgb(68, 68, 68); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; -ms-word-wrap: break-word; orphans: 2; widows: 2; font-size-adjust: none; font-stretch: normal; background-color: rgb(255, 255, 255); -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">