FPGA实验设计报告—广技师解析

  • 格式:doc
  • 大小:2.03 MB
  • 文档页数:31

实验报告课程名称:FPGA设计及应用实验项目:FPGA设计实验时间:实验班级:总份数:共 5 份指导教师:学院实验室年月日广东技术师范学院实验报告学院: 专业: 班级:成绩: 姓名:学号:组别:组员:实验地点:实验日期:指导教师签名:实验 (一) 项目名称: D 分 频 器设计一、实验目的1.学习分频器的设计,进一步了解、熟悉和掌握FPGA 开发软件Quartus II 的使用方法2.学习Verilog HDL 和VHDL 的编程方法二、实验内容编写一个分频器的Verilog 代码和VHDL 代码并仿真。

三、实验原理在数字电路中, 时钟信号的分频是很常见的电路。

分频器除了可以对时钟信号频率做除以二的计算外,分频器同时很类似涟波计数器。

涟波计数器是计数器的一种,它属于异步设计。

因为触发器并非皆由同一个时钟信号同步操作,所以它非常节省电路面积。

本实验要设一个带选择的分频时钟D[7:0]用于选择是几分频。

D 分频器设原理框图如图1所示:图1.D 分频器原理框图预习情况操作情况考勤情况 数据处理情况四、实验步骤1.新建工程,取名为DVF,如下图2所示。

图2 新建工程DVF2.新建VHDL设计文件,选择“File|New ”,在New 对话框中选择Device Design Files下的VHDL File,单击OK,完成新建设计文件。

3.在新建设计文件中输入VHDL程序。

4.生成“Symbol ”文件,新建“Block Diagram/Schematic File”文件,在文件中添加刚刚生成的“Symbol ”以及输入输出管脚,最后完整的系统顶层模块图如图 3 所示。

图3 DVF 顶层模块图5.保存文件,使用qsf或者tcl 进行管脚分配。

6.对该工程文件进行全程编译处理,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。

7.新建“Vector Waveform File”文件进行波形仿真。

8.下载完成后,观察实验结果。

五、VHDL程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY DVF ISPORT(CLK:IN STD_LOGIC;D:IN STD_LOGIC_VECTOR(7 DOWNTO 0);FOUT:OUT STD_LOGIC);END;ARCHITECTURE one OF DVF ISSIGNAL FULL: STD_LOGIC;BEGINP_REG: PROCESS(CLK)V ARIABLE CNT8: STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINIF CLK'EVENT AND CLK='1'THENIF CNT8="11111111" THENCNT8:=D;FULL<='1';ELSE CNT8:=CNT8+1;FULL<='0';END IF;END IF;END PROCESS P_REG;P_DIV:PROCESS(FULL)V ARIABLE CNT2:STD_LOGIC;BEGINIF FULL'EVENT AND FULL='1'THENCNT2:=NOT CNT2;IF CNT2='1'THEN FOUT<='1';ELSE FOUT<='0';END IF;END IF;END PROCESS P_DIV;END;六、问题讨论1、为什么在实验步骤1中,将半加器保存为DVF,可否保存为BVF?答:因为实验中要求所保存的文件名要与模块名相同,而保存的名字要符合其功能,弄混DVFr和BVF的话,会导致结果错误,不能正常运行。

2、如何设计分频器?采用双计数器实现同样的功能,当分频系数N为偶数时,计数器从0到N-1循环计数,且计数器计数小于N/2时输出1,计数大于等于N/2则输出0;当分频系数N为奇数时,计数器从0到N-1循环计数,且计数器小于(N+1)/2时输出0,计数等于(N+1)/2时则输出0到1的跳变信号,且此跳变信号必须在标准时钟的下降沿跳变(满足50%占空比),计数大于(N+1)/2时则输出1。

当分频系数N为奇数时,采用双计数器计数。

两个计数器同时计数,一个沿上升沿计数,另一个则沿下降沿计数。

计数器从0到N-1循环计数,且计数器计数小于(N-1)/2时输出1,计数大于等于(N-1)/2则输出0。

在这样的控制方式下,分频后输出的波形恰好相差1/2时钟周期,将两个波形进行或(or)操作后,即可得到所要的波形(占空比50%)。

