数字时钟系统实验报告.docx

上传人:b****7 文档编号:9513121 上传时间:2023-02-05 格式:DOCX 页数:14 大小:768.98KB
下载 相关 举报
数字时钟系统实验报告.docx_第1页
第1页 / 共14页
数字时钟系统实验报告.docx_第2页
第2页 / 共14页
数字时钟系统实验报告.docx_第3页
第3页 / 共14页
数字时钟系统实验报告.docx_第4页
第4页 / 共14页
数字时钟系统实验报告.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

数字时钟系统实验报告.docx

《数字时钟系统实验报告.docx》由会员分享,可在线阅读,更多相关《数字时钟系统实验报告.docx(14页珍藏版)》请在冰豆网上搜索。

数字时钟系统实验报告.docx

数字时钟系统实验报告

数字时钟系统设计7段数码管译码显示

一、实验目的

作为熟悉实验箱后的第一个实验,本实验继续帮助同学们进一步熟悉试验箱和开发软件QuartusII,实验结合下载到实验箱的操作,定会帮助同学们更加熟悉EDA实验流程和方法,为后续实验打下基础。

利用FPGA开发软件QuartusII,熟悉其原理图方式的设计方法,简单VHDL程序模块化,原理图连结的方式,实现7段数码管译码显示。

二、实验内容

建立工程,理解和编写实验中的VHDL程序,然后把每个简单的VHDL程序(CreateSymbolFilesForCurrentFile)作为一个模块,在原理图输入中引入,最后把原理图设置成顶层文件,模拟仿真,下载到FPGA中观看数码管循环译码显示。

三、实验原理

VHDL程序原理

实验程序用VHDL语言编写,利用开发软件QuartusII完成编译,完成本实验,主要有3部分参考程序,分别是系统时钟分频程序(int_div.vhd)、加法计数器程序(cnt4b.vhd),还有转换译码程序(decl7s.vhd)。

系统时钟分频程序,实验箱的系统时钟频率为48Mhz,通过设置分频模块,对系统时钟进行了48000000分频,得到1Hz的信号频率,通过分频输出后,频率降低,1Hz频率时,周期为一秒,得到1Hz的秒脉冲,一秒一个跳变,从而使得7段数码管的每一个跳变眼睛都能够清晰地分辨出来。

加法计数器程序,在工作频率作用下,每个频率周期进行一次加一操作,使得4位二进制数循环输出(0000到1111),每输出一个4位的二进制数据信号,分别对应数码管0~9、A~F的16个数据,并且循环显示,让变化的顺序和结果循环展示,方便验证观察。

转换译码程序,在对应加法计数器输出的4位二进制信号下,经逻辑译码转换,每一组4位的二进制信号输入都对应一组8位的高低电平信号输出,对应数码管0~9、A~F每个状态下的8个发光二极管的发光状态,使数码管在每个状态下都有相应、直观的显示输出在数码管上。

数码管原理

实验箱中的数码管为7段共阴数码管,低电平有效,需注意在习惯逻辑上的1转换成0,并修改书上的VHDL程序,“0”为亮,当然,在上面转换译码程序中,我们可以把对应的电平二进制数值写成较简单的十六进制数据表示(参见转换译码(decl7s.vhd)的参考程序)。

最后用VHDL程序构成3个模块,分频模块(int_div)分频得到1Hz的频率信号,加载于4位加法器模块的时钟输入端,计数循环输出0~9、A~F共16个数。

最后通过七段译码模块译码后在数码管上显示出来。

四、实验步骤

(1)打开QuartusII,利用NewProjectWizard建立一个新的工程。

①在第二栏与第三栏中,将工程名与顶层文件的实体名同设为sled。

图1新建工程路径、名称、顶层实体指定对话框

②这里我们选择的是QuikSOPC核心板上用的Cyclone系列的EP1C12Q240C8。

图2新建工程器件选择对话框

(2)新建VHDL源程序文件(菜单中File→NEW→VHDLFile),输入源程序代码,并以程序中的实体名保存在工程所在的文件夹,可先对单个程序逐个编译仿真,检查程序的正确性。

若在编译过程中发现问题,可在程序编译的下窗口的提示中检查程序并更正错误。

①输入顶层文件代码并保存。

若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。

图3

②输入4位加法计数器代码并保存。

若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。

图4

 

③输入转换译码代码并保存。

若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。

图5

图6

(3)新建原理图(菜单中File→NEW→BlockDiagram/SchematicFile),对各个已保存的VHDL程序创建成相应的模块(CreateSymbolFilesForCurrentFile),使得能在原理图中作为元件引入调用。

图7

图8

(4)按照下面的原理图进行连接,并将原理图设置成顶层文件,完成编译并排错。

图9

图10

(5)选择目标器件并对相应的引脚进行锁定,为准备下载到试验箱做准备。

Clock信号引脚设置为28。

图11

(6)编译结束后,对话框显示消息“Fullcomplicationwassuccessful.”,单击OK进入ComplicationReport窗口,如图13所示,包括编译报告、综合报告、适配报告和时序分析报告等。

图12

(7)进行引脚锁定后,点击编译按钮,进行一些下载前的设置,比如在菜单中Assignments→Device,点击弹出界面中的Devices&PinOptions,进行设定,确保下载仿真顺利并成功。

(8)下载硬件设计到目标FPGA

成功编译硬件系统后,将产生led_test.sof的FPGA配置文件输出,下面简单介绍将SOF文件下载到目标FPGA器件的步骤。

①通过ByteBlasterII下载电缆连接实验箱JTAG口和主计算机,接通实验箱电源。

②在QuartusII主界面中选择Tools→Programmer,也可以单击工具栏上的

