采用VHDL语言实现多功能可变模计数器设计并进行仿真验证
基于VHDL的DDS实现及仿真
基于VHDL 的DDS 实现与仿真宜宾学院物理与电子工程学院2011级2班段艳婷110302034)摘要:本文论述了直接数字频率合成技术(DDS的信号发生器的设计与实现。
本设计以DDS芯片Cyclone n:EP2C5T144C为频率合成器,以AVR单片机ATmegal为进程控制和任务调度核心,用AD603 实现增益控制(AGC和功率放大,串行数模转换器(D/A)MAX531 实现方波占空比调节,并用LCD12864液晶显示及键盘构成幅度、频率、方波占空比均可调的函数信号发生器。
本文分析了DDS的设计原理,基于VHDI语言进行系统建模,对DDS进行参数设计,实现了可重构的IP 核,能够根据需要方便的修改参数以实现器件的通用性。
同时利用Quartus n编译平台完成一个具体DDS芯片的设计,详细阐述了基于VHDL编程的DDS设计方法步骤。
针对DDS频率转换时间短,分辨率高等优点,提出了基于FPGA芯片设计DDS系统的方案。
该方案利用Altera公司的Quartus n开发软件,完成DDS核心部分即相位累加器和RAM 查找表的设计, 可得到相位连续、频率可变的信号,并通过单片机配置FPGA勺E A2 PROM完成对DDS硬件的下载,最后完成每个模块与系统的时序仿真。
经过电路设计和模块仿真, 验证了设计的正确性。
由于FPGA勺可编程性,使得修改和优化DDS勺功能非常快捷。
直接数字频率合成信号发生器关键字:DDS,Cyclone n,Quartus n,FPGA中图分类号:TN正文:目录第一章、绪论1.1 DDS 引言1.2 直接数字合成器的概念及其发展1.3 DDS 技术在国内研究状况及其发展趋势1.4 频率合成器的种类与技术发展趋势1.5 DDS 优势1.6 课题主要研究内容和技术要求第二章、超大规模集成电路设计介绍2.1 引言2.1.1 EDA 技术的含义及其特点2.1.2 EDA 技术的主要内容2.2 大规模可编程逻辑器件2.2.1 FPGA 的介绍2.2.2 CPLD 的介绍2.2.3 FPGA 与CPLD 的区别2.3 硬件描述语言(HDL )2.3.1 VHDL 简介2.3.2 VHDL 主要特点2.3.3 VHDL 语言的优势2.4 软件开发工具第三章、DDS 工作原理和主要特点3.1 DDS 的基本工作原理3.2 DDS 的主要特点3.3 DDS 建模第四章、用VHDL 来编程实现和仿真4.1 VHDL 编程实现4.1.1 32 位加法器的VHDL 实现程序4.1.2 32 位加法器的生成模块4.1.3 32 位寄存器的VHDL 实现4.1.4 32 位寄存器的生成模块4.1.5 波形数据ROM 的VHDL 实现4.1.6 波形数据ROM 的生成模块4.1.7 整形模块设计4.2 用Quartus H进行DDS仿真421 Quartus H软件简介4.2.2用Quartus H的仿真步骤和图像4.2.3 注意事项第五章、设计相关数据处理与图像分析5.1 电路原理图5.2 仿真波形图5.3 数据验证5.4 波形毛刺儿的分析及消除第六章、结束语5.1 总结5.2 参考文献5.3 致谢5.4 附录第一章绪论1.1、DDS 引言频率合成技术是将一个(或多个)基准频率变换成另一个(或多个)合乎质量要求的所需频率的技术。
VHDL语言各种分频器的设计
硬件描述
使用VHDL,设计师可以描述电路 的结构、行为和功能,而无需关 心具体的物理实现细节。
设计层次
VHDL适用于不同层次的设计,从 门级到系统级,使得设计者可以 专注于设计逻辑而不是物理实现。
VHDL语言基本结构
实体
描述电路的输入和输出端口。
结构体
描述电路的内部逻辑和行为。
库
包含预定义的元件和函数。
end if;
end process;
8分频器设计
end Behavioral;
```
16分频器设计
16分频器:将输入频率降低到原来的 十六分之一。
VHDL代码实现
```vhdl
16分频器设计
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
03
if count = 3 then
4分频器设计
q <= '1';
count <= 0;
4分频器设计
01
else
02
q <= '0';
03
count <= count + 1;
4分频器设计
end if;
end if; end process;
4分频器设计
end Behavioral; ```
配置
指定实体和结构体的关联方式。
VHDL语言数据类型
标量类型
包括整数、实数、布尔等。
记录类型
组合不同数据类型的结构体。
向量类型
如位向量,用于表示位或字节。
数组类型
一种基于FPGA的可变模计数器的VHDL实现
一种基于FPGA的可变模计数器的VHDL实现【摘要】可变模计数器是数字系统中广泛应用的一种电路模块,本文讨论了一种基于VHDL语言实现的可变模计数器的EDA设计方案,采用FPGA芯片作为设计载体,FPGA具有在线可重构的优点,如需对计数器的技术指标进行修改,只需修改源程序中的相应参数,重新进行编译、仿真、配置即可,使得设计本身灵活性好,便于升级和维护。
【关键词】FPGA;VHDL;可变模计数器1.引言EDA是将数字系统以某一种特定的表达方式输入计算机开发平台进行处理,经由综合,仿真,下载到目标芯片,最终实现设计的智能化设计技术。
其中输入文件的种类众多,有原理图输入法、硬件描述语言输入法、状态图输入法、波形输入法等。
硬件描述语言(HDL)是EDA技术的重要组成部分,是设计数字系统的重要表达手段,和原理图输入法,波形输入法相比,具有灵活度高,易于修改、升级,方便调用,库资源丰富等优点。
常见的HDL主要有VHDL、Verilog HDL、ABEL、AHDL等,其中标准化语言VHDL、Verilog使用最广泛,可以被几乎所有的EDA工具支持。
可变模计数器是数字系统中广泛应用的一种电路模块,本文讨论了一种基于VHDL语言实现的可变模计数器的EDA设计方案,采用FPGA芯片作为设计载体,FPGA具有在线可重构的优点,如需对计数器的技术指标进行修改,只需修改源程序中的相应参数,重新进行编译、仿真、配置即可,使得系统本身灵活性好,便于升级和维护。
2.可变模计数器的功能指标本文设计的计数器为5位输出可变模计数器,采用两位控制信号选择计数的模值,因此可进行四种模值的切换。
计数器在工作时,可以通过控制信号m[1:0]的值选择相应的模值m,计数时,在每个时钟的上升沿进行加法计数,从0计到m-1,然后自动归零循环计数。
在本设计中,输出端口为5位,可以实现模小于等于32的计数应用。
如果需要增可选择模值的数量,只需要增加选择控制信号位数即可。
用VHDL实现计算器
谢谢观看!
then in3:=in1/in2; t<=in3; end if; end process p1111;
--'*'
p111:process(t) begin case t is when 0=>g<="11111100";--0 when 1=>g<="01100000";--1 when 2=>g<="11011010";--2 when 3=>g<="11110010";--3 when 4=>g<="01100110";--4 when 5=>g<="10110110";--5 when 6=>g<="10111110";--6 when 7=>g<="11100000";--7 when 8=>g<="11111110";--8 when 9=>g<="11110110";--9 when others=>t<="00000010";--错 end case; end process p111;
程序源码
--库的引用 LIBRARY IEEE; --USE IEEE.std_logic_arith.ALL; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; --use ieee.numeric_bit.all;
--实体声明 entity adder is port( d0,d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d
vhdl 计数器的使用
实验四计数器的使用一、实验目的熟悉步长可变的加减计数器的工作原理、设计过程和实现方法。
二、实验内容与要求学习用VHDL设计步长可变的加减计数器电路,完成编译、综合、适配、仿真和实验箱上的硬件测试,通过LED数码管显示输入输出各部分数据。
三、实验原理通过输入一组4BIT二进制数据,控制计数方式,即步长,决定每个脉冲到来时计数器增加的数值,同时还有一个单BIT的控制位,选择加计数或者减计数,并通过电路显示各部分数据(输入及输出)。
拨码开关置为MODEL_SEL5-8,全部置为ON,通过USB下载;全部置为OFF,则通过LAB_JTAG_PS_AS接口下载。
DISP_SEL8,处于“ON”状态,这样可以使用静态共阳数码管DISP_SEL1,DISP_SEL2处于“OFF”状态,通过F1,F2的十六进制的输入,在静态共阳数码管DP1B,DP2B上显示输出。
F1,F2预置数据,通过计数器,总的计数值控制电平宽度,其中一组控制高电平,一组控制低电平。
在DP1B上显示的是0-F的步长可变的加减计数器。
四、实验平台(1)硬件:计算机、GX-SOC/SOPC-DEV-LABCycloneII EP2C35F672C8核心板(2)软件:Quartus II软件五、六、仿真截图七、硬件实现八、程序代码1--10 位计数SCAN TOP_LEVEL程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;use ieee.std_logic_unsigned.all;ENTITY ACOUNT100 ISPORT(clk,clr,en,en6:IN STD_LOGIC ;count1 : out std_logic ;ledseg : out std_logic_vector(6 downto 0);ledcom :out std_logic_vector(5 downto 0)); END;ARCHITECTURE ONE OF ACOUNT100 IS COMPONENT clkgen ISPORT(clkin:IN STD_LOGIC ;clkout: OUT STD_LOGIC);END COMPONENT;COMPONENT COUNT10a ISPORT(clk,clr,en:IN STD_LOGIC ;q:OUT STD_LOGIC_vector(3 downto 0);count1:OUT STD_LOGIC);end COMPONENT;COMPONENT bcd_7seg isport(bcd_led :in std_logic_vector(3 downto 0);--input bcdledseg : out std_logic_vector(6 downto 0));--output to 7 segmentend COMPONENT;COMPONENT mx isport(s:in std_logic;a,b:in std_logic_vector(3 downto 0);q:out std_logic_vector(3 downto 0));end COMPONENT;COMPONENT comcoun isport(clk : in std_logic;--synchronouse clockenable : in std_logic;--scan clockcomclk : out std_logic_vector(2 downto 0));--output countend COMPONENT;COMPONENT com_encode isport(s :in std_logic;--input countledcom :out std_logic_vector(5 downto 0));--output encodeend COMPONENT ;signal clk1,c10: std_logic;signal q1,q2,bcd: std_logic_vector(3 downto 0);BEGINU1:clkgen PORT MAP(CLKIN=>CLK,CLKOUT=>CLK1);U2:COUNT10a PORT MAP(clk=>CLK1,clr=>clr,en=>en,q=>q1,count1=>c10);U3:COUNT10a PORT MAP(clk=>CLK1,clr=>clr,en=>c10,q=>q2,count1=>count1); U4:MX PORT MAP(S=>CLK1,A=>q1,b=>q2,q=>bcd);U5:bcd_7seg PORT MAP(bcd_led=>bcd,ledseg=>ledseg);U6:com_encode PORT MAP(s=>clk1,ledcom=>ledcom );end;2---clkgen.vhdLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;use ieee.std_logic_unsigned.all;ENTITY clkgen ISPORT(clkin:IN STD_LOGIC ;clkout: OUT STD_LOGIC);END;ARCHITECTURE even OF clkgen ISconstant N:Integer:=50000000;--constant N:Integer:=10;SIGNAL coun:integer range 0 to N;SIGNAL clk1:STD_LOGIC;BEGINPROCESS(clkin)BEGINIF(clkin'EVENT AND clkin='1')THENIF(coun=N)THENcoun<=0;clk1<=Not clk1;elsecoun<=coun+1;END IF;END IF;END PROCESS;clkout<=clk1;END even;3--10 位计数器程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY COUNT10a ISPORT(clk,clr,en:IN STD_LOGIC;count1:OUT STD_LOGIC;q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END COUNT10a ;ARCHITECTURE rtl OF COUNT10a ISSIGNAL qs:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL ca:STD_LOGIC;BEGINPROCESS(clk)BEGINIF(clk'EVENT AND clk='1')THENIF(clr='1')THENqs<="0000";ELSIF(en='1')THENIF(qs="1001")THENqs<="0000";ca<='0';ELSIF(qs="1000")THEN --在计数到8时,即让进位赋值1,--由于信号会产生一个滞后,使得实际ca在9时出现qs<=qs+1;ca<='1';ELSEqs<=qs+1;ca<='0';END IF;END IF;END IF;END PROCESS;PROCESS(ca,en)BEGINq<=qs;count1<=ca AND en;END PROCESS;END rtl;4library ieee;use ieee.std_logic_1164.all;entity mx isport(s:in std_logic;a,b:in std_logic_vector(3 downto 0);q:out std_logic_vector(3 downto 0));end mx;architecture rtl of mx isbeginq<= a WHEN s = '0' ELSE b ;end rtl;5--七段显示扫描电路--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>=1 thenq<="000";--initial counterelseq<=q+1;--countingend if;end if;end if;end process fscan;comclk<=q; --output internal countend behavior;6library 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,3f"0000110" when "0001",--1,06"1011011" when "0010",--2,5b"1001111" when "0011",--3,4f"1100110" when "0100",--4,66"1101101" when "0101",--5,6d"1111101" when "0110",--6,7d"0100111" when "0111",--7,27"1111111" when "1000",--8,7f"1101111" when "1001",--9,6f"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;7--计数译码电路-- 6 共阴--com_encode.vhd 7 segment com encoderlibrary ieee ;use ieee.std_logic_1164.all;entity com_encode isport(s :in std_logic;--input countledcom :out std_logic_vector(5 downto 0));--output encode end com_encode;architecture behavior of com_encode isbeginledcom<="000001" when s='0' else"000010" ;end behavior;九、实验总结。
同步计数器VHDL的设计
EDA技术及应用实验报告
——同步计数器VHDL的设计
班级:XXX
姓名:XXX
学号:XXX
一、实验目的:
学习数控分频器的设计、分析和测试方法。
二、实验原理:
同步计数器的功能就是在时钟脉冲的控制下,构成计数器的各触发器状态同时发生变化的一类计数器。
本实验是一个模为60,具有异步复位、同步置数功能的8421BCD码计数器。
三、实验内容和步骤:
1、打开文本编辑器,完成同步计数器的设计。
2、完成同步计数器的设计输入、进行目标器件选择。
3、引脚锁定。
4、编译。
5、对同步计数器设计进行仿真。
四、实验下载并实测
该同步计数器具有异步复位,同步置数功能。
当load=1时,便把输入信号与指导输出端,然后开始计数,计数到60时,LED灯闪烁,计数器从0开始计数。
vhdl课程设计设计模为 4、8、12、16的可变计数器实验报告总结
VHDL课程设计 - 可变计数器实验报告总结
一、设计概述
本课程设计的主要目标是设计并实现一个可变计数器,其模(Modulo)值可以在4、8、12、16之间进行选择。
计数器采用VHDL编程语言进行描述,并在FPGA开发板上进行测试验证。
二、设计实现
1. 硬件平台:我们选择了Xilinx的FPGA开发板作为硬件平台,它具有丰富的I/O资源和足够的逻辑单元,可以满足我们的设计需求。
2. VHDL编程:我们采用VHDL语言进行编程,实现了模4、模8、模12和模16的可变计数器。
通过选择不同的计数模式,计数器的模值可以在4、8、12、16之间进行切换。
3. 测试与验证:为了验证计数器的功能,我们编写了测试平台,并通过仿真和实际硬件测试对计数器进行了全面的测试。
三、实验结果与分析
1. 实验结果:通过仿真和实际硬件测试,我们验证了计数器的
功能正确性。
在不同的模值下,计数器都能正确地进行计数操作,并且在达到模值后能正确地回绕到0。
2. 结果分析:实验结果表明,我们的VHDL编程和FPGA开发技能得到了很好的应用和提升。
同时,通过这次课程设计,我们更深入地理解了可变计数器的设计和实现原理,提高了我们的硬件设计能力。
四、总结与展望
本次课程设计让我们深入了解了VHDL编程语言和FPGA开发技术,提高了我们的硬件设计能力。
通过实际的设计和测试,我们成功地实现了一个可变模值的计数器,达到了课程设计的要求。
在未来的学习和工作中,我们将继续深入学习FPGA设计和VHDL编程,不断提高自己的硬件设计能力。
同时,我们也期待将这种技术应用于更多的实际项目中,为工程实践做出贡献。
EDA技术与VHDL实验指导书
EDA技术与VHDL实验指导书电气中心实验室编制2011-9前言《EDA技术与VHDL实验指导书》是与理论课程《EDA技术与VHDL》配套开出的,是电子信息工程等专业的一门专业选修课程,对电子信息工程等专业的学生具有非常重要的作用。
本实验课与理论课同时进行,与理论课有着较密切的联系。
因此学生在做本实验之前必须具备1.一定的C语言基础;2.电路与电子技术的基础知识;3.计算机辅助设计的基本操作能力;4.理论联系实践的自学能力。
学生学习完本实验课后,应具有1.能熟练使用Quartus II等EDA开发工具软件;2.掌握CPLD/FPGA芯片的基本使用方法,能用现代数字系统的设计方法进行基本的数字系统设计;3.掌握图形编辑和VHDL文本编辑两种设计方法,重点是VHDL文本编辑;4.具备基本的开发能力,为后续学习打下坚实的基础等方面能力。
从70 年代第一片可编程逻辑器件PROM的诞生到现在的CPLD/FPGA,数字系统的设计发生了本质的变化。
基于CPLD/FPGA和EDA(电子设计自动化)工具进行数字系统的设计与开发。
它代表了数字电信领域的最高水平,给数字电路的设计带来了革命性的变化。
从传统的对电路板的设计到现在的基于芯片的设计,使得数字系统设计的效率大大提高,产品更新速度大大加快,设计周期大大变短。
所以本科生学习本课程有着非常重要的意义。
本实验不同于其它实验,其实验手段和实验方法都有重大的变化,要求实验前提交预习报告,检查通过后方可实验,设计与综合实验环节。
本实验是在PC 平台上,用原理图或文本进行输入,然后进行编译,通过之后再进行波形仿真,如有缺陷,对源文件进行修改。
利用ISP技术、采用EDA工具、应用PLD 器件,在PC及EDA开发平台上进行。
实验一组合逻辑电路设计实验学时:3学时实验类型:验证实验要求:必做一、实验目的1.熟练掌握QuartusII开发工具软件;2.掌握门电路VHDL语言程序设计方法;3.掌握选择器VHDL语言程序设计方法;4.掌握加法器VHDL语言程序设计方法;5.熟悉VHDL编程的基本方法;二、实验原理1.二输入与门二输入与门是我们数字电路中的一个基础逻辑门电路,是最基本的逻辑门电路之一,也是最简单的逻辑门之一。
VHDL语言完成4位十进制计数器、4位锁存器、测频控制器的设计
电子设计自动化实验实验名称综合性实验二、硬件描述语言的层次化设计实验设备(1)EDA实验箱(型号 ),(2)计算机,(3)EDA软件(QuartusII)实验目的1、熟悉EDA软件(QuartusII)的硬件描述语言输入设计方法;2、掌握VHDL语言的层次化设计方法和仿真分析方法;3、了解功能仿真、时序仿真和时序参数分析的意义。
实验容1、用VHDL语言完成4位十进制计数器、4位锁存器、测频控制器的设计,包括编译、综合、仿真;**2、采用层次化设计的方法,用VHDL语言的元件例化语句写出4位十进制频率计的顶层文件,并分别给出其测频功能和时序仿真分析波形图,并加以分析;**3、用EDA实验箱进行硬件验证,并分析测量结果;建议硬件测试实验电路采用NO.0 电路结构,待测信号F_IN接clock0;测频控制时钟CLK接clock2;**4、在2基础上将其扩展为8位十进制频率计,或带译码输出的4位十进制频率计。
实验报告要求根据以上实验容写出实验报告:1、简述4位频率计模块的工作原理及其设计、编译、仿真分析过程;2、给出模块设计文件、仿真测试文件、仿真结果波形图及其分析报告;3、简述硬件验证过程和验证结果。
1、简述4位频率计模块的工作原理根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉宽为1秒的对输入信号脉冲计数允许的信号;1秒计数结束后,计数值锁入锁存器的锁存信号和为下一测频计数周期作准备的计数器清0信号。
这3个信号可以由一个测频控制信号发生器产生,即TESTCTL,它的设计要,TESTCTL的计数使能信号CNT_EN能产生一个1秒脉宽的周期信号,并对频率计的每一计数器CNT10的ENA使能端进行同步控制。
当CNT_EN高电平时,允许计数;低电平时停止计数,并保持其所计的脉冲数。
在停止计数期间,首先需要产生一个锁存信号LOAD,在该信号上升沿时,将计数器在前1秒钟的计数值锁存进各锁存器REG4B中,并由外部的7段译码器译出,显示计数值。
EDA计数器实验报告
EDA计数器实验报告一、实验目的:1、深刻理解VHDL语言元件例化的方法。
2、掌握计数器的设计原理以及设计方法。
3、结合以前学过的数码管扫描知识完成计数器显示学号后三位。
二、实验原理:计数器是可以统计时钟脉冲次数的时序器件,为了使计数器可以显示学号后三位,采用级联的形式来设计计数器,如十进制的计数器与六进制的计数器级联即构成了六十进制计数器。
使用3个带Carry-in和Carry-out模10的计数器的计数输出分别作为计数器个位、十位、百位的输出,设计模108计数器。
实验内容:本次实验要求设计一个模为自己学号后 3 位的计数器(模108)。
各个零部件可以用LPM来定制,而顶层则要使用VHDL语言以元件例化的方法来实现。
1、VHDL语言的部分代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity exp_cnt108 isport(clk0,clk,clrn,En:in std_logic;b,s,g:out std_logic_vector(3 downto 0);c:out std_logic;cc:out std_logic;sb,ss,sg:out std_logic;ga,gb,gc,gd,ge,gf,gg:out std_logic);end exp_cnt108;architecture rtl of exp_cnt108 iscomponent count4port(clk:in std_logic;q:out std_logic_vector(1 downto 0));end component;component decoder2_3port(data:in std_logic_vector(1 downto 0);eq0,eq1,eq2:out std_logic);end component;component mux4_3_1port( data0x : IN STD_LOGIC_VECTOR (3 DOWNTO 0);data1x : IN STD_LOGIC_VECTOR (3 DOWNTO 0);data2x : IN STD_LOGIC_VECTOR (3 DOWNTO 0);sel : IN STD_LOGIC_VECTOR (1 DOWNTO 0);result : OUT STD_LOGIC_VECTOR (3 DOWNTO 0));end component;component my7449port(cout:in std_logic_vector(3 downto 0);a,b,c,d,e,f,g:out std_logic);end component;component exp_cnt10port(Clk,clrn,En,cin:in std_logic;cq:out std_logic_vector(3 downto 0);cout:out std_logic);end component;signal clr,cin:std_logic;signal q:std_logic_vector(1 downto 0);signal coutb,couts,coutg,cout:std_logic_vector(3 downto 0);signal c1,c2,c3: std_logic;signal eq0,eq1,eq2: std_logic;signal qa,qb,qc,qd,qe,qf,qg: std_logic;beginu0:count4 port map(clk0,q);u1:decoder2_3 port map(q,eq0,eq1,eq2);sb<=eq2;ss<=eq1;sg<=eq0;cin<='1';u2:exp_cnt10 port map(clk,clrn or clr,En,cin,coutg,c1);u3:exp_cnt10 port map(clk,clrn or clr,En,c1,couts,c2);u4:exp_cnt10 port map(clk,clrn or clr,En,c2 and c1,coutb,c3);b<=coutb;s<=couts;g<=coutg;cc<=c1;c<=c2;clr<=coutb(0) and coutg(3);u5:mux4_3_1 port map(coutg,couts,coutb,q,cout);u6:my7449 port map(cout,qa,qb,qc,qd,qe,qf,qg);ga<=qa;gb<=qb;gc<=qc;gd<=qd;ge<=qe;gf<=qf;gg<=qg;end rtl;三、波形仿真及下载验证:如图所示:波形仿真:仿真参数设置:Entime:45us Grid size:100ns clk:clock→period:10ns波形说明:clrn为0,En为0时,保持;clrn为0,En为1时,计数;clrn为1时,清零;由仿真图知,计数到107后从0开始计数。
vhdl计数器实验报告
vhdl计数器实验报告《VHDL计数器实验报告》摘要:本实验利用VHDL语言设计了一个简单的计数器电路,并通过FPGA实现了该计数器。
实验结果表明,VHDL计数器能够准确地实现计数功能,具有较高的稳定性和可靠性。
引言:计数器是数字电路中常见的一种基本电路,用于实现对输入信号的计数和统计。
在本次实验中,我们利用VHDL语言设计了一个简单的计数器电路,并通过FPGA实现了该计数器。
本实验旨在通过实际操作和观察,加深对VHDL语言和计数器电路的理解,提高实验者的实际动手能力和问题解决能力。
实验内容:1. VHDL语言设计计数器电路2. 在FPGA上实现计数器电路3. 调试和测试计数器电路实验步骤:1. 设计计数器电路的VHDL代码,包括计数器的输入输出端口、计数器的计数规则和状态转换规则等。
2. 将VHDL代码综合成逻辑门电路,并下载到FPGA开发板上。
3. 运行FPGA开发板,观察计数器电路的工作情况,调试和测试计数器电路。
实验结果:经过实验,我们成功设计了一个简单的4位二进制计数器,能够准确地实现计数功能。
在FPGA开发板上实现该计数器电路后,我们观察到计数器能够按照预期的规则进行计数,并且在每个计数值上能够稳定地输出正确的结果。
在不同的输入条件下,计数器电路都能够正常工作,具有较高的稳定性和可靠性。
结论:通过本次实验,我们深入了解了VHDL语言的基本语法和计数器电路的设计原理,掌握了VHDL语言设计数字电路的方法和技巧。
同时,我们通过实际操作和观察,加深了对计数器电路的理解,提高了实际动手能力和问题解决能力。
本次实验取得了良好的实验效果,为今后的数字电路实验和项目设计奠定了良好的基础。
基于VHDL的数字电路设计与仿真
基于VHDL的数字电路设计与仿真一、引言数字电路设计是现代电子领域中至关重要的一部分,它涉及到数字系统中各种逻辑门、寄存器、计数器等元件的设计和实现。
而VHDL (VHSIC Hardware Description Language)作为一种硬件描述语言,被广泛应用于数字电路设计中。
本文将介绍基于VHDL的数字电路设计与仿真的相关内容,包括VHDL语言的基本概念、数字电路设计流程、仿真工具的选择以及实例分析等。
二、VHDL语言概述VHDL是一种硬件描述语言,用于描述数字系统中各种元件之间的逻辑关系和功能。
它具有丰富的语法结构和强大的表达能力,可以描述从简单的逻辑门到复杂的处理器等各种数字电路。
VHDL语言主要包括实体(entity)、体系结构(architecture)、过程(process)等基本元素,通过这些元素可以清晰地描述数字系统的结构和行为。
三、数字电路设计流程1. 需求分析在进行数字电路设计之前,首先需要明确设计的需求和功能。
根据需求分析确定所设计数字电路的功能模块、输入输出接口以及性能指标等。
2. 概念设计在需求分析的基础上,进行数字电路的概念设计,包括确定逻辑功能、选择合适的逻辑门类型、设计数据通路和控制信号等。
3. VHDL编码根据概念设计结果,使用VHDL语言进行编码实现。
通过定义实体和体系结构,描述数字系统中各个模块之间的关系和功能。
4. 综合与布局布线将VHDL代码进行综合和布局布线,将其映射到目标FPGA或ASIC 芯片上。
综合是将高级描述转换为低级门级网表,布局布线则是将逻辑网表映射到物理芯片上。
5. 仿真验证使用仿真工具对设计的数字电路进行验证,检查其功能是否符合需求。
通过仿真可以及时发现并修复设计中的错误,提高设计的可靠性和稳定性。
四、仿真工具选择在进行数字电路设计与仿真时,选择合适的仿真工具至关重要。
常用的数字电路仿真工具包括ModelSim、Xilinx ISE、Quartus II等。
VHDL三八译码器和多路复用器的仿真
数字电路课程设计实验报告实验名称:实验二(译码器和多路复用器)实验日期:2014年4月21日小组序号:5号实验人员姓名:谭文(组长)学号:2012059020014阿卜杜凯尤木(组员)学号:2012059020001邓广源(组员)学号:2012059020002杨仕杰(组员)学号:2012059020016 辅导老师:周鹰一:实验内容该试验共包含两部分,第一部分为译码器喷水阀控制器设计,第二部分为多路复用器计算机数据总线设计。
实验过程分为两部分第一部分设计指导;第二部分独立设计。
第一部分:喷水阀控制器设计自动草坪洒水系统控制水阀的开与关。
自动洒水系统必须支持几个不同的区域,如后院,左边右边院子等。
一次只打开一个区域的阀门开关以保证在喷淋区有足够的水压。
在设计中设计一个支持多达8个区域的喷水系统。
请注意,一个典型的自动喷水系统由一个小微控制器(单片机)控制,它设定一个程序只在一天的特定时间特定时段打开或关闭某个阀,该系统也提供了一个禁用所有阀门的装置。
第二部分:电脑数据总线设计在这项任务中,将在数据总线单总线中设计一个4×1多路复用器将控制数据流,并研究其基本性质。
该技术可以实现,例如,部分串行通信与多个外围设备只使用一个微控制器输出引脚。
二、分析与设计实验一:通过设计一个三八译码器来实现题目要求(通过原理图和代码编写两种输入方式)假设一个处理器仅有四个输出引脚来,那它可以(用“使能”开关)控制3x8译码器工作。
图2.自动草坪洒水系统连接单片机有一个引脚说明系统是否有效(启用)和其他三个引脚表明二进制数的一个阀门被打开。
该系统是一个组合逻辑电路,4个输入:E(使能端)和A,B,C(有效区域内的的二进制值),和8个输出d7,……,d0(阀控制值)。
实验二:设计一个多路复用器的简单模型研究基本性质。
(通过原理图和代码编写两种输入方式)三、实验过程记录实验一:38译码器的设计(1)采用原理图方法进行仿真1.1由实验开始时的分析可以初步得到3x8译码器的原理图,并在Xilinx ISE上进行仿真1.2在初步对仿真电路进行检查后,确认没有问题,进行仿真。
模可变计数器设计Verilog语言
模可变计数器设计(一)实验目的1、进一步熟悉实验装置和QuartusⅡ软件的使用;2、进一步熟悉和掌握EDA设计流程;3、学习简单组合、时序电路的EDA设计;4、学习计数器中二进制码到BCD码的转换技巧;5、学习实验装置上数码管的输出方法。
(二)设计要求完成设计、仿真、调试、下载、硬件测试等环节,在EDA实验装置上实现模可变计数器功能,具体要求如下:1、设置一个按键控制改变模值,按键按下时模为10-99之间(具体数值自行确定)的数,没按下时模为100-199之间(具体数值自行确定)的数;2、计数结果用三位数码管十进制显示。
(三)主要仪器设备3、微机1台4、QuartusII集成开发软件1套5、EDA实验装置1套(四)实验步骤主要有三个模块1:一个模20和模119的计数器2:数码管的显示3:BCD的调整源程序:module count (clk,m,en,rst,a,sel,SG,d);input clk,m,en,rst;output [7:0] SG;output [2:0] sel;output a;(* synthesis, keep *) reg clk1;(* synthesis, keep *) wire [3:0] gw,sw,bw;/*(* synthesis, keep *) */reg [3:0]a;reg [11:0] q;reg [11:0] model;reg [7:0] cnt,SG;reg [2:0] sel;reg [0:0]d;output [0:0]d;always @(posedge clk)begin cnt=cnt+1;if (cnt==200) begin clk1=1'b1; cnt=0; endelse clk1=1'b0; //200分频,CLK为数码管扫描频率,CLK1为计数频率if (sel<2) sel=sel+1; else sel=0; end //sel为数码管选择always @(sel) begincase (sel)0: a=bw; //0数码管为百位1: a=sw; //1数码管为十位2: a=gw; //2数码管为个位default: a=0;endcasecase (a)0:SG<=8'b00111111; 1:SG<=8'b00000110;2:SG<=8'b01011011; 3:SG<=8'b01001111;4:SG<=8'b01100110; 5:SG<=8'b01101101;6:SG<=8'b01111101; 7:SG<=8'b00000111;8:SG<=8'b01111111; 9:SG<=8'b01101111; //8段译码值default: SG=8'b11111111;endcase endalways @(m)if (m) model=12'b000000100000; //模值20else model=12'b000100011001; //模值119assign gw=q[3:0];assign sw=q[7:4];assign bw=q[11:8];always @(posedge clk1,negedge rst)beginif (!rst) q=0;else if (en)beginif (q<model)beginif (gw==9) begin q=q+7; if (sw==9) q=q+96; end //BCD调整 else q=q+1;endelse q=0;endendalways @(q)if(q<model) d<=0;else d<=1;endmodule波形仿真:Clk1是计数频率,每来一个clk1信号q计数一次如图所示:rst=1有效时开始计数 clk为扫描频率sel=0时数码管显示百位a=0sel=1时数码管显示十位a=1sel=2时数码管显示个位a=3m=1 模20计数器m=0 模119计数器管脚分配:SG[0] PIN_F13SG[1] PIN_F14SG[2] PIN_F15SG[3] PIN_E15SG[4] PIN_F16SG[5] PIN_F17SG[6] PIN_E18SG[7] PIN_F18clk PIN_C13en PIN_H8m PIN_J9rst PIN_C5sel[0] PIN_G18sel[1] PIN_G17sel[2] PIN_G16d[0] PIN_G13(五)实验心得本实验主要是三大模块的编写,第一次的实验在老师给的参考代码下进行的,不过错误依然很多,主要有几个重点药掌握,一是首先要编写出能够计数的模块,用m来控制模值的变化m=1时模值为20 m=0时模值为119;二是计数模块都是二进制计数的,而要在数码管上显示计数的话就必须进行BCD调整,并且q是一个是十二位的寄存器,通过把gw=q[3:0]; sw=q[7:4]; bw=q[11:8]赋值的方法;一个个的显示在数码管上,由于clk的频率比较快,所以可以看到三位数码管显示的值,我觉得管脚分配也是比较关键的!一开始我就把个位和百位显示的值搞反了序列信号发生和检测器设计(一)实验目的1、进一步熟悉EDA实验装置和QuartusⅡ软件的使用方法;2、学习有限状态机法进行数字系统设计;3、学习使用原理图输入法进行设计。
数字逻辑实验 7_计数器的设计与仿真
实验七计数器的设计与仿真一、实验要求1.调用系统中的74LS163芯片,对其进行波形仿真,验证其功能。
2.用VHDL语言设计一个能够实现同样功能的电路(能同步清零、同步置数的4位二进制计数器)。
3.修改代码,将这个计数器修改为模10计数器。
二、实验内容通过quartus2 参照芯片的电路结构,先调用74LS163芯片使用逻辑原理图仿真、验证功能,然后使用VHDL语言实现4位二进制计数器、并修改代码将这个计数器修改为模10计数器。
并通过仿真波形验证设计的功能是否正确。
三、实验过程由于在报告1中已经详尽描述了如何使用Quartus 2建立逻辑原理图和使用VHDL语言实现元件功能,所以本次的实验报告中便不再赘述上述内容,报告将主要就VHDL 语言描述实现元件的功能的过程进行阐述。
1.4位二进制计数器1)逻辑原理图点击File→New,选择Block Diagram/Schematic File并放置元件如图。
保存文件并编译,选择菜单File→New,选择Vector Waveform File新建波形图,添加节点,参数设置为:End Time=2us, Grip size=50ns。
所完成的波形图如下图:保存波形文件,并在settings中选择functional功能仿真,绘制网格,仿真可得出如图波形:参照4位二进制计数器功能,依次检查,易得4位二进制计数器原理图设计成功。
2)VHDL语言——4位二进制计数器选择File→New,弹出新建文本对话框,在该对话框中选择VHDL File并单击OK按钮,进入文本编辑窗口,输入VHDL代码。
library IEEE;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cout4 isport(clk,clr,LD,ENT,ENP:in std_logic;p:in std_logic_vector(3 downto 0);q:out std_logic_vector(3 downto 0);cout:out std_logic);end cout4;architecture arc of cout4 issignal qi:std_logic_vector(3 downto 0);beginprocess(LD,ENT,ENP,clr,p,clk)beginif clr='0' thenqi<="0000";elsif(LD='0') thenqi<=p;elsif(ENT='0' or ENP='0') thenqi<=qi;elsif clk'event and clk ='1' thenif(clr='1'and LD='1' and ENT='1' and ENP='1') thenif( qi<15 ) thenqi<=qi+1;elseqi<="0000";end if;end if;end if;if qi=15 thencout<='1';elsecout<='0';end if;end process;q<=qi;end arc;保存文件并编译,选择菜单File→New,选择Vector Waveform File新建波形图,添加节点,参数设置为:End Time=3us, Grip size=50ns。
基于VHDL的数字钟设计及其仿真
基于VHDL的数字钟设计及其仿真结构化设计元件例化配置原理图一引言所谓数字钟是指利用电子电路构成的计时器,相对机械钟而言,数字钟能达到准确计时,同时能对该种进行调整。
当然,在此基础上还能够实现整点报时,定时报闹等功能。
设计过程采用系统设计的方法,先分析任务得到系统要求,然后进行总体设计,划分子系统,然后进行详细设计,决定各个功能子系统的VHDL程序,最后进行调试仿真。
通过此次设计,对基于VHDL的结构化描述有深刻理解,为今后的集成电路设计打下坚实的基础。
二设计任务和要求对于时钟,最基本的要求应具有时分秒的计数功能。
对于秒必须满足每满60s,分要记一个数,并且秒重新从零计起;对于分必须满足60min,小时要记一个数,并且分重新从零计起,对于时满24后也应重新从零计起。
此外当数字中走慢或走快时,还应能予以调整。
所以要求设计的数字中电路应具有以下功能:1.具有十分秒计数功能,并进行十进制数字显示。
2.能分别进行时分的手动校正。
三工作原理时钟信号的频率有振荡器产生,由于技术最小单位为1s,所以时钟信号经分频器后输出频率为1Hz的秒脉冲elk ;而校准信号的频率应高于1Hz,若取0.5,则时钟信号经另一个分频器后输出频率为2Hz的校准信号脉冲clk1。
当无校准信号作用,即校分信号xf、校时信号xs为高电平,整个电路处于正常计数的工作状态时分秒计数器采用同步计数方式其时钟脉冲端均接有分频器输出的时钟信号elk.。
en为使能端,高电平有效。
三个计数器的复位端elr置入数据控制端Id都接高电平,故其置入端d[7…0]失效,且各计数器输出端分别接译码显示电路。
当有校准信号时,不妨假设只有校分信号,即xf=O、xf=1,则在二选一数据选择器的控制下,分计数器的en端将始终接高电平,即分计数器将独立于秒计数器自行独立计数,但其结果仍影响到时计数器,因为此时没有校时信号。
同理,当只有校时信号或同时具有校时、校分信号,情况同上述分析一样。
可变模计数器
一、实验目的:1. 掌握用 VHDL 硬件描述语言做电路综合设计方法。
2. 熟悉掌握程序的编译、仿真、生成模块及芯片引脚号码锁定方法并下载到目标芯片。
二、实验仪器:ZY11EDA13BE 型实验箱三、实验内容及要求:1. 设计一个可变模计数器。
2. 设计一个可变模计数器, 计数器有 3个触发器构成, 在外部控制信号 S2和 S1的控制下分别实现模 3、模 5、模 7和模 8计数器,即(1 S2S1=00时,实现模 3计数,触发器的状态一次0→ 1→ 2→ 0;(2 S2S1=01时,实现模 5计数,触发器的状态一次0→ 1→ 2→ 3→ 4→ 0;(3 S2S1=10时,实现模 7计数,触发器的状态一次0→ 1→ 2→ 3→ 4→ 5→ 6→ 0;(4 S2S1=11时,实现模 7计数,触发器的状态一次0→ 1→ 2→ 3→ 4→ 5→ 6→7→ 0; 并将结果输出到数码管上。
四实验程序二四译码部分LIBRARY IEEE;ENTITY M2_45 ISPORT(A: IN STD_LOGIC_VECTOR(1 DOWNTO 0; Y3,Y2,Y1,Y0: BUFFER STD_LOGIC;END M2_45;ARCHITECTURE A OF M2_45 ISSIGNAL SEL :STD_LOGIC_VECTOR(1 DOWNTO 0; SIGNAL QN :STD_LOGIC_VECTOR(2 DOWNTO 0; BEGINSEL(0<=A(0;SEL(1<=A(1;WITH SEL SELECTQN<="0001"WHEN"00", "0010"WHEN"01","0100"WHEN"10","1000"WHEN"11","0000"WHEN OTHERS;Y0<=QN(0;Y1<=QN(1;Y2<=QN(2;Y3<=QN(3;END A;模三部分LIBRARY IEEE;ENTITY MO3 ISPORT(CP,EN:IN STD_LOGIC;Q:OUT STD_LOGIC_VECTOR(2 DOWNTO 0 ;END MO3;ARCHITECTURE A OF MO3 ISSIGNAL QN:STD_LOGIC_VECTOR(2 DOWNTO 0 ; BEGIN PROCESS(CP,ENBEGINIF(EN='0'THENQN<="000";ELSIF(CP'EVENT AND CP='1'THENIF(QN="010"THENQN<="000";ELSEQN<=QN+1;END IF;END IF;END PROCESS;Q<=QN;END A;模五部分LIBRARY IEEE;ENTITY MO5 ISPORT(CP,EN:IN STD_LOGIC;Q:OUT STD_LOGIC_VECTOR(2 DOWNTO 0 ;END MO5;ARCHITECTURE A OF MO5 ISSIGNAL QN:STD_LOGIC_VECTOR(2 DOWNTO 0 ; BEGIN PROCESS(CP,ENBEGINIF(EN='0'THENQN<="000";ELSIF(CP'EVENT AND CP='1'THEN IF(QN="100"THENQN<="000";ELSEQN<=QN+1;END IF;END IF;END PROCESS;Q<=QN;END A;模七部分LIBRARY IEEE;ENTITY MO7 ISPORT(CP,EN:IN STD_LOGIC;Q:OUT STD_LOGIC_VECTOR(2 DOWNTO 0 ;END MO7;ARCHITECTURE A OF MO7 ISSIGNAL QN:STD_LOGIC_VECTOR(2 DOWNTO 0 ; BEGIN PROCESS(CP,ENBEGINIF(EN='0'THENQN<="000";ELSIF(CP'EVENT AND CP='1'THENIF(QN="110"THENQN<="000";ELSEQN<=QN+1;END IF;END IF;END PROCESS;Q<=QN;END A;模八部分LIBRARY IEEE;ENTITY MO8 ISPORT(CP,EN:IN STD_LOGIC;Q:OUT STD_LOGIC_VECTOR(2 DOWNTO 0;END MO8;ARCHITECTURE A OF MO8 ISSIGNAL QN:STD_LOGIC_VECTOR(2 DOWNTO 0 ; BEGINPROCESS(CP,ENBEGINIF(EN='0'THENQN<="000";ELSIF(CP'EVENT AND CP='1'THEN IF(QN="111"THENQN<="000";ELSEQN<=QN+1;END IF;END IF;END PROCESS;Q<=QN;END A;动态扫描部分LIBRARY IEEE;ENTITY CTL ISPORT(CP:IN STD_LOGIC;MO3,MO5,MO7,MO8:IN STD_LOGIC_VECTOR(2 DOWNTO 0; SEL:IN STD_LOGIC_VECTOR(1 DOWNTO 0;COUT:OUT STD_LOGIC_VECTOR(3 DOWNTO 0;END CTL;ARCHITECTURE A OF CTL ISBEGINPROCESS(CPBEGINIF(CP'EVENT AND CP='1'THENCASE SEL ISWHEN "00"=>COUT<=MO3(2 DOWNTO 0;WHEN "01"=>COUT<=MO5(2 DOWNTO 0;WHEN "10"=>COUT<=MO7(2 DOWNTO 0;WHEN "11"=>COUT<=MO8(2 DOWNTO 0;WHEN OTHERS=>COUT<="000";END CASE;END IF;END PROCESS;END A;BCD 译码部分LIBRARY IEEE;ENTITY BCDYM ISPORT(D:IN STD_LOGIC_VECTOR(2 DOWNTO 0; Q:OUT STD_LOGIC_VECTOR(6 DOWNTO 0; END BCDYM;ARCHITECTURE QQ OF BCDYM ISBEGINPROCESS(DBEGINCASE D ISWHEN"000"=>Q<="0111111";WHEN"001"=>Q<="0000110";WHEN"010"=>Q<="1011011";WHEN"011"=>Q<="1001111";WHEN"100"=>Q<="1100110";WHEN"101"=>Q<="1101101";WHEN"110"=>Q<="1111101";WHEN"111"=>Q<="0000111";WHEN OTHERS=>Q<="0000000";END CASE;END PROCESS;END QQ;五实验电路图 MO3 CP INPUT VCC CP Q[2..0] EN 0. inst3 M2_45 A[1..0] INPUT VCC A[1..0] Y0 Y1 Y2 Y3 MO5 CP Q[2..0] EN CTL BCDY M D[2..0] CP MO3[2..0] MO5[2..0] inst11 COUT[2..0] Q[6..0] inst inst5 MO7[2..0] MO8[2..0]SEL[1..0] MO7 CP Q[2..0] EN inst10 Q[6..0] inst7 OUTPUT MO8 CP Q[2..0] EN inst8 //。
基于VHDL的多功能可变模计数器设计
end if ;
17
集成电路设计
屈宝鹏等 :基于 V HDL 的多功能可变模计数器设计
end if ; end if ; END PROCESS ; END ARC H ITEC TU R E one ;
值得注意的是 ,这里所设计的多功能可变模计数器 具有如下特点 :
(1) 该设计的多功能可变模计数器具有多个功能 控制端 。因此各个控制端的优先权顺序就成为设计的 关键 ,经过理论分析和仿真调试 ,最终确认的优先权顺 序为 :clr (清零) →clk (时钟触发) →s (置数) →en (使能) →up dn (计数方向) 。这个优先权顺序可以有效地保证 各个功能的完整实现 ,以及技术器的稳定运行 。
图 1 基本可变模计数器的电路符号
从上述的代码可以看出 ,基本的可变模计数器的功 能单一 。仿真验证则表明在进行模值变换时 ,基本的可 变模计数器存在一些功能上的缺陷 :计数器若是由较小 的模值变化为较大的模值时 ,能正常的进行变模计数 ; 但当其由较大的模值变化为较小的模值 ,则可能出现计 数失控 ,如图 2 所示 ,图中显示了当模值由 12 变换为 7 时 ,即发生了计数失控 。失控的原因是大于当模值由 12 变换为 7 时 ,计数输出为 q 为 11 ,大于当前模值 7 的 计数最大值 6 ,由此产生了计数失控 。
EN TIT Y co unter IS POR T (clk ,clr ,s ,en ,updn :in std_logic ; d :in integer range 0 to 99 ; m :in integer range 0 to 99 ; co :OU T std_logic ; q :buffer integer range 0 to 99) ;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
采用VHDL语言实现多功能可变模计数器设计并进行仿真验证引言
随着电子技术、计算机技术和EDA技术的不断发展,利用FPGA/CPLD进行数字系统的开发已被广泛应用于通信、航天、医疗电子、工业控制等领域。
与传统电路设计方法相比,FPGA/CPLD具有功能强大,开发周期短,投资少,便于追踪市场变化及时修改产品设计,以及开发工具智能化等特点。
近年来,FPGA/CPLD发展迅速,随着集成电路制造工艺的不断进步,高性价比的FPGA/CPLD器件推陈出新,使FPGA/CPLD成为当今硬件设计的重要途径。
在FPGA/CPLD的应用设计开发中,VHDL语言作为一种主流的硬件描述语言,具有很强的电路描述和建模能力,能从多个层次对数字系统进行建模和描述,从而大大简化了硬件设计任务,提高了设计效率和可靠性,并在语言易读性和层次化、结构化设计方面。
表现出了强大的生命力和应用潜力。
QuartusⅡ是Altera公司在21世纪初推出的FPGA/CPLD集成开发环境,是Altera公司前一代FPGA/CPLD集成开发环境Max+PlusⅡ的更新换代产品,其界面友好,使用便捷,功能强大,为设计者提供了一种与结构无关的设计环境,使设计者能方便地进行设计输入、快速处理和器件编程。
计数器是数字系统中使用最多的时序电路之一,不仅能用于对时钟脉冲计数,还可以用于分频、定时、产生节拍脉冲和脉冲序列以及进行数字运算等。
可变模计数器由于计数容量可以根据需要进行变化,为其广泛使用创造了便利。
这里在QuartusⅡ开发环境下,用VHDL 语言设计了一种具有清零、置数、使能控制、可逆计数和可变模功能的计数器。
1 基本可变模计数器设计
可变模计数器是指计数/模值可根据需要进行变化的计数器。
电路符号图1所示,clk为时钟脉冲输入端,clr为清零端,m为模值输入端,q为计数输出端。
基本可变模计数器的VHDL代码如下所示:。