同步计数器VHDL的设计
VHDL实验报告JK触发器、同步计数器

Verilog HDL实验报告Verilog 实验报告题目:JK触发器、同步计数器系部名称:通信工程专业名称:通信工程班级:班内序号:学生姓名:时间:2010.11.28一、实验内容:用JK触发器构成同步计数器:设计一个同步计数器,其逻辑图和JK触发器的逻辑图所示。
清零信号clear低电平有效,输入数据在时钟信号clock的上升沿被锁存,触发器在clock的下降沿输出,当count_enable信号为低电平时停止计数。
写出同步计数器的verilog描述和激励模块,在激励模块中使用clear和count_enable对计数器进行测试,并显示输出计数Q[3:0]。
二、实验原理图:JK触发器构成同步计数器源代码://主模块module synchronous_counter(clear,clock,count_enable,Q);input clear,clock,count_enable;output [3:0] Q;wire qbar1,qbar2,qbar3,qbar0;wire a,b,c;assign a = Q[0] & count_enable;assign b = a & Q[1];assign c = b & Q[2];JK_flip_flop myJK(count_enable,count_enable,clock,clear,Q[0],qbar0);JK_flip_flop myJK1(a,a,clock,clear,Q[1],qbar1);JK_flip_flop myJK2(b,b,clock,clear,Q[2],qbar2);JK_flip_flop myJK3(c,c,clock,clear,Q[3],qbar3);endmodule//调用的JK触发器模块module JK_flip_flop(j,k,clock,clear,q,qbar);input j,k,clock,clear;output q,qbar;wire a,b,y,ybar,c,cbar,d,q,qbar;assign a = ~ (((qbar & j)& clock) & clear);assign b = ~ ((clock & k) & q);assign y = ~ (a & ybar);assign ybar = ~ ((y & clear) & b);assign c = ~(y & cbar);assign cbar = ~ clock;assign d = ~ (cbar & ybar);assign q = ~ (c & qbar);assign qbar = ~ ((q & clear) & d);endmodule测试文件源代码:module count_test;reg count_enable=1,clock=0,clear=0;wire [3:0]Q;synchronous_counter myCount(clear,clock,count_enable,Q);initial #10 clear=1;always@(negedge clock)begin$monitor($time," clear=%b,count_enable=%b,Q=%b%b%b%b\n",clear,count_enable,Q[3],Q[2],Q[1],Q[0]);endalways clock = #5 ~clock;always count_enable= #170 ~count_enable; endmodule实验结果:波形图:三、实验心得:这次实验比上一次顺利多了,可能是因为有了前一次的铺垫,我对软件的熟悉度有了一定的提高。
100进制同步计数器设计

