FPGA嵌入式系统开发与实例PPT课件(共6章)第5章基于Vivado的FPGA设计案例.pptx
文本预览下载声明
第5章 基于Vivado的FPGA设计案例;5.1 流 水 灯 设 计;5.1.2 设计方案 根据设计的功能要求,每次亮的灯向左或向右移动一位,所以可以通过设计一个控制器使输出信号向左或向右移位来实现。又因为LED灯亮灭移动的时间间隔为1?s,因此控制器的时钟信号频率应为1?Hz。而开发板提供的默认时钟频率为100 MHz,因此首先需要一个分频器,以得到频率为1?Hz的信号,然后以频率1?Hz的信号作为控制器的时钟,控制16位的输出信号每次向左或向右移位。按键RESET作为复位信号,按下后LED灯从最右端D16开始依次序亮灭。系统组成框图如图5-1所示。;;5.1.3 系统设计 1. 计数器 本模块分频器的设计采用两个计数器相乘的方法实现。设计中输入时钟信号为100 MHz。若用一个计数器,计数值将会非常庞大,因此采用两个14位的计数器cnt_first、cnt_second共同完成。每个计数器的计数范围为1~10 000。;; 2. 控制器 根据设计要求,sw0信号的值控制led[15:0]值变化。因此可以设计一个控制器,当sw0值为零时,led[15:0]值以计数器输出的clk_bps为频率每次向左移一位,即LED灯向左移动一位;sw0值为1时,led值按相同频率每次向右移动一位,即LED灯向右移动一位。;;; 3. 顶层模块 将上述两个模块综合在一起,即构成了顶层模块,如图5-2所示。在该模块中,分别调用counter和flash_led_ctl模块实现流水灯功能。;;; 4. 引脚分配 完成各模块设计后,还需进行引脚分配。引脚分配是将实现设计的输入输出端口与对应的实际芯片的输入输出端口进行连接。;;;5.1.4 系统仿真 设置仿真模块时间单位为1 ps,则LED灯移动的单位时间为1 ms,初始条件下sw0为低电平,6 ms后将sw0变为高电平,即6 ms后改变LED灯的移动方向。使整个系统在输入条件下进行仿真,输出仿真波形,观察波形是否符合预期结果。; 1. 仿真文件的编写;; 2. 执行仿真 打开仿真工具Simulation,点击运行后执行仿真,输出的仿真波形如图5-3所示。;; 3. 波形分析 由仿真波形可以看出,初始条件下LED灯从最左端led[15]开始向右移动,6 ms后移动??led[10],然后改变位移方向向左移动,12 ms后移动至led[15]。仿真波形与预期结果一致。;5.1.5 系统测试 完成设计后,进行整体的编译、综合、锁定管脚、适配,生成可编程文件,最后下载至FPGA开发板。程序下载到开发板上后,进行设计的最后环节,即测试验证是否达到设计要求。如图5-4所示,观察开发板上的16个LED灯,可以看出该设计达到实验要求。;;5.2 智 力 抢 答 器;5.2.2 设计方案 抢答器是一个典型的异步时序逻辑电路,按照实验要求,有四个选手抢答,清零由倒计时结束或主持人控制。当主持人按下开始按钮后,选手可以开始抢答,最先按下按钮的选手被选中,与之对应的数码管开始显示倒计时,在倒计时结束时或主持人按下清零按钮后,系统的状态恢复到初始状态,数码管显示清零。;5.2.3 系统设计 1. 按键检测模块 按键检测模块用于监测抢答环节,当抢答开始后,监测第一个按下按键的选手,并屏蔽后面按下按键的选手。当有选手按下按键时,锁存器锁存第一个按下按键的选手的编号,并在与之对应的数码管上显示数字倒计时。 btn[3:0]分别连接4个选手的抢答按键,rst连接清零按键,当抢答开始并有选手按下抢答按键时,state[3]~state[0]输出抢中选手的四位二进制编码。;;; 2. 抢答显示模块 在这个系统中,需要用数码管显示抢中选手所对应的倒计时,四位二进制编码用来控制要点亮的数码管。 四位二进制编码由四位数据state[3]~state[0]输入,cnt_down_over用于控制在倒计时结束时熄灭数码管。 为了实现译码功能,实例中使用了一个case分支表。根据输入的四位二进制代码,选择点亮与之对应的数码管。;;; 3. 抢答计时模块 每个选手对应一个数码管,当选手抢中后,该选手对应的数码管开始倒计时,时间限制为10 s。;;;; 4. 顶层模块 顶层模块用于将系统中各个子模块连接起来,形成一个完整的系统,并引出与外围电路的连接端口。该模块的逻辑框图如图5-5所示。;;;; 图5-6所示为Smart_responder.v文件编译后的RTL原理图。; 5. 引脚分配 完成各模块设计后,还需进行引脚分配工作。引脚分配用于将实现设计的输入输出端口与对应的实际芯片的输入输出端口相连接。;;5.
显示全部