VHDL 六十进制计数器
60进制计数器设计(VHDL)
《EDA技术》课程实验报告学生姓名:黄红玉所在班级:电信100227指导教师:高金定老师记分及评价:项目满分5分得分一、实验名称实验6:60进制计数器设计二、任务及要求【基本部分】4分1、在QuartusII平台上,采用文本输入设计方法,通过编写VHDL语言程序,完成60进制计数器的设计并进行时序仿真。
2、设计完成后生成一个元件,以供更高层次的设计调用。
3、实验箱上选择恰当的模式进行验证,目标芯片为ACEX1K系列EP1K30TC144-3。
【发挥部分】1分在60进制基础上设计6进制计数器,完成时序仿真。
三、实验程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity jinzhi60 isport(clk:in std_logic;co:out std_logic;qh:buffer std_logic_vector(3 downto 0);ql:buffer std_logic_vector(3 downto 0));end entity jinzhi60;architecture art of jinzhi60 isbeginco<='1'when(qh="0101"and ql="1001")else'0';process(clk)beginif(clk='1')thenif(ql=9)thenql<="0000";if(qh=5)thenqh<="0000";elseqh<=qh+1;end if;elseql<=ql+1;end if;end if;end process;end architecture art;四、仿真及结果分析由以上代码编译,仿真,得到一下时序仿真波形图。
EDA-六十进制计数器的VHDL设计概要
THEN
3.1.3 VHDL的数据类型
1. BIT:位数据类型,只有两个取值:‘0’和‘1’。 2. BIT_VECTOR( ): 位矢量数据类型。 3. STD_LOGIC:标准逻辑位数据类型。有9种不同的取值: 4. STD_LOGIC_VECTOR():标准逻辑位矢量数据类型。
STD_LOGIC所定义的9种数据的含义是:
数据类型时,需要使用库和程序包,具体格式如下所示:
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;
3.2 VHDL的完整结构
图2-2 D触发器
D触发器的功能:在时钟信号上升沿到来的时候,输 出跟随输入变化,否则,输出保持不变。
3.2.1 时钟上升沿检测表式
时钟上升沿的检测有两种表达方式:
1. CLK’EVENT AND CLK = ‘1’
2. RISING_EDGE(CLK)
3.2.2 D触发器的VHDL设计
库与程序包声明 标准逻辑位
LIBRARY IEEE ;
USE IEEE.STD_LOGIC_1164.ALL ; 库 ENTITY DFF1 IS 程序包 PORT (CLK : IN STD_LOGIC ; 实体 D : IN STD_LOGIC ; Q : OUT STD_LOGIC );
END DFF1;
3.3 六十进制计数器的VHDL设计
六十进制BCD码计数器的源程序:
实体名
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY cnt60 IS PORT (clk, clr: IN STD_LOGIC; ten, one: DOWNTO 0 ); OUT STD_LOGIC_VECTOR(3
60进制计数器VHDL实验报告
(2) VHDL 语言具有强大的硬件描述能力 VHDL 语言具有多层次的电路设计描述功能,既可描述系统级电路 , 也可以描述门级电路;描述方式既可以采用行为描述、寄存器传输描述或 者结构描述,也可以采用三者的混合描述方式。同时,VHDL 语言也支持惯 性延迟和传输延迟,这样可以准确地建立硬件电路的模型。VHDL 语言的强 大描述能力还体现在它具有丰富的数据类型。VHDL 语言既支持标准定义的 数据类型,也支持用户定义的数据类型,这样便会给硬件描述带来较大的 自由度。 (3) VHDL 语言具有很强的移植能力 VHDL 语言很强的移植能力主要体现在: 对于同一个硬件电路的 VHDL 语言描述 , 它可以从一个模拟器移植到另一个模拟器上、从一个综合器 移植到另一个综合器上或者从一个工作平台移植到另一个工作平台上去执 行。 (4) VHDL 语言的设计描述与器件无关 采用 VHDL 语言描述硬件电路时, 设计人员并不需要首先考虑选择进 行设计的器件。这样做的好处是可以使设计人员集中精力进行电路设计的 优化, 而不需要考虑其他的问题。当硬件电路的设计描述完成以后 ,VHDL 语言允许采用多种不同的器件结构来实现。
项目5 触发器设计
项目五分钟计数器设计
班级:09电信姓名:曾珍学号:33
1.实训目标
1)通过分钟计数器的设计,掌握触发器、计数器的设计方法。
2)分别使用原理图和文字编辑的方法实现分钟计数器的设计,并通过电路的仿真来检
验设计结果。
2.实训步骤
1)功能描述:六十进制计数器常用于时钟计数。
六十进制计数器,当个位技术到9(二
进制为1001)10位进一,当10位计数到5(二进制为0101)清零重新计数,这就完成了六十进制计数器功能。
2)采用文本编辑法,即利用VHDL语言描述六十进制计数器,二十四进制计数器参考
代码如下。
然后对其进行编译,编程器件型号选择ACE1k 系列的EP1K30TC144-3,完成程序仿真,记录仿真数据。
3) 采用原理图输入,利用两片74160芯片(BCD 码同步加法计数器),设计六十进
制计数器。
分别调用库元件74160、GND 、NAND3、INPUT 、OUTPUT 。
如图5-1所示。
图
5-1
3. 实训数据
1) 用VHDL 设计编写分钟计数器,写出程序代码。
简述仿真波形的意义。
2)对文本编辑法设计的分钟计数器进行仿真。
记录仿真波形。
3)记录用原理图输入实现的分钟计数器的仿真波形。
简述仿真波形的意义。
用VHDL编写60进制计数器
用VHDL编写60进制计数器1.用VHDL设计60进计数器。
设计一个BCD码60进计数器。
要求实现同步,异步两种情况,且规定个位显示0~9,十位显示0~5,均用4位二进制数表示。
用VHDL语言描述中小规模集成电路74LS169。
VHDL的源程序如下:(1):同步,文件名为bcd60countLIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity bcd60count isport(clk,bcd1wr,bcd10wr,cin: in std_logic;co: out std_logic;datain: in std_logic_vector(3 downto 0);bcd1p: out std_logic_vector(3 downto 0);bcd10p: out std_logic_vector(2 downto 0));end bcd60count;architecture behave of bcd60count issignal bcd1n: std_logic_vector(3 downto 0);signal bcd10n: std_logic_vector(2 downto 0);beginbcd1p<=bcd1n;bcd10p<=bcd10n;kk1: process(clk,bcd1wr)beginif (bcd1wr='1') thenbcd1n<=datain;elsif(clk'event and clk='1') thenif (cin='1') thenif(bcd1n="1001" ) thenbcd1n<="0000";elsebcd1n<=bcd1n+'1';end if;end if;end if;end process kk1;kk2: process(clk,bcd10wr)beginif (bcd10wr='1') thenbcd10n<=datain(2 downto 0);elsif(clk'event and clk='1') thenif(cin='1') and (bcd1n="1001") thenif(bcd10n="101") thenbcd10n<="000";elsebcd10n<=bcd10n+'1';end if;end if;end if;end process kk2;kk3: process(bcd10n,bcd1n,cin)beginif(cin='1' and bcd1n="1001" and bcd10n="101") then co<='1';elseco<='0';end if;end process kk3;end behave;(2)异步程序如下:LIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cou60 isport(clk,reset,cin : in std_logic;co : out std_logic;bcd1p : out std_logic_vector(3 downto 0);bcd10p : out std_logic_vector(2 downto 0)); end cou60; architecture behave of cou60 issignal bcd1n: std_logic_vector(3 downto 0);signal bcd10n: std_logic_vector(2 downto 0);beginbcd1p<=bcd1n;bcd10p<=bcd10n;kk1: process(clk)beginif(clk'event and clk='1') thenif (reset='0') thenbcd1n<="0000";elsif (cin='1') thenif(bcd1n="1001" ) thenbcd1n<="0000";elsebcd1n<=bcd1n+'1';end if;end if;end if;end process kk1;kk2: process(clk)beginif(clk'event and clk='1') thenif (reset='0') thenbcd10n<="101";elsif(cin='1') and (bcd1n="1001") thenif(bcd10n="001") thenbcd10n<="101";elsebcd10n<=bcd10n+'1';end if;end if;end if;end process kk2;kk3: process(bcd10n,bcd1n,cin)beginif(cin='1' and bcd1n="1001" and bcd10n="001") then co<='1';elseco<='0';end if;end process kk3;end behave;。
VHD语言数字时钟实验设计
河南农业大学课程设计报告设计题目:VHD语言实现数字钟实验报告学院:理学院专业:电子信息科学与技术学号:08班级:07级电科(2)班姓名:贾秋峰电子邮件日期:2011年01月成绩:指导教师:河南农业大学理学院课程设计任务书学生姓名贾秋峰指导教师贾树恒林爱英学生学号08 专业电子信息科学与技术题目VHD语言实现数字钟实验报告任务与要求一、设计实验说明:1、数字时钟主要由:分频器、扫描显示译码器、六十进制计数器(或十进制计数器与6进制计数器组成)、六十进制计数器(或十进制计数器与6进制计数器组成)、十二进制计数器(或二十四进制计数器)电路组成。
在整个时钟中最关键的是如何获得一个精确的1H Z计时脉冲,2、数字时钟显示由时(12或24进制任选)、分(60进制)、秒(60进制)组成,利用扫描显示译码电路在六个数码管显示。
二、数字时钟组成及功能:1、分频率器:用来产生1H Z计时脉冲;2、十二或二十四进制计数器:对时进行计数3、六十进制计数器:对分和秒进行计数;4、六进制计数器:分别对秒十位和分十位进行计数;5、十进制计数器:分别对秒个位和分个位进行计数;6、扫描显示译码器:完成对7字段数码管显示的控制;三、系统硬件要求:1、时钟信号为5MHz;2、FPGA芯片型号EPM7128LC84—15、EP1K30TC144—3或EP1K100QC208—3(根据实验箱上FPGA芯片具体选择);3、8个7段扫描共阴级数码显示管;4、按键开关(清零、启动、保持);四、硬件实现将时序仿真正确的文件下载到实验箱中的EPM7128LC84—15、EP1K30TC144—3或EP1K100QC208—3中,通过合适的管脚分配,将相应的管脚连接起来,验证设计是否完成设计要求;五、要求1、精确显示时、分、秒。
2、数字时钟要求:具有对时、分、秒置数功能(利用秒脉冲置数或利用拨码开关、键盘直接置数);3、能够完成整点报时功能。
(选作)开始日期年月日完成日期年月日课程设计所在单位理学院电子科学系VHD语言实现数字钟实验报告一.实验目的在MAX+plusII软件平台上,熟练运用VHDL语言。
vhdl实验报告
专用集成电路实验报告13050Z011305024237X德文实验一开发平台软件安装与认知实验实验内容1、本实验以三线八线译码器(LS74138)为例,在Xilinx ISE 9.2软件平台上完成设计电路的VHDL文本输入、语法检查、编译、仿真、管脚分配和编程下载等操作。
下载芯片选择Xilinx公司的CoolRunner II系列XC2C256-7PQ208作为目标仿真芯片。
2、用1中所设计的的三线八线译码器(LS74138)生成一个LS74138元件,在Xilinx ISE 9.2软件原理图设计平台上完成LS74138元件的调用,用原理图的方法设计三线八线译码器(LS74138),实现编译,仿真,管脚分配和编程下载等操作。
源程序:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;-- Unment the following lines to use the declarations that are-- provided for instantiating Xilinx primitive ponents.--library UNISIM;--use UNISIM.Vponents.all;entity ls74138 isPort ( g1 : in std_logic;g2 : in std_logic;inp : in std_logic_vector(2 downto 0);y : out std_logic_vector(7 downto 0));end ls74138;architecture Behavioral of ls74138 isbeginprocess(g1,g2,inp)beginif((g1 and g2)='1') thencase inp iswhen "000"=>y<="00000001";when "001"=>y<="00000010";when "010"=>y<="00000100";when "011"=>y<="00001000";when "100"=>y<="00010000";when "101"=>y<="00100000";when "110"=>y<="01000000";when "111"=>y<="10000000";when others=>y<="00000000";end case;elsey<="00000000";end if;end process;end Behavioral;波形文件:生成元器件及连接电路思考:有程序可以看出,定义了三个输入端,一个输出端。
VHDL双向十进制加减法计数器(代码和截图)
);
end entity;
architecture rtl of vh is
SIGNAL temp:std_logic_vector(3 downto 0);
begin
process (clk)
begin
if(we='1')then
temp<=d;
elsif(clk'event and clk='1')then
if(dir='0')then
if(temp<9)then
temp<=temp+'1';
co<=ห้องสมุดไป่ตู้0';
else
temp<="0000";
co<='1';
end if;
elsif(dir='1')then
if(temp>0)then
temp<=temp-'1';
co<='0';
else
temp<="1001";
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_unsigned.ALL;
entity vh is
port
(
clk: in std_logic;
dir: in std_logic;
we: in std_logic;
d : in std_logic_vector(3 downto 0);
co<='1';
六十进制计数器设计(EDA)
六进制vhdl语言设计:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY cnt6 ISPORT(CLK,CLRN,ENA,LDN:IN STD_LOGIC;D:IN STD_LOGIC_VECTOR(3 DOWNTO 0);Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);COUT:OUT STD_LOGIC);END cnt6;ARCHITECTURE ONE OF cnt6 ISSIGNAL CI:STD_LOGIC_VECTOR (3 DOWNTO 0):="0000"; BEGINPROCESS (CLK,CLRN,ENA,LDN,CI)BEGINIF CLRN='0' THEN CI<="0000";ELSIF CLK'EVENT AND CLK='1' THENIF LDN='0' THEN CI<=D;ELSIF ENA='1' THENIF CI<5 THEN CI<=CI+1;ELSE CI<="0000";END IF;END IF;END IF;Q<=CI;END PROCESS;COUT<=CI(0) AND CI(2);END ONE;十进制vhdl语言设计:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY cnt10 ISPORT(CLK,CLRN,ENA,LDN:IN STD_LOGIC;D:IN STD_LOGIC_VECTOR(3 DOWNTO 0);Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);COUT:OUT STD_LOGIC);END cnt10;ARCHITECTURE ONE OF cnt10 ISSIGNAL CI:STD_LOGIC_VECTOR (3 DOWNTO 0):="0000"; BEGINPROCESS (CLK,CLRN,ENA,LDN,CI)BEGINIF CLRN='0' THEN CI<="0000";ELSIF CLK'EVENT AND CLK='1' THENIF LDN='0' THEN CI<=D;ELSIF ENA='1' THENIF CI<9 THEN CI<=CI+1;ELSE CI<="0000";END IF;END IF;END IF;Q<=CI;END PROCESS;COUT<=CI(0) AND CI(3);END ONE;分别把上面程序生成符号文件画如下原理图:波形仿真图如下:。
基于VHDL的数值比较器、数据选择器、移位寄存器、60进制计数器、复杂ALU设计实验报告
基于VHDL的数值比较器、数据选择器、移位寄存器、60进制计数器、复杂ALU设计实验报告VHDL实验报告班级:电子学号:姓名:2014/5/23Experiment 1 两位二进制数的大小比较器一、实验目的:(1)熟悉QuartusII的开发环境、熟练掌握编程开发流程。
(2)学习VHDL的基本语法及编程设计。
二、实验内容:数值比较器设计三、实验要求:(1)熟练掌握QuartusII开发环境下对可编程逻辑器件进行程序化设计的整套流程;2)设计输入使用插入语言模板(Insert Template); ((3)在QuartusII开发环境下对设计程序进行时序仿真,将生成的配置文件下载到实验板,进行最终的实物测试验证。
四、实验原理:根据两位二进制数的大小得到对应的比较结果,其电路示意图及电路特性表为: 比较器特性表A B In_s In_l In_e 比较器电路示意图YsYe YlY A > B × × × 0 0 1A[3:0] Yl Number B[3:0] A < B × × × 1 0 0 Ye A = B 0 1 0 0 0 1 In_sYs Comparer In_l A = B 1 0 0 1 0 0 In_e A = B 0 0 1 0 1 0 A = B 0 0 0 × × × A = B × 1 1 × × × A = B 1 × 1 × × × A = B 1 1 × × × ×五、程序编写、调试及仿真(芯片型号:MAX?系列EPM1270T144C5) (1)程序编写:library ieee;use ieee.std_logic_1164.all;2entity Vhdl1 isport(a,b:in std_logic_vector(3 downto 0);ins,inl,ine: in std_logic;ys,ye,yl: out std_logic);end Vhdl1;architecture one of Vhdl1 issignal temps,tempe:std_logic; beginys<=temps;ye<=tempe;yl<=temps nor tempe;process(a,b,ine)beginif (a=b and ine='1')thentempe<='1';elsetempe<='0';end if;end process;process(a,b,ins)beginif(a<b) thentemps<='1';elsif(a=b and ins='1') then temps<='1';elsetemps<='0';end if;end process;end one;(2)功能仿真:3(3)芯片引脚设定:(4)适配下载结果六、结果分析本实验实现了两位二进制数的比较。
十进制计数器VHDL描述及操作流程6
第二章软硬件操作流程2.1 十进制计数器流程2.11 建立工作库文件夹和编辑设计文件任何一项设计都是一项工程(Project),都必须首先为此工程建立一个放置与此工程相关的所有设计文件的文件夹。
此文件夹将被EDA软件默认为工作库(Work Library)。
一般,不同的设计项目最好放在不同的文件夹中,而同一工程的所有文件都必须放在同一文件夹中。
在建立了文件夹后就可以将设计文件通过Quartus II的文本编辑器编辑并存盘,步骤如下:(1)新建一个文件夹。
这里假设本项设计的文件夹取名为CNT10B,在D盘中,路径为d:\cnt10b 。
注意,文件夹名不能用中文,也最好不要用数字。
(2)输入源程序。
打开QuartusII,选择菜单File→New。
在New窗口中的Device Design Files中选择编译文件的语言类型,这里选择“VHDL File”(如图2-1所示)。
然后在VHDL 文本编译窗中输入(键入)例3-22所示的VHDL示例程序。
图2-1 选择编辑文件的语言类型《示例程序和实验指导课件位置》:\EDA_BOOK3_FOR_1C6\chpt4\EXPT53_cnt10\工程cnt10【例3-22】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT10 ISPORT (CLK,RST,EN : IN STD_LOGIC;CQ : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);COUT : OUT STD_LOGIC );END CNT10;ARCHITECTURE behav OF CNT10 ISBEGINPROCESS(CLK, RST, EN)VARIABLE CQI : STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINIF RST = '1' THEN CQI := (OTHERS =>'0') ; --计数器异步复位ELSIF CLK'EVENT AND CLK='1' THEN --检测时钟上升沿IF EN = '1' THEN --检测是否允许计数(同步使能)IF CQI < 9 THEN CQI := CQI + 1; --允许计数, 检测是否小于9 ELSE CQI := (OTHERS =>'0'); --大于9,计数值清零END IF;END IF;END IF;IF CQI = 9 THEN COUT <= '1'; --计数大于9,输出进位信号ELSE COUT <= '0';END IF;CQ <= CQI; --将计数值向端口输出END PROCESS;(3)文件存盘。
VHDL程序设计教程习题解答
VHDL程序设计教程习题参考解答第1章思考题解答1.什么是VHDL?简述VHDL的发展史。
答:VHDL是美国国防部为电子项目设计承包商提供的,签定合同使用的,电子系统硬件描述语言。
1983年成立VHDL语言开发组,1987年推广实施,1993年扩充改版。
VHDL 是IEEE标准语言,广泛用于数字集成电路逻辑设计。
2.简述VHDL设计实体的结构。
答:实体由实体名、类型表、端口表、实体说明部分和实体语句部分组成。
根据IEEE标准,实体组织的一般格式为:ENTITY 实体名 IS[GENERIC(类型表);] --可选项[PORT(端口表);] --必需项实体说明部分; --可选项[BEGIN实体语句部分;]END [ENTITY] [实体名];3.分别用结构体的3种描述法设计一个4位计数器。
答:用行为描述方法设计一个4位计数器如下,其它描述方法,读者可自行设计。
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;use ieee.std_logic_unsigned.all;ENTITY countA ISPORT (clk,clr,en:IN STD_LOGIC;Qa,qb,qc,qd:OUT STD_LOGIC);END countA;ARCHITECTURE example OF countA ISSIGNAL count_4:STD_LOGIC_vector (3 DOWNTO 0);BEGINQa <= count_4(0);Qb <= count_4(1);Qc <= count_4(2);Qd <= count_4(3);PROCESS (clk,clr)BEGINIF (clr = '1' ) THENCount_4 <= "0000";ELSIF (clk'EVENT AND clk = '1' ) THENIF (en = '1' ) THENIF (count_4 = "1111") THENcount_4 <= "0000";ELSEcount_4 <= count_4+ '1';END IF;END IF;END IF;END PROCESS;END example;第2章思考题解答1.什么叫对象?对象有哪几个类型?答:在VHDL语言中,凡是可以赋于一个值的客体叫对象(object)。
十进制计数器VHDL
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity CNT10 isport(CLK,RST,EN:in std_logic;CQ:out std_logic_vector(3 downto 0);a,b,c,d,e,f,g:out std_logic;COUT:out std_logic);end;architecture behave of CNT10 isSIGNAL SEGOUT:STD_LOGIC_VECTOR(0 TO 6);SIGNAL dout:STD_LOGIC_VECTOR(0 TO 6); beginprocess(CLK,RST,EN)variable CQI:std_logic_vector(3 downto 0);beginif RST='1' then CQI:=(others=>'0');elsif CLK'event and CLK='1' thenif EN='1' thenif CQI<"1001" then CQI:=CQI+1;else CQI:=(others=>'0');end if;end if;end if;if CQI="1001" then COUT<='1';else COUT<='0';end if;CASE CQI ISWHEN"0000"=>SEGOUT<="1111110";WHEN"0001"=>SEGOUT<="0110000";WHEN"0010"=>SEGOUT<="1101101";WHEN"0011"=>SEGOUT<="1111001";WHEN"0100"=>SEGOUT<="0110011";WHEN"0101"=>SEGOUT<="1011011";WHEN"0110"=>SEGOUT<="1011111";WHEN"0111"=>SEGOUT<="1110000";WHEN"1000"=>SEGOUT<="1111111";WHEN"1001"=>SEGOUT<="1111011";WHEN OTHERS=>SEGOUT<="0000000";END CASE;a<=dout(0);b<=dout(1;c<=dout(2);d<=dout(3);e<=dout(4);f<=dout(5);g<=dout(6;end process; end;。
基于VHDL的数字时钟设计
目录1 概述.........................................................................错误!未定义书签。
1.1数字时钟的工作原理 (1)1.2设计任务 (1)2 系统总体方案设计 (2)3 VHDL模块电路设计 (3)3.1模块实现 (3)3.1.1分频模块pinlv (3)3.1.2按键去抖动模块qudou (5)3.1.3按键控制模块self1 (6)3.1.4秒、分六十进制模块cantsixty (7)3.1.5时计数模块hourtwenty (9)3.1.6秒、分、时组合后的模块 (9)3.1.7数码管显示模块 (10)3.2数字时钟的顶层设计原理图 (13)3.3系统仿真与调试 (14)结束语 (16)参考文献 (17)致谢 (18)附录源程序代码 (19)1 概述1.1数字时钟的工作原理数字钟电路的基本结构由两个60进制计数器和一个24进制计数器组成,分别对秒、分、小时进行计时,当计时到23时59分59秒时,再来一个计数脉冲,则计数器清零,重新开始计时。
秒计数器的计数时钟CLK为1Hz的标准信号,可以由晶振产生的50MHz信号通过分频得到。
当数字钟处于计时状态时,秒计数器的进位输出信号作为分钟计数器的计数信号,分钟计数器的进位输出信号又作为小时计数器的计数信号,每一秒钟发出一个中断给CPU,CPU采用NIOS,它响应中断,并读出小时、分、秒等信息。
CPU对读出的数据译码,使之动态显示在数码管上。
1.2 设计任务设计一个基于VHDL的数字时钟,具体功能要求如下:1.在七段数码管上具有时--分--秒的依次显示。
2.时、分、秒的个位记满十向高位进一,分、秒的十位记满五向高位进一,小时按24进制计数,分、秒按60进制计数。
3.整点报时,当计数到整点时扬声器发出响声。
4.时间设置:可以通过按键手动调节秒和分的数值。
此功能中可通过按键实现整体清零和暂停的功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity count60 is
port(clk,clk0,cin,bcd1wr,bcdswr:in std_logic;
datain:in std_logic_vector(3 downto 0);
co:out std_logic;
a,b,c,d,e,f,g: out std_logic;
sel:out std_logic_vector(2 to 0));
end count60;
architecture art of count60 is
signal bcd1n:std_logic_vector(3 downto 0); signal bcdsn:std_logic_vector(2 downto 0); signal outda:std_logic_vector(6 downto 0);
begin
process(clk,bcd1wr)
begin
if(bcd1wr='1') then
bcd1n<=datain;
elsif(clk'event and clk='1') then
if(cin='1') then
if(bcd1n=9) then
bcd1n<="0000";
else
bcd1n<=bcd1n+1;
end if;
end if;
end if;
end process;
process(clk,bcdswr)
begin
if(bcdswr='1') then
bcdsn<=datain(2 downto 0);
elsif(clk'event and clk='1') then
if(cin='1' and bcd1n=9) then
if(bcdsn=5) then
bcdsn<="000";
else bcdsn<=bcdsn+1;
end if;
end if;
end if;
process(bcd1n,bcdsn,cin)
begin
if(bcd1n=9 and bcdsn=5 and cin='1') then
co<='1';
else
co<='0';
end if;
end process;
process(clk0,bcd1n,bcdsn)
begin
if clk0='1' then sel<="000";
case bcd1n is
when "0000"=>outda<="1111110";
when "0001"=>outda<="0110000";
when "0010"=>outda<="1101101";
when "0011"=>outda<="1111001";
when "0100"=>outda<="0110011";
when "0101"=>outda<="1011011";
when "0110"=>outda<="1011111";
when "0111"=>outda<="1110000";
when "1000"=>outda<="1111111";
when "1001"=>outda<="1111011";
when others=>outda<="0000000";
end case;
else sel<="110";
case bcdsn is
when "000"=>outda<="1111110";
when "001"=>outda<="0110000";
when "010"=>outda<="1101101";
when "011"=>outda<="1111001";
when "100"=>outda<="0110011";
when "101"=>outda<="1011011";
when others=>outda<="0000000";
end case;
end if;
a<=outda(6);
b<=outda(5);
c<=outda(4);
d<=outda(3);
e<=outda(2);
f<=outda(1);
g<=outda(0);
end process;
end art;。