实验名称:100进制同步计数器设计专业班级:姓名:学号:实验日期:一、实验目的:1、掌握计数器的原理及设计方法;2、设计一个0~100的计数器;3、利用实验二的七段数码管电路进行显示;二、实验要求:1、用VHDL 语言进行描写;2、有计数显示输出;3、有清零端和计数使能端;三、实验结果:1. VHDL程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;PACKAGE my_pkg ISComponent nd2 -- 或门PORT (a,b: IN STD_LOGIC;c: OUT STD_LOGIC);END Component;Component led_decoderPORT (din:in std_logic_vector(3 downto 0 ); --四位二进制码输入seg:out std_logic_vector(6 downto 0) ); --输出LED七段码END Component;1Component CNT60 --2位BCD码60进制计数器PORT( CR:IN STD_LOGIC;EN:IN STD_LOGIC;CLK:IN STD_LOGIC;OUTLOW:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0);OUTHIGH:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0) );END Component;Component CNT100 --带使能和清零信号的100进制计数器PORT(CLK:IN STD_LOGIC;EN:IN STD_LOGIC;CLR:IN STD_LOGIC;OUTLOW:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0);OUTHIGH:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0) ); END Component;Component freq_div --50MHZ时钟分频出1HzPORT(clkinput : IN STD_LOGIC;output : OUT STD_LOGIC);END Component;Component jtd --交通灯控制器PORT(CLKIN:IN STD_LOGIC; --50MHZR1,G1,R2,G2,R3,G3,R4,G4:OUT STD_LOGIC; --红绿灯信号输出GAO,DI:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0) --倒计时输出);END Component;END my_pkg;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE work.my_pkg.ALL; --打开程序包ENTITY Demo3 ISPORT (CRl:IN STD_LOGIC;ENl:IN STD_LOGIC;CLKIN: IN STD_LOGIC;LEDLOW,LEDHIGH: OUT STD_LOGIC_VECTOR(6 downto 0));END Demo3;ARCHITECTURE behv OF Demo3 ISSIGNAL CLKTEMP: STD_LOGIC; --定义中转信号SIGNAL LEDLOWTEMP,LEDHIGHTEMP:STD_LOGIC_VECTOR(3 downto 0);BEGINu1:freq_div PORT MAP(CLKIN,CLKTEMP); --位置关联方式u2:CNT60 PORTMAP(CR=>CRl,EN=>ENl,CLK=>CLKTEMP,OUTLOW=>LEDLOWTEMP,OUTHIGH=>LEDHIGHTE MP); --名字关联方式u3:led_decoder PORT MAP(LEDLOWTEMP,LEDLOW); --低位数码管输出u4:led_decoder PORT MAP(LEDHIGHTEMP,LEDHIGH); --高位数码管输出END behv;LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY freq_div ISPORT(clkinput : IN STD_LOGIC;output : OUT STD_LOGIC);END freq_div;ARCHITECTURE rt OF freq_div ISSIGNAL count_signal : INTEGER RANGE 0 TO 25000000;signal mid1 : STD_LOGIC ;BEGINPROCESS (clkinput)BEGINIF (clkinput'EVENT AND clkinput = '1') THENif count_signal=24999999 then --50MHz division to 1Hzcount_signal <= 0;mid1<= not mid1;elsecount_signal <= count_signal + 1;end if;output <= mid1;end if;END PROCESS;end rt;--文件名:decoder.vhdlibrary IEEE;use IEEE.STD_LOGIC_1164.ALL;entity led_decoder isPort (din:in std_logic_vector(3 downto 0 ); --四位二进制码输入seg:out std_logic_vector(6 downto 0) ); --输出LED七段码end led_decoder;architecture Behavioral of led_decoder isbeginprocess(din)begincase din iswhen "0000" =>seg<="1000000";--0when "0001" => seg<="1111001";--1when "0010" => seg<="0100100";--2when "0011" => seg<="0110000";--3when "0100" => seg<="0011001";--4when "0101" => seg<="0010010";--5when "0110" => seg<="0000010";--6when "0111" => seg<="1011000";--7when "1000" => seg<="0000000";--8when "1001" => seg<="0010000";--9when others => seg<="0000110";--Eend case;end process;end Behavioral;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT60 ISPORT(CR:IN STD_LOGIC;EN:IN STD_LOGIC;CLK:IN STD_LOGIC;OUTLOW:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0);OUTHIGH:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0) );END CNT60;ARCHITECTURE behav OF CNT60 ISBEGINPROCESS(CLK,CR,EN)BEGINif CR='1' thenOUTHIGH<="0000";OUTLOW<="0000";elsif EN ='1'thenIF CLK'EVENT AND CLK='1' THENIF OUTHIGH="1001" AND OUTLOW="1001" THENOUTHIGH<="0000";OUTLOW<="0000";ELSIF OUTLOW="1001" THENOUTHIGH<=OUTHIGH+1;OUTLOW<="0000";ELSE OUTLOW<=OUTLOW+1;END IF;END IF;END IF;END PROCESS;END behav;2.仿真结果以及说明①. 分频器仿真结果:经过多次仿真,发现按照实验要求分频出1HZ的频率是无法仿真出需要的结果的,因为时钟脉冲太多,QuartusII显示不了。
计时器的VHDL设计

本报告共包含5个VHDL程序的设计:VHDL程序1:计时器.VHDL程序2:序列计数器.VHDL程序3:脉冲宽度处理电路设计.VHDL程序4:01011序列检测器.VHDL程序5:赛跑计时秒表.一计时器1.设计任务和原理介绍:假定输入时钟周期为1秒,我们根据这个时钟周期进行计数,设立了3个计数器,分别是秒计数器,分钟计数器,小时计数器。
每次输入的时钟上升沿来临,直接驱动秒计数器。
如果秒计数器值为59(二进制为111011),则秒计数器恢复为0,否则则秒计数器加1;在此情况下接着查看分钟计数器的值,如果此时分钟计数器值也为59(二进制为111011),则分钟计数器值恢复为0,否则分钟计数器加1;在秒计数器与分钟计数器都为59的情况下,还需查看小时计数器的值,如果此时小时计数器的值为23(二进制10111),则小时计数器的值恢复为0,否则小时计数器的值加1.2.VHDL源程序:Library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity counter isport (reset : in std_logic;clk_sec : in std_logic;seconds : out std_logic_vector (5 downto 0);minutes : out std_logic_vector (5 downto 0);hours : out std_logic_vector (4 downto 0));end counter;architecture behavior of counter issignal count_sec : std_logic_vector (5 downto 0); signal count_min : std_logic_vector (5 downto 0); signal count_hour : std_logic_vector (4 downto 0); beginprocess (reset,clk_sec)beginif reset='0' thencount_sec (5 downto 0) <="000000";count_min (5 downto 0) <="000000";count_hour (4 downto 0) <="00000";elseif clk_sec'event and clk_sec='1' thenif count_sec="111011" thencount_sec<="000000";if count_min="111011" thencount_min<="000000";if count_hour="10111" thencount_hour<="00000";elsecount_hour<=count_hour+1;end if;elsecount_min<=count_min+1;end if;elsecount_sec<=count_sec+1;end if;elsenull;end if;end if;end process;seconds (5 downto 0) <=count_sec (5 downto 0); minutes (5 downto 0) <=count_min (5 downto 0); hours (4 downto 0) <=count_hour (4 downto 0);end behavior;3.程序主要部分介绍及流程图:port (reset : in std_logic;clk_sec : in std_logic;seconds : out std_logic_vector (5 downto 0);minutes : out std_logic_vector (5 downto 0);hours : out std_logic_vector (4 downto 0));定义端口,从上往下分别为复位键,时钟信号输入端,秒输出端(0—59),分钟输出端(0—59),小时输出端(0—24).signal count_sec : std_logic_vector (5 downto 0);signal count_min : std_logic_vector (5 downto 0);signal count_hour : std_logic_vector (4 downto 0);定义内部信号变量,分别对应秒,分钟,小时信号。
用VHDL编写60进制计数器

1.用VHDL设计60进计数器。
设计一个BCD码60进计数器。
要求实现同步,异步两种情况,且规定个位显示0~9,十位显示0~5,均用4位二进制数表示。
用VHDL语言描述中小规模集成电路74LS169。
VHDL的源程序如下:(1):同步,文件名为bcd60countLIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity bcd60count isport(clk,bcd1wr,bcd10wr,cin: in std_logic;co: out std_logic;datain: in std_logic_vector(3 downto 0);bcd1p: out std_logic_vector(3 downto 0);bcd10p: out std_logic_vector(2 downto 0));end bcd60count;architecture behave of bcd60count issignal bcd1n: std_logic_vector(3 downto 0);signal bcd10n: std_logic_vector(2 downto 0);beginbcd1p<=bcd1n;bcd10p<=bcd10n;kk1: process(clk,bcd1wr)beginif (bcd1wr='1') thenbcd1n<=datain;elsif(clk'event and clk='1') thenif (cin='1') thenif(bcd1n="1001" ) thenbcd1n<="0000";elsebcd1n<=bcd1n+'1';end if;end if;end if;end process kk1;kk2: process(clk,bcd10wr)beginif (bcd10wr='1') thenbcd10n<=datain(2 downto 0);elsif(clk'event and clk='1') thenif(cin='1') and (bcd1n="1001") thenif(bcd10n="101") thenbcd10n<="000";elsebcd10n<=bcd10n+'1';end if;end if;end if;end process kk2;kk3: process(bcd10n,bcd1n,cin)beginif(cin='1' and bcd1n="1001" and bcd10n="101") thenco<='1';elseco<='0';end if;end process kk3;end behave;(2)异步程序如下:LIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cou60 isport(clk,reset,cin : in std_logic;co : out std_logic;bcd1p : out std_logic_vector(3 downto 0);bcd10p : out std_logic_vector(2 downto 0)); end cou60;architecture behave of cou60 issignal bcd1n: std_logic_vector(3 downto 0);signal bcd10n: std_logic_vector(2 downto 0);beginbcd1p<=bcd1n;bcd10p<=bcd10n;kk1: process(clk)beginif(clk'event and clk='1') thenif (reset='0') thenbcd1n<="0000";elsif (cin='1') thenif(bcd1n="1001" ) thenbcd1n<="0000";elsebcd1n<=bcd1n+'1';end if;end if;end if;end process kk1;kk2: process(clk)beginif(clk'event and clk='1') thenif (reset='0') thenbcd10n<="101";elsif(cin='1') and (bcd1n="1001") thenif(bcd10n="001") thenbcd10n<="101";elsebcd10n<=bcd10n+'1';end if;end if;end if;end process kk2;kk3: process(bcd10n,bcd1n,cin)beginif(cin='1' and bcd1n="1001" and bcd10n="001") thenco<='1';elseco<='0';end if;end process kk3;end behave;。
实验四四位二进制同步计数器

实验四四位二进制同步计数器一、目的:1.能了解四位元二进制同步计数器的设计原理及其特性。
2.能设计一个四位元二进制同步计数器。
3.能自行以CPLD数位发展实验系统验证所设计电路的正确性。
二、电路图:三、实验器配置图:四、实验步骤与画面:1.建立一个名为count16.vhd的新文件,并在QuartusⅡ文字编辑器中,以VHDL语言来设计程式,图为四位二进制计数器的VHDL代码。
其中clk为时钟端口,clk为异步清零端,Q为计数输出端口,co为进位输出端口。
2.存储、检查及编译。
3.创建元件符号。
4.创建波形文件,设定合适的端口信号,仿真元件的波形。
观察波形图可以看出当芯片可以实现16进制计数功能。
五、相关说明:1.同步计数器的意义是将所有正反器的时脉连接在一起,当时脉进来时,所有的正反器同时被触发而动作,因此传递延迟时间就可以大为缩短,计数的速度就会增快。
2.我们可以利用MAX+plusⅡ的Timing Analyzer来比较同步计数器与非同步计数器(单元十)的传递延迟状况,图U12-3(a)与图U12-3(b)为分析所得结果,从图中可以发现,同步计数器从时脉输入到各级的输出,其传递延迟时间皆相同,而非同步计数器则越到后级传递延迟时间越长。
3.图U12-2的程式设计方法,也可以改用D型正反器来设计,如图U12-4所示,您可以发现此种设计同步计数器的方法较简洁。
4.若要将图U12-4改成下数计数器,只要将叙述ff[].d=ff[].q+1;改成ff[].d=ff[].q-l;即可。
5.图U12-5为四位元含致能及清除的模10上下数计数器,其中的设计重点为:(1)为了能在高频计数电路应用,本电路的清除方式采同步清除式设计,并不利用正反器本身的elrn脚,而是当clr脚输入为鬲态时,令所有正反器的D输入脚为o,达到清除的目的。
(2)程式中使用了巢状的IF THEN叙述,须注意每一层的IF THEN、 ELSIF、ELSE及END IF的对应,不要弄乱了,否则会很麻烦。
实验4计数器的VHDL设计

实验4 计数器的VHDL 设计1 .实验目的( l )掌握VHDL描述同步与异步计数器的方法。
( 2 )学习使用VHDL进行时序逻辑电路的设计。
( 3 )掌握用QuartusⅡ且进行文本输入,进行电路设计、编译和仿真。
( 4 )掌握用QuartusⅡ进行层次型电路设计的方法。
( 5 )学习利用真值表编写VHDL程序。
( 6 )学习使用RTL工具观察电路图。
2 .实验仪器设备( 1 ) PC一台。
( 2 ) QuartusⅡ开发软件一套。
( 3 ) EDA技术实验开发系统一套。
3 .实验要求( 1 )预习同步与异步计数器的相关内容。
( 2 )用VHDL方式完成计数器电路设计。
( 3 )完成计数器电路的仿真。
( 4 )下载电路到EDA实验系统验证结果。
4 .实验任务l )同步4位二进制计数器的VHDL设计( 1 )实验原理。
计数器的逻辑功能用来记忆时钟脉冲的具体个数,通常计数器能记忆时钟的最大数目M 称为计数器的模,即计数器的范围是0--M - 1 或M -1 -- 0 基本原理是将几个触发器按照一定的顺序连接起来,然后根据触发器的组合状态按照一定的计数规律随着时钟脉冲的变化记忆时钟脉冲的个数。
按照计数器各个触发器的时钟是否同步分为同步计数器和异步计数器。
表11.1是同步4位二进制计数器的真值表。
( 2 )同步4位二进制计数器VHDL程序。
同步4位二进制计数器的电路符号如图11.15所示。
其中,clk为时钟信号输入端,s为预置初值使能端,高电平有效,r 为清零端,高电平有效,en为计数使能端,高电平有效,d为预置计数器初值,q为计数输出端,co为进位信号输出端,当计数器计数满16 时产生一个进位位。
同步4位二进制计数器VHDL程序:( 3 )同步4位二进制计数器的电路仿真波形图如图11.16所示。
RTL电路如图11.17所示。
根据波形图可知,该同步计数器符合设计要求。
从RTL电路中发现触发器的时钟信号是由CLK同时给定的,符合同步电路要求。
EDA VHDL 实验2计数器100