广东技术师范学院实验预习报告学院:专业:班级:成绩:姓名:学号:组别:组员:实验地点:实验日期:指导教师签名:实验(二)项目名称:七段数码管扫描显示13579bdf 一、实验目的1.学习动态扫描显示的原理,进一步了解、熟悉和掌握FPGA 开发软件Quartus II 的使用方法2.学习Verilog HDL 和VHDL 的编程方法3.学会使用Vector Wave 功能仿真4.掌握使用多种方法分配管脚二、实验内容利用动态扫描的方式设计一个在8 个数码管上面分别显示‘13579bdf‘的程序三、实验环境硬件:EP3C40Q240CB实验箱、USB ByteBlaster 下载电缆软件:Altera Quartus II 9.0 集成开发环境四、实验原理一般来说,多个数码管的连接并不是把每个数码管都独立的与可编程逻辑器件连接,而是把所有的LED 管的输入连在一起。

如图 1 所示。

其中每个数码管的8 个段:a、b、c、d、e、f 、g、h(h 是小数点),都分别连到SEG_D0~SEG_D7,8 个数码管分别由8 个选通信号DIG_C0~DIG_C7 来选择。

被选通的数码管显示数据,其余关闭。

如在某一时刻DIG_C2 为低电平“0 ”,其余选通信号为高电平“1”,这时仅DIG_C2 对应的数码管显示来自段码信号端的数据,而其它7个数码管呈显示关闭状态。

根据这种电路状态,如果希望8 个数码管显示希望的数据,就必须使得8 个选通信号DIG_C0~DIG_C7 分别被单独选通,并在此同时,在段信号输入口加上希望在该对应数码管上显示的数据,于是随着选通信号的扫描就能实现扫描显示的目的。

虽然每次只有一个LED 显示,但只要扫描显示速率够快,由于人的视觉余辉效应,使我们仍会感觉所有的数码管都在同时显示。

扫描频率大小不许合适才能有很好的效果。

如果太小,而每个LED 开启的时间大于人眼的视觉暂停时间,那么会产生闪烁现象。

而扫描频率太大,则会图1 扫描数码管的原理图造成LED 的频繁开启和关断,大大增加LED 功耗(开启和关断的时刻功耗很大)。

一般来说,扫描频率选在50Hz 比较合适。

SW1 为清零信号使能,dig 为数码管片选信号端,seg 为7 段显示片选信号。

五.引脚分配情况图2. 引脚分配图六、实验步骤1.新建工程,取名为DECL7S,如下图3所示图3 新建工程D DECL7S2.新建VHDL 设计文件,选择“File|New”,在New 对话框中选择Device Design Files下的VHDL File,单击OK,完成新建设计文件。

3.在新建设计文件中输入VHDL 程序。

4.编译程序。

5.保存文件,进行管脚分配。

6.对该工程文件进行全程编译处理,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。

七、VHDL程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY DECL7S ISPORT(A:IN STD_LOGIC;LED7S1,LED7S2,LED7S3,LED7S4,LED7S5,LED7S6,LED7S7,LED7S8:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END;ARCHITECTURE one OF DECL7S ISBEGINPROCESS(A)BEGINIF A='1'THENLED7S1<="0000110";--1LED7S2<="1001111";--3LED7S3<="1101101";--5LED7S4<="0000111";--7LED7S5<="1101111";--9LED7S6<="1111100";--bLED7S7<="1011110";--dLED7S8<="1111001";--fELSELED7S1<="0000110";--1LED7S2<="1001111";--3LED7S3<="1101101";--5LED7S4<="0000111";--7LED7S5<="1101111";--9LED7S6<="1111100";--bLED7S7<="1011110";--dLED7S8<="1111001";--fEND IF;END PROCESS;END;八、问题讨论1、在使用EP3C40Q240CB电路箱时要注意的事项?答:在使用EP3C40Q240CB电路箱时,首先要注意电箱的工作模式与 Quartus II 9.0 集成开发环境下的模式(如下图)相对应,在下载sof文件时要选择相对应的USB I/O输出接口,以及 Quartus II 9.0 集成开发环境下的引脚相对应,不要出错。

2、数码管是如何显示的?答:其中每个数码管的8 个段:a、b、c、d、e、f 、g、h(h 是小数点),都分别连到SEG_D0~SEG_D7,8 个数码管分别由8 个选通信号DIG_C0~DIG_C7 来选择。

被选通的数码管显示数据,其余关闭。

如在某一时刻DIG_C2 为低电平“0 ”,其余选通信号为高电平“1”,这时仅DIG_C2 对应的数码管显示来自段码信号端的数据,而其它7 个数码管呈显示关闭状态。

根据这种电路状态,如果希望8 个数码管显示希望的数据,就必须使得8 个选通信号DIG_C0~DIG_C7 分别被单独选通,并在此同时,在段信号输入口加上希望在该对应数码管上显示的数据,于是随着选通信号的扫描就能实现扫描显示的目的。