**这是本文档旧的修订版!**
数字逻辑、可编程逻辑及FPGA
数字逻辑基础
可编程逻辑
FPGA的构成及应用
[[FPGA设计流程]]
小脚丫FPGA学习平台介绍
小脚丫FPGA学习平台是摩尔吧孵化器专门针对FPGA初学者打造的一款性价比最高、学习门槛最低的学习模块,它以Lattice Semiconductor公司XO2-4000器件为核心,具有开关、按键输入以及单色LED、三色LED以及2个发光数码馆进行显示。其封装方式兼容标准的DIP40封装,能够直接插在面包板上或以模块的方式放置在其它电路板上以即插即用的方式,大大简化系统的设计。
功能介绍
- 食指大小——目前最小的FPGA开发板,尺寸52mm*18mm,即插即用;
- USB供电,自带板载编程器,无需额外配置FPGA下载线
- LCMXO2-1200,性价比最高最适合的FPGA芯片
- 既可作学习数字逻辑的FPGA开饭,也可作核心功能模块使用,适合各种DIY和原型设计
- 丰富的实例、代码支持
硬件连接
- FPGA芯片:LCMXO2-1200HC-4MG132
- USB 5V供电
- 25MHz时钟
- 3个LED,一路电源指示,两路用户LED
- 2个按键
- 2个RGB LED
- 一路I2C接口
- SPI接口(可设主从模式)
- JTAG接口
- 29个GPIO接口
使用方法
上电测试。Step FPGA开发板通过USB供电,采用了常见Micro USB接口。一般的安卓手机USB线均可使用。开发板出厂内置测试程序,上电后:
- Step FPGA开发板连接USB电源,电源指示灯点亮。
- 两个用户LED灯交替闪烁,间隔0.5秒。
- RGB LED闪烁分两种模式,上电默认流水灯模式。
- 流水灯:RGB LED交替闪烁红绿蓝。
- 交通灯:两个RGB LED异步闪烁红绿蓝,如同交通信号。
- 按键K2切换RGB LED显示模式。
- 按键K1用于复位功能。
扩展应用
Lattice Diamond综合开发环境
软件安装及配置
Step FPGA开发板支持Lattice的Diamond开发环境,首先我们需要到官网下载Diamond进行安装,非常简单。下载Diamond安装包: http://www.latticesemi.com/zh-CN/Products/DesignSoftwareAndIP/FPGAandLDS/LatticeDiamond.aspx 开始安装:
- 双击打开下载好的软件,3.5.0.102Diamondx64.exe。
- 点击Finish,完成安装。
相比于一般的FPGA开发工具,Lattice的Diamond更加简洁,占用资源更少,速度更快。而且Lattice提供完全免费的版本,只需要在官网注册后申请一个免费的License。
安装License
- 获取License:登陆Lattice官网:http://www.latticesemi.com/,没有账户则先注册账户, 依次Support →Licensing →Lattice Software Licenses →Request a Free License(获取一个免费许可证)
将安装软件的电脑MAC地址(physical address)填写,勾选required field,并Generate License。 注:如何获取MAC地址? 打开cmd.exe,输入命令 ipconfig/all,找到物理地址(physical address),共12位数。
- 软件注册 将之前获取的license.dat文件拷贝到安装目录下的license文件夹中,例如将软件安装在D盘下:D:\lscc\diamond\3.5x64\license\ ,注册完成, 运行Diamond,界面如下
界面中,右侧User Guides、Reference Guides、Tutorials、FPGA Design Guide等有大量文档链接,如果有时间建议大家尝试阅读,很有指导性。若运行Diamond时报错 License checkout failed,说明软件注册有问题,请检查: - 检查用于注册License的MAC地址是否正确! - 检查获取到的License文件被放置在软件安装目录下!D:\lscc\diamond\3.5x64\license\
- 检查环境变量是否正确!
- 我的电脑 →右键选择属性 →高级系统设置 →高级 →环境变量 →系统变量 ,变量和值分别为
- LMLICENSEFILE
- USB驱动: 在包装盒中的编程模块需要USB驱动,通常情况下Diamond安装好了之后能够自动识别编程模块。如果不能自动安装驱动程序,需要先下载驱动程序:http://www.ftdichip.com/Drivers/VCP.htm根据不同的系统下载驱动版本。
硬件连线 Step FPGA的编程模块也是通过Micro USB线和电脑相连,因此准备Step FPGA开发环境需要两根Micro USB连接线。驱动安装好以后就可以开始编译下载程序了。 下面我们可以开始可编程逻辑的开发,我们以控制LED交替闪烁为例,完成自己的第一个程序:
到这里完成了第一个程序流文件的生成,下面可以下载到FPGA中。
工程仿真
上面我们走了整个工程开发的过程,例程较为简单,对于复杂的工程开发需要预仿真和后仿真等,保证最终的程序设计逻辑和时序符合我们的设计要求。
仿真软件很多,这里我们使用软件自带的Active-HDL软件进行仿真
首先我们添加testbench文件,和前面添加设计文件一样,File →New→File →Verilog Files,Name填写,然后New,
测试源码如下,复制到LEDtest.v文件并保存:
然后在软件左侧Process栏,选择File List,找到LEDtest.v,右键选择Include for →Simulation
为了方便仿真,我们将LEDshining.v文件中的时钟分频周期缩短,更改并保存
parameter CLKDIVPERIOD=50;25000000;related with clkdiv's frequency
仿真结束,编译下载时再恢复。
重新编译整个工程,然后选择Tools →SimulationWizard →Next,
建立仿真工程,ModelSim和QuestaSim需要自行安装并与Diamond关联,才能直接调用,我们使用Active-HDL
这里我们选择Active-HDL(默认),工程名称:LEDtest,工程路径在Diamond工程路径下新建LEDtest 文件夹:**/LEDshining/LEDtest,然后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灯
轮流点亮的流水灯
能够控制亮度的呼吸灯
旋转编码器控制
设计要求
方案设计
- 增量型旋转编码器有两路相位不同的信号输出,Phase A 和 Phase B,FPGA需要对这两路输入信号进行分析,判断出旋转的动作,输出一个加(up)或减(down)的脉冲信号。
- 同时,很多旋转编码器都有按键功能,除了旋转以外可以按下,这个按键和旋转是独立的。FPGA内部对按键进行了消抖动,并响应动作产生一个脉冲信号(keyout) - 改代码加入了现象的验证,输出为6位数据,可接上LED观看现象,旋转和按键会使LED产生流水灯效果 - 在小脚丫开发板上的现象如下图,两个三色LED会按照如图方式进行切换轮流显示。视频中可以观看到
==硬件设计== 连接图中,主要有电源和GND,两路信号,按键信号(如果有按键),大地(接机壳,Avago HRPG-AD32#16F上没有按键,多了一个接机壳的地脚,仍然是5个脚)
==软件设计== FPGA程序结构
==FPGA资源占用情况==
项目视频演示: ==本设计中用到的主要芯片== - LCMXO2-1200:Lattice FPGA,主频133Mhz,PBGA132封装(LCMXO2-1200数据手册) - Avago Technologies:HRPG AD32 16F,旋转编码器,(Avago HRPG-AD32#16F数据手册) - 小脚丫开发板:DIP40封装形式,小巧精悍的FPGA开发板,(小脚丫开发板相关信息) - 小脚丫FPGA开发板【自带编译器】至爱板网商城购买:点击购买 - 电路相关文件下载:http://www.cirmall.com/circuit/2704 ===交通灯控制=== ===简单的电子琴=== ===7段数码管=== ===LED点阵显示屏=== ===数字钟=== ===LCD显示控制=== ===DAC产生直流电压=== ===DAC生成正弦波=== ===基于DDS的任意波形产生=== ===直流电压测量=== ===简易示波器=== ===数字频率计=== ===超声波测距=== ===通用红外遥控=== ===MICO8单片机=== ===MICO32处理器===