实验二计数器的设计一、实验内容1.结合教材中的介绍熟悉Quartus Ⅱ软件的使用及设计流程;2.计数器设计原理;3.对应的VHDL 代码源程序。
二、实验目的1.掌握文本输入设计方法;2.熟悉QuartusⅡ软件的使用及设计流程;3.掌握计数器原理,能进行计数器的设计。
三、实验器材PC机一台、EDA教学实验系统一台、导线若干四、实验要求1、用文本输入法编写一个计数器代码,用波形编辑工具生成一个计数器的测试向量,完成计数器的时序仿真。
2、至少两种方案实现。
3、分析实验数据。
4.个人总结及感想。
五、实验原理与内容1、原理:将时钟信号作为计数器的信号,当RST = '1'时,计数器异步复位。
当RST=‘0’时并到时钟上升沿时,由使能端EN控制计数,高电平开始计数。
并通过逻辑运算,实现计数进位并清零。
2.实验方案:【本实验选择方案1】方案1:增加一个同步使能控制端口,利用它来控制计数器是否计数。
设置中间变量,采用顺序描述语句IF来实现功能。
方案2:设置两个变量,根据算术原理,当个位数(变量1)大于9时,向十位(变量2)进位实现功能。
六、实验步骤1、用文本输入法设计一个计数器;1》建立项目:启动QuartusII,选择菜单File——New progect wizard,输入项目名与实体名一致。
2》编译:选择菜单File—New,新建VHDL File文件,输入程序代码并保存。
2、利用步骤一得到的计数器使用图形输入法实现波形时序仿真;1》打开波形编辑器:选择File--New---Vector Waveform File。
2》导入全部引脚 : 选择View---Utility Windows---Node Finder选择Pins:all。
选择Edit——End time设置50us。
3》仿真:手动绘制输入波形向量。
并设置为时序仿真。
进行仿真七、实验报告1、实验源程序:方案一代码:---------------------------------------------------------- LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;-------------------------------------------------------------------------------------------------------ENTITY count100 ISPORT (CLK,RST,EN : IN STD_LOGIC;CQ : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);COUT : OUT STD_LOGIC );END count100;------------------------------------------------------------------------------------------------------- ARCHITECTURE behav OF count100 ISBEGINPROCESS(CLK, RST, EN)V ARIABLE CQI : STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINIF RST = '1' THEN CQI := (OTHERS =>'0') ; --计数器异步复位ELSIF CLK'EVENT AND CLK='1' THEN --检测时钟上升沿IF EN = '1' THEN --检测是否允许计数(同步使能)IF CQI < 99 THEN CQI := CQI + 1; --允许计数, 检测是否小99ELSE CQI := (OTHERS =>'0'); --大于99,计数值清零END IF;END IF;END IF;IF CQI = 99 THEN COUT <= '1'; --计数大于99,输出进位信号ELSE COUT <= '0';END IF;CQ <= CQI; --将计数值向端口输出END PROCESS;END behav;方案二代码:----------------------------------------------------------------------------------library ieee;use ieee.std_logic_1164.all;-----------------------------------------------------------------------------------entity counter100 isport (clk,reset:in std_logic;cout1,cout2:out std_logic_vector(6 downto 0));end counter100;-----------------------------------------------------------------------------------architecture counter of counter100 isbeginprocess (clk,reset)variable temp1: integer range 0 to 10; ----temp1为个位variable temp2: integer range 0 to 10; ----temp2为十位begin------------------------- ------counter100:------------------------------------if (reset='1') thentemp1 := 0;temp2 := 0;elsif (clk'event and clk = '1') thentemp1 := temp1+1;if (temp1=10) thentemp1 := 0; --------个位等于10时进位temp2 := temp2+1;if (temp2=10) then --------十位等于10时计数100 temp2 := 0;end if;end if;end if;end process;end counter;----------------------------------------------------------------------------------2.仿真图:功能仿真:A[7..0]B[7..0]OUT[7..0]ADDER D QPREENACLRA[8..0]B[8..0]OUTEQUALA[7..0]B[7..0]OUTLESS_THANSELDATAADATABOUT0MUX21A dd0 8' h01 --Equal01' h0 --9' h063 --CQI~[7..0]8' h00 --CLK RST ENCOUTCQ[7..0] Les s Than08' h63 --CQI[7..0]3、分析实验结果:由波形图可知:当复位信号 RST=‘1’时计数值立即清零.当使能信号EN=‘0’无效时,输出cq保持当前状态.只有在复位信号RST=‘0’且使能信号EN=‘1’有效时,计数器正常工作.当计数值CQ为9时,COUT输出一个高电平。
vhdl七段数码管显示0到9计数器显示电路设计

