《电子技术课程设计》任务书
1.课程设计的内容和要求(包括原始数据、技术要求、工作要求等): 一、 题目 基于VHDL的数字频率计的设计 二、 数字频率计功能 该数字频率计的测量范围为1~9999kHz,并能用4位十进制数字显示测量结果。 三、 设计要求 1.详细说明设计方案; 2.用VHDL编写设计程序; 3.给出系统仿真结果; 4.进行硬件验证。 四、 参考文献 1.潘 松等.EDA技术实用教程. 2.卢 毅,赖杰.VHDL与数字电路设计. 3.徐志军,徐光辉.CPLD/FPGA的开发与应用. 4.林明权.VHDL数字控制系统设计范例 5.http://www.fpga.com.cn
2.对课程设计成果的要求〔包括图表(或实物)等硬件要求〕: 设计电路,安装调试或仿真,分析实验结果,并写出设计说明书,语言流畅简洁,文字不得少于3500字。 3.主要参考文献: 要求按国标GB 7714—87《文后参考文献著录规则》书写。 4.课程设计工作进度计划: 序号 1 2 3 4 起 迄 日 期 2011.1.3—1.5 2011.1.6—1.9 2011.1.10—1.12 2011.1.13—1.15 工 作 内 容 查阅文献,收集资料。 确定系统设计方案,用VHDL编写设计程序。 系统仿真和调试,分析实验结果。 撰写设计说明书。 日期: 2011年 1 月 3 日 主指导教师
基于VHDL的数字频率计
摘要:本设计分为5个模块:顶层文件程序,十进制计数器模块,4位锁存器模块,控制模块,译码显示模块。数字频率计是数字电路中的一个典型应用,实际的硬件设计用到的器件较多,连线比较复杂,而且会产生比较大的延时,造成测量误差、可靠性差。随着复杂可编程逻辑器件(CPLD)的广泛应用,以EDA工具作为开发手段,运用VHDL语言。将使整个系统大大简化。提高整体的性能和可靠性。
关键词:频率,VHDL,模块。
目 录
0.前言 .................................................. 1 1.系统设计 ............................................... 1
1.1设计要求 ...................................................... 1 1.1.1设计目的 .................................................. 1 1.1.2设计内容及要求 ............................................ 1 1.2总体设计方案 .................................................. 1 1.2.1设计原理 .................................................. 1 1.2.2设计框图 .................................................. 2 1.2.3设计模块说明 .............................................. 2
2.程序设计 ............................................... 3
2.1 顶层文件 ...................................................... 3 2.2 十进制计数模块 ................................................ 3 2.3 4位锁存器模块 ................................................ 3 2.4 控制模块 ...................................................... 3 2.5 译码显示模块 .................................................. 4
3.系统仿真 ............................................... 4 4.结论 ................................................... 5 5.心得体会 ............................................... 5 参考文献 ................................................. 6 附录 各模块源程序 ........................................ 7
0.前言
随着时代科技的迅猛发展,微电子学和计算机等现代电子技术的成就给传统的电子测量与仪器带来了巨大的冲击和性的影响。常规的测试仪器仪表和控制装置被更先进的智能仪器所取代,使得传统的电子测量仪器在远离、功能、精度及自动化水平定方面发生了巨大变化,并相应的出现了各种各样的智能仪器控制系统,使得科学实验和应用工程的自动化程度得以显著提高。
数字频率计在电子技术中扮演着一个重要的角色,因此数字频率计是一种最基本的测量仪器,它被广泛应用于航天、电子、测控等领域,许多测量方案和测量结果都与频率有着十分密切的关系,因此频率的测量在电子产品的研究与生产中显得尤为重要。
1.系统设计
1.1 设计要求
1.1.1设计目的
(1)掌握数字频率计的原理、功能、设计与调试方法;
(2)熟悉Quartus II的使用方法,学习用VHDL语言编写程序。
1.1.2设计内容及要求
(1)设计数字频率计的测量范围为1~9999kHz,并能用4位十进制数字显示测
量结果;
(2)详细说明设计方案; (3)用VHDL编写设计程序; (4)给出系统仿真结果; (5)进行硬件验证。
1.2 总体设计方案
1.2.1设计原理
频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,对比测量其他信号的频率。测频法就是在确定的闸门时间Tw内,记录被测信号的变化周期数(或脉冲个数)Nx,则被是信号的频率为fx=Nx/Tw 。通常情况下计算每秒内待测信号的脉冲个数,即闸门时间为1 s。闸门时间越长,得到的频率值就越准确, 但闸门时间越长,则每测一次频率的间隔就越长。闸门时间越短,测得的频率值
南华大学电气工程学院电力专业2010~2011学年上学期课程设计
电气工程及其自动化081班 黄钰 20084450102
刷新就越快,但测得的频率精度就受影响。一般取1 s作为闸门时间。原理图:
原理图
1.2.2设计框图
FPGA 基准时钟 分频 复位信号 十进制 计数器 数据 锁存 动态 显示 译码 显示
设计框图
说明:当系统正常工作时,脉冲发生器提供的1 Hz的输入信号,经过测频控制信号发生器进行信号的变换,产生计数信号,被测信号通过信号整形电路产生同频率的矩形波,送入计数模块,计数模块对输入的矩形波进行计数,将计数结果送入锁存器中,保证系统可以稳定显示数据,显示译码驱动电路将二进制表示的计数结果转换成相应的能够在七段数码显示管上可以显示的十进制结果。在数码显示管上可以看到计数结果。
1.2.3设计模块说明
(1)顶层文件。用于各个控制模块的连结,使整个程序成立。
(2)控制模块。控制十进制计数器的计数及锁存器的工作,当计数器计数时,
锁存器锁存前一次的技术状态;当计数器停止计数,则锁存器接收计数器
南华大学电气工程学院电力专业2010~2011学年上学期课程设计
电气工程及其自动化081班 黄钰 20084450102
的计数数据,因此控制模块控制计数器与锁存器的交替工作。
(3)计数器。由于需要使用LED显示频率,所以采用的是十进制可清零、具有
使能功能的计数器模块。
(4)锁存模块。接受4个计数器传输的信号进行锁存。使显示的数据稳定,不
会由于周期性的清零信号而不断闪烁。
(5)译码显示模块。一共有7个LED需要显示,所以需要7个译码模块。
2.程序设计
2.1 顶层文件
基于VHDL 描述语言, 采用自顶向下的设计方法, 各模块之间相互, 底层模块的修改不会影响其他模块的工作, 这种设计方法的设计结构清晰、层次清楚, 便于对设计进行修改。在各个模块设计后, 编写一个顶层文件, 将各个模块连接在一起, 实现一个完整的数字频率计。
2.2 十进制计数器模块
计数器模块是对输入脉冲信号的频率进行测量,由4个十进制加法器组成,其中EN为计数器选通控制信号,RST为计数清零信号。在计数清零信号清零后,当计数使能信号EN有效时,开始对待测信号进行计数。如果计数使能信号EN的宽度为1是,那么计数结果就为待测信号的频率。
2.3 4位锁存器模块
当锁存信号上升沿到来时,将计数器的计数值锁存,这样可由外部的七段译码器译码并在数码管上显示。设置锁存器的好处是显示的数据稳定,不会由于周期性的清零信号而不断闪烁。锁存器的位数应跟计数器完全一样,均是32位。寄存器是在计数结束后,利用触发器的上升沿把最新的频率测量值保存起来,这样在计数过程中可不必一直看着数码管显示器,显示器将最终的频率读数定期进行更新,其输出将作为动态扫描电路的输入。
2.4 控制模块
根据频率的定义和测量的基本原理,测量信号的频率必须有一个脉宽为1秒的对输入信号脉冲计数允许的信号,1秒计数结束后,计数值锁入锁存器的锁存信号和为下一测频计数周期作准备的计数器清0信号。
南华大学电气工程学院电力专业2010~2011学年上学期课程设计
电气工程及其自动化081班 黄钰 20084450102
控制模块的计数使能信号EN能产生一个1秒脉宽的周期信号,并对频率计的每一计数器cnt10的EN使能端进行同步控制。当 EN为高电平时,允许计数;低电平时停止计数,并保持其所计的脉冲数。
在停止计数期间,首先需要一个锁存信号load的上升沿将计数器在前1秒的计数值锁存进各锁存器中,并由外部的译码器译出并显示计数值。锁存信号后必须有一个清零信号rst对计数器进行清零,为下一秒钟的计数操作作准备。
2.5 译码显示模块
动态显示是把所有的led管的输入信号连在一起,这种连接方式有2个优点:一是节约器件的I\\O端口;二是降低功耗。每次向led写数据时,通过片选信号选通其中一个led 管并把数据写入,因此每一个时刻只有一个led 是亮的。
3.系统仿真
仿真图:
说明:进行系统仿真时,首先设置reset复位信号为一个周期的低电平对系统进行复位,然后在下一个时钟周期给start信号低电平,开始测量频率。而weis位选信号用于数码管的动态显示位选择,一个测频周期结束之后DQ得到频率数据的段码,与weis信号一起做动态显示。在一个测频周期结束后系统将锁存测量数据,直到下一次start信号有效(低电平有效)。
南华大学电气工程学院电力专业2010~2011学年上学期课程设计
电气工程及其自动化081班 黄钰 20084450102
4.硬件测试
由于实验没有信号源故需在程序里加一个分频模块把标准频率分频成被测信号,再通过实验箱加以验证,这里所用的实验箱的基准频率为32MHZ,在做硬件仿真时,是把基率即50MHZ分频成不同频率的信号(如8KHZ),(具体的分频模块见附录)再把此模块加入顶层模块中,重新综合仿真,设置好端口约束文件把程序下载进入实验箱。即可得到所要的结果。
通过改变分频得到不同的被测信号,由实验知不同的频率段信号,均能良好的测也,故程序的硬件仿真成功。
5.结论
通过为期两周的课程设计,完成了本次设计的技术指标,刚开始设计的时候,由于VHDL语言编写程序这部分比较难懂,所以在分析设计程序模块的时候,就会停下来设计控制电路,为了提高效率,在实际的操作中,先分模块编写程序再根据分块程序写出总的程序,利用波形文件仿真实验结果,调测符合要求。最后完成顶层文件的设计编写。在硬件测试的过程中发现测量频率时,档位在1Hz~9999999Hz,最终得到的结果,测量结果非常接近测量值。
6.心得体会
本次课程设计让我们体味到设计电路、仿真电路、调测电路过程中的苦与甜。设计是我们将来必需的技能,这次课程设计恰恰给我们提供了一个应用自己所学知识的机会,尽管之前掌握这方面的知识较为贫乏,但是从到图书馆查找资料到对电路的设计对电路的调试再到最后电路的成型,我都是尽全力认真完成,并且虚心积极的向他人请教。在实习的过程中发现了自己有很多相关知识并不掌握。制作过程是一个考验人耐心的过程,不能有丝毫的急躁,马虎,对电路的调试要一步一步来,不能急躁,因为是在电脑上调试,比较慢,又要求我们有一个比较正确的调试方法,像下载引脚等等。这又要我们要灵活处理,在不影响试验的前提下可以加快进度。合理的分配时间。在设计控制电路的时候,我们可以连接译码显示和计数电路,这样就加快了完成的进度。在整个课程设计完后,总的感觉是:有收获。以前上课都是上一些最基本的东西而现在却可以将以前学的东西作出有实际价值的东西。在这个过程中,我的确学得到很多在书本上学不到的东西,如:利用VHDL语言编写程序,如何将程序正确仿真以及硬件测试。但也遇到了不少的挫折,有时遇到了一个错误怎么找也找不到原因所在,期间我请教了几位
南华大学电气工程学院电力专业2010~2011学年上学期课程设计
电气工程及其自动化081班 黄钰 20084450102
这方面的高手,得到了不少帮助,我也学习到了很多。不管是在Quartus软件的应用,还是在VHDL编程语言的学习,或是电路把硬件的操作我都有了一定的提高。
通过紧张有序的设计实践,我觉得自己的动手能力有了很大的提高,在课程设计中自己动脑子解决遇到的问题,有不懂的地方向他人请教。书本上的知识有了用武之地,这又巩固和深化了自己的知识结构。
南华大学电气工程学院电力专业2010~2011学年上学期课程设计
电气工程及其自动化081班 黄钰 20084450102
参考文献
1. 潘 松等.EDA技术实用教程. 科学出版社2006年09月
2. 卢 毅,赖杰.VHDL与数字电路设计. 科学出版社; 第1版 2001年4月 3. 林明权.VHDL数字控制系统设计范例. 电子工业出版社2003年01月 4.邹其宏.EDA技术实验教程.中国电力出版社.2009年2月
5.谢煌, 黄为. 基于VHDL 语言设计频率计. 北京: 现代电子技术, 2003, 14
南华大学电气工程学院电力专业2010~2011学年上学期课程设计
电气工程及其自动化081班 黄钰 20084450102
附 录
顶层文件
源程序:
library IEEE;
use IEEE.STD_LOGIC_11.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity freq_top is
port (CLKIN,RESET,QING1,start: IN STD_LOGIC; ---对输入输出端口的定义
DQ : OUT STD_LOGIC_VECTOR (6 DOWNTO 0); ---数码管显示的7个脚 weis : out STD_LOGIC_VECTOR (3 DOWNTO 0); ---位显 4位 COUTT : OUT STD_LOGIC); end freq_top;
architecture Behavioral of freq_top is
COMPONENT TESTCTL ---对控制模块的说明 PORT ( rst, clk ,start: in std_logic;
cnt_en, rst_cnt, load : out std_logic); END COMPONENT;
COMPONENT CNT10 ---对计数模块的说明 PORT ( f_in,CLK,RST,EN : IN STD_LOGIC;
CQ : OUT STD_LOGIC_VECTOR (3 DOWNTO 0); COUT : OUT STD_LOGIC ); END COMPONENT;
COMPONENT REG4B ----对锁存模块的说明 port ( clk,rst,load, QING : in std_logic;
din : in std_logic_vector(3 downto 0); dout : out std_logic_vector(3 downto 0));
END COMPONENT;
COMPONENT DECL7S ---对显示模块的说明 PORT ( clk,scanclk ,rst,coutt: std_logic;
a1,a2,a3,a4,a5,a6,a7: in std_logic_vector(3 downto 0); weis: out std_logic_vector(3 downto 0); led7s : out std_logic_vector(6 downto 0) );
END COMPONENT;
南华大学电气工程学院电力专业2010~2011学年上学期课程设计
电气工程及其自动化081班 黄钰 20084450102
signal scan: integer range 0 to 1023; SIGNAL M : STD_LOGIC_VECTOR(15 downto 0); SIGNAL FIN,EN_S,RST_S,LOAD_S : STD_LOGIC;
SIGNAL CQ1,CQ2,CQ3,CQ4,CQ5,CQ6,CQ7 : STD_LOGIC_VECTOR (3 DOWNTO 0); SIGNAL COUT1,COUT2,COUT3,COUT4,COUT5,COUT6 : STD_LOGIC;
SIGNAL DOUT1,DOUT2,DOUT3,DOUT4,DOUT5,DOUT6,DOUT7 : STD_LOGIC_VECTOR (3 DOWNTO 0); signal scanclk,couttflag : std_logic; ---定义中间信号
begin
PROCESS(CLKIN,RESET) BEGIN
IF RESET='0' THEN scan<=0;
ELSIF(CLKIN'EVENT AND CLKIN='1')THEN if(scan = 1023)then scan <= 0; else
scan <= scan +1; end if; END IF; END PROCESS;
PROCESS(CLKIN,RESET) BEGIN
IF RESET='0' THEN scanclk<='0';
ELSIF(CLKIN'EVENT AND CLKIN='1')THEN
if(scan <511)then scanclk <= '0'; --- else scanclk <= '1'; end if; end if; end process;
PROCESS(CLKIN,RESET) BEGIN
IF RESET='0' THEN M<=(others =>'0'); ELSIF(CLKIN'EVENT AND CLKIN='1')THEN
M <= M +1; END IF; END PROCESS;
FIN<= M(15); ---
产生每段数码管显示的时间 产生被测频率 南华大学电气工程学院电力专业2010~2011学年上学期课程设计
电气工程及其自动化081班 黄钰 20084450102
COUTT <='0' WHEN COUT4 = '1'ELSE
'1' WHEN start = '0'; ---实例化底层元件
U1 : TESTCTL PORT MAP (RST=>RESET,CLK=>clkin,start=>start, CNT_EN=>EN_S,RST_CNT=> RST_S, LOAD=>LOAD_S);
U2 : CNT10 PORT MAP (FIN,clkin, RST_S, EN_S, CQ1, COUT1);--u2到u8位频率计数器 U3 : CNT10 PORT MAP (COUT1,clkin, RST_S, EN_S, CQ2, COUT2); U4 : CNT10 PORT MAP (COUT2,clkin, RST_S, EN_S, CQ3, COUT3); U5 : CNT10 PORT MAP (COUT3,clkin, RST_S, EN_S, CQ4, COUT4); U6 : CNT10 PORT MAP (COUT4,clkin, RST_S, EN_S, CQ5, COUT5); U7 : CNT10 PORT MAP (COUT5,clkin, RST_S, EN_S, CQ6, COUT6); U8 : CNT10 PORT MAP (COUT6,clkin, RST_S, EN_S, CQ7, couttflag);
---对测得的频率数据进行锁存 U9 : REG4B PORT MAP (CLKIN,RESET,LOAD_S, QING1, CQ1, DOUT1); U10 : REG4B PORT MAP (CLKIN,RESET,LOAD_S, QING1, CQ2, DOUT2); U11 : REG4B PORT MAP (CLKIN,RESET,LOAD_S, QING1, CQ3, DOUT3); U12 : REG4B PORT MAP (CLKIN,RESET,LOAD_S, QING1, CQ4, DOUT4); U13 : REG4B PORT MAP (CLKIN,RESET,LOAD_S, QING1, CQ5, DOUT5); U14 : REG4B PORT MAP (CLKIN,RESET,LOAD_S, QING1, CQ6, DOUT6); U15 : REG4B PORT MAP (CLKIN,RESET,LOAD_S, QING1, CQ7, DOUT7);
--显示
U16 : DECL7S PORT MAP (clkin,scanclk,RESET, couttflag,DOUT1, DOUT2, DOUT3, DOUT4, DOUT5, DOUT6, DOUT7,weis,DQ); end Behavioral; 输入端口:CLKIN:输入信号;RESET:复位信号;QING1:清零信号;start:开始信号 输出端口:DQ:段显; weis:位显; coutt:输出
十进制计数器模块
源程序:
library IEEE;
use IEEE.STD_LOGIC_11.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity cnt10 is
port (f_in,CLK,RST,EN : IN STD_LOGIC; ---被测频率输入 CQ : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); ---数据输出 COUT : OUT STD_LOGIC ); ---进位位输出
end cnt10;
architecture Behavioral of cnt10 is ---定义构造体Behavioral
南华大学电气工程学院电力专业2010~2011学年上学期课程设计
电气工程及其自动化081班 黄钰 20084450102
signal CQI : STD_LOGIC_VECTOR(3 DOWNTO 0) :=\"0000\"; signal D1,D2,edge :STD_LOGIC; begin
process(clk,f_in,RST)--detect the rising edge ---上升沿检测进程; begin
IF RST = '1' THEN d1 <= '0' ; d2 <= '0'; ---RST高电平时,计数清零 elsIF CLK'EVENT AND CLK='1' THEN ---EN高电平时,允许计数 d1 <= f_in; d2 <= d1; end if; end process;
edge <= '1' when ((d1='1') and ( d2 = '0')) else '0' ;
PROCESS(CLK, RST, CQI,EN) ---十进制计数进程
BEGIN
IF RST = '1' THEN CQI <= (OTHERS =>'0'); ELSIF CLK'EVENT AND CLK='1' THEN IF EN='1' THEN if edge = '1' then
IF CQI < \"1001\" THEN CQI <= CQI + 1; COUT<= '0';
ELSE CQI <=(OTHERS=>'0'); COUT <= '1'; ---当每次计数满10时输出溢出位 END IF; end if; END IF; END IF; CQ <= CQI; END PROCESS;
END Behavioral; 输入端口:f_in:被测频率输入;CLK:时钟信号;RST:复位信号;EN:使能端 输出端口:CQ :计数; COUT: 输出
4位锁存器模块
源程序:
library IEEE;
use IEEE.STD_LOGIC_11.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
南华大学电气工程学院电力专业2010~2011学年上学期课程设计
电气工程及其自动化081班 黄钰 20084450102
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity reg4b is
port ( clk, rst,load : in std_logic;
qing : in std_logic; ---锁存器控制信号输入 din : in std_logic_vector(3 downto 0); ---锁存数据输入 dout : out std_logic_vector(3 downto 0)); --锁存数据输出 end reg4b;
architecture Behavioral of reg4b is
begin
process(clk,rst,load,qing,din) ---产生锁存器 begin
if qing = '0'or rst = '0' then dout <= \"0000\";
---当QING或rst按下时,不显示
elsif clk'event and clk = '1' then
if(load = '1') then ---更新显示频率 dout <= din ; end if; end if ; end process;
end Behavioral; 输入端口:clk:时钟信号;rst:复位信号;load:装载信号;qing:清零信号;din:数
据输入
输出端口:dout:输出信号
控制模块
原程序:
library IEEE;
use IEEE.STD_LOGIC_11.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity testctl is
port ( rst, clk ,start: in std_logic;-- 外部控制信号输入
cnt_en, rst_cnt, load : out std_logic);--内部控制信号输出 end testctl;
architecture Behavioral of testctl is signal flag_en: std_logic;
南华大学电气工程学院电力专业2010~2011学年上学期课程设计
电气工程及其自动化081班 黄钰 20084450102
signal divcount : integer range 0 to 49999999; signal state : std_logic_vector(1 downto 0); begin
process( clk ,rst,start,state) ---分频与状态转换进程 begin
if rst = '0' then divcount <= 0 ;state<=\"00\";flag_en <='0';
elsif clk'event and clk = '1' then ---上升沿触发 case (state ) is ---选择函数
when \"00\" => ---等待开始信号
if (start = '0')then state <= \"01\";flag_en <='1';divcount <= 0 ;else state <= \"00\"; end if;
when \"01\" => ---产生测频时能控制信号 if divcount = 49999999 then ---对时钟频率50M分频 divcount <= 0;flag_en <= '0';state <= \"00\"; elsif divcount < 49999999 then
divcount <= divcount + 1;flag_en <='1';state <= \"01\"; end if;
when others => state <= \"00\"; end case; end if; end process;
process ( clk, divcount,rst,flag_en) ---产生测频复位 begin
if rst = '0' then rst_cnt <= '0' ; elsif clk'event and clk = '1'then
if flag_en = '0' then rst_cnt <= '1'; else rst_cnt <= '0'; end if; end if; end process;
process ( clk,rst, divcount,flag_en ) ---load en 锁存使能 begin
if rst = '0' then load <= '0' ;
elsif clk'event and clk = '1' then
if flag_en = '1' and divcount = 49999999 then
load <= '1';
else load <= '0'; end if; end if; end process;
cnt_en <= flag_en ;
南华大学电气工程学院电力专业2010~2011学年上学期课程设计
电气工程及其自动化081班 黄钰 20084450102
end Behavioral; 输入端口:rst:复位信号; clk:时钟信号;start: 开始信号 输出端口:cnt_en:计数使能 rst_cnt:计数复位 load:锁存使能
译码显示模块
源程序:
library IEEE;
use IEEE.STD_LOGIC_11.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity decl7s is port (
clk ,scanclk ,rst,coutt:in std_logic;
a1,a2,a3,a4,a5,a6,a7: in std_logic_vector(3 downto 0); weis: out std_logic_vector(3 downto 0); led7s : out std_logic_vector(6 downto 0) );
end decl7s;
architecture one of decl7s is
signal din :std_logic_vector(3 downto 0); signal dout :std_logic_vector(6 downto 0); signal wei : std_logic_vector(3 downto 0); --display data wei select
signal d1,d2,d3,d4 : std_logic_vector(3 downto 0);
begin
led7s <= dout; weis <= wei;
process(a1,a2,a3,a4,a5,a6,a7,coutt) begin
if(a5=\"0000\" and a6=\"0000\" and a7=\"0000\"and coutt = '0')then ---高低位换挡 d1 <= a1; d2 <= a2; d3 <= a3; d4 <= a4;
else d1 <= a5 ; d2 <= a6; d3 <= a7; d4 <= \"0000\"; ---显示KHZ end if; end process;
process(scanclk,rst)
南华大学电气工程学院电力专业2010~2011学年上学期课程设计
电气工程及其自动化081班 黄钰 20084450102
begin
if(rst = '0')then wei(3 downto 0) <= \"1110\";
elsif(scanclk'event and scanclk='1')then ---当上升沿时显示下一位 wei(3 downto 0)<= wei(2 downto 0)&wei(3); ---个十百千位的数码管切换 end if; end process;
process (clk,wei) begin
if(clk'event and clk='1')then case(wei) is
when \"1110\" => din <= d1; ---显示个位数字 when \"1101\" => din <= d2; ---显示十位数字 when \"1011\" => din <= d3; ---显示百位数字 when \"0111\" => din <= d4; ---显示千位数字 when others => null; end case; end if; end process;
process(din) begin
case(din) is
when \"0000\" => dout <= \"0000001\"; ---0 when \"0001\" => dout <= \"1001111\"; ---1 when \"0010\" => dout <= \"0010010\"; ---2 when \"0011\" => dout <= \"0000110\"; ---3 when \"0100\" => dout <= \"1001100\"; ---4 when \"0101\" => dout <= \"0100100\"; ---5 when \"0110\" => dout <= \"0100000\"; ---6 when \"0111\" => dout <= \"0001111\"; ---7 when \"1000\" => dout <= \"0000000\"; ---8 when \"1001\" => dout <= \"0000100\"; ---9
when others => dout <= \"1111111\"; ---不显示 end case;
end process; end one; 输入端口:clk:时钟信号;scanclk:数码管扫描;rst:复位信号;coutt:计数信号 a1,a2,a3,a4,a5,a6,a7: 段显输入信号 输出端口:weis:位显; led7s:段显;
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- awee.cn 版权所有 湘ICP备2023022495号-5
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务