n个边沿D触发器实现任意进制加法减法计数器的VHDL描述
n个边沿D触发器实现任意进制加法减法计数器的VHDL描述
n个边沿D触发器实现任意进制加法/减法计数器的VHDL描述-- 用VHDL采用行为方式描述计数器十分简单,别人(公司招聘等)考你一般不是直接叫你用VHDL写个多少进制的计数器(没有难度),-- 而是叫你用什么什么器(D触发器、数据选择器等等)来实现,当然是编程,不是画图。
-- 下面是我刚写的一个用4个D触发器可实现1-16任意进制的加法计数器。
另外,修改一下非最低位触发方式即可实现减法计数器。
-- 从附件图中的综合结果可清楚看到计数器由D触发器构成。
-- October 12 2008, designed by thh.-- Shenzhen University.library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity counter isport( cp : in std_logic;qq : out std_logic_vector(3 downto 0));end;architecture one of counter issignal d : std_logic_vector(3 downto 0);signal reset : std_logic; -- 对输出清零,实现不同进制计数beginqq<=d;process(cp) -- 触发器d(0) 第0位(最低位)及控制逻辑 beginif rising_edge(cp) thend(0)<=not d(0); -- 不能放进下面的 if里面,否则计数不能启动if d="0110" then -- 修改这里 d 的值即可实现 1至16 之间任何进制计数reset<='1';d(0)<='0'; -- 须在这里加上这一句,否则偶数进制计数时没有0出现elsereset<='0';end if;end if;end process;process(d(0)) -- 触发器d(1) 第1位beginif reset='1' thend(1)<='0';elseif (d(0)'event and d(0)='0') then -- 只要将“d(i)'event and d(i)='0' ”中的d(i)='0'改成d(i)='1',d(1)<=not d(1); -- 变成上升沿触发下一级变化,即变成减法计数器。
VHDL加法器和减法器的原理
VHDL加法器和减法器的原理加法器3.2.1 加法器的原理在将两个多位二进制数相加时,除了最低位以外,每一位都应该考虑来自低位的进位,即将两个对应位的加数和来自低位的进位3个数相加。
这种运算称为全加,所用的电路称为全加器。
多位加法器的构成有两种方式:并行进位和串行进位。
并行进位加法器设有进位产生逻辑,预算速度较快;串行进位方式是将全加器级联构成多位加法器。
并行进位加法器通常比串行级联加法器占用更多的资源。
随着为数的增加,相同位数的并行加法器与串行加法器的资源占用差距也越来越大,因此,在工程中使用加法器时,要在速度和容量之间寻找平衡点。
本次设计采用的是并行加法器方式。
3.2.2 加法器要求实现的功能实现两个二进制数字的相加运算。
当到达时钟上升沿时,将两数输入,运算,输出结果。
3.2.3 加法器的VHDL语言实现(以下以12位数加16位数生成16位数的加法器为例)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_arith.ALL;ENTITY add121616 isPORT(clk : in STD_LOGIC;Din1 :in signed (11 downto 0);Din2 :in signed (15 downto 0);Dout:out signed (15 downto 0));END add121616;ARCHITECTURE a of add121616 isSIGNAL s1: signed(15 downto 0);BEGINs1<=(Din1(11)&Din1(11)&Din1(11)&Din1(11)&Din1);PROCESS(Din1,Din2,clk)BEGINif clk'event and clk='1' thenDout<=s1+Din2;end if;end process;end a;3.2.4 加法器的模块图3.2.5 加法器的波形仿真完全符合设计要求。
EDA技术期末复习题
EDA技术期末复习题1.结构体中包含了四类功能描述语句:语句、______________语句、子程序调用语句和语句。
(P304)2. 下列关于程序包的用法正确的是: ________ (P319)A、一个程序包中只能包含常数说明,VHDL数据类型说明,元件定义和子程序这几种结构之一或他们中的几种B、程序包首可以独立定义和使用C、程序包结构中,必须同时含有程序包首和程序包体D、一个完整的程序包中,程序包首名和程序包体名可以不是同一个名字3. 参数传递说明语句以关键词引导一个类属参量表,通常在实体中的位置处于语句之前。
(P300-301)4. 下列逻辑操作符中哪个的优先级最高:_______。
A. ANDB. ORC. NOTD. XOR5. 下列关于操作符说法不正确的是:_______ (P333)A、关系操作符的操作对象可以是VHDL中的任何数据类型构成的操作数B、关系操作符的返回值是布尔类型数据C、MOD和REM的操作数数据类型只能是整数,运算操作结果也是整数。
D、SLL是左移位操作,右边跟进的位补零6. 下列说法正确的是: _______。
(P332)A、只有BIT型和整型数据可以参与加减运算。
B、操作符是有优先级别的,其中逻辑运算符的级别最低。
C、BIT 、BOOLEAN和STD_LOGIC可以进行逻辑运算D、a nand b nand c 这串运算可以不加括号7. 下列语句中,不属于并行语句的是:________A、进程语句B、CASE语句C、元件例化语句D、WHEN…ELSE…语句8. 下列语句中,不属于顺序语句的是:_______。
A. WHEN…ELSE…语句B. IF语句C. LOOP语句D. CASE语句9. 以下关于VHDL中常量的声明正确的是________A、Constant Width :Integer=8;B、Constant Width :Integer := 8;C、Variable Width :Integer = 8;D、Variable Width :Integer := 8;10. 下列哪个库需要在VHDL程序中明确打开并指定________A、STDB、IEEEC、WORKD、自定义库11. VHDL中最为常用的是库。
《数字电子技术与接口技术试验教程》课件第5章
第5章 基于HDL的时序逻辑电路实验
图5-2 边沿D触发器的仿真结果
9
第5章 基于HDL的时序逻辑电路实验 (2) 边沿D触发器的VHDL源代码如下:
--Behavioral D Flip-Flop with Clock Enable and Asynchronous Reset
entity Dflipflop is Port (D,clk,rst,ce : in STD_LOGIC; Q : out STD_LOGIC);
architecture Behavioral of DFF is begin
process(clk, rst,D) begin
if (CLK'event and CLK='1') then if rst ='1' then Q <= '0'; else Q<=D; end if;
end if; end process; end Behavioral;
end if; end process; end Behavioral;
13
第5章 基于HDL的时序逻辑电路实验
(3) 带有置位和清零端的边沿D触发器的约束文件规定
如下:
#Basys2约束文件: NET "clk" LOC ="B8"; //时钟
#Basys2约束文件: NET "clk" LOC ="B8"; //时钟
end Dflipflop;
architecture Behavioral of Dflipflop is begin
process(clk, rst,D,ce)
数字电路实验报告-用D触发器设计三位二进制加法计数器
电学实验报告模板实验原理1.触发器的触发方式(1)电平触发方式电平触发方式的特点是:CP = 1时,输出与输入之间通道“透明”,输入信号的任何变化都能引起输出状态的变化。
当CP = 0时,输入信号被封锁,输出不受输入影响,保持不变。
(2)边沿触发方式边沿触发方式的特点是:仅在时钟CP信号的上升沿或下降沿才对输入信号响应。
触发器的次态仅取决于时钟CP信号的上升沿或下降沿到达时输入端的逻辑状态,而在这以前或以后,输入信号的变化对触发器输出端状态没有影响。
2. 边沿触发器(1)边沿D触发器图1 上升沿触发D触发器图1所示为上升沿触发D触发器的逻辑符号。
上升沿触发D触发器的特性表如表1所示。
表1 上升沿D触发器特性表D触发器的特性方程为:Q^(n+1) = D1.同步触发器的异步置位复位端电平触发器和边沿触发器都在CP时钟信号的控制下工作,这种工作方式称之为“同步”。
也把这类触发器称为同步触发器,以区别于基本RS触发器。
在小规模集成电路芯片中,触发器既能同步工作,又兼有基本RS触发器的功能。
例如。
图2所示的触发器。
这是上升沿触发D触发器,其中,SD(-)和RD(-)是异步置位复位端。
只图2 带有异步置位复位端的D触发器要在SD(-)或RD(-)加入低电平,立即将触发器置“1”或置“0”,而不受时钟信号CP和输入信号D的控制。
只有当SD(-)或RD(-)均处于高电平时,触发器才正常执行上升沿触发D触发器的同步工作功能。
实验仪器实验内容及步骤1.测试双D触发器74LS74的逻辑功能(1)74LS74引脚图图3 74LS74引脚图图3所示为集成电路芯片74LS74的引脚图。
芯片包含两个带有异步置位复位端的上升沿D触发器。
(1)测试74LS74的逻辑功能图4 测试74LS74的逻辑功能实验电路按照图4连接电路。
D触发器的Q和Q(-)(芯片5和6号引脚)各接一个发光二极管用以观察触发器的输出逻辑电平。
按照上面测试74LS112的逻辑功能同样的方法和步骤,测试74LS74的逻辑功能,将实验数据记录在表2。
VHDL简单实例
第6章基本单元电路的VHDL设计本章提要:本章介绍了数字系统设计中经常用到的计数器,分频器,选择器,译码器,编码器,寄存器,存储器,输入电路,显示电路等基本单元电路的VHDL程序设计。
学习要求:在教师讲授这些基本单元电路的设计思想的基础上,通过上机调试熟练掌握这些基本单元电路的设计。
关键词:计数器(Counter),分频器(Divder),选择器(Multiplexer),译码器(Decoder),编码器(Encoder),寄存器(Register),存储器(Memory),输入电路(Input Circuit),显示电路(Display Circuit)6.1 计数器的设计6.1.1 同步计数器的设计6.1.2 异步计数器的设计6.2 分频器的设计6.3 选择器的设计6.4 译码器的设计6.5 编码器的设计6.5.1 一般编码器的设计6.5.2 优先级编码器的设计6.6 寄存器的设计6.6.1 数码寄存器的设计6.6.2 移位寄存器的设计6.6.3 并行加载移位寄存器的设计6.7 存储器的设计6.7.1 只读存储器ROM的设计6.7.2 读写存储器SRAM的设计6.8 输入电路的设计6.8.1 键盘扫描电路的设计6.8.2 键盘接口电路的设计6.9 显示电路的设计6.9.1 数码管静态显示电路的设计6.9.2 数码管动态显示电路的设计6.9.2 液晶显示控制电路的设计6.1 计数器的设计计数器是在数字系统中使用最多的时序电路,它不仅能用于对时钟脉冲计数,还可以用于分频,定时,产生节拍脉冲和脉冲序列以及进行数字运算等。
计数器是一个典型的时序电路,分析计数器就能更好地了解时序电路的特性。
计数器分同步计数器和异步计数器两种。
6.1.1 同步计数器的设计所谓同步计数器,就是在时钟脉冲(计数脉冲)的控制下,构成计数器的各触发器状态同时发生变化的那一类计数器。
1) 六十进制计数器众所周知,用一个4位二进制计数器可构成1位十进制计数器,而2位十进制计数器连接起来可以构成一个六十进制的计数器。
EDA技术使用教程课后答案第4章
【例4-8】 】 ... IF a1 > b1 THEN q1 <= '1' ; ELSE q1 <= '0' ; END IF; ...
的电路图( 综合) 图4-6 例4-8的电路图(Synplify综合) 的电路图 综合
图4-2 mux21a结构体 结构体
KX
康芯科技
4.1 多路选择器的 多路选择器的VHDL描述 描述
4.1.1 2选1多路选择器的 选 多路选择器的 多路选择器的VHDL描述 描述
【例4-1】 】 ENTITY mux21a IS PORT ( a, b : IN BIT; s : IN BIT; y : OUT BIT ); END ENTITY mux21a; ARCHITECTURE one OF mux21a IS BEGIN y <= a WHEN s = '0' ELSE END ARCHITECTURE one ;
KX
康芯科技
4.2 寄存器描述及其 寄存器描述及其VHDL语言现象 语言现象
4.2.2 VHDL描述的语言现象说明 描述的语言现象说明 2. 设计库和标准程序包
LIBRARY LIBRARY WORK ; STD ;
图4-4 D触发器
USE STD.STANDARD.ALL ; 使用库和程序包的一般定义表式是: 使用库和程序包的一般定义表式是: LIBRARY USE <设计库名>; 设计库名>
< 设计库名>.<程序包名>.ALL ; 设计库名> 程序包名>
用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;九、实验总结。
利用D触发器构成计数器-d触发器 计数器
数字电路实验设计:D触发器组成的4位异步二进制加法计数器一、选用芯片74LS74,管脚图如下:说明:74LS74是上升沿触发的双D触发器, D触发器的特性方程为二、设计方案:用触发器组成计数器。
触发器具有0 和1两种状态,因此用一个触发器就可以表示一位二进制数。
如果把n个触发器串起来,就可以表示n位二进制数。
对于十进制计数器,它的10 个数码要求有10 个状态,要用4位二进制数来构成。
下图是由D触发器组成的4位异步二进制加法计数器。
三、实验台:四、布线:1、将芯片(1)的引脚4、10连到一起,2、将芯片(2)的引脚4、10连到一起,3、将芯片(1)的引脚10和芯片(2)的引脚10连到一起,4、将芯片(1)的引脚10连到+5V;5、将芯片(1)的引脚1、13连到一起,6、将芯片(2)的引脚1、13连到一起,7、将芯片(1)的引脚13和芯片(2)的引脚13连到一起,8、将芯片(1)的引脚13连到+5V;9、将芯片(1)的引脚3接到时钟信号CP10、将芯片(1)的引脚2、6接到一起,再将引脚2接到引脚1111、将芯片(1)的引脚8、12接到一起,再将芯片(1)的引脚8接到芯片(2)的引脚312、将芯片(2)的引脚2、6接到一起,再将引脚6接到引脚1113、将芯片(1)的引脚5、9分别接到Q0、Q1,再将芯片(2)的引脚5、9分别接到Q2、Q314、分别将两芯片的14脚接电源+5V,分别将两芯片的7脚接地0V。
五、验证:接通电源on,默认输出原始状态0000每输入一个CP信号(单击CP),的状态就会相应的变化,变化规律为0000(原始状态)、1000、0100、1100、0010、1010、0110、1110、0001、1001、0101、1101、0011、1011、0111、1111。
用VHDL语言实现的单稳态电路
-
此程序在Xilinx公司的FPGA器件Spartan—I上实现,所用软件环境为Xilinx公司的
ISE4.1,综合器为Synopsys公司的FPGAExpress 3.6,仿真工具是ModelSim SE 5.5e,其功
能仿真的波形图如图l所示。
从图1可以看出,此程序完全符合单稳态 电路的要求。由于在此例中计数器cnt的设定 值为7,因此输出端在被触发后的第8个elk上 升梧(因为cnt初始值是o)变为‘07,郎持续了 7个时钟周期。由此可见输出脉冲的脉宽精度
程序清单如下(程序2,此处省略了实体说明部分):
architecture Behv.RT of MST is
signal q.tf,cnt—tf:st&logic; signal cnt:std.109ic—vector(2 downto O); begin TRIGGER:process(clr,q-tt,tr)
2002中国控制与丧策学术年会论文集
用VHDL语言实现的单稳态电路
任盂阳,事景华
(东北大学信息科学与工程学院。辽宁沈阳110004)
摘要:舟绍一种用VHDL语言实现的单穗态电路的程序,培出了彝程序清单书程序的详细说 明,#岳又鳢出了实现可重触发功能的方法.井提供了相应曲琦能仿真波形。 关键词:VHDL语言f单稳态,可重触发;FPGA嚣停
。。
。
。
~。
clk—n r]r]r]r]r]n r]r r]
”l
几
0
clr l厂] . ’’。。。。。●‘。。-‘。。。。。。。●。。。。。。。。。。。。。1’1。。。‘-。。。。。。。一 q——乙一L一
很高,小于一个elk周期,即假设计数器ent的 设定值为n,elk周期为£,则输出端q的输出脉
计数器原理
计数器原理计数器是数字系统中用的较多的基本逻辑器件,它的基本功能是统计时钟脉冲的个数,即实现计数操作,它也可用与分频、定时、产生节拍脉冲和脉冲序列等。
例如,计算机中的时序发生器、分频器、指令计数器等都要使用计数器。
计数器的种类很多。
按构成计数器中的各触发器是否使用一个时钟脉冲源来分,可分为同步计数器和异步计数器;按进位体制的不同,可分为二进制计数器、十进制计数器和任意进制计数器;按计数过程中数字增减趋势的不同,可分为加法计数器、减法计数器和可逆计数器;还有可预制数和可编计数器等等。
1、 用D 触发器构成异步二进制加法/减法计数器图1 3位二进制异步加法器如上图1所示,是由3个上升沿触发的D 触发器组成的3位二进制异步加法器。
图中各个触发器的反相输出端与该触发器的D 输入端相连,就把D 触发器转换成为计数型触发器T 。
将上图加以少许改变后,即将低位触发器的Q 端与高一位的CP 端相连,就得到3位二进制异步减法器,如下所示:图2 3位二进制异步减法器2、异步集成计数器74LS9074LS90为中规模TTL 集成计数器,可实现二分频、五分频和十分频等功能,它由一个二进制计数器和一个五进制计数器构成。
其引脚排列图和功能表如下所示:图3 74LS90的引脚排列图表1 74LS90的功能表3、中规模十进制计数器74LS192(或CC40192)74LS192是同步十进制可逆计数器,它具有双时钟输入,并具有清除和置数等功能,其引脚排列及逻辑符号如下所示:图4 74LS192的引脚排列及逻辑符号(a )引脚排列 (b) 逻辑符号 图中:PL 为置数端,U CP 为加计数端,D CP 为减计数端,U TC 为非同步进位输出端, D TC 为非同步借位输出端,P0、P1、P2、P3为计数器输入端,MR 为清除端,Q0、Q1、Q2、Q3为数据输出端。
其功能表如下:表2 74LS192的功能表4、4位二进制同步计数器74LS161该计数器能同步并行预置数据,具有清零置数,计数和保持功能,具有进位输出端,可以串接计数器使用。
用VHDL语言描述和实现乘法累加器设计
设计应完成的功能要求:(1)乘法累加器的结构如下图所示,5位的被乘数X和5位的乘数Y输入后,暂存在寄存器5位的寄存器A和B中,寄存器A和B的输出首先相乘,得到10位乘积,该乘积通过选择信号sel的控制,可以和10位寄存器C的输出相加,相加结果保存在寄存器C中,实现乘法累加功能;也可以通过sel选择全零和乘积相加,实现乘法功能。
寄存器C的输出也是系统输出Z。
:用VHDL语言描述和实现乘法累加器设计(2)要求乘法器和加法器都采用电路描述,不采用算法描述。
(3)要求寄存器A,B,C具有异步清零功能,全部寄存器采用相同的时钟和清零信号。
(4)设计的最终输出是设计报告。
设计报告的内容要求:(1)设计报告的格式采用标准的深圳大学设计报告格式(2)设计报告应包括该电路的总体结构图和主要功能模块组成图;(3)设计报告应根据总体结构图,说明VHDL代码编写的设计思路和基本原理;(4)设计报告应完成该电路的VHDL代码设计;(5)设计报告应完成该电路的VHDL仿真分析。
一、实验目的用VHDL语言描述和实现乘法累加器设计二、实验内容和步骤一.总体结构图设计思路和原理:首先,寄存器A、B、C具有异步清零功能,rest在clk之前调用,当复位信号rest 为1时,寄存器A、B、C复位,当rest为0时,并且在它们同一时钟clk的上升沿到来时,输出将等于输入,起到了数据锁存功能。
同时,寄存器的输出Z既是整个结果的输出,也可以被内部引用,因此在定义Z的端口时,把端口类型定义为buffer。
5位的被乘数X和5位的乘数Y输入后,暂存在寄存器5位的寄存器A和B中,通过寄存器A、B的寄存,能够让不同时到达的数据X和Y能够在同一时钟的控制下同时参与运算,寄存器A和B的输出分别为x_temp和y_temp,他们首先相乘,得到10位乘积mul,该乘积通过选择信号sel的控制,当sel为1时,acc=z,即乘积mul可以和10位寄存器C的输出相加,相加结果保存在寄存器C中,实现乘法累加功能;当sel为0时,acc为全零,即选择全零和乘积相加,实现乘法功能。
用VHDL语言实现D触发器
1)D锁存器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY dff1 ISPORT ( clk, d: IN STD_LOGIC;q:OUT STD_LOGIC);END dff1;ARCHITECTURE rtl OF dff1 ISBEGINPROCESS(clk)BEGINIF(clk’EVENT AND clk=’1’) THENq<=d;END IF;END PROCESS;END rtl;2)非同步复位的D锁存器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY dff2 ISPORT ( clk, d, clr: IN STD_LOGIC;q:OUT STD_LOGIC);END dff2;ARCHITECTURE rtl OF dff2 ISBEGINPROCESS(clk, clr)BEGINIF(clr=’0’) THENq<=’0’;ELSIF(clk’EVENT AND clk=’1’) THENq<=d;END IF;END PROCESS;END rtl;3)非同步复位/置位D锁存器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY dff3 ISPORT ( clk, d, clr, pset: IN STD_LOGIC;q:OUT STD_LOGIC);END dff3;ARCHITECTURE rtl OF dff3 ISBEGINPROCESS(clk, pset, clr)BEGINIF(pset=’0’) THENq<=’1’;ELSIF(clr=’0’) THENq<=’0’;ELSIF(clk’EVENT AND clk=’1’) THENq<=d;END IF;END PROCESS;ENDrtl;4)同步复位的D锁存器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY dff4 ISPORT ( clk, clr, d:IN STD_LOGIC;q:OUT STD_LOGIC);END dff4;ARCHITECTURE rtl OF dff4 ISBEGINPROCESS(clk)BEGINIF(clk’EVENT AND clk=’1’) THENIF(clr=’1’) THENq<=’0’;ELSEq<=d;END IF;END IF;END PROCESS;END rtl;「答案要点」如何正确评价毛泽东和毛泽东思想,在当时是一个全局性的、紧迫的、至关重要的问题。
第5章 计数器VHDL描述
调整进制
PROCESS (clr,clk) BEGIN IF(clr=‗1‘) THEN Count_B<=―00000000‖; q <= ‗0‘; ELSIF (clk'EVENT AND clk = ‗1‘ ) THEN IF (Count_B = ―00001111‖) THEN Count_B<=―00000000‖; else Count_B<=count_B + 1;
END IF; END IF; END PROCESS;
一、基本计数器的设计
计数器是数字系统的一种基本部件,是典 型的时序电路。计数器的应用十分广泛, 常用于数/模转换、 计时、频率测量等。
加法计数器VHDL源程序:
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY countbasic IS PORT(clk:IN STD_LOGIC; q:BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0)); END countbasic; ARCHITECTURE a OF counbasict IS BEGIN
同步复位
PROCESS (clock) BEGIN if clock =‗1‘ and clock‘EVENT then if reset = ‗1‘ then sout <= ‗0‘; tmp <= ‗0‘; else sin sout <= sin; tmp tmp <= not tmp; clock reset end if; END IF; END PROCESS;
简单时序电路的VHDL描述
VHDL设计FPGA数字系统:计算器.docx
1.3文章小结
本章介绍这几世纪以来的计算器发展,还有本次设计的研究任务,为后续的设计打下基础。
第二章项目基础
2.1软件与硬件介绍
2.1.1 EDA
电子设计自动化(英语:Electronic design automation,缩写:EDA)即电子设计自动化技术,是利用计算机工作平台,从事电子系统和电路设计的一项技术[3]。
硬件描述语言HDL (Hardware Description Language )是一种用于设计硬件电子系统的计算机语言,它用软件编程的方式来描述电子系统的逻辑功能、电路结构和连接形式,与传统的门级描述方式相比,它更适合大规模系统的设计[4]。
2.1.2 EDA的特点及发展
现在人类社会已经步入了信息时代,各种各样的信息技术在我们的生活当中发挥着越来越重要的作用。信息时代的高速发展离不开电子设计技术的发展和相关电子产品的进步,而他们的核心就是EDA技术。
This design studied Digital System is composed of added and subtracted of module to complete, including the keyboard input module, decoding module, calculate the main control module and a digital tube display module. When the keyboard input signal passes through these modules, complete data display computing requirements. This calculation control system Math four computing module is the core.
下面程序是位十进制计数器的VHDL描述
下⾯程序是位⼗进制计数器的VHDL描述下⾯程序是1位⼗进制计数器的VHDL 描述,试补充完整。
2. 下⾯是⼀个多路选择器的VHDL 描述,充完整。
LIBR ARY IE EE;USE IEE E.STD_LOGI C_1164.AL L ; USE IEE E.S TD_LOGI C_U NSI GNE D .ALL ;ENTI TY CNT 10 IS PORT ( CLK : IN S TD_LOG IC ; Q : O UT STD _LO GIC _VE CTO R (3 D OWN TO 0)) ;END CNT 10;ARCH ITE CTU RE bhv OF CNT 10 I S SIGN AL Q1 : S TD_L OGI C_V ECT O R(3 DOW NTO 0); BEGI N PROC ESS (C LK) BEGI N IF C LK'EVE NT AND CLK = '1' THEN -- 边沿检测 IF Q 1 > 10 TH EN Q1 <= (OTH ERS => '0'); -- 置零 ELSE Q1 <= Q 1 + 1 ; -- 加1 END IF; END IF; END PROCES S ; Q <= Q1; END bhv ; 三、VHDL 程序改错仔细阅读下列程序,回答问题LIBRARY IE EE;-- 1USE IEE E.S TD_LOGI C_1164.AL L ; -- 2 ENTITY LED 7SE G IS -- 3 PORT ( A : I N S TD_LOG IC_VECT OR(3 D O WNTO 0); -- 4 CLK : I N S TD_LOG IC; -- 5 LED7S : OU T STD_L OGI C_V ECT O R(6 DOW NTO 0)); -- 6 END LED 7SE G; -- 7 ARCHITE CTU RE one OF LED 7SE G IS -- 8 SIGN AL TMP : STD_LOG IC; -- 9 BEGIN -- 10 SYNC : PRO CES S(CL K, A) -- 11 BEGI N -- 12 IF C LK'EVE NT AND CLK = '1' THEN -- 13 TMP <= A; -- 14 END IF; -- 15 END PRO CES S; -- 16 OUTL ED : P ROC ESS(TMP ) -- 17 BEGI N -- 18 CASE TMP I S -- 19 WHEN "0000" => L ED7S <= "0111111"; -- 20 WHEN "0001" => LED7S <= "0000110"; -- 21 WHEN "0010" => L ED7S <= "1011011"; -- 22 WHEN "0011" => L ED7S <= "1001111"; -- 23 WHEN "0100" => L ED7S <= "1100110";-- 24LIBR ARY IE EE;USE IEE E.S TD_LOGI C_1164.AL L ; ENTI TY bmu x I S PORT ( sel : I N S TD_LOGI C; A, B : INSTD_LOG IC_VEC TOR(7 D OWN TO 0); Y : OU TSTD_LOG IC_VEC TOR(7 D OWN TO 0)) ; END bmu x;ARCH ITE CTU RE bhv OF bmu x I S BEGI N y <= A whe n s el = '1' E LSE B ; END bhv ;WHEN "0101" => L ED7S <= "1101101"; -- 25WHEN "0110" => L ED7S <= "1111101"; -- 26WHEN "0111" => L ED7S <= "0000111"; -- 27WHEN "1000" => L ED7S <= "1111111"; -- 28WHEN "1001" => L ED7S <= "1101111"; -- 29END CASE; -- 30 END PRO CES S; -- 31 END one; -- 321.在程序中存在两处错误,试指出,并说明理由:第14⾏ T MP附值错误第29与30⾏之间,缺少WHEN OTH ER S语句2 修改相应⾏的程序:错误1⾏号:9程序改为:T MP : STD_LO GIC_V ECT O R(3 DOW NT O 0);错误2⾏号: 29 程序改为:该语句后添加 W HEN OTHER S => L ED7S <= "0000000";四、阅读下列VHDL程序,画出原理图(RTL级)LIBR ARY IE EE;USE IEE E.S TD_LOGI C_1164.AL L;ENTI TY HAD ISPORT ( a : IN STD_LO GIC;b : IN STD_LO GIC;c : OUT ST D_L OGIC;d : OUT ST D_L OGIC);END ENT ITY HA D;ARCH ITE CTU RE fh1 OF HAD ISBEGI Nc <= NOT(a NA ND b);d <= (a OR b)AND(a N AND b);END ARC HIT ECT URE fh1;五、请按题中要求写出相应VHDL程序1.带计数使能的异步复位计数器输⼊端⼝:clk 时钟信号rst 异步复位信号en 计数使能loa d 同步装载data(装载)数据输⼊,位宽为10输出端⼝:q 计数输出,位宽为10LIBRARY IE EE;USE IEEE.S TD_LOGI C_1164.AL L ; USE IEEE.S TD_LOGI C_U NSI GNE D .ALL ; ENTITY CNT 1024 IS PORT ( CLK, RS T, EN, LOA D : IN ST D_L OGI C; DATA : IN STD _LOG IC_VEC TOR (9 D OWN TO 0);Q : OUT ST D_L OGIC _VE CTO R (9 DOW NTO 0) );END CNT1024;ARCHITECTU RE ONE OF CNT 1024 IS BEGIN PROC ESS (C LK, RST , E N, LOA D , DA TA) VARI ABLE Q 1 : STD _LO GIC _VE C TOR (9 DOW NTO 0); BEGI NIF R ST = '1' THEN Q1 := (OTH ERS => '0'); ELSI F CLK = '1' A ND CLK 'EV E NT T HEN IF L OAD = '1' THE N Q1 := D ATA ; ELSEIF E N = '1' T HENQ1 := Q 1 + 1;END IF;END IF;END IF;Q <= Q1;END PRO CES S;END ONE;2 看下⾯原理图,写出相应VHDL 描述LIBRARY IE EE;USE IEEE.S TD_LOGI C_1164.AL L ; ENTITY TRI_ST ATE IS PORT ( E, A : IN STD _LOG IC; Y : INO UT STD _LOG IC;B : OUT ST D_L OGIC );END TRI_ST ATE;ARCHITECTU RE BEHA V O F T RI_S TATE IS BEGIN PROC ESS (E , A , Y)BEGINe ab yIF E = '0' TH EN B <= Y; Y <= 'Z '; ELSEB <= 'Z ';Y <= A;END IF;END PRO CES S;END BEHAV; 六、综合题下图是⼀个A /D 采集系统的部分,要求设计其中的FPG A 采集控制模块,该模块由三个部分构成:控制器(C ontrol )、地址计数器(a ddrc nt )、内嵌双⼝RA M (a dram )。
加法器、减法器的设计 VHDL
实验报告课程名称电子设计自动化实验(基于FPGA)实验项目加法器、减法器的设计实验仪器计算机+ Quartus Ⅱ9.1系别信息与通信工程学院专业通信工程班级/学号学生姓名实验日期2012、5成绩_______________________ 指导教师_______________________加法器、减法器的设计完成一个8位二进制带符号数的加减电路设计。
设计要求如下:通过拨码开关输入两组8位二进制数,最高位为符号位,0表示正数,1表示负数,其余位表示二进制数值。
用一按键对加、减方式进行控制,0表示加,1表示减。
输出用四位LED数码管显示BCD码。
其中LED显示器最高位为符号位。
VHDL代码LIBRARY IEEE;USE IEEE.std_logic_1164.all;USE IEEE.std_logic_arith.all;USE IEEE.std_logic_unsigned.all;ENTITY add ISPORT(a:in std_logic_vector(7 downto 0);b:in std_logic_vector(7 downto 0);ctrl:in std_logic;bcd:out std_logic_vector(15 downto 0));END ENTITY;ARCHITECTURE func OF add ISSIGNAL x:std_logic_vector(9 downto 0);SIGNAL y:std_logic_vector(9 downto 0);SIGNAL z:std_logic_vector(9 downto 0);SIGNAL c:std_logic_vector(8 downto 0);SIGNAL dec:integer;BEGINyunsuan:BLOCK --运算模块BEGINPROCESS(a)BEGINIF (a(7) = '0') THEN --判断正负x <= '0'&'0'&a;ELSEx(9 downto 8) <= '1'&'1';x(7 downto 0) <= NOT('0'&a(6 downto 0)) + 1;END IF;END PROCESS;PROCESS(a,ctrl)BEGINIF(ctrl = '0') THEN --控制键为0,则做加法IF(b(7) = '0') THENy <= '0'&'0'&b;ELSEy <= '1'&'1'&(NOT('0'&b(6 downto 0))+1);END IF;ELSEIF(b(7) = '1') THENy <= '0'&'0'&'0'&b(6 downto 0);ELSEy <= '1'&'1'&(NOT('0'&b(6 downto 0))+1);END IF;END IF;END PROCESS;PROCESS(a,b)BEGINIF(a(6 downto 0) = 0) THENz <= y;ELSE IF(b(6 downto 0) = 0) THENz <= x;ELSEz <= x + y;END IF;END IF;END PROCESS;PROCESS(z)BEGINIF(z(9) = '1') THEN --判断结果的正负c(7 downto 0) <= NOT z(7 downto 0) + 1;c(8) <= '1';ELSEc(8 downto 0) <= '0'&z(7 downto 0);END IF;END PROCESS;END BLOCK;bcdout:BLOCKBEGINdec <= CONV_INTEGER(c); --二进制转十进制PROCESS(c)BEGINCASE c(8) IS --判断最高位正负WHEN '0' => bcd(15 downto 12) <= "0000";WHEN '1' => bcd(15 downto 12) <= "0001";WHEN OTHERS => bcd(15 downto 12) <= NULL;END CASE;CASE dec/100 IS --判断百位数字WHEN 0 => bcd(11 downto 8) <= "0000";WHEN 1 => bcd(11 downto 8) <= "0001";WHEN OTHERS => bcd(11 downto 8) <= NULL;END CASE;CASE (dec REM 100)/10 ISWHEN 0 => bcd(7 downto 4) <= "0000";WHEN 1 => bcd(7 downto 4) <= "0001";WHEN 2 => bcd(7 downto 4) <= "0010";WHEN 3 => bcd(7 downto 4) <= "0011";WHEN 4 => bcd(7 downto 4) <= "0100";WHEN 5 => bcd(7 downto 4) <= "0101";WHEN 6 => bcd(7 downto 4) <= "0110";WHEN 7 => bcd(7 downto 4) <= "0111";WHEN 8 => bcd(7 downto 4) <= "1000";WHEN 9 => bcd(7 downto 4) <= "1001";WHEN OTHERS => bcd(7 downto 4) <= NULL;END CASE;CASE dec REM 10 ISWHEN 0 => bcd(3 downto 0) <= "0000";WHEN 1 => bcd(3 downto 0) <= "0001";WHEN 2 => bcd(3 downto 0) <= "0010";WHEN 3 => bcd(3 downto 0) <= "0011";WHEN 4 => bcd(3 downto 0) <= "0100";WHEN 5 => bcd(3 downto 0) <= "0101";WHEN 6 => bcd(3 downto 0) <= "0110";WHEN 7 => bcd(3 downto 0) <= "0111";WHEN 8 => bcd(3 downto 0) <= "1000";WHEN 9 => bcd(3 downto 0) <= "1001";WHEN OTHERS => bcd(3 downto 0) <= NULL;END CASE;END PROCESS;END BLOCK;END ARCHITECTURE;未下载验证、调试,如发现错误,见谅!——Higashi Q83831295。
基于D触发器的异步八进制加法计数器的设计
基于SIMULINK 的异步八进制加法计数器的设计1 设计题目的理论分析1.1 设计题目用D 触发器设计异步八进制的加法计数器。
并作出相应的时序图。
使用Simulink 进行简单的仿真。
1.2 理论分析这个题目是要求设计一个八进制加计数器,即三位二进制加计数器,并且用D 触发器最终完成电路。
解题具体过程如下: (1)明确所需要设计的电路的功能并画出状态图本题要求我们用D 触发器设计一个八进制加计数器,所以根据其特点,可判断电路需要三个D 触发器来实现,故可作出其状态图如下:CP 为时钟信号,C 为进位信号。
(2)列出激励表在列激励表时,对于某一输出,当其状态不发生反转时,此时可取其时钟信号为0,这样其输入端的的取值就不会对输出产生影响,这样一来,就可以达到简−→−0/1−→−1/1−−→−CCP /QQ Q 012100101110111011010*******/10/10/10/1010/1−−←−−←−−←−→−−→−−→−/化电路的目的。
表1 八进制异步加计数器激励表Q n 2Q n 1Q n 0D 2CP 2D 1CP 1D 0 CP 0Qn 12+Q n 11+Q n 10+0 0 0 X 0 X 0 1 1 0 0 1 0 0 1 X 0 1 1 0 1 0 1 0 0 1 0 X 0 X 0 1 1 0 1 1 0 1 1 1 1 0 1 0 1 1 0 0 1 0 0 X 0 X 0 1 1 1 0 1 1 0 1 X 0 1 1 0 1 1 1 0 1 1 0 X 0 X 0 1 1 1 1 1 111111(3)写出激励方程和时钟方程2)6,5,4,2,1,0()3(___2Q D d m =+=∑∑ (1)1)6,4,2,0()5,1(___1Q D d m =+=∑∑ (2)()0___06,4,2,0QD m ==∑ (3)Q Q CP 012= (4) QCP 01= (5) CPCP =0(6)(4)作出逻辑电路图并检验其自启动如图2所示,即为由D 触发器所构成的异步八进制加计数器。
利用D触发器构成计数器-d触发器 计数器
数字电路实验设计:D触发器组成的4位异步二进制加法计数器一、选用芯片74LS74,管脚图如下:说明:74LS74是上升沿触发的双D触发器, D触发器的特性方程为二、设计方案:用触发器组成计数器。
触发器具有0 和1两种状态,因此用一个触发器就可以表示一位二进制数。
如果把n个触发器串起来,就可以表示n位二进制数。
对于十进制计数器,它的10 个数码要求有10 个状态,要用4位二进制数来构成。
下图是由D触发器组成的4位异步二进制加法计数器。
三、实验台:四、布线:1、将芯片(1)的引脚4、10连到一起,2、将芯片(2)的引脚4、10连到一起,3、将芯片(1)的引脚10和芯片(2)的引脚10连到一起,4、将芯片(1)的引脚10连到+5V;5、将芯片(1)的引脚1、13连到一起,6、将芯片(2)的引脚1、13连到一起,7、将芯片(1)的引脚13和芯片(2)的引脚13连到一起,8、将芯片(1)的引脚13连到+5V;9、将芯片(1)的引脚3接到时钟信号CP10、将芯片(1)的引脚2、6接到一起,再将引脚2接到引脚1111、将芯片(1)的引脚8、12接到一起,再将芯片(1)的引脚8接到芯片(2)的引脚312、将芯片(2)的引脚2、6接到一起,再将引脚6接到引脚1113、将芯片(1)的引脚5、9分别接到Q0、Q1,再将芯片(2)的引脚5、9分别接到Q2、Q314、分别将两芯片的14脚接电源+5V,分别将两芯片的7脚接地0V。
五、验证:接通电源on,默认输出原始状态0000每输入一个CP信号(单击CP),的状态就会相应的变化,变化规律为0000(原始状态)、1000、0100、1100、0010、1010、0110、1110、0001、1001、0101、1101、0011、1011、0111、1111。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
n个边沿D触发器实现任意进制加法减法计数器的VHDL描述.txt只要你要,只要我有,你还外边转什么阿老实在我身边待着就行了。
听我的就是,问那么多干嘛,我在你身边,你还走错路!跟着我!不能给你幸福是我的错,但谁让你不幸福,我TMD去砍了他n个边沿D触发器实现任意进制加法/减法计数器的VHDL描述
-- 用VHDL采用行为方式描述计数器十分简单,别人(公司招聘等)考你一般不是直接叫你用VHDL写个多少进制的计数器(没有难度),
-- 而是叫你用什么什么器(D触发器、数据选择器等等)来实现,当然是编程,不是画图。
-- 下面是我刚写的一个用4个D触发器可实现1-16任意进制的加法计数器。
另外,修改一下非最低位触发方式即可实现减法计数器。
-- 从附件图中的综合结果可清楚看到计数器由D触发器构成。
-- October 12 2008, designed by thh.
-- Shenzhen University.
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity counter is
port( cp : in std_logic;
qq : out std_logic_vector(3 downto 0)
);
end;
architecture one of counter is
signal d : std_logic_vector(3 downto 0);
signal reset : std_logic; -- 对输出清零,实现不同进制计数begin
qq<=d;
process(cp) -- 触发器d(0) 第0位(最低位)及控制逻辑 begin
if rising_edge(cp) then
d(0)<=not d(0); -- 不能放进下面的 if里面,否则计数不能启动
if d="0110" then -- 修改这里 d 的值即可实现 1至16 之间任何进制计数
reset<='1';
d(0)<='0'; -- 须在这里加上这一句,否则偶数进制计数时没有0出现
else
reset<='0';
end if;
end if;
end process;
process(d(0)) -- 触发器d(1) 第1位
begin
if reset='1' then
d(1)<='0';
else
if (d(0)'event and d(0)='0') then -- 只要将“d(i)'event and d(i)='0' ”中的d(i)='0'改成d(i)='1',
d(1)<=not d(1); -- 变成上升沿触发下一级变化,即变成减法计数器。
end if;
end if;
end process;
process(d(1)) -- 触发器d(2) 第2位
begin
if reset='1' then
d(2)<='0';
else
if (d(1)'event and d(1)='0') then
d(2)<=not d(2);
end if;
end if;
end process;
process(d(2)) --- 触发器d(3) 第3位(最高位)
begin
if reset='1' then
d(3)<='0';
else
if (d(2)'event and d(2)='0') then
d(3)<=not d(3);
end if;
end if;
end process;
end;。