
FPGA实验报告.doc
24页目录实验一 分频器实验三 ADC0809 模数转换实验 实验二 七段数码管扫描显示 实验四 双向移位存放器实验一 分频器一、实验目的 1.学习分频器的设计,进一步了解、熟悉和掌握FPGA开发软件Quartus II 的使用方法 2.学习Verilog HDL 和VHDL的编程方法 3.学会使用Vector Wave功能仿真 4.掌握使用多种方法分配管脚 二、实验内容 编写一个分频器的Verilog 代码和VHDL代码并仿真,编译下载验证三、实验原理 在数字电路中, 时钟信号的分频是很常见的电路分频器除了可以对时钟信号频率做除以二的计算外,分频器同时很类似涟波计数器 涟波计数器是计数器的一种,它属于异步设计因为触发器并非皆由同一个时钟信号同步操作,所以它非常节省电路面积 本实验要设一个带选择的分频时钟,SEL[1:0]用于选择是几分频分频器设原理框图如图1所示: 图1 分频器原理图从原理图中可见,核心板的时钟是50MHz ,通过 sel[1:0]选择分频数,00:不分频;01:分频;10:25M四分频;11:50M分频。
采用 SW1 ‐ SW2 设置分频值,SW3 复位LED1为时钟的输出,通过调整SW1 、SW2 ,可以得到不同的闪烁频率 引脚分配情况如表1所示表1 引脚分布情况 四、实验步骤 1.新建工程,取名为frediv ,如下列图2所示 图2 新建工程 2.新建 VHDL设计文件,选择“File|New 〞 ,在 New 对话框中选择Device Design Files下的VHDL File,单击OK,完成新建设计文件 3.在新建设计文件中输入VHDL程序 4.生成“Symbol 〞文件,新建“Block Diagram/Schematic File〞文件,在文件中添加刚刚生成的“Symbol 〞以及输入输出管脚,最后完整的系统顶层模块图如图 3 所示 图3 顶层模块图 5.保存文件,使用qsf或者tcl 进行管脚分配〔相应的文件在本工程里面都可以找到〕 6.对该工程文件进行全程编译处理,假设在编译过程中发现错误,那么找出并更正错误,直至编译成功为止 7.新建“Vector Waveform File〞文件进行波形仿真。
8.下载完成后,观察实验结果 五、VHDL程序 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity frediv is port ( clk :in std_logic; rst :in std_logic; sel :in std_logic_vector(1 downto 0); clkout:out std_logic ); end frediv; architecture rt1 of frediv is begin pr ocess(rst,clk) variable cn1,cn2,cn3:integer range 0 to 50000000; begin if rst = '1' then clkout <= '0'; elsif clk'event and clk = '1' then if sel = "01" then if cn1 = 12499999 then cn1 := 0; else cn1 := cn1 + 1; if cn1 <= 6249999 then clkout <= '1'; else clkout <= '0'; end if; end if; elsif sel = "10" then if cn2 = 24999999 then cn2 := 0; else cn2 := cn2 + 1; if cn2 <= 12499999 then clkout <= '1'; else clkout <= '0'; end if; end if; elsif sel = "11" then if cn3 = 49999999 then cn3 := 0; else cn3 := cn3 + 1; if cn3 <= 24999999 then clkout <= '1'; else clkout <= '0'; end if; end if; else clkout <= clk; end if; end if; end process; end rt1; 实验二 七段数码管扫描显示 一、实验目的 1.学习动态扫描显示的原理,进一步了解、熟悉和掌握 FPGA 开发软件 Quartus II 的使用方法 2.学习Verilog HDL 和 VHDL 的编程方法 3.学会使用Vector Wave 功能仿真 4.掌握使用多种方法分配管脚 二、实验内容 利用动态扫描的方式设计一个在 8 个数码管上面分别显示 1,3,5,7….的程序 三、实验环境 硬件:EP2C35实验箱、USB ByteBlaster 下载电缆 软件:Altera Quartus II 集成开发环境 四、实验原理 一般来说,多个数码管的连接并不是把每个数码管都独立的与可编程逻辑器件连接,而是把所有的 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 比拟适宜 图2 设计原理框图 SW1 为清零信号使能,dig 为数码管片选信号端,seg 为 7 段显示片选信号 五、 引脚分配情况 表 1 引脚分配 六、 实验步骤 1.新建工程,取名为seven_seg,如下列图所示 图2 指定工程的目录、工程名和顶层实体名 2.新建VHDL 设计文件,选择“File|New〞 ,在 New 对话框中选择 Device Design Files下的 VHDL File,单击 OK,完成新建设计文件 3.在新建设计文件中输入VHDL 程序 4.生成“Symbol 〞文件,新建“Block Diagram/Schematic File〞文件,在文件中添加刚刚生成的“Symbol 〞以及输入输出管脚,最后完整的系统顶层模块图如图3 所示 图3 顶层模块图 。