vhdl七段数码管显示0到9计数器显示电路设计在 VHDL 中,可以使用进程`PROCESS`和状态机来实现七段数码管显示 0 到 9 的计数器显示电路设计。
以下是一个示例代码:```vhdl-- 七段数码管显示 0 到 9 的计数器显示电路设计-- 定义七段数码管的显示编码CONSTANT seven_seg : STD_LOGIC_VECTOR(6 DOWNTO 0) := "1111110";CONSTANT seg_map : STD_LOGIC_VECTOR(6 DOWNTO 0) := "0000011";-- 定义计数器的位数和初始值CONSTANT count_width : NATURAL := 4;CONSTANT count_init : NATURAL := 0;-- 声明计数器和七段数码管显示的信号Signal count : STD_LOGIC_VECTOR(count_width - 1 DOWNTO 0);Signal seg : STD_LOGIC_VECTOR(6 DOWNTO 0);-- 计数器的进程Process (clk)BeginIf clk'event and clk = '1' ThenIf count = count_init - 1 Thencount <= count_init;Elsecount <= count + 1;End If;End If;End Process;-- 七段数码管显示的进程Process (count)BeginCase count IsWhen count_init - 1 => seg <= seven_seg;When count_init => seg <= seg_map;When count_init + 1 => seg <= seven_seg;When count_init + 2 => seg <= seg_map;When count_init + 3 => seg <= seven_seg;When count_init + 4 => seg <= seg_map;When count_init + 5 => seg <= seven_seg;When count_init + 6 => seg <= seg_map;When count_init + 7 => seg <= seven_seg;When count_init + 8 => seg <= seg_map;When count_init + 9 => seg <= seven_seg;When Others => seg <= seven_seg;End Case;End Process;-- 连接计数器和七段数码管显示的信号Output seg;```上述代码中,使用了两个进程`PROCESS`来实现计数器和七段数码管的显示。
实验3 基于VHDL的计数器设计

