当前位置:文档之家› 哈工大FPGA设计与应用分频器设计实验报告

哈工大FPGA设计与应用分频器设计实验报告

FPGA设计与应用分频器设计实验报告班级:1105103班姓名:郭诚学号:1110510304日期:2014年10月11日实验性质:验证性实验类型:必做开课单位:电信院学时:2学时一、实验目的1、了解Quartus II软件的功能;2、掌握Quartus II的HDL输入方法;3、掌握Quartus II编译、综合、适配和时序仿真;4、掌握Quartus II管脚分配、数据流下载方法;5、了解设计的资源消耗情况;6、掌握分频器和计数器的实现原理;7、掌握数码管的静态和动态显示原理二、实验准备(1分)2.1 EP2C8的系统资源概述逻辑单元8,256M4K RAM 块(4k比特+512校验比特) 36总的RAM比特数165,888嵌入式乘法器18锁相环PLLs 22.2 工程所用到的FPGA引脚及功能说明工程所用到的FPGA引脚及功能说明:PIN_23是时钟引脚;PIN_114 PIN_117 PIN_127 PIN_134是数码管的位选引脚;PIN_133 PIN_116 PIN_110 PIN_112 PIN_128 PIN_118 PIN_115是数码管段选信号引脚;实验所用的LED是共阴级连接2.3 数码管的动态显示原理动态显示是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O 线控制,当输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于FPGA对位选通COM端电路的控制,所以只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。

通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。

在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。

三、代码及测试3.1 工程源代码及分析(2分)Library IEEE;use IEEE.std_logic_1164.all;use IEEE.std_logic_unsigned.all;Entity gcfp isport ( gc_clk : in std_logic;gc_clkout : out std_logic;gc_s7: out std_logic_vector( 6 downto 0 ); --7段码输出gc_s3: out std_logic_vector( 3 downto 0)); --4个数码管选通end;architecture one of gcfp issignal gc_L1,gc_L2,gc_L3,gc_L4,gc_L:integer; --L1,L2表示分的高低两位L3,L4表示秒的高低两位signal gc_a:std_logic_vector(26 downto 0); --用作计数signal gc_q1:std_logic; --LED灯信号signal gc_b:std_logic_vector(12 downto 0); --用作计数signal gc_q2:std_logic; --数码管扫描信号signal gc_clkout1:std_logic; --数码管扫描信号的输出signal gc_c:std_logic_vector(1 downto 0):="00"; --用于数码管选通--将时钟信号分频(27173913分频)得到频率为1.84Hz(学号为4)的输出信号,要求占空比为25%beginprocess(gc_clk)beginif gc_clk'event and gc_clk='1' thenif gc_a<6793478 thengc_a<=gc_a+1;gc_q1<='1';elsif gc_a<27173913 thengc_a<=gc_a+1;gc_q1<='0';elsegc_a <= (others=>'0');end if;end if;gc_clkout<=gc_q1;end process;--将时钟信号分频得到周期为1ms的信号作为数码管扫描信号process(gc_clk)beginif gc_clk'event and gc_clk='1' thenif gc_b<25000 thengc_b<=gc_b+1;gc_q2<=gc_q2;elsegc_b <= (others=>'0');gc_q2<=not gc_q2;end if;end if;gc_clkout1<=gc_q2;end process;--进行计数,第一、三位模10计数,第二、四位模6计数process(gc_q1)variable min_10:integer:=0;variable min:integer:=0;variable sec_10:integer:=0;variable sec:integer:=0;beginif gc_q1'event and gc_q1='1' thenif sec =9 thensec:=0;if sec_10=5 thensec_10:=0;if min=9 thenmin:=0;if min_10=5 thenmin_10:=0;elsemin_10:=min_10+1;end if;elsemin:=min+1;end if;elsesec_10:=sec_10+1;end if;elsesec:=sec+1;end if;end if;gc_L1 <= min_10;gc_L2 <= min;gc_L3 <= sec_10;gc_L4 <= sec;end process;--用1ms时钟进行模4 计数,用于数码管选通。

计00选通第一位,01选通第二位,10选通第三位,11选通第四位。

并将该位数值送给Led进行七段码译码。

process(gc_q2)beginif gc_q2'event and gc_q2 = '1' thenif gc_c ="11"thengc_c<="00";elsegc_c <= gc_c +1;end if;end if;case gc_c iswhen "00" => gc_s3 <="0001";gc_L <= gc_L4;when "01" => gc_s3 <="0010";gc_L <= gc_L3;when "10" => gc_s3 <="0100";gc_L <= gc_L2;when "11" => gc_s3 <="1000";gc_L <= gc_L1;when others => null;end case;end process;--进行七段码译码process(gc_L)begincase gc_L iswhen 0 => gc_s7 <= "0111111";when 1 => gc_s7 <= "0000110";when 2 => gc_s7 <= "1011011";when 3 => gc_s7 <= "1001111";when 4 => gc_s7 <= "1100110";when 5 => gc_s7 <= "1101101";when 6 => gc_s7 <= "1111101";when 7 => gc_s7 <= "0000111";when 8 => gc_s7 <= "1111111";when 9 => gc_s7 <= "1101111";when others => null;end case;end process;end one;以上代码为本次实验的仿真代码,主要有以下几部分组成:第一部分为实体;第二部分结构体以及各类信号;第三部分为结构体中的各类进程,主要有分频、技术、扫描、译码等部分组成;难点是数码管的计数问题,期间要考虑各种因素,避免C语言的语言逻辑;实验数据的计算:根据实验指导书所给的公式:2-0.04*学号后两位可知F=2-0.04*4=1.84Hz分频系数:N=50MHz/1.84Hz=27173913根据占空比25%可知跳跃点的数值为:N0=27173913*0.25=67934783.3 十分频计数器的仿真波形图(1分)3.4 工程SignalTap II波形图(1分)上升沿:下降沿:四、论述详述Quartus II开发流程(1分)1、打开QuartusⅡ软件;2、选择File→New Project Wizard 新建一项工程;3、单击Next进入;(任何一项设计都是一项工程Project,必须首先为此工程建立一个放置与此工程相关的所有文件的文件夹,要用英文的比如存在E/eda),之后会出现三个要填的,分别E/eda,COUNT,COUNT;单击Next进入下一个,first name不填,单击Next进入对话框。

在该对话框中指定目标器件,(我们选择的是QuickEDA核心板上用的Cyclone系列的EP1C6240C8)next一直到finish4、选择File→New ——VHDL file ,将你的编程复制进去5、File→save as(新建个文件夹用英文的)文件名一定要更改为COUNT(保持和实体一致,默认的文件名为VHDL1)6、在QuartusⅡ主界面下选择Processing→Start Compilation进行全程编译,会显示“successful”7、在QuartusⅡ主界面下选择File→New命令,打开新建文件对话框,在该对话框中选择V ector Waveform File ;8、在Nane栏内双击鼠标左键,弹出对话框。

相关主题