
李振荣老师fpga可编程逻辑器件上机大作业西安电子科技大学微电子学院.docx
24页三、实验题目题目1:多模式LED发光控制器(逻辑设计)设计要求:1) 采用16个并排LED实现跑马灯发光器件;2) 具有异步复位功能(按钮),复位时,LED全亮;3) 模式选择(利用两位滑动开关):00—左循环跑马灯,01—右循环跑马灯,10—交叉闪烁跑马灯,11—全亮全灭闪烁4) 速度选择(利用两位滑动开关):通过00—11实现四个可视速度等级闪烁效果题目2:多模式运动计时器(逻辑设计)设计要求:1) 具有计时和倒计时功能(最低位滑动开关进行模式选择)2) 数码管显示分钟和秒,格式mm:ss ,最长时间为59分59秒3) 倒计时时长可配置(15位滑动开关控制倒计时值)4) 具有启动/暂停功能,具有异步复位功能(按钮控制)题目3:液晶屏显示字符(选作) 设计要求:1) 在液晶屏上显示欢迎语句2) 通过滑动开关控制语句切换3) 具有异步复位功能(按钮控制)4) 部分开发板需外接Pmod液晶屏 FPGA实验报告班 级: 学 号: 姓 名: 一、实验目的1. 熟悉FPGA软件基本使用方法;2. 掌握电路的基本设计、仿真、布线方法;3. 掌握FPGA开发板的应用。
二、实验器材1)开发板描述:本次我利用的是Xilinx Basys3 开发平台开发平台特性:FPGAXC7A35T-1CPG236CI/O InterfacesUSB-UART for programming and serial communicationUSB-UART Bridge12-bit VGA outputUSB HID Host for mice, keyboards and memory sticksMemory32 Mbit Serial FlashDisplaysOne 4-digit 7-Segment displaysSwitches and LEDs16 Slide switches16 LEDs5 Push-buttonsClocksOne 100 MHz crystal oscillatorExpansion portsPmod for XADC signals3 Pmod ports2)软件工具描述: 本次我利用的是Vivado2014.4软件开发工具、在仿真测试时利用的是ModelSim SE-64 10.4三、实验原理题目1:多模式LED发光控制器(逻辑设计)设计要求:1.采用16个并排LED实现跑马灯发光器件;2.具有异步复位功能(按钮),复位时,LED全亮;3.模式选择(利用两位滑动开关):00—左循环跑马灯,01—右循环跑马灯,10—交叉闪烁跑马灯,11—全亮全灭闪烁4.速度选择(利用两位滑动开关):通过00—11实现四个可视速度等级闪烁效果------------------------------------------------------------------------------------------------------------------------------------设计思路:题目要求有四个跑马灯花样,所以我用了m1和m2这两个变量组成一个两位的二进制数来作为输入控制四个不同的花样。
同样,题目要求有四个速度选择(利用两位滑动开关):通过00—11实现四个可视速度等级闪烁效果,所以我用了v1和v2这两个变量组成一个两位的二进制数来作为输入控制四个不同的速度速度控制时,考虑到开发板的频率问题,我引入了count变量,通过count的变化来依次扩大时间间隔,其中count1在变化到24’b1111_1111_1111_1111_1111_1111时才使count2变化一次,count2变化三次后count3变化一次,以此类推,达到了控制速度的要求源代码中用到了两个case语句,用来选择花样和速度1)代码设计:见附录2)仿真:仿真代码见附录利用ModelSim SE-64 10.4仿真测试后的截图如下:3)综合我利用了V16、V17、W16、W17这四个滑动开关来连接m1、m2、v1、v2利用Vivado2014.4软件开发工具进行分析和约束文件综合后形成的网表截图如下:可以看到各种器件的使用情况4)布局布线利用Vivado2014.4软件开发工具进行布局布线后截图如下:局部放大之后:5)生成数据文件----------------------------------------------------------------------------------------------------------题目2:多模式运动计时器(逻辑设计)设计要求:1.具有计时和倒计时功能(最低位滑动开关进行模式选择)2数码管显示分钟和秒,格式mm:ss ,最长时间为59分59秒3.倒计时时长可配置(15位滑动开关控制倒计时值)4.具有启动/暂停功能,具有异步复位功能(按钮控制)---------------------------------------------------------------------- 设计思路:题目要求具有计时和倒计时功能,所以我用m变量来控制(m=1’b1为计时功能,m=1’b0时为倒计时功能)。
数码管显示分钟和秒用8位的q变量来表示,连接到开发板的数码管引脚上且具有15位的倒计时时长输入端t和异步 功能rst1)代码设计:见附录 2)仿真:仿真代码见附录利用ModelSim SE-64 10.4仿真测试后的截图如下:3)综合放大之后:4)布局布线局部放大之后:5)生成数据文件可以看到相关器件的利用率情况五、实验思考,课程认识结合实验过程总结个人的实验心得,本课程及前景的认识和展望(300字)经过两次的上机和课外自己的研究,现在已经会用了Vivado2014.4软件开发工具和ModelSim SE-64 10.4工具,在这些过程中我又重新复习了一遍Verilog HDL的编写和仿真,发现了很多以前在学习硬件描述语言的时候没有注意到的相关问题,经过一遍遍的反复改正和测试,最终达到了实验的要求后感觉特别开心,不仅是对自己努力后结果的一种肯定,更是一种乐趣看到一个个步骤显示成功的时候,更是感觉非常兴奋其中的约束文件是第一次尝试自己编写,开始看着那些例题的文件感觉很难,但只要仔细去看了,上网找相关的开发手册然后一一对应起来就很简单了在写源代码的时候也要考虑很多问题,逻辑和语言的正确性都是要准一的问题。
总之,这次的上机让我受益匪浅,也感受到了从描述到布局布线后的直观体验的兴奋,这次上机实验和大作业的完成十分有用,在未来,可编程逻辑器件用的也会越来越多,我们也要不断学习,不断去掌握,未来开发自己的东西的时候就简单一点了六、附录1、代码----------------------------------------------------------------------------------------------------------题目一源程序代码:module LED ( rst, clk, led,m1,m2,v1,v2 ); input rst,clk; input m1,m2,v1,v2; output [15:0] led; reg [15:0] led; reg [23:0] count,count1,count2,count3,count4,count5; always @( posedge clk or posedge rst ) begin if (rst==1'b1) begin led[15:0] <=16'b1111_1111_1111_1111; end else begin case({v1,v2}) 2'b00: count<=count2; 2'b01: count<=count3; 2'b10: count<=count4; 2'b11 :count<=count5; endcase case({m1,m2}) 2'b00: if ( count == 24'b0000_0000_0000_0000_0000_0010) begin led <= (led<<1) ; end 2'b01: if ( count == 24'b0000_0000_0000_0000_0000_0010) begin led <= (led>>1) ; end 2'b10: if ( count == 24'b0000_0000_0000_0000_0000_0010) begin led=24'b1010_1010_1010_1010_1010_1010; #5 led=24'b0101_0101_0101_0101_0101_0101; end 2'b11: if ( count == 24'b0000_0000_0000_0000_0000_0010) begin led <=16'b1111_1111_1111_1111_1111; #5 led <=16'b0000_0000_0000_0000_0000; end endcase end end always @( posedge clk or negedge rst ) begin if (rst==1'b1) begin count1 <= 24'b0; count2 <= 24'b0; count3 <= 24'b0; count4 <= 24'b0; count5 <= 24'b0; e。