(6)、仿真器参数设置。
选择菜单Processing→Simulator Tool, 打开仿真参数设置窗口。在Simulation mode项内可以选择使用时序仿真 (Timing)或者功能仿真(Function)。 在Simulation input项,通过单击按钮 “…”选择需要仿真的文件cnt.vwf。然 后单击Start进行仿真。
实验步骤与结果: 1、新建工程cnt,放置于D:\CNT。 2、新建VHDL源文件。选择 File→New→Design Files→VHDL File。 在打开的窗口中编辑VHDL源程序。保存 于同一文件夹下。
保存的文件名必须与实体名一致,后缀名是.vhd! 实体名是cnt(关键词entity后),因此保存的文件名应是cnt.vhd
5.仿真
通过编译后,必须对工程的功能和时序性质进行仿真 测试,以了解设计结果是否满足设计要求。
(1)、新建波形文件。File→New→Vector Waveform File。 (2)、设置仿真时间。Edit→End Time。
(3)、添加仿真信号。 在进行仿真之前,必须添加仿真信号,即仿真中的激励和所要观察 的信号。添加仿真信号的方法有很多, 如:通过Edit→Insert→Insert Node or Bus菜单命令打开 Insert Node or Bus 窗口。然后选择Node Finder按钮打开
实验3 基于VHDL的计数器设计
实验目的 (1)、掌握VHDL语言基本结构。 (2)、掌握顺序描述语句IF的使用方法。 (3)、掌握时序电路的设计方法,了解 信号同步与异步的概念与区别。 (4)、掌握不同要求计数器的设计方法 (5)、学习使用RTL观察器。
实验内容与要求: 设计一个含异步清零和同步使能的4位二进 制加法计数器。记满“1111”后,进位端 输出高电平‘1’。完成波形仿真和硬件验 证。
时序逻辑VHDL设计——计数器

