计数器的VHDL设计与实现

合集下载

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

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实验结果:波形图:三、实验心得:这次实验比上一次顺利多了,可能是因为有了前一次的铺垫,我对软件的熟悉度有了一定的提高。

VHDL语言实现数字电路设计

VHDL语言实现数字电路设计

VHDL语言实现数字电路设计数字电路是由逻辑门、寄存器以及其他数字组件组成的电子系统,用于处理和传输数字信号。

VHDL(Very High-Speed Integrated Circuit Hardware Description Language)是一种硬件描述语言,用于描述数字电路和系统。

通过使用VHDL语言,我们可以实现数字电路的设计,从而满足各种需求。

VHDL语言提供了一种结构化的设计方法,允许设计者描述硬件电路的结构、功能以及时序行为。

以下是一些常见的数字电路设计任务,以及如何使用VHDL语言来实现它们。

1. 门电路设计门电路是最简单的数字电路之一,由逻辑门组成。

使用VHDL语言,我们可以通过描述逻辑门的输入和输出来实现门电路的设计。

例如,我们可以使用VHDL语言描述一个与门:```vhdlentity AND_gate isport (A, B : in bit;Y : out bit);end entity AND_gate;architecture dataflow of AND_gate isbeginY <= A and B;end architecture dataflow;```在这个例子中,我们定义了一个输入端口A和B,以及一个输出端口Y。

在architecture部分,我们使用VHDL语言描述了Y的逻辑值为A和B的逻辑与。

2. 时序逻辑电路设计时序逻辑电路是根据时钟信号进行操作和状态转换的电路。

使用VHDL语言,我们可以描述时序逻辑电路的行为和状态变化。

例如,我们可以使用VHDL语言描述一个触发器:```vhdlentity D_flip_flop isport (D, CLK : in bit;Q : out bit);end entity D_flip_flop;architecture behavior of D_flip_flop issignal Q_temp : bit;beginprocess(CLK)beginif CLK'event and CLK = '1' thenQ_temp <= D;end if;end process;Q <= Q_temp;end architecture behavior;```在这个例子中,我们定义了一个输入端口D和CLK,以及一个输出端口Q。

基于VHDL语言的可置数十位计数器的设计

基于VHDL语言的可置数十位计数器的设计

