差别
这里会显示出您选择的修订版和当前版本之间的差别。
| 两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
|
start [2016/05/25 11:32] gongyu [经典案例] |
start [2016/05/25 13:52] (当前版本) admin |
||
|---|---|---|---|
| 行 1: | 行 1: | ||
| - | ====数字逻辑、可编程逻辑及FPGA==== | + | {{ :stepfpga_flash.jpg |}} |
| - | ===数字逻辑基础=== | + | |
| - | ===可编程逻辑=== | + | |
| - | ===FPGA的构成及应用=== | + | |
| - | ===[[FPGA设计流程]]=== | + | |
| - | ====小脚丫FPGA学习平台介绍==== | + | |
| - | 小脚丫FPGA学习平台是摩尔吧孵化器专门针对[[FPGA]]初学者打造的一款性价比最高、学习门槛最低的学习模块,它以[[Lattice Semiconductor]]公司[[XO2-4000]]器件为核心,具有开关、按键输入以及单色LED、三色[[LED]]以及2个发光数码馆进行显示。其封装方式兼容标准的[[DIP40]]封装,能够直接插在面包板上或以模块的方式放置在其它电路板上以即插即用的方式,大大简化系统的设计。 | + | |
| - | {{ :step_fpga.jpg?600|}} | + | |
| - | {{ :xo2_selection.png |}} | + | |
| - | ===功能介绍=== | + | |
| - | - 食指大小——目前最小的FPGA开发板,尺寸52mm*18mm,即插即用; | + | |
| - | - USB供电,自带板载编程器,无需额外配置FPGA下载线 | + | |
| - | - LCMXO2-1200,性价比最高最适合的FPGA芯片 | + | |
| - | - 既可作学习数字逻辑的FPGA开饭,也可作核心功能模块使用,适合各种DIY和原型设计 | + | |
| - | - 丰富的实例、代码支持 | + | |
| - | ===硬件连接=== | + | |
| - | {{ :stepfpga_v1_connection.png |}} | + | |
| - | - FPGA芯片:LCMXO2-1200HC-4MG132 | + | |
| - | - USB 5V供电 | + | |
| - | - 25MHz时钟 | + | |
| - | - 3个LED,一路电源指示,两路用户LED | + | |
| - | - 2个按键 | + | |
| - | - 2个RGB LED | + | |
| - | - 一路I2C接口 | + | |
| - | - SPI接口(可设主从模式) | + | |
| - | - JTAG接口 | + | |
| - | - 29个GPIO接口 | + | |
| - | {{ :stepfpga_connection_table.png |}} | + | |
| - | {{ :stepfpga_v1_connection_led.png |}} | + | |
| - | + | ||
| - | ===使用方法=== | + | |
| - | 上电测试。Step FPGA开发板通过USB供电,采用了常见Micro USB接口。一般的安卓手机USB线均可使用。开发板出厂内置测试程序,上电后: | + | |
| - | - Step FPGA开发板连接USB电源,电源指示灯点亮。 | + | |
| - | - 两个用户LED灯交替闪烁,间隔0.5秒。 | + | |
| - | - RGB LED闪烁分两种模式,上电默认流水灯模式。 | + | |
| - | - 流水灯:RGB LED交替闪烁红绿蓝。 | + | |
| - | - 交通灯:两个RGB LED异步闪烁红绿蓝,如同交通信号。 | + | |
| - | - 按键K2切换RGB LED显示模式。 | + | |
| - | - 按键K1用于复位功能。 | + | |
| - | {{ :stepfpga_v1_powerup.jpg |}} | + | |
| - | ===扩展应用=== | + | |
| - | ====Lattice Diamond综合开发环境==== | + | |
| - | ===软件安装及配置=== | + | |
| - | Step FPGA开发板支持Lattice的Diamond开发环境,首先我们需要到官网下载Diamond进行安装,非常简单。下载Diamond安装包: | + | |
| - | http://www.latticesemi.com/zh-CN/Products/DesignSoftwareAndIP/FPGAandLDS/LatticeDiamond.aspx | + | |
| - | 开始安装: | + | |
| - | - 双击打开下载好的软件,3.5.0.102_Diamond_x64.exe。 | + | |
| - | - 进入安装首页。{{ :diamond1.png |}} | + | |
| - | - 点击Next,进入协议界面,同意,Next{{ :diamond2.png |}} | + | |
| - | - 修改安装路径,默认是C盘,本例程软件安装到D盘。{{ :diamond3.png |}} | + | |
| - | - 修改完路径后,点击Next,进入工具选项界面。{{ :diamond4.png |}} | + | |
| - | - 选择默认设置,即全部安装。注意叉叉是表示选择。点击Next,进入文件夹名设置。当然你可以根据自己喜好,修改文件夹的名字。{{ :diamond5.png |}} | + | |
| - | - 接下来就是认证设置。没有USB key,就只能选择Node-Lock License。{{ :diamond6.png |}} | + | |
| - | - 点击Next,选择是否创建桌面快捷键。{{ :diamond7.png |}} | + | |
| - | - 点击Next,选择是否安装USB驱动,这个必须同意!!!{{ :diamond8.png |}} | + | |
| - | - 完成这一系列设置后,软件列出所有设置内容。{{ :diamond9.png |}} | + | |
| - | - 点击Next,正式进入安装环节。软件会评估一下本机系统,决定是否继续安装。{{ :diamond10.png |}} | + | |
| - | - 一般配置的PC机都可以通过评估。进入安装。{{ :diamond11.png |}} | + | |
| - | - 耐心等待=========>{{ :diamond12.png |}} | + | |
| - | - 点击Finish,完成安装。 | + | |
| - | + | ||
| - | 相比于一般的FPGA开发工具,Lattice的Diamond更加简洁,占用资源更少,速度更快。而且Lattice提供完全免费的版本,只需要在官网注册后申请一个免费的License。 | + | |
| - | ==安装License== | + | |
| - | - 获取License:登陆Lattice官网:http://www.latticesemi.com/,没有账户则先注册账户, 依次Support →Licensing →Lattice Software Licenses →Request a Free License(获取一个免费许可证){{ :diamond13.png |}} 将安装软件的电脑MAC地址(physical address)填写,勾选required field,并Generate License。 注:如何获取MAC地址? 打开cmd.exe,输入命令 ipconfig/all,找到物理地址(physical address),共12位数。 | + | |
| - | - 软件注册 将之前获取的license.dat文件拷贝到安装目录下的license文件夹中,例如将软件安装在D盘下:D:\lscc\diamond\3.5_x64\license\ ,注册完成, 运行Diamond,界面如下 {{ :diamond14.png |}} 界面中,右侧User Guides、Reference Guides、Tutorials、FPGA Design Guide等有大量文档链接,如果有时间建议大家尝试阅读,很有指导性。若运行Diamond时报错 License checkout failed,说明软件注册有问题,请检查: | + | |
| - | - 检查用于注册License的MAC地址是否正确! | + | |
| - | - 检查获取到的License文件被放置在软件安装目录下!D:\lscc\diamond\3.5_x64\license\ | + | |
| - | - 检查环境变量是否正确! | + | |
| - | - 我的电脑 →右键选择属性 →高级系统设置 →高级 →环境变量 →系统变量 ,变量和值分别为 | + | |
| - | - LM_LICENSE_FILE | + | |
| - | - D:\lscc\diamond\3.5_x64\license\license.dat;{{ :diamond15.png |}} | + | |
| - | - USB驱动: 在包装盒中的编程模块需要USB驱动,通常情况下Diamond安装好了之后能够自动识别编程模块。如果不能自动安装驱动程序,需要先下载驱动程序:http://www.ftdichip.com/Drivers/VCP.htm根据不同的系统下载驱动版本。 | + | |
| - | + | ||
| - | 硬件连线 | + | |
| - | Step FPGA的编程模块也是通过Micro USB线和电脑相连,因此准备Step FPGA开发环境需要两根Micro USB连接线。驱动安装好以后就可以开始编译下载程序了。 | + | |
| - | 下面我们可以开始可编程逻辑的开发,我们以控制LED交替闪烁为例,完成自己的第一个程序: | + | |
| - | - 运行Diamond软件,选择File →New →Project →Next {{ :diamond16.png |}} | + | |
| - | - 我们将新工程命名为LED_shining,工程目录G:/LED_shining,然后Next{{ :diamond17.png |}} | + | |
| - | - 添加相关设计文件或约束文件,这里我们新建工程,不需添加,直接Next{{ :diamond18.png |}} | + | |
| - | - 器件选择:按照Step FPGA开发板器件LCMXO2-1200HC-4MG132C配置,Next{{ :diamond19.png |}} | + | |
| - | - 选择综合工具,Synplify Pro(第三方)和Lattice LSE(原厂)都可以,我们就使用Lattice LSE,直接Next{{ :diamond20.png |}} | + | |
| - | - 工程信息,上面选择的所有信息都在这,直接Finish{{ :diamond21.png |}} | + | |
| - | - 工程已经建好,我们下面添加设计文件, 选择File →New →File{{ :diamond22.png |}} | + | |
| - | - 选择Verilog Files,Name填写LED_shining,然后New,这是软件打开的设计文件,LED_shining.v,我们就可以编程了{{ :diamond23.png |}} | + | |
| - | - 程序源码如下,复制到设计文件LED_shining.v中,并保存。 | + | |
| - | - 综合,在软件左侧Process栏,选择Process,双击Synthesis Design,对设计进行综合,综合完成后Synthesis Design显示绿色对勾,如图{{ :diamond24.png |}} | + | |
| - | - 分配管脚,选择Tools →Spreadsheet View,界面如下{{ :diamond25.png |}} | + | |
| - | - 我们将管脚分配,并设置IO_TYPE为LVCMOS33,保存,如下图{{ :diamond26.png |}} | + | |
| - | - 在软件左侧Process栏,选择Process,勾选所有选项,直接双击Export Files,所有布局布线输出依次完成,结束后,所有选项显示绿色对勾。{{ :diamond27.png |}} | + | |
| - | + | ||
| - | 到这里完成了第一个程序流文件的生成,下面可以下载到FPGA中。 | + | |
| - | + | ||
| - | ==工程仿真== | + | |
| - | 上面我们走了整个工程开发的过程,例程较为简单,对于复杂的工程开发需要预仿真和后仿真等,保证最终的程序设计逻辑和时序符合我们的设计要求。 | + | |
| - | 仿真软件很多,这里我们使用软件自带的Active-HDL软件进行仿真 | + | |
| - | 首先我们添加testbench文件,和前面添加设计文件一样,File →New→File →Verilog Files,Name填写,然后New,{{ :diamond28.png |}} | + | |
| - | 测试源码如下,复制到LED_test.v文件并保存: | + | |
| - | 然后在软件左侧Process栏,选择File List,找到LED_test.v,右键选择Include for →Simulation | + | |
| - | 为了方便仿真,我们将LED_shining.v文件中的时钟分频周期缩短,更改并保存 | + | |
| - | parameter CLK_DIV_PERIOD=50;//25000000;//related with clk_div's frequency | + | |
| - | 仿真结束,编译下载时再恢复。 | + | |
| - | 重新编译整个工程,然后选择Tools →SimulationWizard →Next, | + | |
| - | 建立仿真工程,ModelSim和QuestaSim需要自行安装并与Diamond关联,才能直接调用,我们使用Active-HDL | + | |
| - | 这里我们选择Active-HDL(默认),工程名称:LED_test,工程路径在Diamond工程路径下新建LED_test 文件夹:**/LED_shining/LED_test,然后Next, | + | |
| - | RTL,Next | + | |
| - | 勾选Copy Source toSimulation Directory,Next | + | |
| - | Next | + | |
| - | Finish | + | |
| - | 等待=====Active-HDL软件自动运行并显示仿真时序,查看仿真结果。 | + | |
| - | 下载程序 | + | |
| - | 将编译完成的程序加载到Step FPGA开发板 | + | |
| - | 选择Tools →Programmer,选择下载器HW-USBN-2B(FTDI),然后点击OK,进入Programmer界面 | + | |
| - | 将Step FPGA开发板、下载器和电脑连接,如图 | + | |
| - | 在Programmer界面,点击右侧Detect Cable,下面Cable 显示HW-USBN-2B(FTDI),否则点击Cable,自行选择HW-USBN-2B(FTDI),然后点击下图中Program | + | |
| - | 显示PASS,加载完成,观察StepFPGA的LED交替闪烁,成功了。 | + | |
| - | 实验案例--时钟分频 | + | |
| - | 这是一个基础的模块,可以作为后续编程中的子模块使用 | + | |
| - | 本程序实现时钟分频,输出两路不同占空比的分频信号 | + | |
| - | 程序源码如下: | + | |
| - | 测试源码如下: | + | |
| - | 仿真结果如下图所示: | + | |
| - | 实际编译分配管脚信息如下: | + | |
| - | 最后加载到开发板上,因为占空比较小的信号不易使用LED等效果观察,我们这里分配给了N3(GPIO1)和P2(GPIO2)管脚,我们使用示波器测量开发板标注1和2的管脚,观察波形。 | + | |
| - | + | ||
| - | + | ||
| - | ===设计流程=== | + | |
| - | ===综合=== | + | |
| - | ===仿真=== | + | |
| - | ===资源报告=== | + | |
| - | ====经典案例==== | + | |
| - | ===组合逻辑=== | + | |
| - | - [[点亮LED灯]]:掌握LED的工作原理以及通过PWM控制LED灯的亮度 | + | |
| - | - [[7段数码管]] | + | |
| - | ===时序逻辑=== | + | |
| - | - [[轮流点亮的流水灯]]:掌握时钟分频、时序控制 | + | |
| - | - [[能够控制亮度的呼吸灯]]:通过PWM来控制LED灯的亮度 | + | |
| - | - [[旋转编码器控制]]:通过相位检测 | + | |
| - | ===状态机=== | + | |
| - | - [[交通灯控制]] | + | |
| - | - [[简单的电子琴]] | + | |
| - | - [[LED点阵显示屏]] | + | |
| - | - [[数字钟]] | + | |
| - | - [[LCD显示控制]] | + | |
| - | ===测试测量原理相关=== | + | |
| - | - [[DAC产生直流电压]] | + | |
| - | - [[DAC生成正弦波]] | + | |
| - | - [[基于DDS的任意波形产生]] | + | |
| - | - [[直流电压测量]] | + | |
| - | - [[简易示波器]] | + | |
| - | - [[数字频率计]] | + | |
| - | - [[超声波测距]] | + | |
| - | - [[通用红外遥控]] | + | |
| - | ===在FPGA内通过软核构成嵌入式系统=== | + | |
| - | XO2-4000内部有足够的逻辑功能构成MCU中的ALU,内部的块RAM可以构成MCU需要的内部存储寄存器,另外XO2系列有硬化的[[SPI]]、[[I2C]]以及[[定时器]]功能,可以构成各种8位、32位的微处理器MCU,Lattice Diamond系统自带支持Wishbone总线的8位单片机MICO8内核以及32位的MICO32内核。据说这两个内核都是来自于著名的开源硬件网站www.opencores.org,在这个网站上可以看到各种经过工程师验证过的内核。 | + | |
| - | - [[MICO8单片机]] | + | |
| - | - [[MICO32处理器]] | + | |