实验名称:实验6 时序逻辑VHDL设计——计数器班级: 09电气2Z 学号:姓名:钱雷一、结合74160芯片的逻辑功能,对(1)中所设计的程序进行改进,用VHDL设计一个带有高电平使能信号,低电平清零信号,低电平置数信号的十进制计数器。
1.实体框图2.程序设计①编译前的程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity CNT10 isport(CLK,RST,LD,EP,ET:in std_logic;D:in std_logic_vector(3 downto 0);Q:out std_logic_vector(3 downto 0);CO:out std_logic);end CNT10;architecture behav of CNT10 isbeginprocess(CLK,RST,LD,EP,ET)variable QI:std_logic_vector(3 downto 0);beginif RST='0' then QI:=(others=>'0');elsif CLK'EVENT and CLK='1' thenif LD='0' then QI:=D;elsif EP='1' and ET='1' thenif QI<9 then QI:=QI+1;else QI:=(others=>'0');end if;end if;if QI=9 then CO<='1';else CO<='0';end if;Q<=QI;end process;end behav;②程序编译错误情况③正确的程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity CNT10 isport(CLK,RST,LD,EP,ET:in std_logic;D:in std_logic_vector(3 downto 0); Q:out std_logic_vector(3 downto 0); CO:out std_logic);end CNT10;architecture behav of CNT10 isbeginprocess(CLK,RST,LD,EP,ET)variable QI:std_logic_vector(3 downto 0);beginif RST='0' then QI:=(others=>'0');elsif CLK'EVENT and CLK='1' thenif LD='0' then QI:=D;elsif EP='1' and ET='1' thenif QI<9 then QI:=QI+1;else QI:=(others=>'0');end if;end if;end if;if QI=9 then CO<='1';else CO<='0';end if;Q<=QI;end process;end behav;3.仿真波形图4.仿真波形分析输入端D0—D3是输入置数端,EP,ET是使能端,并且高电平有效,LD是置数控制端口,低电平有效,RST是清零端,低电平有效。
用vhdl语言设计计数器资料讲解

