第一篇:VHDL课程设计报告 频率计
目录
1.前言...........................................................................................................................2 2.设计要求...................................................................................................................2 3.整体设计..................................................................................................................3 4.设计原理...................................................................................................................3 5.设计程序...................................................................................................................3
5.1顶层文件.............................................................................................................3 5.2 8位是进制计数器..............................................................................................4 5.3 10进制计数器...................................................................................................5 5.4 测频控制电路.....................................................................................................6 5.5 32位锁存器及其控制器.....................................................................................6
6.引脚锁定...................................................................................................................8 7.综合结果...................................................................................................................8
7.1 RTL电路.............................................................................................................8 7.2 测频控制电路.....................................................................................................9 7.3 8位十进制计数器..............................................................................................9 7.3 32位锁存器......................................................................................................9
8.实验结果.................................................................................................................10 7.实验总结...................................................................................................................10 参考文献......................................................................................................................12
自适应数字频率计数器设计
1.前言
传统的数字频率计一般是由分离元件搭接而成,用到的器件较多,连线比较复杂,而且会产生比较大的延时,造成测量误差大、可靠性差。后来随着单片机的大规模的应用, 出现了不少用单片机控制的频率测量系统。相对于以前用分离元件搭接起来的频率测量系统, 单片机控制的频率测量系统在频率测量范围、频率测量精度和频率测量速度上都有了很大的提高。但由于单片机工作频率的限制、单片机内部计数器位数的限制等因素, 由单片机控制的频率测量系统无法在频率测量范围、频率测量精度和频率测量速度上取得重大突破。若再增加别的器件, 以弥补单片机的不足, 不仅会大大增加系统的复杂性, 而且不利于系统的集成化。以E D A 工具作为开发平台,运用V H D L 语言,将使整个系统大大简化,从而提高整体的性能和可靠性。本课题采用的是等精度数字频率计,在一片FPGA开发板里实现了数字频率计的绝大部分功能, 它的集成度远远超过了以往的数字频率计。又由于数字频率计最初的实现形式是用硬件描述语言写成的程序, 具有通用性和可重用性。所以在外在的条件(如基准频率的提高, 基准频率精度的提高)的允许下,只需对源程序作很小的改动, 就可以使数字频率计的精度提高几个数量级。同时对于频率精度要求不高的场合, 可以修改源程序, 使之可以用较小的器件实现, 从而降低系统的整体造价。
2.设计要求
设计一个频率计,频率测量范围为1-9999KHZ,量程分别为10、100、1M三档,要求如下: a.当读数大于999时,频率计处于超量程状态,下一次测量时,量程自动增大1档 b.当读数小于099时,频率计处于欠量程状态,下一次测量时,量程自动减小1档
c.当超过频率范围时,显示器自动溢出
3.整体设计
当被测频率进入时候,档位1、2能自动换挡实现功能,在档位1中,有一个LED灯亮(表示Hz);档位2中有2个LED灯亮(表示kHz);当计数频率超出9999kHz的时候,显示“E”而且LED灯全部熄灭,表示溢出功能。在程序代码中,必须要清晰表示出计数的运行状况。
档位1:当被测频率为0—9999Hz时候,直接显示f x的值(单位为Hz); 档位2:当被测频率为10k—9999kHz时候,显示10-9999(单位kHz);
4.设计原理
根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉宽为1 秒的输入信号脉冲计数允许的信号;1 秒计数结束后,计数值被锁入锁存器,计数器清0,为下一测频计数周期作好准备。测频控制信号可以由一个独立的发生器来产生。
5.设计程序
5.1顶层文件
LIBRARY IEEE;--频率计顶层文件 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY FREQTEST IS PORT(CLK1HZ : IN STD_LOGIC;FSIN : IN STD_LOGIC;DOUT : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);LED : OUT STD_LOGIC_VECTOR(1 DOWNTO 0));END FREQTEST;ARCHITECTURE struc OF FREQTEST IS COMPONENT FTCTRL PORT(CLKK : IN STD_LOGIC;--1Hz CNT_EN : OUT STD_LOGIC;--计数器时钟使能 RST_CNT : OUT STD_LOGIC;--计数器清零 Load : OUT STD_LOGIC);--输出锁存信号 END COMPONENT;COMPONENT COUNTER PORT(FIN : IN STD_LOGIC;--时钟信号 CLR : IN STD_LOGIC;--清零信号 ENABL : IN STD_LOGIC;--计数使能信号
DOUT : OUT STD_LOGIC_VECTOR(31 DOWNTO 0));--计数结果 END COMPONENT;COMPONENT REG32B PORT(LK : IN STD_LOGIC;DIN : IN STD_LOGIC_VECTOR(31 DOWNTO 0);DOUT : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);LEDOUT : OUT STD_LOGIC_VECTOR(1 DOWNTO 0));END COMPONENT;SIGNAL TSTEN1 : STD_LOGIC;SIGNAL CLR_CNT1 : STD_LOGIC;SIGNAL Load1 : STD_LOGIC;SIGNAL DTO1 : STD_LOGIC_VECTOR(31 DOWNTO 0);SIGNAL CARRY_OUT1 : STD_LOGIC_VECTOR(6 DOWNTO 0);BEGIN U1 : FTCTRL PORT MAP(CLKK =>CLK1HZ,CNT_EN=>TSTEN1, RST_CNT =>CLR_CNT1,Load =>Load1);U2 : REG32B PORT MAP(LK => Load1, DIN=>DTO1, DOUT => DOUT,LEDOUT=>LED);
U3 : COUNTER PORT MAP(FIN => FSIN, CLR => CLR_CNT1, ENABL => TSTEN1, DOUT=>DTO1);END struc;
5.2 8位是进制计数器
LIBRARY IEEE;--8位十进制计数器 USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY COUNTER IS PORT(FIN : IN STD_LOGIC;--时钟信号 CLR : IN STD_LOGIC;--清零信号 ENABL : IN STD_LOGIC;--计数使能信号
DOUT : OUT STD_LOGIC_VECTOR(31 DOWNTO 0));--计数结果 END COUNTER;ARCHITECTURE behav OF COUNTER IS
COMPONENT COUNTER10 IS PORT(FIN : IN STD_LOGIC;--时钟信号 CLR : IN STD_LOGIC;--清零信号 ENABL : IN STD_LOGIC;--计数使能信号
DOUT : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--计数结果 COUT : OUT STD_LOGIC);END COMPONENT;
SIGNAL CLK1,CLK2,CLK3,CLK4,CLK5,CLK6,CLK7: STD_LOGIC;BEGIN u1 : COUNTER10 PORT MAP(FIN=>FIN,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(3 DOWNTO 0),COUT=>CLK1);u2 : COUNTER10 PORT MAP(FIN=>CLK1,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(7 DOWNTO 4),COUT=>CLK2);u3 : COUNTER10 PORT MAP(FIN=>CLK2,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(11 DOWNTO 8),COUT=>CLK3);u4 : COUNTER10 PORT MAP(FIN=>CLK3,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(15 DOWNTO 12),COUT=>CLK4);u5 : COUNTER10 PORT MAP(FIN=>CLK4,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(19 DOWNTO 16),COUT=>CLK5);u6 : COUNTER10 PORT MAP(FIN=>CLK5,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(23 DOWNTO 20),COUT=>CLK6);u7 : COUNTER10 PORT MAP(FIN=>CLK6,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(27 DOWNTO 24),COUT=>CLK7);u8 : COUNTER10 PORT MAP(FIN=>CLK7,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(31 DOWNTO 28));
END ARCHITECTURE behav;
5.3 10进制计数器
LIBRARY IEEE;--10位计数器 USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY COUNTER10 IS PORT(FIN : IN STD_LOGIC;--时钟信号 CLR : IN STD_LOGIC;--清零信号 ENABL : IN STD_LOGIC;--计数使能信号
DOUT : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--计数结果 COUT : OUT STD_LOGIC);END COUNTER10;ARCHITECTURE behav OF COUNTER10 IS SIGNAL CQI : STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN PROCESS(FIN, CLR, ENABL)BEGIN IF CLR = '1' THEN CQI <=(OTHERS=>'0');--清零 ELSIF FIN'EVENT AND FIN = '1' THEN IF ENABL = '1' THEN IF CQI<9 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;END PROCESS;DOUT <= CQI;END behav;
5.4 测频控制电路
LIBRARY IEEE;--测频控制电路 USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY FTCTRL IS PORT(CLKK : IN STD_LOGIC;--1Hz CNT_EN : OUT STD_LOGIC;--计数器时钟使能 RST_CNT : OUT STD_LOGIC;--计数器清零 Load : OUT STD_LOGIC);--输出锁存信号 END FTCTRL;ARCHITECTURE behav OF FTCTRL IS SIGNAL Div2CLK : STD_LOGIC;BEGIN PROCESS(CLKK)BEGIN IF CLKK'EVENT AND CLKK = '1' THEN--1Hz时钟2分频 Div2CLK <= NOT Div2CLK;END IF;END PROCESS;PROCESS(CLKK, Div2CLK)BEGIN IF CLKK='0' AND Div2CLK='0' THEN RST_CNT<='1';--产生计数器清零信号 ELSE RST_CNT <= '0';END IF;END PROCESS;Load <= NOT Div2CLK;CNT_EN <= Div2CLK;END behav;
5.5 32位锁存器及其控制器
LIBRARY IEEE;--32位锁存器及控制器 USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY REG32B IS PORT(LK : IN STD_LOGIC;DIN : IN STD_LOGIC_VECTOR(31 DOWNTO 0);DOUT : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);LEDOUT : OUT STD_LOGIC_VECTOR(1 DOWNTO 0));END REG32B;ARCHITECTURE behav OF REG32B IS SIGNAL DD : STD_LOGIC_VECTOR(31 DOWNTO 0);BEGIN
PROCESS(LK, DIN)BEGIN IF LK'EVENT AND LK = '1' THEN DD<=DIN;END IF;if DD(31 DOWNTO 28)=“0000” then IF DD(27 DOWNTO 16)=“000000000000” THEN DOUT<=DD(15 DOWNTO 0);LEDOUT<=“01”;ELSIF DD(27 DOWNTO 16)/=“000000000000” THEN DOUT<=DD(27 DOWNTO 12);LEDOUT<=“11”;end if;else DOUT(15 DOWNTO 0)<=“***0”;LEDOUT<=“00”;END IF;END PROCESS;END behav;
6.引脚锁定
7.综合结果
7.1 RTL电路
7.2 测频控制电路
7.3 8位十进制计数器
7.3 32位锁存器
8.实验结果
当计数频率为4Hz(范围在0-9999Hz)的时候,此时LED灯有一个亮,计数为:0004;当计数频率为500KHz(范围在10K-9999KHz)的时候,此时设定两个LED灯都亮,计数为0500;当计数频率大于9999KHz的时候,设定此时两个LED灯都处于熄灭状态,而计数则输出一个‘E’值,表示范围超出计数范围。
7.实验总结
经系统测试表明,本图频率计的各项功能正常,能实现对频率的0~9999kHz频率范围的测量,并通过LED指示和数码管显示,操作简单,是理想频率计解决方案。
经过一个多星期的努力,本设计系统终于完成了。通过该课程设计,掌握了编译程序工作的基本过程及其各阶段的基本任务,熟悉了VHDL程序开发的总流程框图,了解了编译程序的生成过程及其相关的技术,对课本上的知识也有了更深的理解。老师常说,课本上的知识是机械的,要学会去运用,要举一反三。现在终于深刻的了解了这句话。经过这次的课程设计,发现书本上很深奥的知识变的更为简单,同样,对实验原理也了有更深的理解。知道和理解了该理论在计算机中是怎样执行的,对该理论在实践中的应用有深刻的理解。通过该课程设计,把死板的课本知识变得生动有趣,激发了学习的积极性。能够把课堂上学的知识通过自己设计的程序表示出来,加深了对理论知识的理解。
课程设计中的电路和程序比较复杂,因此调试的过程更是考验我们耐性和细心。除了课堂外,课程设计是最能学到东西的,最考验人的。在做课程设计的这段时间,时刻都感到自己学的知识有多么的贫瘠。经过这次课程设计,让我对VHDL语言和FPGA有了更深的认识,操作能力有了一定的提高。明白了,要想是写出的代码能运行,需要耐心细心,毅力以及充沛的体力。只有经过多次编辑,多次编译,再多次运行,才能编写出更好的程序,有时候需要多次的更正才能达到所要的运行结果。
参考文献
[1] 潘松、黄继业,EDA技术应用教程 VHDL篇[J].北京:高等教育出版社.2010
[2] 徐成刘彦李仁发,一种全同步数字频率测量方法的研究[J].北京:高等教育出版社.2004 [3] 李云鹏王思明,基于FPGA 的等精度频率计设计[J].北京:高等教育出版社.2007
第二篇:VHDL八位数码管频率计课程设计
一、课程设计要求
设计一个8位数码管显示的频率计(频率分辨率为1Hz)。
二、总体结构框图
系统时钟分频及控制待测频率计数数据锁存动态扫描数码管段选数码管位选数码管显示
图1 总体结构框图
三、课程设计原理
在电子技术中,频率是最基本的参数之一,并且与许多点参量的测量方案、测量结果都有十分密切的关系,因此,频率的测量就显得尤为重要。测量频率的方法有很多种,其中电子计数器测量频率具有精度高、使用方便、测量迅速,以及便于实现测量过程自动化等优点,是频率测量的重要手段之一。
数字式频率计的测量原理有两类:一是直接测频法,即在一定的闸门时间内测量被测信号的脉冲个数;二是间接测频法即周期法,如周期测频法。直接测频法适用于高频信号的频率测量,通常采用计数器、数据锁存器及控制电路实现,并通过改变计数阀门的时间长短以达到不同的测量精度;间接测频法适用于低频信号的频率测量。
本次课程设计中使用的是直接测频法,即用计数器在计算机1s内输入信号周期的个数,其测频范围为0Hz-99999999Hz。
四、器件的选择
1、装有QuartusII软件的计算机一台。
2、芯片:本实验板中为EP芯片。
3、EDA实验箱一个。
4、下载接口是数字芯片的下载接口(JTAG)主要用于FPGA芯片的数据下载。
5、时钟源。
五、功能模块和信号仿真图以及源程序
(1)系统时钟分频及控制的功能模块图及其源程序
图2 功能模块图
作用:将试验箱上的50MHz的晶振分频,输出CLOCK为数码管提供1kHz的动态扫描频率。CNT_EN输出为0.05s的信号,对频率计中的32位十进制计数器CNT10的ENA使能端进行同步控制,当TSTEN高电平时允许计数,低电平时停止计数,并保持其所计的脉冲数。在停止计数期间,首先需要一个锁存信号LOAD的上跳沿将计数器在前一秒的计数值锁存进锁存器REG32B中,并由外部的十进制7段数码管显示计数值。设置锁存器的好处是数据显示稳定,不会由于周期性的清零信号而不断闪烁。锁存信号后,必须有一个清零信号RST_CNT对计数器进行清零,为下一秒的计数操作做准备。该模块的信号仿真图如下:
图3 仿真波形图
源程序如下:
--分频
library ieee;use ieee.std_logic_1164.all;entity fdivwangzheng is port(clk0:in std_logic;--输入系统时钟
clk1:out std_logic;--输出1hz时钟信号
clk2:out std_logic);--输出显示扫描时钟信号
end fdivwangzheng;architecture a of fdivwangzheng is begin
p1:process(clk0)variable cnt:integer range 0 to 49999999;--分频系数为24999999 variable ff:std_logic;begin if clk0'event and clk0='1' then if cnt<49999999 then cnt:=cnt+1;else cnt:=0;ff:=not ff;--反向 end if;end if;clk1<=ff;end process p1;p2:process(clk0)
variable cnn:integer range 0 to 999;--分频系数为499 variable dd:std_logic;begin if clk0'event and clk0='1' then if cnn<999 then cnn:=cnn+1;else cnn:=0;dd:=not dd;--反向 end if;end if;clk2<=dd;end process p2;end a;
--测频控制器(testctl.vhd)LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY TESTCTLwanzheng IS
PORT(CLKK : IN STD_LOGIC;--1Hz
CNT_EN,RST_CNT,LOAD : OUT STD_LOGIC);
END TESTCTLwanzheng;ARCHITECTURE behav OF TESTCTLwanzheng IS
SIGNAL DIV2CLK : STD_LOGIC;BEGIN
PROCESS(CLKK)
BEGIN
IF CLKK'EVENT AND CLKK = '1' THEN DIV2CLK <= NOT DIV2CLK;
END IF;
END PROCESS;
PROCESS(CLKK, DIV2CLK)
BEGIN
IF CLKK='0' AND Div2CLK='0' THEN RST_CNT <= '1';
ELSE RST_CNT <= '0';
END IF;
END PROCESS;
LOAD <= NOT DIV2CLK;
CNT_EN <= DIV2CLK;END behav;(2)十进制计数器的功能模块图及其源程序
图4 功能模块图
作用:当使能端为高电平,清零端为低电平时,实现十进制计数功能。
第一个CNT10计数输出CQ=9时,下一秒时钟上升沿到来时,将产生一个CARRY_OUT信号作为下一个CNT10的时钟信号,同时CQ清零,依次递推到8个CNT10。
当清零端为低电平,使能端为低电平时停止计数。当清零端为高电平时,计数器清零。该模块的信号仿真图如下:
图5 仿真波形图
源程序如下:
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY CNT10 IS PORT(CLK: IN STD_LOGIC;
CLR: IN STD_LOGIC;
ENA: IN STD_LOGIC;
CQ : OUT INTEGER RANGE 0 TO 9;
CARRY_OUT: OUT STD_LOGIC);END CNT10;ARCHITECTURE behav OF CNT10 IS SIGNAL CQI: INTEGER RANGE 0 TO 9;BEGIN PROCESS(CLR,CLK,ENA)BEGIN IF(CLR='1')THEN CQI<=0;ELSIF(CLK'EVENT AND CLK='1')THEN
IF(ENA='1')THEN
IF(CQI=9)THEN
CQI<=0;
CARRY_OUT<='1';
ELSE
CQI<=CQI+1;
CARRY_OUT<='0';
END IF;
END IF;END IF;END PROCESS;CQ<=CQI;END behav;
(3)32位锁存器的功能模块图及其源程序
图6 功能模块图
实现方式:LOAD信号上升沿到来时将对输入到内部的CNT10计数信号进行锁存。作用:锁存信号,并将结果输出给SELTIME。该模块的信号仿真图如下:
图7 仿真波形图
源程序如下:
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG32B IS
PORT(LOAD: IN STD_LOGIC;DIN: IN STD_LOGIC_VECTOR(31 DOWNTO 0);DOUT: OUT STD_LOGIC_VECTOR(31 DOWNTO 0));END ENTITY REG32B;ARCHITECTURE behav OF REG32B IS BEGIN
PROCESS(LOAD,DIN)IS BEGIN
IF LOAD'EVENT AND LOAD='1' THEN DOUT<=DIN;
END IF;END PROCESS;END ARCHITECTURE behav;
(4)数码管扫描的功能模块图及其源程序
图8 功能模块图
作用:锁存信号输出DIN[31..0],然后由SELTIME进行扫描输出,当SEL为”000”时选通第一个CNT10,输出到LED7进行译码输出。依次类推。该模块的信号仿真图如下:
图9 仿真波形图
源程序如下:
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY SELTIME IS PORT(CLK : IN STD_LOGIC;
DIN : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
DAOUT: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
SEL : OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END SELTIME;ARCHITECTURE behav OF SELTIME IS SIGNAL SEC : STD_LOGIC_VECTOR(2 DOWNTO 0);BEGIN PROCESS(CLK)BEGIN
IF(CLK'EVENT AND CLK='1')THEN
IF(SEC=“111”)THEN
SEC<=“000”;
ELSE
SEC<=SEC+1;
END IF;
END IF;END PROCESS;
PROCESS(SEC,DIN(31 DOWNTO 0))BEGIN CASE SEC IS WHEN “000”=>DAOUT<=DIN(3 DOWNTO 0);WHEN “001”=>DAOUT<=DIN(7 DOWNTO 4);WHEN “010”=>DAOUT<=DIN(11 DOWNTO 8);WHEN “011”=>DAOUT<=DIN(15 DOWNTO 12);WHEN “100”=>DAOUT<=DIN(19 DOWNTO 16);WHEN “101”=>DAOUT<=DIN(23 DOWNTO 20);WHEN “110”=>DAOUT<=DIN(27 DOWNTO 24);WHEN “111”=>DAOUT<=DIN(31 DOWNTO 28);WHEN OTHERS=>NULL;END CASE;END PROCESS;SEL<=SEC;END behav;
(5)七段数码管译码显示的功能模块图及其源程序
图10 功能模块图
作用:将实验结果使用数码管直观的显示出来。该模块的信号仿真图如下:
图11 仿真波形图
源程序如下:
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY LED7 IS PORT(DIN:IN STD_LOGIC_VECTOR(3 DOWNTO 0);DOUT:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END LED7;ARCHITECTURE behav OF LED7 IS--SIGNAL LED7:STD_LOGIC_VECTOR(6 DOWNTO 0);BEGIN PROCESS(DIN)BEGIN CASE DIN IS WHEN “0000”=>DOUT<=“0111111”;WHEN “0001”=>DOUT<=“0000110”;WHEN “0010”=>DOUT<=“1011011”;WHEN “0011”=>DOUT<=“1001111”;WHEN “0100”=>DOUT<=“1100110”;WHEN “0101”=>DOUT<=“1101101”;WHEN “0110”=>DOUT<=“1111101”;WHEN “0111”=>DOUT<=“0000111”;WHEN “1000”=>DOUT<=“1111111”;WHEN “1001”=>DOUT<=“1101111”;WHEN “1010”=>DOUT<=“1110111”;WHEN “1011”=>DOUT<=“1111100”;WHEN “1100”=>DOUT<=“0111001”;WHEN “1101”=>DOUT<=“1011110”;WHEN “1110”=>DOUT<=“1111001”;WHEN “1111”=>DOUT<=“1110001”;WHEN OTHERS=>NULL;END CASE;END PROCESS;END ARCHITECTURE behav;(6)3-8译码器的功能模块图及其源程序
图12 功能模块图
作用:利用3-8译码器将数码管的位选信号选通。该模块的信号仿真图如下:
图13 仿真波形图
源程序如下:
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY LS138 IS
PORT(Q: IN STD_LOGIC_VECTOR(2 DOWNTO 0);
D: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
dp:OUT STD_LOGIC);END LS138;ARCHITECTURE behav OF LS138 IS BEGIN
WITH Q SELECT
D<=“11111110” WHEN “000”, “11111101” WHEN “001”, “11111011” WHEN “010”, “11110111” WHEN “011”, “11101111” WHEN “100”, “11011111” WHEN “101”, “10111111” WHEN “110”, “01111111” wHEN “111”, “11111111” WHEN OTHERS;WITH Q SELECT
dp<='1' WHEN “001”, '0' WHEN OTHERS;END behav;
六、顶层模块图
图14 总体设计顶层模块图
其中8个十进制计数器模块JSQ的底层模块图如图15所示:
图15 计数器模块原理图
本次课程设计的时钟信号由试验箱上面的5MHz的晶振提供,经过系统时钟和控制模块后分别产生0.05Hz和10kHz的脉冲信号0.05Hz的脉冲信号十进制计数器的使能信号,使计数器统计出待测信号在1s脉宽之间的脉冲数目。再由计数模块将测得的信号传送给数码管显示部分,通过译码模块产生可以在数码管上显示的BCD码。而1kHz是作为数码管动态扫描的频率,由于人的视觉暂留现象,频率较高时,数码管看起来就是连续发光。本设计中使个位显示为数码管的小数点后面一位,由此实现了频率分辨率为1Hz的频率计设计。
结论
EDA技术是电子设计的发展趋势,利用EDA工具可以代替设计者完成电子系统设计中的大部分工作。EDA工具从数字系统设计的单一领域,发展到今天,应用范围己涉及模拟、微波等多个领域,可以实现各个领域电子系统设计的测试、设计仿真和布局布线等,这些都是我在这次课设中深刻体会到的。经过这次课程设计,让我真正认识了EDA这门学科,了解到这种方式下的设计方案,硬件电路简洁,集成度高,体现了当今社会所需的先进技术,日后必定在有着广阔的发展空间。
通过这次对EDA课程设计的进一步操作,能更好的在Quartus II上进行VHDL程序的编译及各个模块的仿真,虽然在实际操作过程中由于粗心造成了程序的缺失和错误,但都在老师和同学的帮助下一一解决了。很好地巩固了我们学过的专业知识,使我对数字系统结构也有了更进一步的了解和认识,同时对数据库软件EDA技术、VHDL等系列知识都有了一定的了解。使用EDA技术开发页面的能力也有了很大提高,也使我们把理论与实践从真正意义上相结合了起来;考验了我们借助互联网络搜集、查阅相关文献资料,和组织材料的综合能力。
在这次课程设计中,虽然应用的都是在书本上学过的知识,但是只有应用到实际中才算真正的学懂了这些知识。本次数字频率计的涉及到了VHDL语言、Quartus II软件,EDA技术等。涉及了微机原理和EDA所学的大部分内容。通过这次课程设计实践巩固了学过的知识并能够较好的利用。课程设计实践不单是将所学的知识应用于实际,在设计的过程中,只拥有理论知识是不够的。逻辑思维、电路设计的步骤和方法、考虑问题的思路和角度等也是很重要,需要我们着重注意锻炼的能力。在这次设计中还发现理论与实际常常常存在很大差距,为了使电路正常工作,必须灵活运用原理找出解决方法。
在课题设计中,通过使用Quartus II这个完全集成化、易学易用的可编程逻辑设计环境,利用VHDL语言设计完成八位十进制数字频率计,能够较好的测定所给频率,并且具有自动清零和自动测试的功能,基本符合此次课程设计给出的要求。
第三篇:数电课程设计计数式频率计
计数式数字频率计
1、control模块
功能仿真
时序仿真
Counter100模块
功能仿真
时序仿真
Counter10模块
功能仿真
时序仿真
Code1模块
功能仿真
时序仿真
数字频率计顶层逻辑图
总模块功能仿真
总模块时序仿真
第四篇:频率计设计实训报告范文
数字电路实训报告
题目:数字频率计 专业:电子信息工程 班级: 姓名: 学号:
摘要
系统功能介绍:
数字频率计是一种基本的测量仪器,是用量最大、品种很多的产品,是计算机、通讯设备、音频视频等科研生产领域不可缺少的测量仪器。它是一种用十进制数字显示被测信号频率的数字测量仪器。它的基本功能是测量正弦信号,方波信号以及其他各种单位时间内变化的物理量。
本次设计选择以集成芯片作为核心器件,利用数字电子技术基础的相关知识,设计了一个简易四位数字频率计,以分频器、触发器和计数器为核心,由信号输入、计数、数据处理和数据显示等功能模块组成。它是用数字显示被测信号频率的仪器,被测信号可以是正弦波,方波或其它周期性变化的信号。
目录
一.数字频率计的基本原理.................................................................................4 二.设计思路.........................................................................................................4
2.1秒信号........................................................................................................4 2.2分频器........................................................................................................4 2.3计数器........................................................................................................4 2.4锁存器........................................................................................................4 2.5显示译码器与数码管................................................................................4 三.元件.................................................................................................................5
3.1 CD4060(分频器芯片)...............................................................................5 3.2 CD4013(D触发器芯片)......................................................................5 3.3 CD4017(脉冲分配器)..........................................................................5 3.4 CD4029(计数器芯片)..........................................................................5 3.5 CD4511(译码芯片)..............................................................................5 3.6数码管........................................................................................................5 3.7 7404(与非门芯片),两个电容(20~30pF),电阻(1M)。................5 四.仿真.................................................................................................................5 五.电路图.............................................................................................................6 六.电路的调试过程.............................................................................................6 七.心得体会.........................................................................................................7 八.参考文献.........................................................................................................8
数字频率计的设计
一.数字频率计的基本原理
二.设计思路
根据上面的分析,数字频率计的基本电路由以下五个部分组成。
2.1
秒信号 2.2
分频器 2.3
计数器 2.4
锁存器 2.5
显示模块
三.元件
3.1
CD4060BE(分频器芯片)3.2
SN74HC74N(D触发器芯片)3.3
CD4017BE(脉冲分配器)3.4
CD4029BE(计数器芯片)3.5
CD4511BE(译码芯片)3.6
LG5011AH(数码管3个)
3.7
SN74HC04N(与非门芯片),两个电容(20~30pF),电阻(1M)。
四.仿真
五.电路图
六.电路的调试过程
电路板焊接完成之后,就需要进行调试过程了,刚开始有的同学焊接完成之后,让老师进行查看,结果不显示,或者显示不成功,老师就给我们讲解了如何进行调试电路,要学会自己查找问题,自己检测电路时哪里的问题。首先就是不亮的问题,就是没有焊接好或者某个地方焊接短路的,这就需要自己一根一根一部分一部分进行检查检测了。接着是数码管全亮了,并没有计数,老师告诉我们需要把三个4511的5脚三个接到4029的1脚上,不再接地了,如果不出什么意外而且其他电路部分没有问题,这步完成后,电路应该就正常工作了。最后我的电路还遇到的问题是,频率计计数了,但是就是不稳定,于是老师经过思考后,让我们分别在三个数码管上串联一个电阻,经过这步后,我的电路基本调试完成,基本没有什么大的问题了。以上这些是我的电路进行调试的过程中遇到的问题,可能还有其他调试过程中遇到的问题,这需要我们耐心调试,不懂的要多问老师同学,这样电路才能调试成功。
七.心得体会
本次实训让我体味到设计电路、连接电路、调测电路过程中的苦与甜。设计是我们将来必需的技能,这次实训恰恰给我们提供了一个应用自己所学知识的机会,从查找资料到对电路的设计以及对电路的调试再到最后电路的成型,都对我所学的知识进行了检验。
首先第一周是“唠嗑”,老师给我们分了组,然我们在组内讨论,各自发挥给子的优势,分别能胜任什么工作。每个人的职责分配完毕后,接着就是“老板”招标,各组竞标,每组根据老师提出的要求进行思考和组织语言,然后说服老师。然后大家就开动大脑,整理思路,组织语言,最后向老师汇报的时候,虽然大家都基本没说到点子上,但是也说明大家还是动脑筋了。第一周的实训看似简单,但是老师在锻炼我们的动脑能力和看问题要看本质以及最后锻炼我们的语言表达能力,收获很多。
第二周是电路的设计,在电脑上用仿真软件设计电路,毕竟我们学得不是那么透彻,基本上没法把书本上的知识和实力联系起来,大家绞尽脑汁,也不知道如何下手,该从哪里下手,最后在老师的帮助下,我们完成了仿真电路的设计。在这个过程中,老师耐心的给我们讲解每个元件的功能和用途,该如何连接到电路中。这周的实训中充分暴露了我们理论和实际联系的太少太少了,还有动手上机操作的能力不强,以后还有待提高。
第三周第四周就是硬件的电路焊接设计了。老师给我们发了所有的原件和电路板,我们把之前的仿真电路打印出来,然后就比葫芦画瓢的焊接,但是后来才发现,不认真弄清电路的构造只知道比葫芦画瓢的焊接,在后面的时候很容易焊接错,所以首先得弄清电路构造。在电路板上布线设计硬件的连接方式,这一步还是比较轻松,主要是布的线要尽可能的不交叉。之后就开始对着图焊板子,开始把元器件焊上去还是比较简单好看的。可是紧接着进入焊线阶段就难住我了,线拉不直,焊在板子上就很丑;另一方面,在焊的过程中就会发现有那么几根线是按照布线图来焊是实现不了的,于是,中途又会重新改布线图。硬件部分我花了接近两周的课余时间,反反复复的修改,焊接,终于初步完成了。最后一周是板子焊好后的进硬件调试阶段以及总结大会。硬件调试时,发现了线路的一些错误接法和元器件位置的错接等等,这样又花了很多时间调试修改,硬件就基本上算是完成了。这周感悟也很多,不光要焊接成功电路,还要学会自己查找问题,解决问题,这才是真正地学到了知识。
通过五周的频率计设计,真的是感触颇多。这五周以来我们每周实训课都积极参与其中,完成老师布置的任务。在课余时间去实验室焊接电路。每天和大家在一起焊板子,一起讨论问题,一起互相帮助的画面还历历在目。这其中有欢声笑语,也有苦有累。还有很多不足的地方,需要自己改进,还有一些缺点也要改掉。总之,这次实训,收获很多。希望自己以后还能更努力。
八.参考文献
1.CD4511
CD4511 是一个用于驱动共阴极 LED(数码管)显示器的 BCD 码—七段码译
码器,特点:具有 BCD 转换、消隐和锁存控制、七段译码及驱动功能的 CMOS 电路能提供较大的拉电流。可直接驱动 LED 显示器。引脚图如图所示。
其功能介绍如下:
BI:4 脚是消隐输入控制端,当 BI=0 时,不管其它输入端状态如何,七 段数码管均处于熄灭(消隐)状态,不显示数字。
LT:3 脚是测试输入端,当 BI=1,LT=0 时,译码输出全为 1,不管输入
DCBA 状态如何,七段均发亮,显示“8”。它主要用来检测数码管是否损坏。LE:锁定控制端,当 LE=0 时,允许译码输出。LE=1 时译码器是锁定 保持状态,译码器输出被保持在 LE=0 时的数值。A1、A2、A3、A4、为 8421BCD 码输入端。
a、b、c、d、e、f、g:为译码输出端,输出为高电平1 有效。
2.CD4029
CD4029 是一组可预设二进制/BCD、上数/下数计数器,其引脚图如图,功能有:
(1)4 位数据预设
(2)4 位二进制计数或BCD 计数(3)上数计数或下数计数
当其预设控制端PE 为1 时,不论其它输入状态为何,则QDQCQBQA=DCBA,其预设工作与Clock 无关,属异步预设;当PE=0 时,则正常计数。CD4029 的计数选择有4 种,分别由U/D(上数/下数)及B/D(二进制/十进制)两脚来控制。
3.74LS74
74LS74
TTL 带置位复位正触发双 D 触发器
Vcc 2CR 2D 2Ck 2St 2Q-2Q ┌┴─┴─┴─┴─┴─┴─┴┐ 双 D 触发器 74LS74 │14 13 12 11 10 9 8 │)│
│ 1 2 3 4 5 6 7│
└┬─┬─┬─┬─┬─┬─┬┘
工作原理: SD 和RD 接至基本RS 触发器的输入端,它们分别是预置和清零端,低电平有效。当SD=0且RD=1时,不论输入端D为何种状态,都会使Q=1,Q=0,即触发器置1;当SD=1且RD=0时,触发器的状态为0,SD和RD通常又称为直接置1和置0端。我们设它们均已加入了高电平,不影响电路的工作。工作过程如下:
1.CP=0时,与非门G3和G4封锁,其输出Q3=Q4=1,触发器的状态不变。同时,由于Q3至Q5和Q4至Q6的反馈信号将这两个门打开,因此可接收输入信号D,Q5=D,Q6=Q5=D。2.当CP由0变1时触发器翻转。这时G3和G4打开,它们的输入Q3和Q4的状态由G5和G6的输出状态决定。Q3=Q5=D,Q4=Q6=D。由基本RS触发器的逻辑功能可知,Q=D。3.触发器翻转后,在CP=1时输入信号被封锁。这是因为G3和G4打开后,它们的输出Q3和Q4的状态是互补的,即必定有一个是0,若Q3为0,则经G3输出至G5输入的反馈线将G5封锁,即封锁了D通往基本RS 触发器的路径;该反馈线起到了使触发器维持在0状态和阻止触发器变为1状态的作用,故该反馈线称为置0维持线,置1阻塞线。Q4为0时,将G3和G6封锁,D端通往基本RS触发器的路径也被封锁。Q4输出端至G6反馈线起到使触发器维持在1状态的作用,称作置1维持线;Q4输出至G3输入的反馈线起到阻止触发器置0的作用,称为置0阻塞线。
4.74LS04 74LS04 TTL 六反相器 六个与非门 集成到集成块里
5.CD4017
CD4017 是5 位Johnson 计数器,具有10 个译码输出端,CP、CR、INH 输入端。时钟输入端的斯密特触发器具有脉冲整形功能,对输入时钟脉冲上升和下降时间无限制。INH 为低电平时,计数器在时钟上升沿计数;反之,计数功能无效。CR 为高电平时,计数器清零。Johnson 计数器,提供了快速操作、2 输入译码选通和无毛刺译码输出。防锁选通,保证了正确的计数顺序。译码输出一般为低电平,只有在对应时钟周期内保持高电平。在每10 个时钟输入周期CO 信号完成一次进位,并用作多级计数链的下级脉动时钟。引脚图如图所示:
引出端功能符号 CO:进位脉冲输渊 CP:时钟输入端 CR:清除端 INH:禁止端
Q0-Q9 计数脉冲输出端 VDD:正电源
VSS:地CD4017组成的防抖动触摸开关电路
5.CD4060 CD4060由一振荡器和14级二进制串行计数器位组成,振荡器的结构可以是RC或晶振电路,CR为高电平时,计数器清零且振荡器使用无效。所有的计数器位均为主从触发器。在CP1(和CP0)的下降沿计数器以二进制进行计数。在时钟脉冲线上使用斯密特触发器对时钟上升和下降时间无限制。CD4060引脚图:
第五篇:数字电路课程设计——用VHDL语言设计交通灯
数字电路课程设计报告
院系: 电气信息工程学院 班级: 08测控2班 学号: 08314237 姓名: 董 亮 合作: 虞 波 指导教师: 翟 丽 芳
2010年12月10日
目
录
引言······················································2 一 设计任务和设计要求·········································2 二 电路工作原理及方案设计································3 三 软件设计与调试········································4 1.分频模块的设计及仿真图·································4 2.控制器设计及仿真图····································6 3.计数器的设计及仿真图···································7 4.分位模块的设计·······································9 5.数码管驱动设计·······································10 6. 顶层文件设置·········································14
四 硬件焊接与组装调试···································15 五 心得体会·············································16 六 参考文献·············································16
交通灯控制电路设计
引言:
随着社会的发展以及人类生活水平的提高,基于CPLD的EDA技术的发展和应用领域的扩大与深入,EDA技术在电子信息、通信、自动控制用计算机等领域的重要性日益突出。
如今,交通的问题日益突出,单单依靠人力来指挥交通已经不可行了,所以,设计交通灯来完成这个需求就显的越加迫切了。为了确保十字路口的行人和车辆顺利、畅通地通过,往往采用电子控制的交通信号来进行指挥。以下就是运用数字电子设计出的交通灯。
本程序设计的是交通灯的设计。采用EDA作为开发工具,VHDL语言为硬件描述语言,quartusII作为程序运行平台,所开发的程序通过调试运行、波形仿真验证,实现设计目标。
一.设计任务与设计要求
1. 设计任务
设计一个基于FPGA的十字路口交通控制器,假设南北方向和东西方向,两个方向分别设置红灯、绿灯、黄灯三盏灯,设置一组倒计时显示器,用以指挥车辆和行人有序的通行。红灯亮表示直行车辆禁行;绿灯亮表示直行车辆可以通行;黄灯亮表示直行车辆即将禁行;倒计时显示器用来显示允许通行或禁止通行的时间。尽量采用层次化设计。2. 设计要求
在十字路口南北和东西两个方向各设一组红灯、黄灯、绿灯。设一组倒计时显示器。
自动控制:
设置一组数码管,以倒计时的方式显示允许通行或禁止通行的时间,南北方向为主干道,红灯、黄灯和绿灯显示时间分别是55、5s、50s。东西方向为次干道,红灯、黄灯绿灯显示时间分别为35s、5s、30s。
特殊功能:
(1)紧急状态时,手动拨动紧急开关,主干道以及次干道都显示红灯,禁止通行,并由蜂鸣其报警。
(2)黄灯显示信号为脉冲信号,使得黄灯为“一闪一闪”的显示状态。
二.电路工作原理及方案设计
图1总体设计框图
在VHDL设计描述中,采用自顶向下的设计思路,首先要描述顶层的接口,上面的描述已经规定了交通灯控制的输入输出信号:输入信号:外部时钟信号clk。LED在自顶向下的VHDL设计描述中,通常把整个设计的系统划分为几个模块,然后采用结构描述方式对整个系统进行描述。通过上面的分析,不难得知可以把交通灯控制系统划分为4个模块:时钟分频模块,计数模块,控制模块,分位译码模块。
分频电路:输入较高频率脉冲用分频电路的到较
(HOLD=‘1’)发生是,计数器暂停计数。
分位译码电路:因为控制器输出的倒计时数值可能是1位或者2位十进制数,所以在七段数码管的译码电路前要加上分位电路(即将其分为2个1位的十进制数)。七段数码管的译码电路根据控制电路的控制信号,驱动交通灯的显示,通过输入二进制数值,输出信号点亮二极管,我们用的是共阴极数码管,因此译码电路输出逻辑数值‘1’点亮二极管,译码电路输出逻辑数值‘0’熄灭二极管。
三.软件设计与调试
图2模块化设计原理图
1.分频模块的设计及仿真图
分频器1实现的是将高频时钟信号转换成底频的时钟信号,用于触发控制器、计数器和扫描显示电路。该分频器实现的是1000分频,将50M赫兹的时钟信号分频成50000赫兹的时钟信号。LIBRARY IEEE;USE IEEE.Std_Logic_1164.ALL;ENTITY FreDevider IS PORT(Clkin:IN Std_Logic;Clkout:OUT Std_Logic);
END;ARCHITECTURE Devider OF FreDevider IS CONSTANT N:Integer:=499;Signal counter:Integer range 0 to N;signal Clk:Std_Logic;BEGIN PROCESS(Clkin)begin IF rising_edge(Clkin)THEN IF Counter=N then counter<=0;Clk<=not clk;else counter<=counter+1;end if;end if;end process;clkout<=clk;end;分频器2实现的是50000分频,将50000赫兹的时钟信号分频成1赫兹的时钟信号。
LIBRARY IEEE;USE IEEE.Std_Logic_1164.ALL;ENTITY FreDevider1 IS PORT(Clkin:IN Std_Logic;Clkout:OUT Std_Logic);END;ARCHITECTURE Devider1 OF FreDevider1 IS CONSTANT N:Integer:=24999;signal counter:Integer range 0 to N;signal Clk:Std_Logic;BEGIN PROCESS(Clkin)begin IF rising_edge(Clkin)THEN IF Counter=N then counter<=0;Clk<=not clk;else counter<=counter+1;end if;end if;end process;
clkout<=clk;end;
2.控制器设计及仿真图
控制器的作用是根据计数器的计数值控制发光二极管的亮、灭,以及输出倒计时数值给七段译管的分译码电路。此外,当检测到特殊情况(Hold=‘1’)发生时,无条件点亮红色的发光二极管。功能:控制发光二极管的亮、灭,以及输出倒计时数值给七段译码管的分位译码电路。
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY countroller IS PORT(Clock:IN STD_LOGIC;Hold:in std_logic;CountNum:in INTEGER RANGE 0 TO 89;NumA:out INTEGER RANGE 0 TO 90;RedA,GreenA,YellowA:out std_logic;RedB,GreenB,YellowB:out std_logic);END;ARCHITECTURE behavior OF Countroller IS BEGIN process(Clock)BEGIN IF falling_edge(Clock)THEN IF Hold='1' THEN RedA<='1';RedB<='1';GreenA<='0';GreenA<='0';YellowA<='0';YellowB<='0';
ELSIF CountNum<=54 THEN NumA<=55-CountNum;RedA<='0';GreenA<='1';YellowA<='0';ELSIF CountNum<=59 THEN NumA<=60;RedA<='0';GreenA<='0';YellowA<='1';ELSE NumA<=90-CountNum;RedA<='1';GreenA<='0';YellowA<='0';END IF;IF CountNum<=54 THEN RedB<='1';GreenB<='0';YellowB<='0';ELSIF CountNum<=84 THEN RedB<='0';GreenB<='1';YellowB<='0';ELSe RedB<='0';GreenB<='0';YellowB<='1';END IF;end if;END PROCESS;END;3.计数器的设计及仿真图
这里计数器的计数范围为0—90S,下一个时钟沿回复到0,开始下一轮计数.此外,当检测到特殊情况(Hold=‘1‘)发生时,计数器暂停计数。
程序如下: LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY counter IS PORT(clock:IN STD_LOGIC;Hold:in std_logic;countNum:BuFFeR INTEGER RANGE 0 TO 90);
END;ARCHITECTURE behavior OF counter IS BEGIN Process(Clock)BEGIN IF rising_edge(Clock)THEN IF Hold='1' then countNum<=countNum;ELSE IF countNum=90 THEN countNum<=0;ELSE countNum<=countNum+1;END IF;END IF;END PROCESS;END;
4.分位模块的设计
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY Fenwei IS PORT(Numin:IN integer RANGE 0 TO 90;NumA,NumB:OUT Integer RANGE 0 to 9);END;ARCHITECTURE behavior OF Fenwei IS BEGIN process(Numin)BEGIN IF Numin>=60 THEN NumA<=10;NumB<=10;elsIF Numin>=50 THEN NumA<=5;NumB<=Numin-50;elsIF Numin>=40 THEN NumA<=4;NumB<=Numin-40;ELSIF Numin>=30 THEN NumA<=3;NumB<=Numin-30;ELSIF Numin>=20 THEN NumA<=2;NumB<=Numin-20;ELSIF Numin>=10 THEN
NumA<=1;NumB<=Numin-10;ELSE NumA<=0;NumB<=Numin;END IF;END PROCESS;END;
5.数码管驱动设计 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY bcd_data IS PORT(bcd_data:in STD_LOGIC_VECTOR(3 downto 0);segout: out STD_LOGIC_VECTOR(6 downto 0));END;ARCHITECTURE behavior OF bcd_data IS BEGIN process(bcd_data)BEGIN case bcd_data is when “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<=“0011111”;when “0111”=>segout<=“1110000”;when “1000” =>segout<=“1111111”;when “1001” =>segout<=“1110011”;when “1010”=>segout<=“0000000”;when others =>null;END CASE;END PROCESS;END;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_unsigned.ALL;
ENTITY dtsm IS PORT(clk:in STD_LOGIC;NumA,NumB,NumC,NumD: in STD_LOGIC_VECTOR(3 downto 0);segout1:out STD_LOGIC_VECTOR(6 downto 0);led_sel: out STD_LOGIC_VECTOR(3 downto 0));END dtsm;architecture bhv of dtsm is component bcd_data is port(bcd_data:in STD_LOGIC_VECTOR(3 downto 0);segout:out STD_LOGIC_VECTOR(6 downto 0));end component;signal x:STD_LOGIC_VECTOR(3 downto 0);signal q:STD_LOGIC_VECTOR(1 downto 0);begin p1:process(clk)begin if clk'event and clk ='1' then Q<= Q + '1';end if;end process;
p2:process(Q)begin case Q is when“00”=>led_sel<=“1110”;x<=NumD;when“01”=>led_sel<=“1101”;x<=NumC;when“10”=>led_sel<=“1011”;x<=NumB;when“11”=>led_sel<=“0111”;x<=NumA;when others=>null;end case;end process;u1:bcd_data PORT map(bcd_data=>x,segout=>segout1);end;
6.顶层文件设置
library ieee;use ieee.std_logic_1164.all;entity jiaotongdeng is port(clk1:in std_logic;reset1:in std_logic;
hold1:in std_logic;segout2:out std_logic_vector(6 downto 0);led_sel1:out std_logic_vector(3 downto 0);reda1,yellowa1,greena1:out std_logic;redb1,yellowb1,greenb1:out std_logic);end jiaotongdeng;
architecture aa11 of jiaotongdeng is component FreDevider PORT(Clkin:IN Std_Logic;Clkout:OUT Std_Logic);END component;
component FreDevider1 PORT(Clkin:IN Std_Logic;Clkout:OUT Std_Logic);END component;component countroller PORT(Clock:IN STD_LOGIC;Hold:in std_logic;CountNum:in INTEGER RANGE 0 TO 89;NumA:out INTEGER RANGE 0 TO 90;RedA,GreenA,YellowA:out std_logic;RedB,GreenB,YellowB:out std_logic);END component;component counter PORT(clock:IN STD_LOGIC;reset:in std_logic;Hold:in std_logic;countNum:BuFFeR INTEGER RANGE 0 TO 90);END component;component Fenwei PORT(Numin:IN integer RANGE 0 TO 90;NumA,NumB:OUT Integer RANGE 0 to 9);END component;component dtsm PORT(clk:in STD_LOGIC;NumA,NumB: in Integer RANGE 0 to 9;segout1:out STD_LOGIC_VECTOR(6 downto 0);led_sel: out STD_LOGIC_VECTOR(3 downto 0));
END component;signal a,b:std_logic;signal c:INTEGER RANGE 0 TO 89;signal d:INTEGER RANGE 0 TO 90;signal e,f:Integer RANGE 0 to 9;begin u1: FreDevider port map(clkin=>clk1,clkout=>a);u2: FreDevider1 port map(clkin=>a,clkout=>b);u3:counter
port map(clock=>b,reset=>reset1,hold=>hold1,countnum=>c);u4:countroller port map(clock=>b,hold=>hold1,countnum=>c,numa=>d,reda=>reda1,greena=>greena1,yellowa=>yellowa1,redb=>redb1,greenb=>greenb1,yellowb=>yellowb1);u5:fenwei port map(numin=>d,numa=>e,numb=>f);u6:dtsm
port map(clk=>clk1,numa=>e,numb=>f,segout1=>segout2,led_sel=>led_sel1);end aa11;
四.硬件焊接与组装调试
按照如下图所示的电路图,在通用电路焊接板上合理布置各个元器件,进行焊接布线。
图3硬件焊接电路图
安装焊接完成后,仔细检查电路,是否有误。若与电路图不符,应及时排除错误。一切就绪后,将与FPGA对应的引脚使用杜邦线连接,连接完毕后,检查电源极性,避免反接。确认无误后,接通电源,观察实验结果。
首先我们完成的基本的功能,只是简单的倒计时显示,然后我们可以进一步修改我们的VHDL语言程序,重新烧入FPGA,以完善我们的设计。
五.心得体会
通过几天的课程设计,我对EDA技术、VHDL等系列知识都有了一定的了解。使用EDA技术开发页面的能力也有了很大提高。
EDA设计我们感觉程序调试最重要,试验软件、硬件熟悉其次。直到没有错误。若与理想的不同,再查看程序,有无原理上的编辑错误或没有查出的输入错误。都通过可以进行管脚配对,把程序烧入芯片,在实物上看结果,从显示中得出还需改正的地方,再去改程序。必须注意每改一次都要编译,重新烧入。我们采用模块化编程,模块化接线,再编译总原理图,思路比较清楚。有的模块可以供其它任务通用。
课程设计对学生而言是其对所学课程内容掌握情况的一次自我验证,从而有着极其重要的意义。通过课程设计能提高学生对所学知识的综合应用能力,能全面检查并掌握所学内容,在这学期的课程设计中,在收获知识的同时,还收获了阅历,收获了成熟,在此过程中,我们通过查找资料,请教老师,以及不懈的努力,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。更重要的是,我们学会了很多学习的方法。而这是日后最实用的,真的是受益匪浅。要面对社会的挑战,只有不断的学习、实践,再学习、再实践。
另外,我还学到了一个人的力量毕竟有限,但是团队的力量势不可挡,我们不能局限,要学会合作。这次课程设计虽然结束了,相信以后我们会以更加积极的态度对待我们的学习、对待我们的生活。我们的激情永远不会结束,相反,我们会更加努力,努力的去弥补自己的缺点,发展自己的优点,去充实自己,只有在了解了自己的长短之后,我们会更加珍惜拥有的,更加努力的去完善它。
六.参考文献
(1)潘松,黄继业.《EDA
技术使用教程》.科学出版社.2006.(2)潘松,黄继业.《EDA技术与VHDL(