VHDL设计数码管扫描显示
(VHDL实验报告)数码管显示(一位数码管显示0-9,八位数码管显示学号后八位)
![(VHDL实验报告)数码管显示(一位数码管显示0-9,八位数码管显示学号后八位)](https://img.taocdn.com/s3/m/16a055749b6648d7c1c74685.png)
(1)一位数码管显示0-9:
(2)八位数码管显示学号后八位: 七、心得体会
七段码管位选输入信号 七段码管位选输入信号 七段码管位选输入信号
五、 实验步骤
1、打开 QUARTUSII 软件,新建一个工程。 2、建完工程之后,再新建一个VHDL File,打开VHDL 编辑器对话框。 3、按照实验原理和自己的想法,在VHDL 编辑窗口编写VHDL 程序。其 程序如下所示:
(1)一位数码管显示0-9:
电子科技大学成都学院学院
标准实验报告
(实验)课程名称 数字电路 EDA 设计与应用
姓名 乱弹的枇杷 学号 专业 指导教师
一、 实验名称 数码管显示(一位数码管显示 0-9,八位数码管显示学号
后八位)
二、 实验目的 1、了解数码管的工作原理。 2、学习七段数码管显示译码器的设计。 3、掌握 VHDL 的 CASE 语句及多层次设计方法。
信号名称对应fpga管脚名说明7segaf13七段码管段输入信号7segbf14七段码管段输入信号7segcf15七段码管段输入信号7segde15七段码管段输入信号7segef16七段码管段输入信号7segff17七段码管段输入信号7segge18七段码管段输入信号7segdpf18七段码管dp段输入信号7segsel0g18七段码管位选输入信号7segsel1g17七段码管位选输入信号7segsel2g16七段码管位选输入信号实验步骤1打开quartusii软件新建一个工程
信号名称 7SEG-A 7SEG-B 7SEG-C 7SEG-D 7SEG-E 7SEG-F 7SEG-G 7SEG-DP 7SEG-SEL0 7SEG-SEL1 7SEG-SEL2
VHDL数码管动态扫描
![VHDL数码管动态扫描](https://img.taocdn.com/s3/m/6125a2c12cc58bd63186bd54.png)
北京邮电大学数电实验报告实验名称:数码管扫描显示控制器设计与实现学院:信息与通信工程姓名:班级:学号:班内序号:一.实验目的1.掌握VHDL语言的语法规范,掌握时序电路描述方法;2.掌握多个数码管动态扫描显示的原理和设计方法.二.实验所用仪器及元器件1.计算机2.直流稳压电源3.数字系统与逻辑设计实验开发板三.实验任务及要求1.用VHDL语言设计并实现六个数码管串行扫描电路,要求同时显示0,1,2,3,4,5这六个不同的数字图形到六个数码管上,仿真下载验证其功能。
2.用VHDL语言设计并实现六个数码管滚动显示电路。
(选作)(1)循环滚动,始终点亮6个数码管,左出右进。
状态为:012345-123450-234501-345012-450123-501234-012345四.实验设计思路及过程1.实验原理为使得输入控制电路简单且易于实现,采用动态扫描的方式实现设计要求。
动态扫描显示需要由两组信号来控制:一组是字段输出口输出的字形代码,用来控制显示的字形,称为段码;另一组是位输出口输出的控制信号,用来选择第几位数码管工作,称为位码。
各位数码管的段线并联,段码的输出对各位数码管来说都是相同的。
因此在同一时刻如果各位数码管的位选线都处于选通状态的话,6位数码管将显示相同的字符。
若要各位数码管能够显示出与本位相应的字符,就必须采用扫描显示方式,即在某一时刻,只让某一位的位选线处于导通状态,而其它各位的位选线处于关闭状态。
同时,段线上输出相应位要显示字符的字型码。
这样在同一时刻,只有选通的那一位显示出字符,而其它各位则是熄灭的,如此循环下去,就可以使各位数码管显示出将要显示的字符。
虽然这些字符是在不同时刻出现的,而且同一时刻,只有一位显示,其它各位熄灭,但由于数码管具有余辉特性和人眼有视觉暂留现象,只要每位数码管显示间隔足够短,给人眼的视觉印象就会是连续稳定地显示。
总之,多个数码管动态扫描显示,是将所有数码管的相同段并联在一起,通过选通信号分时控制各个数码管的公共端,循环一次点亮多个数码管,并利用人眼的视觉暂留现象,只要扫描的频率大于50Hz,将看不到闪烁现象。
八位数码管扫描显示电路的设计
![八位数码管扫描显示电路的设计](https://img.taocdn.com/s3/m/79d22e4732687e21af45b307e87101f69e31fbcf.png)
《EDA技术及应用》课程设计报告题目:八位数码管扫描显示电路的设计院(系):机电与自动化学院专业班级:电气自动化技术学生姓名:学号:指导教师:20 年6月10日至20 年6月23日华中科技大学武昌分校4、课程设计使用设备(1)EDA及SOPC综合实验平台;(2)导线若干;(3)PC机;(4)Quartus II开发工具软件。
目录摘要................................................................1.课程设计题目及要求 (1)1.1设计题目 (1)1.2L E D显示器的动态扫描驱动电路 (1)1.3设计方案论证 (1)2.L E D显示器动态扫描驱动电路各单元电路设计 (3)2.1计数器与译码器的设计 (3)2.2一位共阳极L E D动态驱动电路设计 (4)2.3七段数码管的设计 (5)3.L E D显示器动态扫描系统设计 (7)3.1整体电路图及工作原理 (7)3.2V H D L程序设计 (7)3.3电路参数计算 (10)4.Q u a r t u s运行调试 (12)4.1时序仿真 (12)4.2硬件逻辑验证 (13)4.3调试结果分析 (13)4.4调试中出现的问题及解决方法 (14)5.设计总结 (15)6.参考文献 (16)摘要本文通过一个3-8译码器电路,将输入的4位2进制数转换为与LED显示对应的8位段码,位码就是LED的显示使能端,对于共阳级的LED而言,高电平使能。
要使8个数码管动态扫描显示,就是把所有数码管的相同段并联在一起,通过选通信号分时控制各个数码管的公共端,循环点亮多个数码管,并利用人眼的视觉暂留现象,只要扫描的频率大于50Hz,将看不到闪烁现象。
使用Quartus II6.0软件设计一个VHDL程序并对设计方案进行仿真,再硬件调试经检测输出正确的设计要求结果。
关键词:动态扫描Quartus II6.0 VHDLAbstractIn this paper, through a 3-8 decoder circuit, the input of four hexadecimal number into 2 and eight LED display the corresponding section of code, a codeis the LED display can make side, for the LED with Yang level, high level canmake. To makeeight digital tube dynamic scans showed that is all the samesegment digital tube connected in parallel, through the gating signal time-sharing control public side, the digital tube loop light multiple digital tube, and use the eye of the phenomenon of persistence of vision, as long as the scanning frequency is more than 50 hz, will see the flicker phenomenon. Using Quartus II6.0 a VHDL program design and the software design simulation, and hardware debugging through testing output correct design requirementsKey words: dynamic scanning Quartus II6.0 VHDL1. 课程设计题目及要求1.1设计题目八位数码管扫描显示电路的设计设计主要内容:本课题要求掌握使用Quartus II设计数字系统的设计思路和设计方法。
项目六 数码管显示译码器的VHDL设计
![项目六 数码管显示译码器的VHDL设计](https://img.taocdn.com/s3/m/5abeee23f68a6529647d27284b73f242336c313c.png)
四、项目实施——1. QuartusⅡ VHDL设计输入法
(3) 项目编译
分析综合
点击Quartus Ⅱ软件工具条上的快捷按钮 进行分析综合。
,对抢答器工程
根据提示信息,处理错误,直至无误为止。
四、项目实施——1. QuartusⅡ VHDL设计输入法
四、项目实施
硬件平台准备
微机一台(Windows XP系统、安装好 Quartus Ⅱ5.0等相关软件)
EDA学习开发板一块 USB电源线一条 ISP下载线一条。
四、项目实施——1. QuartusⅡ VHDL设计输入法
(1) 创建工程
在D:\altera\Quartus50\example\seg7下建立项目seg7 选择EPM240T100C5作为目标器件
三、项目分析
VHDL源程序
--****************************************************** --seg7.vhd library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; --********************************************** entity seg7 is
输入端 ABCD 0000 0001 0010 0011 0100 0101 0110 0111
输出端 abcdefgh 11111100 01100000 11110010 11110010 01100110 10110110 10111110 11100000
vhdl按键控制数码管显示
![vhdl按键控制数码管显示](https://img.taocdn.com/s3/m/dc9177e0b9f3f90f76c61bc3.png)
vhdl按键控制数码管显示
在传统的硬件电路设计中,主要的设计文件是电路原理图,而采用HDL 设计系统硬件电路时主要使用HDL编写源程序。
VHDL的主要优点有:
(1)VHDL支持自顶至下的和基于库的设计方法,而且支持同步电路、异步电路、现场可编程门阵列器件FPGA(field programmable gate array)以及其他随机电路的设计。
(2)VHDL语句的行为描述能力和程序结构决定了它具有支持大规模设计的分解和已有设计再利用的功能,它支持系统的数学模型直到门级电路的描述,并且高层次的行为描述与低层次的门级电路描述、结构描述可以混合使用。
(3)VHDL的硬件描述与具体的工艺技术和硬件结构无关,当门级或门级以上的描述通过仿真检验后,再利用相应的工具将设计映射成不同的工艺,因此电路的设计与工艺的改变是相互独立的。
彼此的改变不会产生不良影响,并且VHDL硬件描述语言的实现目标器件的选择范围广泛,可使用各系列的CPLD、FPGA及各种门阵列器件。
VHDL数码管扫描显示驱动电路
![VHDL数码管扫描显示驱动电路](https://img.taocdn.com/s3/m/66c2e98c83d049649b6658d9.png)
静态显示library ieee;use ieee.std_logic_1164.all;entity bcd_seg isport(a,b,c,d:in std_logic;seg:out std_logic_vector(7 downto 0));end entity bcd_seg;architecture one of bcd_seg issignal bcd:std_logic_vector(3 downto 0);beginbcd<=a&b&c&d;process(bcd)begincase bcd iswhen "0000"=>seg<="00111111";when "0001"=>seg<="00000110";when "0010"=>seg<="01011011";when "0011"=>seg<="01001111";when "0100"=>seg<="01100110";when "0101"=>seg<="01101101";when "0110"=>seg<="01111101";when "0111"=>seg<="00000111";when "1000"=>seg<="01111111";when "1001"=>seg<="01101111";when others=>null;end case;end process;end architecture one;动态显示library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity bcd_seg isport(clk:in std_logic;a,b,c,d:in std_logic;com:out std_logic_vector(2 downto 0);seg:out std_logic_vector(7 downto 0));end entity bcd_seg;architecture one of bcd_seg issignal cnt:std_logic_vector(2 downto 0);signal bcd:std_logic_vector(3 downto 0);beginprocess(clk)beginif clk'event and clk='1' thenif cnt="111" thencnt<="000";elsecnt<=cnt+'1';end if;end if;end process;com<=cnt;bcd<=a&b&c&d;process(bcd)begincase bcd iswhen "0000"=>seg<="00111111";when "0001"=>seg<="00000110";when "0010"=>seg<="01011011";when "0011"=>seg<="01001111";when "0100"=>seg<="01100110";when "0101"=>seg<="01101101";when "0110"=>seg<="01111101";when "0111"=>seg<="00000111";when "1000"=>seg<="01111111";when "1001"=>seg<="01101111";when "1010"=>seg<="01110111";when "1011"=>seg<="01111100";when "1100"=>seg<="00111001";when "1101"=>seg<="01011110";when "1110"=>seg<="01111001";when "1111"=>seg<="01110001";end case;end process;end architecture one;。
实验四 译码扫描显示电路VHDL输入设计
![实验四 译码扫描显示电路VHDL输入设计](https://img.taocdn.com/s3/m/24ffa24bc850ad02de80415a.png)
实验二:计数器动态扫描实验一实验目的熟悉译码扫描动态显示的工作原理、设计过程和实现方法。
二实验内容与要求学习用VHDL设计译码扫描动态显示电路,完成编译、综合、适配、仿真和实验箱上的硬件测试。
三实验平台(1)硬件:计算机、GX-SOC/SOPC-DEVLABCycloneII EP2C35F672C8核心扳(2)软件:Quartus II四实验原理通过动态扫描一组4BIT 的输入,有控制开关控制数据的流向,即在哪个数码管上显示,在允许的条件产生后,扫描记录响应位置上的输入数据(开关选择),将结果动态地显示在共阴数码管上。
在能满足人眼要求的一定的扫描频率下,对数据进行动态显示。
五程序--显示电路--显示电路整合--ledscan.vhd 4 digit bcd-to-7 segment scan displaylibrary ieee ;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity ledscan isport(clk : in std_logic; --synchronousenable : in std_logic; --scan clockdata_bcd :in std_logic_vector(3 downto 0);--input bcdctrl : in std_logic_vector(2 downto 0);---ctrl the order of inputi.e. bcd_dataledseg : out std_logic_vector(6 downto 0);--output to 7 segmentledcom : out std_logic_vector(5 downto 0));--7 segment enableend ledscan;architecture behavior of ledscan issignal com_clk : std_logic_vector(2 downto 0);signal bcd_led : std_logic_vector(3 downto 0);signal data2show : std_logic_vector(23 downto 0);component comcounport(clk : in std_logic;--synchronouse clockenable : in std_logic;--scan clockcomclk : out std_logic_vector(2 downto 0));--output count end component;component com_encodeport(com_clk : in std_logic_vector(2 downto 0);--input countledcom : out std_logic_vector(5 downto 0));--output encodeend component;component bcd_muxport(com_clk : in std_logic_vector(2 downto 0);--input countbcd_data : in std_logic_vector(23 downto 0);--input display databcd_led : out std_logic_vector(3 downto 0));--output to 7 segment end component;component bcd_7segport(bcd_led : in std_logic_vector(3 downto 0);--input bcdledseg : out std_logic_vector(6 downto 0));--output to 7 segment end component;begininput_control:process(clk)beginif (clk'event and clk='1') thenif ctrl="000" thendata2show(3 downto 0)<=data_bcd;-- first value to showelsif ctrl="001" thendata2show(7 downto 4)<=data_bcd;-- 2nd value to showelsif ctrl="010" thendata2show(11 downto 8)<=data_bcd;-- 3rd value to showelsif ctrl="011" thendata2show(15 downto 12)<=data_bcd;-- 4th value to showelsif ctrl="100" thendata2show(19 downto 16)<=data_bcd;-- 5th value to showelsif ctrl="101" thendata2show(23 downto 20)<=data_bcd;-- 6th value to showelsedata2show<="000000000000000000000000";end if;end if;end process ;u0: comcoun port map (clk=>clk,enable=>enable,comclk=>com_clk);-- 7 segment com scan counteru1: com_encode port map(com_clk=>com_clk,ledcom=>ledcom);-- 7 segment com scan counter--u1: com_encode port map (com_clk,ledcom); --7 segment com encode u2: bcd_mux port map (com_clk=>com_clk,bcd_data=>data2show,bcd_led=>bcd_led);--multiplexeru3: bcd_7seg port map (bcd_led=>bcd_led,ledseg=>ledseg); --bcd to7 segment encoderend behavior;--七段显示扫描电路--comcoun.vhd 7 segment com scan counterlibrary ieee ;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity comcoun isport(clk : in std_logic;--synchronouse clockenable : in std_logic;--scan clockcomclk : out std_logic_vector(2 downto 0));--output countend comcoun;architecture behavior of comcoun issignal q : std_logic_vector(2 downto 0);--internal counted signal beginfscan:process(clk)beginif (clk'event and clk='1') thenif (enable='1') thenif q>=6 thenq<="000";--initial counterelseq<=q+1;--countingend if;end if;end if;end process fscan;comclk<=q; --output internal countend behavior;--计数译码电路 -- 6 共阴--com_encode.vhd 7 segment com encoderlibrary ieee ;use ieee.std_logic_1164.all;entity com_encode isport(com_clk :in std_logic_vector(2 downto 0);--input countledcom :out std_logic_vector(5 downto 0));--output encodeend com_encode;architecture behavior of com_encode isbeginledcom<="000001" when com_clk="001" else"000010" when com_clk="010" else"000100" when com_clk="011" else"001000"when com_clk="100" else"010000"when com_clk="101" else"100000";end behavior;--bcd_mux.vhd multiplexer of bcd-selectionlibrary ieee ;use ieee.std_logic_1164.all;entity bcd_mux isport(com_clk : in std_logic_vector(2 downto 0);--input countbcd_data :in std_logic_vector(23 downto 0);--input display data bcd_led : out std_logic_vector(3 downto 0));--output to 7 segment end bcd_mux;architecture behavior of bcd_mux isbeginbcd_led<=bcd_data(3 downto 0) when com_clk="001" elsebcd_data(7 downto 4) when com_clk="010" elsebcd_data(11 downto 8) when com_clk="011" elsebcd_data(15 downto 12)when com_clk="100" elsebcd_data(19 downto 16)when com_clk="101" elsebcd_data(23 downto 20)when com_clk="110" else"----";end behavior;--bcd对应七段显示器编码电路--bcd_7seg.vhd bcd to 7 segment encoderlibrary ieee ;use ieee.std_logic_1164.all;entity bcd_7seg isport(bcd_led :in std_logic_vector(3 downto 0);--input bcdledseg : out std_logic_vector(6 downto 0));--output to 7 segment end bcd_7seg;architecture behavior of bcd_7seg isbeginwith bcd_led selectledseg<="0111111" when "0000",--0"0000110" when "0001",--1"1011011" when "0010",--2"1001111" when "0011",--3"1100110" when "0100",--4"1101101" when "0101",--5"1111101" when "0110",--6"0100111" when "0111",--7"1111111" when "1000",--8"1101111" when "1001",--9"1110111" when "1010",--A"1111100"when "1011",--b"0111001"when "1100",--c"1011110" when "1101",--d"1111001"when "1110",--E"1110001" when "1111",--F"0000000" when others;end behavior;六引脚定义及代码图2-1引脚定义代码:# Copyright (C) 1991-2008 Altera Corporation# Your use of Altera Corporation's design tools, logic functions # and other software and tools, and its AMPP partner logic# functions, and any output files from any of the foregoing# (including device programming or simulation files), and any# associated documentation or information are expressly subject # to the terms and conditions of the Altera Program License# Subscription Agreement, Altera MegaCore Function License# Agreement, or other applicable license agreement, including,# without limitation, that your use is for the sole purpose of# programming logic devices manufactured by Altera and sold by# Altera or its authorized distributors. Please refer to the# applicable agreement for further details.# Quartus II: Generate Tcl File for Project# File: ACOUNT10.tcl# Generated on: Tue Nov 03 11:40:42 2009# Load Quartus II Tcl Project packagepackage require ::quartus::projectset need_to_close_project 0set make_assignments 1# Check that the right project is openif {[is_project_open]} {if {[string compare $quartus(project) "ACOUNT10"]} {puts "Project ACOUNT10 is not open"set make_assignments 0}} else {# Only open if not already openif {[project_exists ACOUNT10]} {project_open -revision ACOUNT10 ACOUNT10} else {project_new -revision ACOUNT10 ACOUNT10}set need_to_close_project 1}# Make assignmentsif {$make_assignments} {set_global_assignment -name FAMILY "Cyclone II"set_global_assignment -name DEVICE EP2C35F672C8set_global_assignment -name ORIGINAL_QUARTUS_VERSION 8.0set_global_assignment -name PROJECT_CREATION_TIME_DATE "11:03:58 NOVEMBER 03, 2009"set_global_assignment -name LAST_QUARTUS_VERSION 8.0set_global_assignment -name USE_GENERATED_PHYSICAL_CONSTRAINTS OFF -section_id eda_palaceset_global_assignment -name DEVICE_FILTER_PACKAGE FBGAset_global_assignment -name DEVICE_FILTER_PIN_COUNT 672set_global_assignment -name DEVICE_FILTER_SPEED_GRADE 8set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0set_global_assignment -name MAX_CORE_JUNCTION_TEMP 85set_global_assignment -name VHDL_FILE com_encode.vhdset_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Topset_global_assignment -name PARTITION_COLOR 14622752 -section_id Top set_global_assignment -name LL_ROOT_REGION ON -section_id "Root Region"set_global_assignment -name LL_MEMBER_STATE LOCKED -section_id "Root Region"set_global_assignment -name VHDL_FILE comcoun.vhdset_global_assignment -name VHDL_FILE COUNT10a.vhdset_global_assignment -name VHDL_FILE bcd_7seg.vhdset_global_assignment -name VHDL_FILE clkgen.vhdset_global_assignment -name VHDL_FILE ACOUNT10.vhdset_global_assignment -name VECTOR_WAVEFORM_FILE warefare.vwfset_global_assignment -name INCREMENTAL_VECTOR_INPUT_SOURCE warefare.vwfset_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Topset_location_assignment PIN_P25 -to clkset_location_assignment PIN_F6 -to Clrset_location_assignment PIN_B22 -to enset_location_assignment PIN_H23 -to LEDCOM[5]set_location_assignment PIN_G26 -to LEDCOM[4]set_location_assignment PIN_G25 -to LEDCOM[3]set_location_assignment PIN_G24 -to LEDCOM[2]set_location_assignment PIN_G23 -to LEDCOM[1]set_location_assignment PIN_P18 -to LEDCOM[0]set_location_assignment PIN_F26 -to LEDSEG[6]set_location_assignment PIN_F25 -to LEDSEG[5]set_location_assignment PIN_J20 -to LEDSEG[4]set_location_assignment PIN_J21 -to LEDSEG[3]set_location_assignment PIN_F23 -to LEDSEG[2]set_location_assignment PIN_F24 -to LEDSEG[1]set_location_assignment PIN_E25 -to LEDSEG[0]set_location_assignment PIN_B21 -to EN6# Commit assignmentsexport_assignments# Close projectif {$need_to_close_project} {project_close}}七仿真图2-2 创建VHDL文件图2-3 PIN口设置图2-4 创建VERILOG文件图2-5 运行八导入程序图2-7 下载图2-8 实验结果。
verilog共阴极数码管扫描显示现象描述
![verilog共阴极数码管扫描显示现象描述](https://img.taocdn.com/s3/m/060b07e1f424ccbff121dd36a32d7375a417c60b.png)
共阴极数码管是一种常见的显示器件,用于显示数字、字母和符号等信息。
在共阴极数码管中,所有的阴极(即数码管的段)都连接在一起,而阳极则分别连接到控制芯片的输出引脚上。
共阴极数码管的扫描显示原理如下:
1.首先,通过控制芯片的输出引脚,将对应数字或字符的阳极(即数码管的位)置为
低电平,其他位置为高电平。
2.当某一位的阳极被置为低电平时,该位对应的阴极段需要显示的内容也会被激活。
例如,如果要显示数字"0",则会激活数码管的a、b、c、d、e、f段。
3.接下来,控制芯片会快速切换到下一位,依次将每一位的阳极置为低电平,并相应
地激活阴极段。
4.循环上述步骤,不断切换每一位的阳极,以实现连续的扫描显示效果。
由于共阴极数码管的阴极段都是连接在一起的,显示时只能同时激活一位的阳极,因此需要快速地切换扫描每一位,以使人眼产生连续的视觉效果。
通过高速的扫描和刷新频率,可以让人眼感觉到所有的位都在同时显示,从而呈现出完整的数字、字母或符号。
需要注意的是,共阴极数码管的显示亮度较低,因为每个段都是短暂地被激活并切换显示,所以显示亮度要比共阳极数码管略低。
另外,使用共阴极数码管时,控制芯片需要按照特定的顺序和时间间隔进行扫描,确保每一位都能得到正确的激活和显示。
vhdl共阴极数码显示电路
![vhdl共阴极数码显示电路](https://img.taocdn.com/s3/m/23932e3991c69ec3d5bbfd0a79563c1ec5dad73a.png)
VHDL共阴极数码显示电路一、引言数字显示电路是现代电子设备中常见的基础电路之一,它能将数字信号转换为人们可以直观理解的数字显示形式。
在数字显示电路中,共阴极数码显示电路是一种常见且重要的设计方式。
本文将深入探讨VHDL共阴极数码显示电路的设计原理及实现过程。
二、设计原理1. 共阴极数码管共阴极数码管是一种常见的数字显示器件,它由多个发光二极管(LED)组成。
每个数码管有7个LED芯片,用于显示0-9的数字。
共阴极数码管在数码显示电路中通过编码器和驱动器来驱动。
2. VHDL编程语言VHDL(VHSIC Hardware Description Language)是一种用于描述数字电路和系统设计的硬件描述语言。
VHDL具有强大的描述能力,可以将电路的结构和功能以类似代码的方式进行描述。
在设计共阴极数码显示电路时,可以使用VHDL语言进行编程。
三、设计过程1. 数码管驱动器设计数码管驱动器是实现数码管显示的关键组件,它通过有效的时间分配控制数码管的亮灭。
数码管驱动器可以使用有限状态机来实现,通过组合电路和时钟信号进行运行控制。
2. VHDL编程实现利用VHDL编程语言,可以将数码管驱动器的功能进行描述和实现。
首先需要定义数码管的输入和输出信号,包括时钟信号、使能信号和数据输入信号。
然后利用VHDL语言的结构体和组合逻辑运算符来实现数码管驱动器的状态转换和输出控制。
3. 时序约束设计在VHDL编程中,由于电路的运行速度和时钟频率的要求,需要进行时序约束设计。
通过设置时序约束,可以保证电路在不同条件下的稳定工作。
时序约束包括时钟延迟、数据传输延迟和时钟周期等方面的约束。
4. 仿真和验证在进行VHDL编程后,需要利用仿真工具进行电路的仿真和验证。
通过对电路进行不同输入条件和时钟频率下的仿真,可以验证电路的正确性和稳定性。
如果仿真结果符合预期,则可以进入下一阶段的电路实现。
四、实例应用共阴极数码显示电路在实际应用中有广泛的应用场景。
数码管动态扫描VHDL程序设计
![数码管动态扫描VHDL程序设计](https://img.taocdn.com/s3/m/ebdf1d63af1ffc4ffe47acea.png)
END IF; END PROCESS; END a;
仿真结果:
三、同步时钟CLK频率计算
CLK频率计算: 根据人的视觉暂留现象,一个数码管 所要显示的字符只要在一秒内点亮24次以 上,则感觉上该数码管没有熄灭一样。若8 只数码管要出现这种效果,要求在一秒内 每只数码管要闪亮24次以上。 则CLK频率应为24X8=192Hz以上, 为了减少闪烁现象,达到较好的显示效果, 取CLK频率为1024Hz,每秒内每个数码管 显示次数为128次。 CLK1=CLK; CLK2= CLK;
ARCHITECTURE a OF disp_data2 IS SIGNAL NUM1: INTEGER RANGE 7 DOWNTO 0; SIGNAL num2: INTEGER RANGE 8 DOWNTO 0; SIGNAL q0,q1,q2,q3,q4,q5,q6,q7:STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN WR<='1'; process(clk) begin if clk'event and clk='1' then if num1<=7 then num1<=num1+1; else num1<=0; end if; end if; end process;
(2)自左至右点亮数码管,每次只点亮一个,最后全息灭,再 重复以上动作,每次变化时间间隔为1秒。 (3) 先中间两个点亮,再依次向外点亮;全亮后,再依次向中 间熄灭;重复上述步骤,每次变化时间间隔为1秒。
一、七段显示器动态扫描电路设计框图
双口RAM A00 地 址 线 数据线 WR A0 A1 A2 a b c d e f g c1 RD读 clk1 clk2 CLK 扫描控制器 c2 c3 c4 c5 c6 c7 c8
基于VHDL的键盘扫描及显示电路毕业设计
![基于VHDL的键盘扫描及显示电路毕业设计](https://img.taocdn.com/s3/m/aa16c1c45022aaea998f0fbb.png)
基于VHDL的键盘扫描及显示电路一、工作原理:可编程器件的KEY_HANG[3..0]行信号输出端不停循环输出“1110”“1101”“1011”“0111”。
当没有键按下时可编程器件的KEY_LIE[3..0]列信号输入端检测到的是“1111”。
当有按键按下时,如按下1,此时KEY_HANG[3..0]行信号输出为“0111”,即KEY_HANG[3..0]的3管脚为“0”,可由电路看出,此时输入端KEY_LIE[3..0]检测到的将是“0111”。
KEY_LIE[3..0]的3管脚为0,可以在编写程序时,将输出信号KEY_HANG[3..0]与输入信号KEY_LIE[3..0]同时判断,比如可以认为当数据“KEY_HANG&KEY_LIE”为“01110111”时,可译码成数据1,。
同理可得其他按键的编码。
根据不同数据的编码译成不同的数据。
名称IO属性描述备注clk in 输入时钟,1K和40K频率KEY_HANG[3..0]out矩阵键盘的扫描输入端口KEY_LIE[3:0] in矩阵键盘的扫描输出端口START out 数据输出标志DISP DATA[6..0]out 数码管译码显示译码输出7bitDASP SEL[1..0] out数码管扫描输出2bitCLK_1K CLK_40K CLK_1K STARTKEY_HANG[3..0] CLE_40K DATA_P[7..0]DISP DATA[6..0] KEY_LIE DASP SEL[1..0]二、设计思路:1.循环输出行信号,检测列信号输入,将行列信号相并。
2.译键值。
3.去抖动。
在译没一个键值后,为了防止抖动,加了一个计算环节,一旦检测到列信号后,译码,紧跟着进入计数环节,此时键抖动不会进入其他环节,这样可以防止抖动。
4.数码管译码、循环显示。
电路的具体功能罗列如下:1) 采用4×4矩阵键盘作为操作数和操作符的输入设备。
EDA实验二_VHDL七段数码管显示译码
![EDA实验二_VHDL七段数码管显示译码](https://img.taocdn.com/s3/m/4f582da768dc5022aaea998fcc22bcd126ff42e8.png)
EDA实验二七段数码管显示译码的设计一、实验目的1、掌握七段数码管译码器的工作原理;2、学会运用波形仿真测试检验程序的正确性;3、学会运用波形仿真测试检验程序的正确性。
二、实验设备ZYE1502C型实验箱三、内容要求1、用拨位开关输入8421BCD码,七段数码管显示“0-F”16个16进制的数字。
2、观察字符亮度和显示刷新的效果:(1)在8个七段数码管上同时显示某一数字;(2)在8个七段数码管上动态显示某一数字。
3、扩展内容:(1)动态显示时,能即时改变显示的顺序;(2)动态显示时,实现显示数字从0~F的循环显示。
四、实验步骤1、输入:设计部分采用VHDL语言完成;2、编译;3、仿真;4、下载;5、连线。
(1)四个拨位开关(在P1、P2处选择)连接D3、D2、D1、D0信号所对应的管脚。
时钟CLK所对应的管脚同实验箱上的时钟源相连。
(2)扫描片选信号DIG(0 TO 3)的管脚同七段数码管(共阴)相连;(3)七段数码管驱动信号A,B,C,D,E,F,G的管脚分别同扫描数码管的段输入PCLK处的连接线孔A,B,C,D,E,F,G相连。
五、实验报告1、论述实验过程和步骤;2、填写正确的实验结果。
(1)通过两种显示效果分析:字符显示亮度同扫描频率的关系,且让人眼感觉不出光闪烁现象的最低扫描频率是多少?答:扫描频率越高,显示亮度越低。
人眼看是否闪烁与所用的时钟和分频方式有关,在频率稳定和分频均匀的情况下,最低扫描频率为256Hz,若分频不均匀或频率不稳定,则需更高频率。
(2)字形编码的种类,即一个7段数码管可产生多少种字符,产生所有字符需要多少根被译码信号线?答:一个7段数码管可产生2^7=128种字符,产生所有字符至少需要7根被译码信号线。
但假如只编译0-F,16个字符,则至少只需要4根被译码信号线。
六、实验小结。
答:1、不同控制端需要预先分配控制优先级,否则编写的时候会出现很多问题。
优先级分为普通和特殊,一般错误情况可以跨越权限显示出来。
VHDL数码管扫描显示实验代码
![VHDL数码管扫描显示实验代码](https://img.taocdn.com/s3/m/d6bdf3c22cc58bd63186bdd9.png)
静态数字显示:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY staticdigital ISPORT (clk,rst: IN STD_LOGIC; --rst复位,高有效figures: OUT STD_LOGIC_VECTOR(6 DOWNTO 0); --七段数码管cats: OUT STD_LOGIC_VECTOR(5 DOWNTO 0)); --控制端END staticdigital;ARCHITECTURE digital OF staticdigital ISSIGNAL address: STD_LOGIC_VECTOR(2 DOWNTO 0); --记录控制端信号中‘0’的位--置,亦即当前数码管的位置SIGNAL colti: INTEGER RANGE 1 TO 2500; --外部时钟,控制一次状态显示的时间BEGINPROCESS(clk,rst)BEGINIF(rst = '1') THEN --复位端有效address <= "111";ELSIF(clk'EVENT AND clk = '1') THEN --等待时钟上升沿的到来colti <= colti + 1;IF(address = "101") THENIF (colti = 2500) THEN --但是要考虑外部时钟是否停留了足够的时间address <= "000";END IF;ELSEIF (colti = 2500) THENaddress <= address + 1;END IF;END IF;END IF;END PROCESS;PROCESS(address)--一个结构体可以有多个进程,--进程之间是并行运行的。
基于VHDL的数字钟动态扫描显示电路设计
![基于VHDL的数字钟动态扫描显示电路设计](https://img.taocdn.com/s3/m/aeb2ffd1de80d4d8d05a4fb0.png)
基于VHDL的数字钟动态扫描显示电路设计七段数码管动态扫描VHDL 机构化设计元件例化配置原理图前言:随着电子技术的发展,应用系统向着小型化、快速化、大容量、重量轻的方向发展,EDA(Elect ron icDesign A u tom at ic)技术的应用引起电子产品及系统开发的革命性变革。
VHDL语言作为可编程逻辑器件的标准语言描述能力强,覆盖面广,抽象能力强,在实际应用中越来越广泛。
在这个阶段,人们开始追求贯彻整个系统设计的自动化,可以从繁重的设计工作中彻底解脱出来,把精力集中在创造性的方案与概念构思上,从而可以提高设计效率,缩短产品的研制周期。
整个过程通过EDA工具自动完成,大大减轻了设计人员的工作强度,提高了设计质量,减少了出错的机会。
VHDL是美国国防部提出的一种经过标准化认证的硬件描述语言,使用VHDL语言进行硬件设计有如下特点:将一项工程设计(或称设计实体)分成外部(或称可视部分,即端口)和内部(或称不可视部分),即设计实体的内部功能和算法完成部分。
一、电路设计的基本原理()动态显示原理:N个LED数码管以静态方式显示时,需用到8×n条引出端线,通常器件输出端的引脚是有限的,因此对于多个LED数码管,可以考虑采用循环显示的动态扫描方法,即在一个数码管显示之后另一个数码管立即显示,利用人眼的视觉暂留特性,可以达到多个数码管同时显示的效果。
()数字钟动态扫描原理:对于六个数码管,可以假设6只LED数码管的七段a—g和小数点dp并接在一起,分别引出6个数码管的阴极A0—A5。
只要在A0—A5中某个管脚上输入低电平,而其余的均输入高电平,如A0=0,A1—A5=11111,则A0对应的数码管就显示数据,而A1—A5所对应的数码管不显示数据。
为了达到动态扫描的目的,我们在A0—A5管脚上轮流加入低电平,在点亮不同数码管的同时输入不同的数据,可在数码管上同时显示6位不同的数字,即将时间分隔为6个周期的循环,如下图。
vhdl共阴极数码显示电路
![vhdl共阴极数码显示电路](https://img.taocdn.com/s3/m/01dee7a180c758f5f61fb7360b4c2e3f57272506.png)
vhdl共阴极数码显示电路VHDL共阴极数码显示电路数码显示器是一种常见的电子显示设备,它能够将数字信息以可视化的方式呈现给用户。
VHDL共阴极数码显示电路是一种使用VHDL 语言设计的共阴极数码显示器电路。
本文将详细介绍VHDL共阴极数码显示电路的原理和设计过程。
共阴极数码显示器是一种常见的数码显示器类型,它由多个共阴极数码管组成。
每个共阴极数码管由7个LED灯组成,可显示0到9的数字。
共阴极数码管的工作原理是,当给定特定的电压时,相应的LED灯会点亮,形成所需的数字。
其中,共阴极表示数码管的阴极端口是连接在一起的,而阳极端口则是分别连接的。
VHDL语言是一种用于描述数字系统的硬件描述语言,它可以对数字电路进行建模和仿真。
使用VHDL语言进行设计,可以使得电路的功能更加清晰明了,并且可以方便地进行验证和修改。
在设计VHDL共阴极数码显示电路时,首先需要定义输入和输出信号。
输入信号通常包括一个4位的二进制数,用于表示要显示的数字。
输出信号是连接到共阴极数码管的引脚,用于控制数码管的亮灭。
接下来,需要编写VHDL代码来描述共阴极数码显示电路的行为。
代码主要包括两部分:数码管驱动模块和顶层模块。
数码管驱动模块是用来控制数码管显示的核心模块。
它根据输入的二进制数,将对应的数字显示在数码管上。
在这个模块中,需要定义一个包含数字对应的真值表,以便根据输入的二进制数选择对应的数字。
顶层模块是将数码管驱动模块和输入输出信号连接起来的模块。
它负责接收输入信号,将其传递给数码管驱动模块,并将输出信号连接到数码管的引脚上。
设计完成后,可以使用VHDL仿真工具对设计的电路进行验证。
通过输入不同的二进制数,观察数码管上显示的数字是否与预期相符。
如果一切正常,可以将设计的电路下载到FPGA或其他可编程逻辑器件中进行实际的硬件测试。
VHDL共阴极数码显示电路具有简单、可靠、易于实现等优点。
它在数字电子系统中得到广泛应用,例如计数器、时钟、测量仪器等。
VHDL扫面显示电路设计报告
![VHDL扫面显示电路设计报告](https://img.taocdn.com/s3/m/6ea5df7fa417866fb84a8e96.png)
电子科技大学学生姓名:学号:指导教师:一、实验室名称:实验报告二、实验项目名称:扫描显示电路设计三、实验原理:数码显示板上一共有8 个数码管,如果按照传统的数码管驱动方式(静态扫描方式),则需要8 个七段译码器进行驱动,这样既浪费资源,有时电路工作也不可靠。
所以现在最常见的数码管驱动电路已经不用上述的静态扫描方式了,而是采用动态扫描显示的方式,这种方式只需一个译码器就可以实现电路正常、可靠的工作,这样大大节省资源。
动态数码扫描显示方式是利用了人眼的视觉暂留效应,把八个数码管按一定顺序(从左至右或从右至左)进行点亮,当点亮的频率(即扫描频率)不大时,我们看到的是数码管一个个的点亮,然而,当点亮频率足够大时,我们看到的不再是一个一个的点亮,而是全部同时显示(点亮),与传统方式得到的视觉效果完全一样。
因此我们只要给数码管这样一个扫描频率,那么就可以实现两个以上的数码管同时点亮。
而这个频率我们可以通过一个计数器来产生,只要计数频率足够大,就可以实现我们的要求。
事实上,因为数码管点亮不是瞬间就可以的,它也需要一定的时间,该时间与数码管的选择有关系。
为了折中这一对矛盾,实验中一般可将计数频率选择在100Hz左右肯定可以满足上述两个要求。
动态数码扫描显示的硬件电路设计要求是:对共阴数码管,将其公共端阴极接三八译码器的输出,三八译码器的输入为位选信号输入;将8 个(或更多)的数码管的相同段接在一起,然后引出。
原理图如下:四、实验目的:1、进一步熟悉用VHDL进行EDA设计方法;2、本实验与实验二的不同之处在八个数码管都要稳定地显示;3、进一步了解EDA实验箱的基本功能;五、实验内容:1、用VHDL设计一个扫描显示电路,使得八个数码管能同时显示(要求显示的值为自己的学号+100,如学号为1,则数码管显示101,多出的数码管全显示0),然后编译、仿真;2、下载该程序,验证程序是否正确。
3、请事先准备一个软盘或优盘,本实验程序需要保存,后面实验需要用到。
基于vhdl语言的二进制转十进制并用数码管显示的设计
![基于vhdl语言的二进制转十进制并用数码管显示的设计](https://img.taocdn.com/s3/m/dc27648e50e79b89680203d8ce2f0066f5336438.png)
河南科技学院机电学院VHDL课程设计报告题目:八位数码管显示专业班级:电气工程及其自动化102姓名:周迎接学号:20100344214指导教师:付广春完成日期:2012年12月27 日目录1 引言 (2)2 总体设计方案 (2)2.1 输入引脚数目的计算 (3)2.2 二进制转为十进制部分程序设计 (3)2.3 数码管显示部分程序设计 (4)3 仿真显示 (5)3.1 显示3仿真图 (5)3.2显示96的仿真图 (5)4 心得体会 (6)参考文献 (6)附录1 (7)摘要随着当今社会电子技术的快速发展,单凭借硬件已不再能满足广大人民的需求,这时候软件就显示除了他们突出的优点。
与其他编程语言相比,VHDL语言以其超强的硬件描述能力,良好的可读性和可移植性,以及其良好的用户自定义性受到了广大用户的青睐。
VHDL语言在最近几年的发展及其迅猛,由此可以看出其用途已经变的越来越广泛。
一个VHDL程序由5个部分组成,包括实体(ENTITY)、结构体(architecture)、配置(coxnfiguration)、包(package)和库(library)。
实体和结构体两大部分组成程序设计的最基本单元。
图2.2表示的是一个VHDL 程序的基本组成。
配置是用来从库中选择所需要的单元来组成该系统设计的不同规格的不同版本,VHDL和Verilog HDL已成为IEEE的标准语言,使用IEEE提供的版本。
包是存放每个设计模块都能共享的设计类型、常数和子程序的集合体。
库是用来存放已编译的实体、结构体、包和配置。
在设计中可以使用ASIC芯片制造商提供的库,也可以使用由用户生成的IP库。
今天我所要设计的是基于VHDL语言的8位数码管显示电路,其要实现的功能是把输入的二进制数转换为对应的十进制数,并通过数码管显示出来。
其过程大致可以分为通过程序将输入的二进制数先转换为对应的十进制数,然后再把对应的十进制数与数码管的管脚对应起来,使其显示在数码管上。
数码管的扫描显示
![数码管的扫描显示](https://img.taocdn.com/s3/m/38449fccda38376baf1fae21.png)
其基本要求如下:1. 实现基本的计时功能,输入1kHz的时钟,采用24小时制计时,能显示时、分、秒。
2. 校正功能; 时分均有校时功能。
3. 当计时器运行到59分49秒开始报时,每鸣叫1s就停叫1s,共鸣叫6,前5响为低音,频率为750Hz;最后1响为高音,频率为1KHz。
4. 可设定夜间某个时段不报时。
5. 设定闹钟,当按下闹铃开关时,可在规定时间闹铃,当开关复位时,闹铃停止。
方案一根据方案的要求,可以用VHDL语言,采用自顶向下的设计方法。
可用分频的方法得到1HZ的时钟用与计数;用7段数码管来显示时间,需要6个数码管;同时可以根据不同的频率的输入来调节蜂鸣器的鸣叫声音,从而实现整点报时功能和闹铃功能。
对于闹铃功能,可以用一个触发器和一个寄存器来实现。
根据要求基本确定由以下模块组成:1.秒计数模块:秒计数,在频率为1HZ的时钟下以60次为循环计数,并产生进位信号影响分计数;2.分计数模块:分计数,在秒进位信号为高电平时,计数一次,同样以60次为一个循环计数,同时产生分进位信号影响时计数;3.时计数模块:时计数,在分进位信号为高电平时,计数一次,以24次为一个循环计数;4.频率产生模块:主要有2个部分,一个是产生1HZ的计数频率,一个是产生725HZ和500HZ的蜂鸣器鸣叫频率;5.时间显示模块:通过选中不同的数码管,同时进行一定频率的扫描显示时,分,秒。
6.时间设置模块:设置调试使能端,可以调时,分。
基本功能是在使能端为高电平时,可以使时和分循环计数;7.整点报时模块:在秒计数到50秒时,同时分计数到59分开始,丰鸣器产生每个2秒的鸣叫(500HZ),到整点是产生750HZ的鸣叫。
8.闹钟模块:在设定闹钟闹铃时间后,当闹钟使能端有效时,可在闹铃时间闹铃,通过人工拨0后停闹。
A: 秒计数模块VHDL源程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY MIAN IS ---------------秒计数模块-------------PORT(RD,CLK:IN STD_LOGIC; ------------秒复位信号-----SEC1,SEC0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);CO:OUT STD_LOGIC);END MIAN;ARCHITECTURE MIANA OF MIAN ISBEGINPROCESS(CLK,RD) --秒计数进程VARIABLE CNT1,CNT0:STD_LOGIC_VECTOR(3 DOWNTO 0); 输出信号BEGINIF RD='1' THEN ----复位信号为1时,秒计数清零---CNT1:="0000";CNT0:="0000";ELSIF CLK 'EVENT AND CLK='1' THEN -输入时钟信号和清零信号IF CNT1="0101"AND CNT0="1000"THEN –当秒计数为58时进位信号为1 CO<='1';CNT0:="1001"; -秒低位小于9时,加1ELSIF CNT0<"1001"THENCNT0:=CNT0+1;ELSECNT0:="0000";IF CNT1<"0101"THEN -秒高位小于5时,加1CNT1:=CNT1+1;ELSECNT1:="0000";CO<='0';END IF;END IF;END IF;SEC1<=CNT1;SEC0<=CNT0;END PROCESS;END MIANA;B:分计数模块VHDL源程序:LIBRARY IEEE; --分计数模块USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY MINA ISPORT(EN,CLK:IN STD_LOGIC; -输入时钟信号和进位信号MIN1,MIN0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); --输出分计数和进位 CO:OUT STD_LOGIC);END MINA;ARCHITECTURE MIN OF MINA ISBEGINPROCESS(CLK) --分计数进程VARIABLE CNT1,CNT0:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINIF CLK'EVENT AND CLK='1' THEN 时钟上升沿,en为1时分开始计数IF EN='1'THENIF CNT1="0101"AND CNT0="1000"THEN -当分计数到58时产生进位信号 CO<='1';CNT0:="1001";ELSIF CNT0<"1001"THEN --分低位小于9时,cnt0加1CNT0:=CNT0+1;ELSECNT0:="0000";IF CNT1<"0101"THENCNT1:=CNT1+1;ELSECNT1:="0000";CO<='0';END IF;END IF;END IF;END IF;MIN1<=CNT1;MIN0<=CNT0;END PROCESS;END MIN;C:时计数模块VHDL源程序:LIBRARY IEEE; --时计数模块USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY HOUR ISPORT(EN,CLK:IN STD_LOGIC; -输入时钟信号和分模块进位信号H1,H0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); -输出h0,h1END HOUR;ARCHITECTURE HOURA OF HOUR ISBEGINPROCESS(CLK) --小时计数进程VARIABLE CNT1,CNT0:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINIF CLK 'EVENT AND CLK='1' THEN --时钟上升沿,en为1时小时开始计数 IF EN='1' THENIF CNT0="0011"AND CNT1="0010"THENCNT0:="0000";CNT1:="0000";ELSIF CNT0<"1001"THENCNT0:=CNT0+1;ELSECNT0:="0000";CNT1:=CNT1+1;END IF;END IF;END IF;H1<=CNT1;H0<=CNT0;END PROCESS;END HOURA;D:频率产生模块:1.500HZ和1KHZ的频率产生:LIBRARY IEEE; --小时计数模块USE IEEE.STD_LOGIC_1164.ALL;ENTITY CCC ISPORT(CLK:IN STD_LOGIC;q1k,Q500:OUT STD_LOGIC);END CCC;ARCHITECTURE CCCA OF CCC ISSIGNAL X:STD_LOGIC;BEGINPROCESS(CLK)BEGINIF CLK 'EVENT AND CLK='1' THENX<=NOT X;END IF;q1k<=X;END PROCESS;PROESS(X)VARIABLE Y:STD_LOGIC;BEGINIF X 'EVENT AND X='1' THENY:=NOT Y;END IF;Q500<=Y;END PROCESS;END CCC;2.1HZ的频率产生:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY FEN10 ISPORT(CLK:IN STD_LOGIC;Q:OUT STD_LOGIC);END FEN10;ARCHITECTURE FENA OF FEN10 ISBEGINPROCESS(CLK)VARIABLE CNT:INTEGER RANGE 0 TO 999; BEGINIF CLK 'EVENT AND CLK='1' THENIF CNT<999 THENCNT:=CNT+1;Q<='0';ELSECNT:=0;Q<='1';END IF;END IF;END PROCESS;END FENA;E:时间显示模块:1.数码管选中:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY BBB IS ----用于选中对应的数码管----PORT(SEC1,SEC0,MIN1,MIN0,H1,H0:IN STD_LOGIC_VECTOR(3 DOWNTO 0); SEL:IN STD_LOGIC_VECTOR(2 DOWNTO 0);Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END BBB;ARCHITECTURE BBBA OF BBB ISBEGINPROCESS(SEL)BEGINCASE SEL IS ----由低位到高位依次显示秒,分,时-------WHEN"000"=>Q<=SEC0; -当000时输出秒低位WHEN"001"=>Q<=SEC1; -001时输出秒高位WHEN"011"=>Q<=MIN0; -当011时输出分低位WHEN"100"=>Q<=MIN1; -当100时输出分高位WHEN"110"=>Q<=H0; --当110时输出时低位WHEN"111"=>Q<=H1; 当111时输出时高位WHEN OTHERS=>Q<="1111";END CASE;END PROCESS;END BBB;2.译码显示:library ieee;use ieee.std_logic_1164.all; -字模输出模块entity dispa isport(d:in std_logic_vector(3 downto 0); --输入选通信号q: out std_logic_vector(6 downto 0));end dispa;architecture dispa_arc of dispa isbeginprocess(d)begincase d iswhen "0000" =>q<="0111111";when "0001" =>q<="0000110";when "0010" =>q<="1011011";when "0011" =>q<="1001111";when "0100" =>q<="1100110";when "0101" =>q<="1101101";when "0110" =>q<="1111101";when "0111" =>q<="0100111";when "1000" =>q<="1111111";when "1001" =>q<="1101111";when others =>q<="0000000";end case;end process;end dispa_arc;3.数码管的扫描显示:LIBRAR Y IEEE;USE IEEE.STD_LOGIC_1164.ALL; -字模输出模块USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY SEL ISPORT(CLK:IN STD_LOGIC;Q:OUT STD_LOGIC_VECTOR(2 DOWNTO 0)); --输入选通信号 END SEL;ARCHITECTURE SELA OF SEL ISBEGINPROCESS(CLK)V ARIABLE CNT:ST D_LOGIC_VECTOR(2 DOWNTO 0);BEGINIF CLK'EVENT AND CLK='1' THENCNT:=CNT+1;END IF;Q<=CNT;END PROCESS;END SELA;G:整点报时功能:library ieee; --整点报时模块use ieee.std_logic_1164.all;entity sst isport(h1,h0,m1,m0,s1,s0:in std_log i c_vector(3 downto 0);q1,q0:in std_logic; -输入分,秒信号和时钟信号q: out std_logic); --输出两个不同频率的音频信号end sst;architecture sss_arc of sst issignal q3,q4:std_logic;beginprocess(m1,m0,s1,s0)beginif h1="0000" and h0<"0111" thenq3<='0';q4<='0';elsif m1="0101"and m0="1001"and s1="0101" thenif s0="0000"or s0="0010"or s0="0100" or s0="0110" or s0="1000" then q3<='1' ;else --当计时到达59'50" 52" 54" 56" 58"鸣叫,鸣叫频率为500HZ,q3<='0';end if;end if;if h1="0000" and h0<"0111" th e nq3<='0';q4<='0';elsif m1="0000" and m0="0000"and s1="0000" and s0="0000" thenq4<='1'; 当整点时为最后一声整点报时,频率为1k HZ,elseq4<='0';end if;end process;q<=(q3 and q0)or(q4 and q1);end sss_arc;闹钟功能模块:G:LIBRARY IEEE;USE I EEE.STD_LOGIC_1164.ALL;ENTITY NAL ISPORT(M1,M0,H1,H0:IN STD_LOGIC_VECTOR(3 DOWNTO 0);en: in STD_LOGIC;Q:OUT STD_LOGIC);END NAL;ARCHITECTURE NAO OF N AL ISBEGINPROCESS(M1,M0,H1,H0,EN)BEGINIF EN='0' THENIF H0="1000"AND H1="0000" AND M1="0000" AND M0="0000" THEN Q<='1';ELSEQ<='0';END IF;ELSE Q<='0';end if;END PROCESS; END NAO;。