用v h d l语言设计计数器76进制计数器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CDU_76 ISPORT (CLK:IN STD_LOGIC; Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END CDU_76;ARCHITECTURE AA OF CDU_76 ISSIGNAL COUT2,COUT1:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(CLK)BEGINIF (CLK'EVENT AND CLK='1') THENIF(COUT2=7 AND COUT1=5) THEN COUT2<="0000";COUT1<="0000"; ELSE IF (COUT1=9) THEN COUT2<=COUT2+1;COUT1<="0000";ELSE COUT2<=COUT2;COUT1<=COUT1+1;END IF;END IF;END IF;END PROCESS;Q<=COUT2&COUT1;END AA;24进制计数器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CDU_24 ISPORT (CLK:IN STD_LOGIC;Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END CDU_24;ARCHITECTURE AA OF CDU_24 ISSIGNAL COUT2,COUT1:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGINPROCESS(CLK)BEGINIF (CLK'EVENT AND CLK='1') THENIF(COUT2=2 AND COUT1=3) THEN COUT2<="0000";COUT1<="0000"; ELSE IF (COUT1=9) THEN COUT2<=COUT2+1;COUT1<="0000";ELSE COUT2<=COUT2;COUT1<=COUT1+1;END IF;END IF;END IF;END PROCESS;Q<=COUT2&COUT1;END AA;用VHDL 设计一个带高电平使能信号、低电平清零信号、低电平置数信号的十进制计数器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT10 ISPORT(CLK,SET,CLR,EN:IN STD_LOGIC;CQ:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);COUT:OUT STD_LOGIC);END CNT10;ARCHITECTURE behav OF CNT10 ISBEGINPROCESS(CLK,SET,CLR,EN)VARIABLE CQI:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINIF CLR='0' THEN CQI:=(OTHERS=>'0');ELSIF CLK'EVENT AND CLK='1' THENIF SET='0' THEN CQI:=(OTHERS=>'1');ELSIF EN='1' THENIF CQI<9 THEN CQI:=CQI+1;ELSE CQI:=(OTHERS=>'0');END IF;END IF;END IF;IF CQI=9 THEN COUT<='1'; ELSE COUT<='0';END IF;CQ<=CQI;END PROCESS;END behav;。
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设计

Q数据格式是十六进制 ,是Q(3), Q(2), Q(1), Q(0),如十 六进制数值A,即成员:涂进,谢冰泽,谢希泽
计数器的VHDL设计
4位二进制加法计数器设计
输入端口:计数时钟信号CLK,数据类型是二进制逻辑位BIT
输 出 端 口 : Q 的 端 口 模 式 BUFFER , 数 据 类 型 定 义 为 整 数 类 型
INTEGER
VHDL 规定加减法等算术操作符对应的操作数的数据类型只能是
INTEGER(除非使用重载函数)
整数类型
整数数据类型INTEGER的元素包含正 整数、负整数和零 使用整数时,VHDL综合器要求必须使 用关键词RANGE构成句子 整数的表达不加引号,逻辑位或二进 制数据必须加引号 自然数类型NATURAL是整数类型的子 类型,包含0和正整数 正整数类型POSITIVE是整数类型的子 类型,比NATURAL少一个0 INTEGER,NATURAL,POSITIVE定义在 VHDL标准程序包STANDARD中
程序
计数器的其他VHDL表达方式
运算符重载,赋予新的数据类型操作功能,允许 不同数据类型间用此运算符进行运算 VHDL的IEEE库的STD_LOGIC_UNSIGNED程序包预 定的操作符:加,减,乘,等于,大于等于,小 于等于,大于,小于,不等于(/=),逻辑与等
完成加1操作的纯组合电路加法器
实验五 含异步清零和同步使能4位加法计数器的VHDL设计

实验五含异步清零和同步使能4位加法计数器的VHDL设计一、实验目的1掌握计数器的VHDL设计方法;2掌握异步复位和同步复位和使能的概念;3掌握寄存器性能的分析方法(即分析芯片所能达到的最高时钟频率)。
二、实验内容1异步复位4位加法计数器的设计;2同步复位4位加法计数器的设计。
3异步清0和同步时钟使能的4位加法计数器三、实验原理复位:给计数器一个初值叫复位,如果所给初值为0,则称复位为清零。
异步复位:复位跟时钟无关,只要复位信号的复位电平出现,计数器立即复位,如图5-1所示;同步复位:复位跟时钟有关,当复位信号的复位电平出现时,计数器并不立即复位,而是要等到时钟沿到来时才复位,如图5-2所示。
异步复位4位加法计数器的VHDL设计代码见教材P122-P123,仿真波形如图5-3所示。
同步复位4位加法计数器的VHDL部分代码如下,仿真波形如图5-4所示。
.图5-1异步复位图5-2同步复位图5-3异步复位计数器仿真波形图5-4同步复位计数器仿真波形四、实验步骤(一)异步复位4位加法计数器的设计1建立一个设计工程,工程名为CNT4B;2打开文本编辑器,建立一个VHDL设计文件,其VHDL代码见教材P164中的例6-20,文件名存为CNT4B.VHD。
注意文件的扩展名要选为.vhd,而且要求工程名、文件名和设计实体名必须相同。
3选器件:ACEX1K,EP1K30TC144-3(旧)或Cyclone,EP3C40Q240C8目标芯片。
4编译;5建立波形文件,然后保存,其文件名必须与工程名一致;【波形设置:①设置仿真时间为10us:②设置输入信号的波形:时钟周期设置为200ns,其他输入信号的波形设置参看图6-3。
】6仿真,观察输出波形是否正确;7时序分析:分析芯片所能达到的最高时钟频率。
【打开时序分析器,然后执行菜单命令:analysis/register performance/start,可以看到最高时钟频率为100.00MHZ】(二)同步复位4位加法计数器的设计8建立一个设计工程,工程名为CNT4B_SYS;9打开文本编辑器,建立一个VHDL设计文件,其VHDL代码参看异步计数器代码和实验原理中的参考代码,文件名存为CNT4B_SYS.VHD。
计数器与分频器的VHDL设计

