第一篇: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语言设计完成八位十进制数字频率计,能够较好的测定所给频率,并且具有自动清零和自动测试的功能,基本符合此次课程设计给出的要求。
第二篇: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
第三篇:EDA课程设计八位乘法器
EDA课程设计报告
实验名称:八位乘法器 实验地点:@@@@ 班级:@@@@@ 学号:@@@@@ 姓名:@@@@
目录
一.引言
1.1 EDA技术的概念•• 1.2 EDA技术的特点•• 1.3 EDA设计流程•• 1.4 VHDL介绍••
二. 八位乘法器的设计要求与设计思路••2.1 设计目的••
2.2 设计要求••
三. 八位乘法器的综合设计••
3.1 八位乘法器功能••
3.2 八位乘法器设计方案••
3.3 八位乘法器实体设计••
3.4 八位乘法器VHDL设计••
3.5八位乘法器仿真图形•• 心得体会•• 参考文献••
一、引言
1.1 EDA技术的概念
EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。
1.2 EDA技术的特点
利用EDA技术进行电子系统的设计,具有以下几个特点:① 用软件的方式设计硬件;② 用软件方式设计的系统到硬件系统的转换是由有关的开发软件自动完成的;③ 设计过程中可用有关软件进行各种仿真;④ 系统可现场编程,在线升级;⑤ 整个系统可集成在一个芯片上,体积小、功耗低、可靠性高。因此,EDA技术是现代电子设计的发展趋势。1.3 EDA设计流程 典型的EDA设计流程如下:
1、文本/原理图编辑与修改。首先利用EDA工具的文本或图形编辑器将设计者的设计意图用文本或图形方式表达出来。
2、编译。完成设计描述后即可通过编译器进行排错编译,变成特定的文本格式,为下一步的综合做准备。
3、综合。将软件设计与硬件的可实现性挂钩,是将软件转化为硬件电路的关键步骤。
4、行为仿真和功能仿真。利用产生的网表文件进行功能仿真,以便了解设计描述与设计意图的一致性。
5、适配。利用FPGA/CPLD布局布线适配器将综合后的网表文件针对某
一具体的目标器件进行逻辑映射操作,其中包括底层器件配臵、逻辑分割、逻辑优化、布局布线。适配报告指明了芯片内资源的分配与利用、引脚锁定、设计的布尔方程描述情况。
6、功能仿真和时序仿真。
7、下载。如果以上的所有过程都没有发现问题,就可以将适配器产生的下载文件通过FPGA/CPLD下载电缆载入目标芯片中。
8、硬件仿真与测试。1.4硬件描述语言(VHDL)
VHDL(Very-High-Speed Integrated Circuit Hardware Description Language)主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可是部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本。
1.用VHDL代码而不是用原理图进行设计,意味着整个电路板的模型及性能可用计算机模拟进行验证。
2.VHDL元件的设计与工艺无关,与工艺独立,方便工艺转换。3.VHDL支持各种设计方法,自顶向下、自底向上或者混合的都可以。4.可以进行从系统级到逻辑级的描述,即混合描述。
5.VHDL区别于其他的HDL,已形成标准,其代码在不同的系统中可交换建模。二、八位乘法器的设计要求与设计思路
2.1 设计目的
本次设计的目的就是通过实践深入理解EDA技术并掌握VHDL硬件描述语言的设计方法和思想。通过学习的VHDL语言结合电子电路的设计知识理论联系实际,掌握所学的课程知识和基本单元电路的综合设计应用。通过对八位乘法器的设计,巩固和综合运用所学知识,提高设计能力,提高分析、解决
计算机技术实际问题的独立工作能力。2.2 设计要求。
设计一个乘法器的模块,接受实验系统上的连续脉冲,当给定启动/清零指令时,能自动发出CLK信号驱动乘法预算,当8个脉冲后自动停止。设计一个纯组合电路的8*8等于16位的乘法器(选择不同的流水线方式),具体说明并比较这几种乘法器的逻辑资源占用情况和运行速度情况。通过独立的设计,能够完整的完成老师分配的课程设计任务。通过对电梯控制系统的设计,掌握所学EDA课程的基本知识和对VHDL语言的综合设计应用。通过课程设计,提高设计能力,提高分析解决实际问题的能力,并在设计中了解硬件编程的流程和思路,为以后工作和发挥技术打下基础。三、八位乘法器的综合设计
3.1 八位乘法器功能
由8位加法器构成的以时序逻辑方式设计的8位乘法器,此乘法器具有一定的实用价值。其乘法原理是:乘法通过逐项位移相加原理来实现,从被乘数的最低位开始,若为1,则乘数左移后与上一次和相加;若为0,左移后以全零相加,直至被乘数的最高位。图中,ARICTL是乘法运算控制电路,它的START(可锁定于引脚I/O 49)信号的上跳沿与高电平有两个功能,即16位寄存器清零和被乘数A[7..0]向移位寄存器SREG8B加载:它的低电平则作为乘法使能信号。乘法时钟信号从ARICTL的CLK输入。当被乘数加载于8位右移寄存器SREG8B后,随着每一时钟节拍,最低位在前,由低位至高位逐位移出。当为1时,与门ANDARITH打开,8为乘数B[7..0]在同一节拍进入8位加法器,与上一次锁存在16位锁存器REG16B中的高8位进行相加,其和在下一时钟节拍的上升沿被锁进此锁存器。而当被乘数移出位为0时,与门全零输出。如此往复,直至8个时钟脉冲后,由ARICTL的控制,乘法运算过程自动中止。ARIEND输出高电平,以此可点亮一发光管,以示乘法结束。此时REG16B的输出值即为最后乘积。
3.2 八位乘法器设计方案
方案一:八位直接宽位加法器,它的速度较快,但十分耗费硬件资源,对于工业化设计是不合理的。
方案二:由两个四位加法器组合八位加法器,其中四位加法器是四位二进制并行加法器,它的原理简单,资源利用率和进位速度等方面较好,综合各方面的考虑,决定采用第二种方案。
3.3 八位加法器设计思路
纯组合逻辑构成的乘法器虽然工作速度较快,但过于占用硬件资源,难以实现宽位乘法器,由八位加法器构成的以时序逻辑方式设计的八位乘法器,具有一定的使用价值。而且由FPGA构成实验系统后,可以很容易的用ASIC大型集成芯片来完成,性价比高,可操作性强。其乘法原理是:乘法通过逐项移位相加原理来完成,从被乘数的最低位开始,若为1,则乘数左移后于上一次的和相加;若为0左移后以全零相加,直至被乘数的最高位。3.5八位乘法器各功能模块VHDL描述
1.library ieee;--四位二进制并行加法器 use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity add4b is port(cin:in std_logic;a,b:in std_logic_vector(3 downto 0);s:out std_logic_vector(3 downto 0);cout:out std_logic);end;architecture one of add4b is signal sint,aa,bb:std_logic_vector(4 downto 0);begin aa<='0' & a;bb<='0' & b;sint<=aa+bb+cin;5
s<=sint(3 downto 0);cout<=sint(4);end;2.library ieee--由两个四位二进制并行加法器级联而成的八位二进制加法器;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity adder8b is port(cin:in std_logic;a,b:in std_logic_vector(7 downto 0);s:out std_logic_vector(7 downto 0);cout:out std_logic);end;architecture one of adder8b is component add4b--对要调用的元件add4b的端口进行说明
port(cin:in std_logic;a,b:in std_logic_vector(3 downto 0);s:out std_logic_vector(3 downto 0);cout:out std_logic);end component;signal carryout: std_logic;begin u1:add4b port map(cin,a(3 downto 0),b(3 downto 0),s(3 downto 0),carryout);u2:add4b port map(carryout,a(7 downto 4),b(7 downto 4),s(7 downto 4),cout);end;3.library ieee--一位乘法器;6
use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity andarith is port(abin:in std_logic;din:in std_logic_vector(7 downto 0);dout:out std_logic_vector(7 downto 0));end;architecture one of andarith is begin process(abin,din)begin for i in 0 to 7 loop dout(i)<=din(i)and abin;end loop;end process;end;4.library ieee;--乘法运算控制器 use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity arictl is port(clk,start:in std_logic;clkout,rstall,ariend:out std_logic);end;architecture one of arictl is signal cnt4b:std_logic_vector(3 downto 0);begin rstall<=start;process(clk,start)begin
if start='1' then cnt4b<=“0000”;elsif clk'event and clk='1' then if cnt4b<8 then--小于8则计数,等于8则表明乘法运算已经结束
cnt4b<=cnt4b+1;end if;end if;end process;process(clk,cnt4b,start)begin if start='0' then if cnt4b<8 then clkout<=clk;ariend<='0';else clkout<='0';ariend<='1';end if;else clkout<=clk;ariend<='0';end if;end process;end;5.library ieee;--16位锁存器 use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity reg16b is port(clk,clr:in std_logic;d:in std_logic_vector(8 downto 0);q:out std_logic_vector(15 downto 0));end;architecture one of reg16b is signal r16s:std_logic_vector(15 downto 0);
begin process(clk,clr)begin if clr='1' then r16s<=“***0”;elsif clk'event and clk='1' then r16s(6 downto 0)<=r16s(7 downto 1);r16s(15 downto 7)<=d;end if;end process;q<=r16s;end;6.library ieee;--8位右移寄存器 use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity sreg8b is port(clk,load:in std_logic;din:in std_logic_vector(7 downto 0);qb:out std_logic);end;architecture one of sreg8b is signal reg8:std_logic_vector(7 downto 0);begin process(clk,load)begin if clk'event and clk='1' then if load='1' then reg8<=din;else reg8(6 downto 0)<=reg8(7 downto 1);end if;end if;
end process;qb<=reg8(0);end;7.library ieee;--8位乘法器顶层设计 use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity mult8x8 is port(clk:in std_logic;start:in std_logic;a,b:in std_logic_vector(7 downto 0);dout:out std_logic_vector(15 downto 0);ariend:out std_logic);end;architecture struc of mult8x8 is component adder8b is port(cin:in std_logic;a,b:in std_logic_vector(7 downto 0);s:out std_logic_vector(7 downto 0);cout:out std_logic);end component;component andarith is port(abin:in std_logic;din:in std_logic_vector(7 downto 0);dout:out std_logic_vector(7 downto 0));end component;component arictl is port(clk,start:in std_logic;clkout,rstall,ariend:out std_logic);end component;
component reg16b is port(clk,clr:in std_logic;d:in std_logic_vector(8 downto 0);q:out std_logic_vector(15 downto 0));end component;component sreg8b is port(clk,load:in std_logic;din:in std_logic_vector(7 downto 0);qb:out std_logic);end component;signal gndint :std_logic;signal intclk :std_logic;signal rstall :std_logic;signal qb :std_logic;signal andsd :std_logic_vector(7 downto 0);signal dtbin :std_logic_vector(8 downto 0);signal dtbout :std_logic_vector(15 downto 0);begin dout<=dtbout;gndint<='0';u1:arictl port map(clk,start,intclk,rstall,ariend);u2:sreg8b port map(intclk,rstall,b,qb);u3:andarith port map(qb,a,andsd);u4:adder8b port map(gndint,dtbout(15 downto 8),andsd,dtbin(7 downto 0),dtbin(8));u5:reg16b port map(intclk,rstall,dtbin,dtbout);end;3.5八位乘法器仿真图形 输入波形图
输出波形图
时序RTL电路
心得体会
@@@@@这个自己编去吧。。
参考文献
⑴ 王爱英.计算机组成与结构.北京:清华大学出版社,2001.2 ⑵ 黄仁欣.EDA技术实用教程.北京:清华大学出版社,2006 ⑶ 曹昕燕,周凤臣,聂春燕.EDA技术实验与课程设计.北京:清华大学出版社,2006.5 ⑷ 杨亦华,延明.数字电路EDA入门.北京:北京邮电大学出版社,2003 ⑸ 邹彦,庄严,邹宁,王宇鸿《EDA技术与数字系统设计>北京:电子工业出版社,2008 ⑹ 潘松 ,黄继业《EDA技术与VHDL》,北京,清华大学出版社,2006(7)潘松 ,黄继业《EDA技术实用教程》,北京,科学出版社,2006
第四篇:单片机数码管显示课程设计
单片机数码管显示课程设计
目录引言...............设计任务和要求.............1
2.1 设计目的............1
2.2 设计意义............1总原理图及主要模块的流程图......1
3.1 总原理图及元器件清单..............1
3.2 主要流程图..........1性能测试与分析.............35 结论与心得..........4致谢...........4
参考文献.............4
单片机数码管显示课程设计引言
从上世纪70年代第一批单片机问世,短短二三十年时间,单片机技术已经成为计算机技术的一个重要分支,广泛运用到工业控制、仪器、仪表、消费产品,汽车、办公自动化和通信等领域。因此,单片机技术已经成为电子、测控、自动化、通信等许多工科专业学生的必备技能。
我用AT89C51芯片来设计一个简单的数码管显示。此设计给出了源代码,通过仿真测试,其性能指标达到了设计要求。
关键词:单片机,AT89C51,数码管设计任务和要求
2.1 设计目的1.学习基本理论在实践中综合运用的初步经验,掌握模拟电路设计的基本方法、设计步骤,培养综合设计与调试能力。
2.了解AT89C51这个芯片的使用和性能指标测试方法。
3.培养实践技能,提高分析和解决实际问题的能力。
2.2 设计意义
为了更好地熟悉和掌握单片机的基本功能和编程,掌握数码管动态扫描显示原理及实现方法。自我动态扫描显示电路驱动程序的编写方法。通过课程设计,达到理论与实际应用相结合,提高学生对微机硬件结构的软件设计方法的理解,使学生能够根据实际应用,初步实现硬件及软件的设计,对硬件开发有更深层的认识,为今后打软硬件开发,打下坚实的基础。总原理图及及主要模块的流程图
3.1 总原理图及元器件清单
(1)我用Proteus 7 professional来画出我设计的总原理图,如图3-1。
如图3-1
此电路图就用到AT89C51这个芯片,和一个数码管。
3.2 主要流程图(四号宋体加粗)
1.主程序的流程图
图3.2-1主流程图
2.子程序的流程图
图3.2-2子流程图性能测试与分析
主程序和子程序都存放在AT89C51单片机中。主程序的功能是:显示数字。子程序的功能有:延时。程序代码:
ORG 0000H;初始化
LJMP START;转入主程序
ORG 0010H;初始化
START:
CLR P2.7;P2.7←00H
MOVR0,#00H;R0←00H
MOV R2,#10;R2←10
MAIN:
MOV DPTR,#TAB;DPTR←TAB
MOV A,R0;A←(RO)
MOVC A,@A+DPTR;A←((A)+(DPTR))
MOV P0,A;P0←(A)
LCALL DELAY;调用延时程序
INC R0;RO←(R0)+1
DJNZR2,MAIN;判断
JMP START;循环
DELAY:;延时程序
MOV R3,#11
D1: MOV R4,#100
D2: MOV R5,#100
DJNZ R5,$
DJNZ R4,D2
DJNZ R3,D1
RET
TAB:
DB 00101000B;0
DB 11101011B;1
DB 00110010B;2
DB 10100010B;3
DB 11100001B;4
DB 10100100B;5
DB 00100100B;6
DB 11101010B;7
DB 00100000B;8
DB 10100000B;9
END
我用Proteus 7 professional 软件来测试我设计的电路图。当运行时,数码管显示0。如图4-1。
图4-1
当221ms后,数码管显示1。如图
4-2.图4-2
我的程序是一个循环的,一直到显示9,之后又重新开始显示0。在此不一一列出来。
为了能在实际在到应用,我用开发板来验证我所设计的电路图。其结果如下:
图4-3显示1
图4-4显示8
从仿真的结果可以看出,我的设计是满足我设计的要求的。结论与心得
通过单片机课程设计,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。创新,是要我们学会将理论很好地联系实际,并不断地去开动自己的大脑,从为人类造福的意愿出发,做自己力所能及的,别人却没想到的事。使之不断地战胜别人,超越前人。同时,更重要的是,我在这一设计过程中,学会了坚持不懈,不轻易言弃。设计过程,也好比是我们人类成长的历程,常有一些不如意,也许这就是在对我们提出了挑战,勇敢过,也战胜了,胜利的钟声也就一定会为我们而敲响。
这个设计过程中,我遇到过许多次失败的考验,就比如,我在软件上仿真软件上能实现其功能,但是把它写进开发板就无法运行,我不停地找原因。最后我找到了答案,这样我明白,做设计不但是软件可以运行,用在硬件上一样是那么重要的。我做的这个设计主要是用AT89C51这个芯片来实现,这个芯片具有很多优点,程序简单易读,结构清楚,最重要的是成本低。很适合我们学生用来学生。在做这个设计的过程中,我也了解到了自己的不足,在日后的学习中,我还需加倍努力学习。
参考文献)
[1]梁炳东.单片机原理与应用。北京:人民邮电出版社,2009
[2]
[3]http://wenku.baidu.com/album/view/702db2c7aa00b52acfc7cae7
致谢(小三号 宋体 加粗)
在此次课程设计中,我遇到不懂的问题,老师和同学都帮我,让我把问题顺利地得到解决,最后完成此次课程设计报告。从中我学到了很多东西,在此,谢谢我的老师和同学,感谢你们在我遇到难题的时候帮我解答。
第五篇:数电课程设计计数式频率计
计数式数字频率计
1、control模块
功能仿真
时序仿真
Counter100模块
功能仿真
时序仿真
Counter10模块
功能仿真
时序仿真
Code1模块
功能仿真
时序仿真
数字频率计顶层逻辑图
总模块功能仿真
总模块时序仿真