关键词 :D E A技 术 ; 计数 器 ; H L语 言 V D
中图 分 类 号 :P9 T2
文 献 标 志 码 : A
文章 编 号 :09— 9 7 2 1 ) 2 0 1 0 10 30 (00 1 — 04— 4
O 引 言
在现代 电子设 计领 域 , D Eet ncD s nA t t n 电子设 计 自动化 ) E A( lc o i ei uo i , r g mao 技术 已经成 为电子 系统 设计
第2 O卷
第 l 2期






Vo. 0 No 1 12 .2
21 0 0年 1 2月
J OUR NAL OF C HANG CHUN U V NI ERS T IY
D c 01 e .2 0
基 于 VH DL语 言 的可 置 数 十 位 计数 器 的 设 计
工具 , 设计 者可 以预知设 计结 果 , 少设计 的盲 目性 , 大地提 高 了设 计 的效率 。 减 极
1 E A技术特点 D
E A技 术在 电子 系统设计 中具有 以下特 点 : 软 件 的方 式设 计 硬件 ; 软件 方 式设 计 的系 统 到硬 件 系 D 用 用
统 的转换 时 由相 关的 开发软件 自动 完成 的 ; 计 过程 中可用相 关软件 进行仿 真 ; 设 系统可 现场编 程 , 升级 ; 在线 整个 系统 可集成在 一个 芯片 上 , 体积 小 、 耗低 、 功 可靠性 高 。因此 ,D E A技术 是现代 电子设 计 的发展趋 势 。
收稿 日期 :0 01 -3 2 1.01
作者简 介 : 王晓峰( 93 ) 男 , 17 一 , 吉林大安人 , 实验师 , 从事 电子信息及 自动化控制的研究 。

10进制加减计数器状态机的VHDL设计

10进制加减计数器状态机的VHDL设计

10进制加减计数器状态机的VHDL设计一、【设计目的】学习并掌握Quartus II 开发系统的基本操作。

掌握用Quartus II进行文本输入法进行电路设计、编译和仿真方法。

掌握CPLD/FPGA的开发流程。

掌握EDA实验开发系统的使用。

掌握状态机的原理。

掌握简单状态机的VHDL设计方法掌握计数器的设计方法。

掌握带有复位和和时钟使能的10进制计数器的原理。

掌握通用计数器的设计方法。

学习使用VHDL进行时序逻辑电路的设计。

学习利用真值表编写VHDL程序。

学习掌握7段数码显示译码器设计的原理。

掌握VHDL语言方式设计7段数码显示译码器。

学习掌握8位数码管动态扫描显示电路的原理。

掌握VHDL语言设计8位数码管动态扫描显示电路学习VHDL语言设计较复杂的电路方法。

二、【设计任务】设计要求用VHDL语言设计一个状态机,要求具有以下状态和功能中的四种或者四种以上:A.复位功能B.8、10或者16进制加法计数C.8、10或者16进制减法计数D.数码管以任何方式闪动E.8个LED灯以任何方式闪动F.蜂鸣器发声或者播放一段音乐G.并用两位数码管将结果显示出来本次设计选用的功能状态为:A.复位功能B.十进制加法计数C.十进制减法计数D.数码管闪动E.8个led灯闪动F.并用两位数码管将结果显示出来功能实现说明Clk为50MHz的时钟信号输入;rst为复位控制按键(低电平有效);en(0-2)通过三个按键分别控制3种状态(低电平有效)。

1.当en(0)=`0`时,启动加法计数并将结果动态显示到两位数码管上,同时另外的两位数码管的6段以相反方向按顺序闪烁2.当en(1)=`0`时,启动减法计数并将结果动态显示到两位数码管上,同时另外的两位数码管的6段以相反方向按顺序闪烁,闪烁方向与加法的相反;3.当en(2)=`0`时,启动LED闪烁功能,LED灯按顺序逐个流水闪动;4.当rst=`0`时,复位清零;三、【设计代码】library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;-----------------------------------------------------------------------------ENTITY cnt16 ISPORT (clk : IN std_logic; --50MHz时钟信号输入rst : IN std_logic; ---复位功能输入en : IN std_logic_vector(2 DOWNTO 0); ---状态选择输入led8 : OUT std_logic_vector(7 DOWNTO 0); --各段数据输出com8 : OUT std_logic_vector(7 DOWNTO 0)); ---各位数据输出END cnt16;-----------------------*****对各个信号进行定义****------------------------------------- ARCHITECTURE arch OF cnt16 ISsignal cnt : std_logic_vector(25 downto 0 );signal data : std_logic_vector(3 downto 0);signal led8_xhdl : std_logic_vector(7 downto 0);signal com8_xhdl : std_logic_vector(7 downto 0);signal coud1 : std_logic_vector(3 downto 0);signal coud2 : std_logic_vector(3 downto 0);signal s1 : std_logic;signal s2 : std_logic;signal s3 : std_logic;signal coud : std_logic_vector(3 downto 0);signal first : std_logic_vector(3 downto 0); --0000signal second : std_logic_vector(3 downto 0); --0000 0000 0000 1001 signal jinwei: std_logic;------------------------------------------------------------------------------------------------------------- beginled8<=led8_xhdl;com8<=com8_xhdl;----------------------- *****状态控制部分*************--------------------------------------------- process(en)beginif en="110"then ----状态控制,低电平有效s1<='1';s2<='0';s3<='0';else if en="101"thens2<='1';s1<='0';s3<='0';else if en="011"thens3<='1';s1<='0';s2<='0';end if;end if;end if;end process;-------------------------------------------------------------------------------------------------------------------------------**********时钟分频部分********----------------------------------process(clk,rst)beginif(rst='0')thencnt<="00000000000000000000000000";elsif(clk'event and clk='1')thencnt<=cnt+1; -----来一个时钟信号cnt加1end if;end process;----------------------------------------------------------------------------------------------------------------------*****-加减计数器的个位-*******------------------------------- process(cnt(24),rst,s1,s2)beginif(rst='0')thenfirst<="0000";jinwei<='0';elsif(cnt(24)'event and cnt(24)='1')then ---每隔(1/50)*48=0.96s计数一次if (s1='1')thenif(first="1001")then ---10进制计数first<="0000";jinwei<='1';elsejinwei<='0';first<=first+1; ---加法计数end if;else if(s2='1')thenif(first="0000")thenfirst<="1001";jinwei<='1';elsejinwei<='0';first<=first-1; ---减法计数end if;end if;end if;end if;end process;-------------------------------------------------------------------------------------------------------------------*********-加减计数器的十位*******-------------------------- process(jinwei,rst,s1,s2)beginif(rst='0')thensecond<="0000";elsif(jinwei'event and jinwei='1')then ---每来1个位产生的进位信号则十位加(减)1if (s1='1')thenif(second="1001")thensecond<="0000";elsesecond<=second+1;end if;else if(s2='1')thenif(second="0000")thensecond<="1001";elsesecond<=second-1;end if;end if;end if;end if;end process;------------------------------------------------------------------------------------------------------------------------------------------------*****闪动数码管的计数***--------------------------------------- process(cnt(23),rst,s1,s2)beginif(rst='0')thencoud<="0000";else if(cnt(23)'event and cnt(23)='1')then ----每隔(1/50)*46=0.92s计数一次if(s1='1')thenif(coud="0101")thencoud<="0000";elsecoud<=coud+1;end if;else if(s2='1')thenif(coud="0000")thencoud<="0101";elsecoud<=coud-1;end if;end if;end if;end if;end if;end process;--------------------------------------------------------------------------------------------------------------------------***码变换****---------------------------------------------process(coud,rst)begincase coud iswhen"0000" => coud1<="1010";coud2<="1010";when"0001" => coud1<="1011";coud2<="1111";when"0010" => coud1<="1100";coud2<="1110";when"0011" => coud1<="1101";coud2<="1101";when"0100" => coud1<="1110";coud2<="1100";when"0101" => coud1<="1111";coud2<="1011";when others => coud1<="0000";coud2<="0000";end case;end process;--------------------------------------------------------------------------------------------****************显示部分***************--process(rst,s1,s2,s3,cnt(17 downto 16),cnt(25 downto 23))beginif(rst='0')thencom8_xhdl<="11110000";led8_xhdl <= "00000000";else if s1='1'or s2='1'then ----计数以及数码管闪动部分的扫描case cnt(17 downto 16) iswhen"10" => com8_xhdl<="11111110";data<=first;when"01" => com8_xhdl<="11111101";data<=second;when"00" => com8_xhdl<="01111111";data<=coud1;when"11" => com8_xhdl<="10111111";data<=coud2;end case;case data isWHEN "0000" =>led8_xhdl <= "00111111"; --0WHEN "0001" =>led8_xhdl <= "00000110"; --1WHEN "0010" =>led8_xhdl <= "01011011"; --2WHEN "0011" =>led8_xhdl <= "01001111"; --3WHEN "0100" =>led8_xhdl <= "01100110"; --4WHEN "0101" =>led8_xhdl <= "01101101"; --5WHEN "0110" =>led8_xhdl <= "01111101"; --6WHEN "0111" =>led8_xhdl <= "00000111"; --7WHEN "1000" =>led8_xhdl <= "01111111"; --8WHEN "1001" =>led8_xhdl <= "01101111"; --9WHEN "1010" =>led8_xhdl <= "00000001";WHEN "1011" =>led8_xhdl <= "00000010";WHEN "1100" =>led8_xhdl <= "00000100";WHEN "1101" =>led8_xhdl <= "00001000";WHEN "1110" =>led8_xhdl <= "00010000";WHEN "1111" =>led8_xhdl <= "00100000";WHEN OTHERS =>led8_xhdl <= "00000011";END CASE;else if s3='1'then ----8个LED灯闪动的扫描,闪动周期为0.92s-1s case cnt(25 downto 23) iswhen"000" => com8_xhdl<="11111110";led8_xhdl<="10000000" ;when"001" => com8_xhdl<="11111101";led8_xhdl<="10000000" ;when"010" => com8_xhdl<="11111011";led8_xhdl<="10000000" ;when"011" => com8_xhdl<="11110111";led8_xhdl<="10000000" ;when"100" => com8_xhdl<="11101111";led8_xhdl<="10000000" ;when"101" => com8_xhdl<="11011111";led8_xhdl<="10000000" ;when"110" => com8_xhdl<="10111111";led8_xhdl<="10000000" ;when"111" => com8_xhdl<="01111111";led8_xhdl<="10000000" ;end case;end if;end if;end if;end process;end arch;。

VHDL十六进制计数器

VHDL十六进制计数器

徐州工程学院信电工程学院可编程器件及应用实验课题名称设计一个十六进制计数器王旭辉20100504144姓名赵永发 20100504133谢臻 20010504121学号杨红艳20100504111院、班级10电信1班专业电子信息科学与技术指导教师贾燕玲2013年 1月 2日一、实验目的1.进一步了解VHDL设计方法2.熟悉数码管和LED的显示二、实验所用仪器及元器件1、计算机2、Q uartus II 7.2 (32-Bit)软件3、E P2C5实验箱三、实验内容(1)、设计一个十六进制计数器,用一个数码管、8个彩灯循环显示计数状态。

(2)、有清零信号控制,按下后从零开始。

四、设计思路与过程根据实验要求,需要实现在拨码开关或者按键的控制下实现十六进制计数器。

首先,确定输入输出变量:输入:拨码开关a:清零;时钟clk::提供有效时钟沿;输出SEL-LED:8维向量b:连接8个发光二极管。

输出SEL-DATA :8维向量c:连接数码管。

其次,确定电路工作状态因为要实现计数十六进制计数器,所以首先要实现在时钟控制下实现计数;还要考虑到清零信号;再次,实现对计术状态的表示;也就是让计数状态用数码管和LED显示出来。

五、VHDL程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY count16 ISPORT(CLK5 :IN STD_LOGIC;RST :IN STD_LOGIC;SEG_SEL :OUT STD_LOGIC_VECTOR(2 DOWNTO 0);SEG_DA :OUT STD_LOGIC_VECTOR(7 DOWNTO 0);LED :OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END count16;ARCHITECTURE BEHAVE OF count16 ISSIGNAL SHIFT_CNT,TEMP :STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL CNT_VALUE :STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(CLK5)BEGINIF RST='1' THEN TEMP <="0000";ELSIF CLK5'EVENT AND CLK5='1' THENIF TEMP="1111" THENTEMP <="0000";ELSETEMP<=TEMP+1;END IF;END IF;END PROCESS;SHIFT_CNT<=TEMP;SEG_SEL<="000";PROCESS(SHIFT_CNT)BEGINCASE SHIFT_CNT ISWHEN "0000" => SEG_DA<=x"3F";LED<="00000001";WHEN "0001" => SEG_DA<=x"06";LED<="00000010";WHEN "0010" => SEG_DA<=x"5B";LED<="00000100";WHEN "0011" => SEG_DA<=x"4F";LED<="00001000";WHEN "0100" => SEG_DA<=x"66";LED<="00010000";WHEN "0101" => SEG_DA<=x"6D";LED<="00100000";WHEN "0110" => SEG_DA<=x"7D";LED<="01000000";WHEN "0111" => SEG_DA<=x"07";LED<="10000000";WHEN "1000" => SEG_DA<=x"7F";LED<="00000001";WHEN "1001" => SEG_DA<=x"6F";LED<="00000010";WHEN "1010" => SEG_DA<=x"77";LED<="00000100";WHEN "1011" => SEG_DA<=x"7C";LED<="00001000";WHEN "1100" => SEG_DA<=x"39";LED<="00010000";WHEN "1101" => SEG_DA<=x"5E";LED<="00100000";WHEN "1110" => SEG_DA<=x"79";LED<="01000000";WHEN "1111" => SEG_DA<=x"71";LED<="10000000";END CASE;END PROCESS;END BEHAVE;六、实验 QuarterII原理图:七、实验过程1、用Quartus II 7.2 打开已经写好的程序,编译,建立仿真文件,进行仿真。

(VHDL实验报告)模值12计数器、分频器的设计

(VHDL实验报告)模值12计数器、分频器的设计

电子科技大学成都学院学院指导教师模值12计数器,分频器设计二、实验目的1、了解二进制计数器的工作原理。

2、时钟在编程过程中的作用。

3、学习数控分频器的设计、分析和测试方法。

4、了解和掌握分频电路实现的方法。

5、掌握EDA技术的层次化设计方法。

三、实验原理(1)二进制计数器中应用最多、功能最全的计数器之一,含异步清零和同步使能的加法计数器的具体工作过程如下:在时钟上升沿的情况下,检测使能端是否允许计数,如果允许计数(定义使能端高电平有效)则开始计数,否则一直检测使能端信号。

在计数过程中再检测复位信号是否有效(低电平有效),当复位信号起作用时,使计数值清零,继续进行检测和计数。

其工作时序如下图所示:(2)数控分频器的功能就是当输入端给定不同的输入数据时,将对输入的时钟信号有不同的分频比,数控分频器就是用计数值可并行预置的加法计数器来设计完成的,方法是将计数溢出位与预置数加载输入信号相接得到。

(1)“模值12计数器的设计”的实验要求完成的任务是在时钟信号的作用下,通过使能端和复位信号来完成加法计数器的计数。

实验中时钟信号使用数字时钟源模块的1HZ信号,用一位拨动开关K1表示使能端信号,用复位开关S1表示复位信号,用LED模块的LED1~LED4来表示计数的二进制结果。

实验L ED 亮表示对应的位为‘1’,LED灭表示对应的位为‘0’。

通过输入不同的值模拟计数器的工作时序,观察计数的结果。

实验箱中的拨动开关、与FPGA 的接口电路,LED 灯与FPGA 的接口电路以及拨动开关、LED 与F PGA 的管脚连接在实验一中都做了详细说明,这里不在赘述。

数字时钟信号模块的电路原理如下图所示,其时钟输出与F PGA 的管脚连接表如下图所示:信号名称对应FPGA 管脚名说明DIGITAL-CLK C13 数字时钟信号送至FPGA 的C13按键开关模块的电路原理如下图所示:按键开关的输出与F PGA 的管脚连接表如下图所示:五、实验步骤(一)模值12计数器的设计1、建立工程文件1)运行QUARTUSII 软件。

vhdl 计数器的使用

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的设计

同步计数器VHDL的设计

EDA技术及应用实验报告
——同步计数器VHDL的设计
班级:XXX
姓名:XXX
学号:XXX
一、实验目的:
学习数控分频器的设计、分析和测试方法。

二、实验原理:
同步计数器的功能就是在时钟脉冲的控制下,构成计数器的各触发器状态同时发生变化的一类计数器。

本实验是一个模为60,具有异步复位、同步置数功能的8421BCD码计数器。

三、实验内容和步骤:
1、打开文本编辑器,完成同步计数器的设计。

2、完成同步计数器的设计输入、进行目标器件选择。

3、引脚锁定。

4、编译。

5、对同步计数器设计进行仿真。

四、实验下载并实测
该同步计数器具有异步复位,同步置数功能。

当load=1时,便把输入信号与指导输出端,然后开始计数,计数到60时,LED灯闪烁,计数器从0开始计数。

vhdl课程设计设计模为 4、8、12、16的可变计数器实验报告总结

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编程,不断提高自己的硬件设计能力。

同时,我们也期待将这种技术应用于更多的实际项目中,为工程实践做出贡献。

vhdl七段数码管显示0到9计数器显示电路设计

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`来实现计数器和七段数码管的显示。

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

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实验结果:波形图:三、实验心得:这次实验比上一次顺利多了,可能是因为有了前一次的铺垫,我对软件的熟悉度有了一定的提高。

实验五 四位二进制加法计数器VHDL设计

实验五 四位二进制加法计数器VHDL设计

实验五四位二进制加法计数器VHDL设计一、实验目的:进一步掌握引脚锁定、硬件下载及芯片测试方法。

掌握开发板的使用。

二、实验仪器:PC机,FPGA开发板,万用表,接线若干。

三、实验内容:1、设计内容如下两张图所示:2、注意开关如处在常态,输出值为‘1’;按下开关的输出值为‘0’。

完成上面的设计,并下载观察实验现象。

开关有抖动吗?3、将20MHz 的输入频率,分频后作为计数器的时钟。

设计电路,并下载观察实验现象。

4、管脚锁定及下载的方法如5~9。

5、选定器件。

点击QuartusII菜单Assignments下的“Device”,出现选择器件系列及器件型号选择窗口。

按照实验中所给的器件型号选择器件系列及器件型号。

(请按照开发板上实际的芯片选择芯片系列,以及芯片型号)选好器件后,重新全程编译。

6、查找管脚号。

观察开发板和外围电路。

确认电路的连接方法。

观察CLK 的管脚号,并记录。

确定数码管所接的端口,记录管脚号。

7、锁定管脚。

选择菜单Assignments下的Pins出现下图。

在Location下选择对应管脚的管脚号。

将CLK锁定在开发板规定的管脚号上。

将输出端锁定在所选定的管脚号上。

所有的引脚锁定后,再次全程编译。

8、在菜单菜单Tools下选择programmer打开编程窗口,观察箭头所指的信息。

如果显示“No Hardware”,点击左边的“Hardware Setup”,双击USB-Blaster。

如下图所示。

点击“Close”,关闭上面的窗口。

此时QUARTUSII的窗口应该为:选中Program/Configure下方的框(出现勾)。

点击左边的“Start”,开始下载。

当显示100%时,下载成功。

9、硬件测试。

观察实验现象。

适当进行操作,实验现象又是什么?四、实验报告要求:1.写出你实验时的芯片系列及芯片型号2.实验箱连接在PC机的什么口上?3.简要说明实验过程中遇到的问题,及解决方法。

计数器的VHDL设计与实现

计数器的VHDL设计与实现

期刊论文—EDA课程设计题目:计数器的VHDL设计与实现学生姓名:***学生学号:09专业班级:计算机科学与技术0902班指导老师:***计数器的VHDL设计与实现摘要:介绍了各种基本计数器的组成及其工作原理,重点研究了可变模计数器的设计与实现, 在对现有的可变模计数器的研究基础上,在Quartus 开发环境中,用VHDL语言设计一种功能更加强大的可变模计数器,它具有清零、置数、使能控制、可逆计数和可变模等功能,并且对传统的可变模计数器的计数失控问题进行研究,最终设计出一种没有计数失控缺陷的可变模计数器,并通过波形仿真和EPF10K20TI144-4系列实验箱,验证了其各项设计功能。

结果表明该设计正确.功能完整。

运行稳定。

关键词:VHDL;计数器;可变模计数;可逆计数VHDL Design and Realization of CounterAbstract:This paper analyzes all kinds of basic counter and its working principle, focus on the counter variable mode of design and implementation. In the environment of Quartus based on research of the existing module—alterable counter,a module—alterable counter with more functions,such as clear,set,enable control,reversible count,module—alterable count and so on,which is designedwith VHDL.By researching the problem of losing control existed in traditional module—alterable counter.A module—alterablecounter with no fault designed.And through the waveform simulation and EPF10K20TI144-4 series experiment box,all of the functions are verified.The resuit indicates that the counter is designed correctly,and has integral functions and stable operation.Keywords:VHDL;counter;divided frequency impIement;reversible引言随着电子技术、计算机技术和EDA技术的不断发展,数字系统规模越来越大,传统的电路设计已难以适应复杂电子系统的设计要求。

vhdl计数器实验报告

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七段数码管显示0到9计数器显示电路设计 -回复

vhdl七段数码管显示0到9计数器显示电路设计 -回复

vhdl七段数码管显示0到9计数器显示电路设计-回复如何设计一个能够显示0到9的计数器的七段数码管显示电路。

文章长度:1500-2000字一、引言(100字左右)计数器是数字电路中非常常见的一个组件,而七段数码管则是用于显示数字的一种常用装置。

本文将详细介绍如何设计一个能够实现0到9的计数器,并利用七段数码管进行显示的电路。

二、理论基础(200字左右)在开始设计电路之前,我们需要掌握一些基本的理论知识。

七段数码管是由七个LED组成的,每个LED被称为一个段,分别用a、b、c、d、e、f、g表示。

通过控制七个段的亮灭可以显示不同的数字。

例如,要显示数字0,将a、b、c、d、e、f亮起,而要显示数字1,则只需将b、c 亮起。

三、设计电路(600字左右)1. 确定计数范围根据题目要求,我们需要设计一个能够显示0到9的计数器。

因此,计数范围为0到9,共有10个数字需要显示。

2. 确定计数位数根据题目要求,我们需要设计的是一个十进制计数器,因此需要三个计数位。

每个计数位都是一个0到9的计数器。

3. 设计逻辑电路我们可以使用JK触发器作为计数器的基本构建模块。

JK触发器有两个输入和两个输出,分别称为J、K和Q、~Q。

其中,J和K分别用于控制触发器状态的跳变,而Q和~Q是触发器的两个状态。

我们可以使用三个JK触发器构建一个三位的二进制计数器。

具体电路如下:第一个JK触发器的CLK输入连接计数器电路的时钟信号,J、K和第二个JK触发器的CLK端连接在一起,第二个JK触发器的Q输出连接第三个触发器的J输入,第一个触发器的Q输出连接了第三个触发器的K输入。

这样的设计将会实现三个触发器之间的互动。

4. 连接七段数码管根据七段数码管的布局,我们需要将七段的对应输入连接到计数器的输出。

根据计数器的输出值,我们可以设定哪些段需要亮起或熄灭。

连接七段数码管的具体方法可以参考其数据手册或规格说明。

四、测试与调试(400字左右)完成电路的设计之后,我们需要进行测试和调试,以确保电路能够正常显示0到9的数字。

基于VHDL的16进制计数器的程序设计

基于VHDL的16进制计数器的程序设计

实事求是实验课程名称通信系统集成电路设计实验项目名称 Quartus II实验操作实验一:Quartus II操作及16进制加法器1.实验目的a)熟悉熟悉EDA工具QuartusII及modelsim软件的使用方法。

掌握用quartus ii或其他EDA软件对VHDL源程序进行编译、调试、修改、波形仿真。

b)学习VHDL程序的软件及硬件的编写及仿真方法并熟练掌握VHDL程序的编写方法和注意事项。

c)编写、调试出16进制计数器的程序,仿真出波形。

d)在上面的基础上做出PCM9程序,并仿真出波形数据。

2.实验器材a)电脑中要有Quartus II 软件b)电脑中要有Modelsim软件3.实验内容a)熟悉Quartus II和modelsim软件,并将两个软件进行配置,使软件可以用于为后面的软件进行调试。

b)尽量自己编写VHDL程序,做16进制的计数器实验,包括计数器程序和测试平台。

c)了解模块设计方法和思想,并设计并搭建测试平台。

实事求是实事求是4. 实验要求a) 熟悉两个软件并配置好相关环境。

熟悉两个软件并配置好相关环境。

b) 编写实验用的VHDL 程序。

程序。

c) 使用Quartus II 编译,查找错误并修改到正确无误。

编译,查找错误并修改到正确无误。

d) 使用Quartus II 仿真,生成波形文件。

仿真,生成波形文件。

e) 保存相关文件,并书写实验报告。

保存相关文件,并书写实验报告。

5. 实验步骤及结果a) 建立工程并加入16进制模块和测试平台。

进制模块和测试平台。

1. 建立工程。

建立工程。

在菜单栏里有在菜单栏里有 file àNew Project Wizard ,点击Next 到这个界面。

到这个界面。

输入项输入项目名称。

后点击Finish ,完成项目的创建。

,完成项目的创建。

2. 建立文件。

建立文件。

在菜单栏里有在菜单栏里有 file àNew ,跳转到下面这个界面。

vhdl十进制计数器工作原理

vhdl十进制计数器工作原理

vhdl十进制计数器工作原理VHDL(VHSIC Hardware Description Language)是一种用于描述数字系统的硬件描述语言,其中的"VHSIC"代表"Very High Speed Integrated Circuit"(超高速集成电路)。

十进制计数器是一种用于计数十进制数的数字电路,VHDL可以被用来描述和设计这样的十进制计数器。

在十进制计数器的工作原理中,通常使用四个状态变量来表示个位数、十位数、百位数和千位数。

这些状态变量在每次计数时根据当前状态和输入信号进行更新。

一旦达到计数器的最大计数值(在十进制中通常是9),状态变量将被清零并重新开始计数。

以下是一个简单的VHDL代码示例,展示了一个四位的十进制计数器的工作原理:```library ieee;use ieee.std_logic_1164.all;entity decimal_counter isport(clock: in std_logic;reset: in std_logic;count: out std_logic_vector(3 downto 0));end entity decimal_counter;architecture behavior of decimal_counter issignal state: std_logic_vector(3 downto 0);beginprocess(clock, reset)beginif (reset = '1') thenstate <= "0000";elsif (rising_edge(clock)) thenif (state = "1001") thenstate <= "0000";elsestate <= std_logic_vector(unsigned(state) + 1);end if;end if;end process;count <= state;end architecture behavior;```这段VHDL代码中的`decimal_counter`实体包含了一个时钟输入(`clock`)、一个复位输入(`reset`) 和一个四位输出(`count`)。

实验三_VHDL时序逻辑电路设计

实验三_VHDL时序逻辑电路设计

实验三实验三 VHDL VHDL VHDL 时序逻辑电路设计时序逻辑电路设计 一、实验目的一、实验目的1. 熟悉用VHDL 语言设计时序逻辑电路的方法语言设计时序逻辑电路的方法 2. 熟悉用Quartus 文本输入法进行电路设计文本输入法进行电路设计 二、实验所用仪器元件及用途二、实验所用仪器元件及用途 1. 计算机:装有Quartus 软件,为VHDL 语言提供操作场所。

语言提供操作场所。

2. 直流稳压电源:通过USB 接口实现,为实验开发板提供稳定电源。

接口实现,为实验开发板提供稳定电源。

3. 数字系统与逻辑设计实验开发板:使试验结果下载到开发板上,实现整个实验的最终结果。

果。

三、实验内容三、实验内容 1. 用VHDL 语言设计实现一个8421码十进制计数器。

码十进制计数器。

(1) 实验内容及要求:在Quartus 平台上设计程序和仿真题目要求,并下载到实验板上验证试验结果。

验证试验结果。

(2) 试验结果:VHDL 代码和仿真结果。

代码和仿真结果。

2. 用VHDL 语言设计实现一个分频系数为8,分频输出信号占空比为50%的分频器。

的分频器。

(1) 实验内容及要求:在Quartus 平台上设计程序和仿真题目要求。

平台上设计程序和仿真题目要求。

(2) 试验结果:VHDL 代码和仿真结果。

代码和仿真结果。

3. 用VHDL 语言设计实现一个控制8个发光二极管亮灭的电路。

个发光二极管亮灭的电路。

(1) 实验内容及要求:在Quartus 平台上设计程序和仿真题目要求,并下载到实验板上验证试验结果。

验证试验结果。

a. 单点移动模式:一个点在8个发光二极管上来回的亮个发光二极管上来回的亮b. 幕布式:从中间两个点,同时向两边依次点亮直至全亮,然后再向中间点灭,依次往复往复c. 通过拨码开关或按键控制两种模式的转换通过拨码开关或按键控制两种模式的转换 (2) 试验结果:VHDL 代码和仿真结果。

第3章 VHDL设计初步计数器教材

第3章 VHDL设计初步计数器教材

3-5 设计含有异步清零和计数使能的16位二进制加减可控计数器。
3-6 图3-18是一个含有上升沿触发的D触发器的时序电路,试写出此电 路的VHDL设计文件。


3-7 给出1位全减器的VHDL描述。要求: (1)首先设计1位半减器,然后用例化语句将它们连接起来,图3-19 中h_ suber是半减器,diff是输出差,s _out是借位输出,sub _in是 借位输入。 (2)根据图3-19设计1位全减器。以1位全减器为基本硬件,构成串行 借位的8位减法器,要求用例化语句来完成此项设计(减法运算是 x – y – sun _in = diffr)。
3. 时序模块中的同步控制信号和异步控制信号的构建
4. 另一种描述方式
3.4 实用计数器的VHDL设计
3.3.3 计数器的其他VHDL表达方式
3. 时序模块中的同步控制信号和异步控制信号的构建 4. 另一种描述方式


3-1 画出与以下实体描述对应的原理图符号元件:


3-2 图3-16所示的是4选1多路选择器,试分别用IF_THEN语句、 WHEN_ELSE和CASE语句的表达方式写出此电路的VHDL程序,要求 选择控制信号s1和s0的数据类型为STD_LOGIC;当s1='0',s0='0'; s1='0',s0='1';s1='1',s0='0'和s1='1',s0='1'时,分别执行y<=a、 y<=b、y<=c、y<=d。
33计数器的vhdl设计33计数器的vhdl设计3314位二进制加法计数器设计buffer只接收内部信号不接收外部信号兼有out功能out类型端口只能输出不能与内部信号运算332整数类型333计数器的其他vhdl表达方式33计数器的vhdl设计333计数器的其他vhdl表达方式七段八段数码管示意图七段八段数码管实物图对应的引脚给出相应的编码即可发光

vhdl语言设计一个8421bcd码的24进制计数器

vhdl语言设计一个8421bcd码的24进制计数器

专业技能训练4题目:用VHDL设计8421BCD码24进制计数器班级:电子科学与技术1201姓名:王启正学号:120803039时间:2015.5—2015.6一、技能训练项目名称运用VHDL语言进行编程设计一个8421BCD码24进制计数器二、实训目的1.熟练掌握Quartus II软件的使用。

2.熟练掌握在QuartusII平台上用原理图或者VHDL语言进行电路设计的方法。

3.学会用例化语句对EDA电路设计中顶层电路进行描述三、实训要求1.熟悉仿真开发软件Quartus II的使用;2.根据功能要求,用原理图或文本输入方式完成设计;3.用Quartus II做波形仿真调试;4.下载至EDA试验仪调试设计。

四、基本原理(附源程序清单,原理图、RTL图)1、通过VHDL语言编程方法程序清单:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY lin IS PORT(CLK :IN STD_LOGIC; --时钟EN :IN STD_LOGIC; --使能端CR :IN STD_LOGIC; --清零端,低电平有效LD :IN STD_LOGIC; --数据载入控制,低电平有效D :IN STD_LOGIC_VECTOR(5 DOWNTO 0); --载入数据端CO : OUT STD_LOGIC; --进位Q :OUT STD_LOGIC_VECTOR(5 DOWNTO 0) --计时输出);END lin ;ARCHITECTURE a OF lin IS SIGNALQN :STD_LOGIC_VECTOR(5 DOWNTO 0);BEGIN --进位控制 CO<='1' WHEN(QN=X"23" AND EN='1')ELSE'0';PROCESS(CLK,CR)BEGINIF (CR='0')THENQN<="000000";ELSEIF (CLK'EVENT AND CLK='1') THENIF (LD='0') THEN --数据加载 QN<=D;ELSIF(EN='1') THENIF (QN(3 DOWNTO 0)=3 and QN(5 DOWNTO 4)=2) or QN(3 DOWNTO 0)=9 THENQN(3 DOWNTO 0)<="0000"; --个位数进位IF QN(5 DOWNTO 4)=2 THENQN(5 DOWNTO 4)<="00"; --十位数进位ELSEQN(5 DOWNTO 4)<= QN(5 DOWNTO 4)+1;END IF;ELSEQN(3 DOWNTO 0)<= QN(3 DOWNTO 0)+1;END IF ;END IF;END IF ;END IF;END PROCESS;Q<=QN;end a;2、原理图:3、RTL图:五、仿真调试:调试过程中,输出波形为24进制波形图。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

期刊论文—EDA课程设计题目:计数器的VHDL设计与实现学生姓名:***学生学号:09专业班级:计算机科学与技术0902班指导老师:***计数器的VHDL设计与实现摘要:介绍了各种基本计数器的组成及其工作原理,重点研究了可变模计数器的设计与实现, 在对现有的可变模计数器的研究基础上,在Quartus 开发环境中,用VHDL语言设计一种功能更加强大的可变模计数器,它具有清零、置数、使能控制、可逆计数和可变模等功能,并且对传统的可变模计数器的计数失控问题进行研究,最终设计出一种没有计数失控缺陷的可变模计数器,并通过波形仿真和EPF10K20TI144-4系列实验箱,验证了其各项设计功能。

结果表明该设计正确.功能完整。

运行稳定。

关键词:VHDL;计数器;可变模计数;可逆计数VHDL Design and Realization of CounterAbstract:This paper analyzes all kinds of basic counter and its working principle, focus on the counter variable mode of design and implementation. In the environment of Quartus based on research of the existing module—alterable counter,a module—alterable counter with more functions,such as clear,set,enable control,reversible count,module—alterable count and so on,which is designedwith VHDL.By researching the problem of losing control existed in traditional module—alterable counter.A module—alterablecounter with no fault designed.And through the waveform simulation and EPF10K20TI144-4 series experiment box,all of the functions are verified.The resuit indicates that the counter is designed correctly,and has integral functions and stable operation.Keywords:VHDL;counter;divided frequency impIement;reversible引言随着电子技术、计算机技术和EDA技术的不断发展,数字系统规模越来越大,传统的电路设计已难以适应复杂电子系统的设计要求。

从而使得电子设计自动化(EDA)技术迅速发展,成为硬件电子电路设计领域中的主要设计手段。

利用FPGA/CPLD进行数字系统的开发已被广泛应用于通信、航天、医疗电子、工业控制等领域。

与传统电路设计方法相比,FPGA/CPLD具有功能强大,开发周期短,投资少,便于追踪市场变化及时修改产品设计,以及开发工具智能化等特点。

近年来,FPGA/CPLD发展迅速,随着集成电路制造工艺的不断进步,高性价比的FPGA/CPLD器件推陈出新,使FPGA/CPLD成为当今硬件设计的重要途径。

在FPGA/CPLD的应用设计开发中,VHDL语言作为一种主流的硬件描述语言,具有很强的电路描述和建模能力,能从多个层次对数字系统进行建模和描述,从而大大简化了硬件设计任务,提高了设计效率和可靠性,并在语言易读性和层次化、结构化设计方面,表现出了强大的生命力和应用潜力。

QuartusⅡ是Ahera公司在21世纪初推出的FPGA/CPLD集成开发环境,是Ahera公司前一代FPGA/CPLD集成开发环境Max+Plus 11的更新换代产品,其界面友好,使用便捷,功能强大,为设计者提供了一种与结构无关的设计环境,使设计者能方便地进行设计输入、快速处理和器件编程。

计数器是数字系统中使用最多的时序电路之一,不仅能用于对时钟脉冲计数,还可以用于分频、定时、产生节拍脉冲和脉冲序列以及进行数字运算等。

可变模计数器由于计数容量可以根据需要进行变化,为其广泛使用创造了便利。

这里在Quartus 1I开发环境下,用VHDL 语言设计了一种具有清零、置数、使能控制、可逆计数和可变模功能的计数器。

1.基本模10计数器的设计VHDL设计代码如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity counter10 isport(clk,clrn:in std_logic;cq:out std_logic_vector(3 downto 0);cout:out std_logic);end counter10;architecture bhv of counter10 issignal cqi:std_logic_vector(3 downto 0); beginprocess(clk,cqi)beginif clrn='0' thencqi<="0000";elsif clk'event and clk='1' then if cqi<9 thencqi<=cqi+1;elsecqi<="0000";end if;end if;if cqi=9 thencout<='1';else cout<='0';end if;cq<=cqi;end process;2.基本可变模计数器设计可变模计数器是指计数/模值可根据需要进行变化的计数器。

电路符号如图1所示,clk为时钟脉冲输入端,clr为清零端,m为模值输入端,q为计数输出端。

基本可变模计数器的VHDL代码如下所示:LIBRARY IEEE;USE ieee.Std_logic_l 164.AIL;USE ieee.Std_logic_unsigned.ALL;USE ieee.Std_logic_arith.All;ENTITY mchcounter ISPORT(elk,elr:IN std_logic;m:in integer range 0 tO 99;q:buffer integer range 0 tO 99);END mchcounter;ARCHITECTURE one 0F mchcounter IS------定义计数最大值m_tempsignal m_temp:integer range 0 tO 99;BEGINPROCESS(elk,clr,m)BEGINm_temp<=m-1;if elr=‘1’then q<=0;一一以时钟信号的上升沿为计数触发条件elsif clk’event and clk=‘1’ thenif q=m_temp then q<=0;else q<=q+1;end if;end if;------清零功能------加法计数END PROCESS;END ARCHITECTURE one;说明:上述代码设计采用了常用的if语句结构,即“if条件句then 顺序语句elsif条件句then顺序语句else顺序语句end if”结构,实现模值小于99的可变模计数。

从上述的代码可以看出,基本的可变模计数器的功能单一。

仿真验证则表明在进行模值变换时,基本的可变模计数器存在一些功能上的缺陷:计数器若是由较小的模值变化为较大的模值时,能正常的进行变模计数;但当其由较大的模值变化为较小的模值,则可能出现计数失控,如图2所示,图中显示了当模值由12变换为7时,即发生了计数失控。

失控的原因是大于当模值由12变换为7时,计数输出为q为11,大于当前模值7的计数最大值6。

由此产生了计数失控。

3.改进的多功能可变模计数器为了克服上述基本可变模计数器的缺陷,并增加更多的控制功能,在此设计了一种改进的多功能可变模计数器,具有清零、置数、使能控制、可逆计数和可变模功能。

其电路符号如图3所示,elk为时钟脉冲输入端, ITI为模值输入端,clr为清零控制端,8为置数控制端,d为置数输入端,en为使能控制端,updn为计数方向控制端,q为计数输出端,CO为进位输出端。

这里所设计的多功能可变模计数器的VHDL代码如下所示:LIBRARY IEEE:USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;USE ieee.std_logie_arith.ALL;ENTlTY counter ISPoRT(clk,clr,S,en,updn:in std—logic;d:in integer range 0 to 99;m:in integer range 0 to 99;co:OUT std_logic;q:buffer integer range 0 to 99);END counter:ARCHITECTURE one of counter IS------定义计数最大值m_tempsignal m_temp:integer range 0 to 99;BEGINPRoCESS(elk,clr,m)BEGINm_temp<=m-1;------清零功能if clr=’1’ then q<=0;co<=0;------以时钟信号的上升沿为计数触发条件elsif elk’event and clk=’1’then------置数功能if s=’1’ then q<=d;------防止计数失控elsif q>m_temp then q<=m_temp;------计数使能控制功能elsif en=’1’thenif updn=’1’then ------加法计数if q=m_temp then q<=O;co<=’1’;else q<=q+1;co<=0 ;end if;elsif updn=’0’then------减法计数if q=O then q<=m_temp;co<=‘1‘;else q<=q-1;co<=’0’;end if;end if;end if;end if;END PROCESS;END ARCH ITECTURE one;值得注意的是,这里所设计的多功能可变模计数器具有如下特点:(1)该设计的多功能可变模计数器具有多个功能控制端。

相关文档
最新文档