process(clkin) begin if(clkin'event and clkin='0') then --下降沿计数 if(cnt2<N-1) then cnt2 <= cnt2+1; else cnt2 <= 0; end if; end if; end process; clkout <= '1' when cnt1<(N-1)/2 or cnt2<(N-1)/2 else '0'; end a;
构思:因分频系数为5,占空比40%,故取n=5, m=2。 设计:修改fdivn中generic类属变量m和n的参数 值,令n=5,m=2。 实现:修改程序并存盘,编译、仿真。
3. 学中做——占空比50%的奇数分频器设计
设计要求:分频系数为奇数,占空比50% 构思: 分析:因为计数器模数为奇数,占空比为50%,所以计数 器输出的前半个周期和后半个周期所包含的输入时钟的周 期数不是整数。例如,5分频器,clkout的前半个周期包 含2.5个clkin周期,后半个周期包含2.5个clkin周期。 方案:设计两个摸为分频系数的计数器,一个对输入时钟 的上升沿计数,另一个对输入时钟的下降沿计数,然后把 这两个计数器的输出接到“或门”的输入, “或门”的 输做分频器的输出clkout。 设计: 源程序:占空比为50%的奇数分频器
CDIO(构思、设计、实现、运行)理念
(1)构思——拟定设计方案
方案一、用硬件搭接,缺 点是电路复杂,焊点多, 可靠性差,不够灵活; 方案二、用单片机实现, 但可靠性差,速度慢; 方案三、用硬件描述语言 (HDL)编程,用可编程逻 辑器件(PLD)实现,好 处是可靠性高、灵活性好。
EDA VHDL 一百进制同步计数器设计ppt课件

end if;
end if;
end process;
n2: process(clk,cin) --高4位进程 begin
if clk'event and clk='1'then if cin='1'then if qg=9 then qg<="0000";
cing<='1'; else qg<=qg+1;cing<='0'; end if; end if; end if; if cin='1'and cing='1'then cc<='1';--进位处理 else cc<='0'; end if; end process; gaowei<=qg;diwei<=qd; --信号赋予端口 jinwei<=cc; --进位信号赋予信号端口 end ds100_atch;
一百进制同步计数器
生成原理图
一百进制同步计数器
仿真结果
一百进制同步计数器
本章小结 一 掌握时序逻辑电路的VHDL一般描述方法:明确输入
输出端口,提前设计用几个进程分别描述哪几个信号的行 为 二 进一步掌握敏感信号表的使用 三 会根据仿真结果验证时序逻辑电路的正确性和完整性
信号clk,一个进位信号 (1位),低4位计数器输 出(4位),高4位计数器输出(4位)。时钟上升 沿触发。 用两个进程分别描述低4位和高4位,编写VHDL代 码,并在Quartus II上调试,然后利用ModelsimAltera进行仿真。
一百进制同步计数器
实验环境 1、PC机一台。 2、Altera的Quartus软件一套。 3、主芯片为Altera公司的DE2-70的EDA开发板一
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
EDA技术及应用实验报告
——同步计数器VHDL的设计
班级:XXX
姓名:XXX
学号:XXX
一、实验目的:
学习数控分频器的设计、分析和测试方法。
二、实验原理:
同步计数器的功能就是在时钟脉冲的控制下,构成计数器的各触发器状态同时发生变化的一类计数器。
本实验是一个模为60,具有异步复位、同步置数功能的8421BCD码计数器。
三、实验内容和步骤:
1、打开文本编辑器,完成同步计数器的设计。
2、完成同步计数器的设计输入、进行目标器件选择。
3、引脚锁定。
4、编译。
5、对同步计数器设计进行仿真。
四、实验下载并实测
该同步计数器具有异步复位,同步置数功能。
当load=1时,便把输入信号与指导输出端,然后开始计数,计数到60时,LED灯闪烁,计数器从0开始计数。