按钮,打开编程器窗口并自动打开配置文件。

如果没有自动打开配置文件,则需要自己添加需要的配置文件。

③确保编程器窗口左上角的HardwareSetup栏中硬件已经安装。

④确保Program/Configure下的方框选中。

⑤单击“Start”开始使用配置文件对FPGA进行配置,Progress框中显示配置进度。

如果使用QuickSOPC核心板,板上的配置绿色指示灯CONF亮,说明配置成功。

本实验只讲述如何将配置文件下载到FPGA中,掉电后FPGA中配置的数据将丢失。

也可以将配置文件写入掉电保护的EPCS,在上电时使用EPCS对FPGA进行配置。

五、实验参考程序(VHDL)

程序清单1分频器int_div.vhd

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.NUMERIC_BIT.ALL;--包含移位函数等.

ENTITYint_divIS

GENERIC

F_DIV:

Integer:

=48000000;--分频系数

F_DIV_WIDTH:

Integer:

=32--分频计数器宽度

);

PORT(

clock:

INSTD_LOGIC;

clock_out:

OUTSTD_LOGIC

);

END;

ARCHITECTUREoneOFint_divIS

SIGNALclk_p_r:

STD_LOGIC;--上升沿输出时钟

SIGNALclk_n_r:

STD_LOGIC;--下降沿输出时钟

SIGNALcount_p:

STD_LOGIC_VECTOR(f_div_width-1DOWNTO0);--上升沿脉冲计数器

SIGNALcount_n:

STD_LOGIC_VECTOR(f_div_width-1DOWNTO0);--下降沿脉冲计数器

--SIGNALf_div_width_r:

STD_LOGIC_VECTOR(f_div_width-1DOWNTO0);

SIGNALclock_out_r:

STD_LOGIC;

SIGNALfull_div_p:

STD_LOGIC;--上升沿计数满标志

SIGNALhalf_div_p:

STD_LOGIC;--上升沿计数半满标志

SIGNALfull_div_n:

STD_LOGIC;--下降沿计数满标志

SIGNALhalf_div_n:

STD_LOGIC;--下降沿计数半满标志

BEGIN

clock_out<=clock_out_r;

--clock_out<=clockWHEN(F_DIV=1)ELSE((clk_p_r='1'ANDclk_n_r='1')WHEN(F_DIV(0)='1')clk_p_r);

-------------------------<<判断计数标志位置位与否.

full_div_p<='1'WHEN(count_p

half_div_p<='1'WHEN(count_p<(F_DIV/2)-1)ELSE'0';

full_div_n<='1'WHEN(count_n

half_div_n<='1'WHEN(count_n<(F_DIV/2)-1)ELSE'0';

PROCESS(clock)--上升沿脉冲计数

--VARIABLEi:

IntegerRANGE0TO31;

BEGIN

IFRISING_EDGE(clock)THEN

IFfull_div_p='1'THEN

count_p<=count_p+1;

IF(half_div_p='1')THEN

clk_p_r<='0';

ELSE

clk_p_r<='1';

ENDIF;

ELSE

count_p<=(OTHERS=>'0');

clk_p_r<='0';

ENDIF;

ENDIF;

ENDPROCESS;

PROCESS(clock)--下降沿脉冲计数

BEGIN

IFFALLING_EDGE(clock)THEN

IFfull_div_n='1'THEN

count_n<=count_n+1;

IFhalf_div_n='1'THEN

clk_n_r<='0';

ELSE

clk_n_r<='1';

ENDIF;

ELSE

count_n<=(OTHERS=>'0');

clk_n_r<='0';

ENDIF;

ENDIF;

ENDPROCESS;

PROCESS(clock)

BEGIN

IFRISING_EDGE(clock)THEN

IFF_DIV=1THEN

clock_out_r<=clock;

ELSE

IF(F_DIVREM2)=1THEN

clock_out_r<=clk_p_rANDclk_n_r;

ELSE

clock_out_r<=clk_p_r;

ENDIF;

ENDIF;

ENDIF;

ENDPROCESS;

END;

程序清单24位加法计数器cnt4b.vhd

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitycnt4bis

port(CLK:

instd_logic;

OUTY:

outstd_logic_vector(3downto0));--加法器输出

endcnt4b;

architecturebehavofcnt4bis

signalcqi:

std_logic_vector(3downto0);

begin

process(CLK)

begin

ifCLK'EVENTANDCLK='1'THEN--上升沿

cqi<=cqi+1;

endif;

outy<=cqi;

endprocess;

endbehav;

程序清单3转换译码decl7s.vhd

libraryIEEE;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitydecl7sis

port(A:

instd_logic_vector(3downto0);

led7s:

outstd_logic_vector(7downto0));

end;

architectureoneofdecl7sis

begin

process(A)

begin

caseAis

when"0000"=>led7s<=X"c0";--0

when"0001"=>led7s<=X"f9";--1

when"0010"=>led7s<=X"a4";--2

when"0011"=>led7s<=X"b0";--3

when"0100"=>led7s<=X"99";--4

when"0101"=>led7s<=X"92";--5

when"0110"=>led7s<=X"82";--6

when"0111"=>led7s<=X"f8";--7

when"1000"=>led7s<=X"80";--8

when"1001"=>led7s<=X"90";--9

when"1010"=>led7s<=X"88";--A

when"1011"=>led7s<=X"83";--b

when"1100"=>led7s<=X"c6";--C

when"1101"=>led7s<=X"a1";--d

when"1110"=>led7s<=X"86";--E

when"1111"=>led7s<=X"8e";--F

whenothers=>null;

endcase;

endprocess;

end;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 专升本

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1