1、数字时钟系统实验报告 数字时钟系统设计7段数码管译码显示一、 实验目的作为熟悉实验箱后的第一个实验,本实验继续帮助同学们进一步熟悉试验箱和开发软件QuartusII,实验结合下载到实验箱的操作,定会帮助同学们更加熟悉EDA实验流程和方法,为后续实验打下基础。利用FPGA开发软件QuartusII,熟悉其原理图方式的设计方法,简单VHDL程序模块化,原理图连结的方式,实现7段数码管译码显示。二、 实验内容建立工程,理解和编写实验中的VHDL程序,然后把每个简单的VHDL程序(Create Symbol Files For Current File)作为一个模块,在原理图输入中引入,最后把原理图设
2、置成顶层文件,模拟仿真,下载到FPGA中观看数码管循环译码显示。三、 实验原理VHDL程序原理实验程序用VHDL语言编写,利用开发软件QuartusII完成编译,完成本实验,主要有3部分参考程序,分别是系统时钟分频程序(int_div.vhd)、加法计数器程序(cnt4b.vhd),还有转换译码程序(decl7s.vhd)。系统时钟分频程序,实验箱的系统时钟频率为48Mhz,通过设置分频模块,对系统时钟进行了48 000 000分频,得到1Hz的信号频率,通过分频输出后,频率降低,1Hz频率时,周期为一秒,得到1Hz的秒脉冲,一秒一个跳变,从而使得7段数码管的每一个跳变眼睛都能够清晰地分辨出来
3、。加法计数器程序,在工作频率作用下,每个频率周期进行一次加一操作,使得4位二进制数循环输出(0000到1111),每输出一个4位的二进制数据信号,分别对应数码管0 9、A F的16个数据,并且循环显示,让变化的顺序和结果循环展示,方便验证观察。转换译码程序,在对应加法计数器输出的4位二进制信号下,经逻辑译码转换,每一组4位的二进制信号输入都对应一组8位的高低电平信号输出,对应数码管0 9、A F每个状态下的8个发光二极管的发光状态,使数码管在每个状态下都有相应、直观的显示输出在数码管上。数码管原理实验箱中的数码管为7段共阴数码管,低电平有效,需注意在习惯逻辑上的1转换成0,并修改书上的VHDL
4、程序,“0”为亮,当然,在上面转换译码程序中,我们可以把对应的电平二进制数值写成较简单的十六进制数据表示(参见转换译码(decl7s.vhd)的参考程序)。最后用VHDL程序构成3个模块,分频模块(int_div)分频得到1Hz的频率信号,加载于4位加法器模块的时钟输入端,计数循环输出09、AF共16个数。最后通过七段译码模块译码后在数码管上显示出来。四、 实验步骤(1)打开QuartusII,利用New Project Wizard建立一个新的工程。在第二栏与第三栏中,将工程名与顶层文件的实体名同设为sled。图1 新建工程路径、名称、顶层实体指定对话框这里我们选择的是QuikSOPC核心板
5、上用的Cyclone系列的EP1C12Q240C8。图2 新建工程器件选择对话框(2)新建VHDL源程序文件(菜单中FileNEWVHDL File),输入源程序代码,并以程序中的实体名保存在工程所在的文件夹,可先对单个程序逐个编译仿真,检查程序的正确性。若在编译过程中发现问题,可在程序编译的下窗口的提示中检查程序并更正错误。输入顶层文件代码并保存。若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。图3输入4位加法计数器代码并保存。若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。图4输入转换译码代码并保存。若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。图5图
6、6(3)新建原理图(菜单中FileNEWBlock Diagram/Schematic File),对各个已保存的VHDL程序创建成相应的模块(Create Symbol Files For Current File),使得能在原理图中作为元件引入调用。图7图8(4)按照下面的原理图进行连接,并将原理图设置成顶层文件,完成编译并排错。图9图10(5)选择目标器件并对相应的引脚进行锁定,为准备下载到试验箱做准备。Clock信号引脚设置为28。图11(6)编译结束后,对话框显示消息“Full complication was successful.”,单击OK进入Complication Repo
7、rt窗口,如图13所示,包括编译报告、综合报告、适配报告和时序分析报告等。图12(7)进行引脚锁定后,点击编译按钮,进行一些下载前的设置,比如在菜单中AssignmentsDevice,点击弹出界面中的Devices&Pin Options,进行设定,确保下载仿真顺利并成功。(8)下载硬件设计到目标FPGA成功编译硬件系统后,将产生led_test.sof的FPGA配置文件输出,下面简单介绍将SOF文件下载到目标FPGA器件的步骤。通过ByteBlaster II下载电缆连接实验箱JTAG口和主计算机,接通实验箱电源。在Quartus II主界面中选择ToolsProgrammer,也可以单击
8、工具栏上的按钮,打开编程器窗口并自动打开配置文件。如果没有自动打开配置文件,则需要自己添加需要的配置文件。确保编程器窗口左上角的Hardware Setup栏中硬件已经安装。确保Program/Configure下的方框选中。单击“Start”开始使用配置文件对FPGA进行配置,Progress框中显示配置进度。如果使用QuickSOPC核心板,板上的配置绿色指示灯CONF亮,说明配置成功。本实验只讲述如何将配置文件下载到FPGA中,掉电后FPGA中配置的数据将丢失。也可以将配置文件写入掉电保护的EPCS,在上电时使用EPCS对FPGA进行配置。五、 实验参考程序(VHDL)程序清单1 分频器
9、 int_div.vhdLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.NUMERIC_BIT.ALL;-包含移位函数等.ENTITY int_div ISGENERIC ( F_DIV:Integer:=48000000;-分频系数 F_DIV_WIDTH:Integer:=32-分频计数器宽度 );PORT( clock : IN STD_LOGIC; clock_out: OUT STD_LOGIC );END;AR
10、CHITECTURE one OF int_div ISSIGNAL clk_p_r: STD_LOGIC;-上升沿输出时钟SIGNAL clk_n_r: STD_LOGIC;-下降沿输出时钟SIGNAL count_p: STD_LOGIC_VECTOR(f_div_width-1 DOWNTO 0);-上升沿脉冲计数器SIGNAL count_n: STD_LOGIC_VECTOR(f_div_width-1 DOWNTO 0);-下降沿脉冲计数器-SIGNAL f_div_width_r:STD_LOGIC_VECTOR(f_div_width-1 DOWNTO 0);SIGNAL cl
11、ock_out_r:STD_LOGIC;SIGNAL full_div_p: STD_LOGIC;-上升沿计数满标志SIGNAL half_div_p: STD_LOGIC;-上升沿计数半满标志SIGNAL full_div_n: STD_LOGIC;-下降沿计数满标志SIGNAL half_div_n: STD_LOGIC;-下降沿计数半满标志BEGINclock_out=clock_out_r;-clock_out=clock WHEN (F_DIV=1) ELSE (clk_p_r=1 AND clk_n_r=1) WHEN (F_DIV(0)=1) clk_p_r); -判断计数标志位
12、置位与否.full_div_p=1 WHEN (count_pF_DIV-1) ELSE 0;half_div_p=1 WHEN (count_p(F_DIV/2 )-1) ELSE 0;full_div_n=1 WHEN (count_nF_DIV -1) ELSE 0;half_div_n=1 WHEN (count_n(F_DIV/2)-1) ELSE 0;PROCESS(clock)-上升沿脉冲计数-VARIABLE i:Integer RANGE 0 TO 31;BEGIN IF RISING_EDGE(clock)THEN IF full_div_p=1 THEN count_p=
13、count_p+1; IF (half_div_p=1) THEN clk_p_r=0; ELSE clk_p_r=1; END IF; ELSE count_p0); clk_p_r= 0; END IF; END IF;END PROCESS;PROCESS(clock)-下降沿脉冲计数BEGIN IF FALLING_EDGE(clock)THEN IF full_div_n=1 THEN count_n=count_n+1; IF half_div_n=1 THEN clk_n_r=0; ELSE clk_n_r=1; END IF; ELSE count_n0); clk_n_r =
14、 0; END IF; END IF;END PROCESS;PROCESS(clock)BEGIN IF RISING_EDGE(clock)THEN IF F_DIV= 1 THEN clock_out_r=clock; ELSE IF (F_DIV REM 2) =1 THEN clock_out_r= clk_p_r AND clk_n_r; ELSE clock_out_r=clk_p_r; END IF; END IF; END IF;END PROCESS;END;程序清单2 4位加法计数器 cnt4b.vhdlibrary ieee;use ieee.std_logic_116
15、4.all;use ieee.std_logic_unsigned.all;entity cnt4b is port(CLK : in std_logic; OUTY : out std_logic_vector(3 downto 0);-加法器输出end cnt4b;architecture behav of cnt4b issignal cqi:std_logic_vector(3 downto 0);begin process (CLK) begin if CLKEVENT AND CLK=1 THEN-上升沿 cqi=cqi+1; end if;outy led7s led7s led7s led7s led7s led7s led7s led7s led7s led7s led7s led7s led7s led7s led7s led7s null; end case; end process;end;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1