用VHDL语言设计延时电路

合集下载

缓冲器电路的VHDL示例程序

缓冲器电路的VHDL示例程序

【例5-24】实现74245形式的双向总线缓冲器电路的VHDL示例程序。

(P169)LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ;ENTITY double_buffer_74245 ISPORT ( oe, dir : IN STD_LOGIC ;dataA, dataB : INOUT STD_LOGIC_VECTOR ( 7 DOWNTO 0 ) ) ;END ENTITY double_buffer_74245 ;ARCHITECTURE behavioral OF double_buffer_74245 ISSIGNAL outA, outB : STD_LOGIC_VECTOR ( 7 DOWNTO 0 ) ;BEGINinstA_74245 : PROCESS ( oe, dir, dataA ) -- 数据从A流向BBEGINIF ( ( oe = '0' ) AND ( dir = '1' ) ) THEN-- 输出使能信号oe是低电平有效的outB <= dataA ;ELSEoutB <= "ZZZZZZZZ" ;END IF ;dataB <= outB ;END PROCESS instA_74245 ;instB_74245 : PROCESS ( oe, dir, dataB ) -- 数据从B流向ABEGINIF ( ( oe = '0' ) AND ( dir = '0' ) ) THEN-- 输出使能信号oe是低电平有效的outA <= dataB ;ELSEoutA <= "ZZZZZZZZ" ;END IF ;dataA <= outA ;END PROCESS instB_74245 ;END ARCHITECTURE behavioral ;【例5-25】半加器电路的VHDL示例程序。

实验五_ALU的VHDL设计

实验五_ALU的VHDL设计

实验五ALU的VHDL设计完成如表所示ALU的VHDL设计控制信号S 运算000算术运算A+B;A+B+1001 A-B ;A-B-1 010 A;A+1 011 A;A-1100逻辑运算AB101 A+B110 A⊕B111Alibrary ieee; ------库程序包调用use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity alu4 is ------实体:电路外观配置port( a:in unsigned(3 downto 0);b:in unsigned(3 downto 0);cin:in std_logic;s:in std_logic_vector(2 downto 0);bcdout:out std_logic_vector(3 downto 0);cout: out std_logic);end alu4;architecture arch of alu4 is ------结构体:电路功能描述signal c:std_logic_vector(3 downto 0);signal q:unsigned(3 downto 0);beginprocess(s)begincase s iswhen "000"=> ------加法:A+B ;A+B+1q(0)<=a(0)xor b(0)xor cin;c(0)<=(a(0) and b(0))or (b(0)and cin)or (a(0)and cin);gen1:for i in 1 to 3 loopq(i)<=a(i)xor b(i)xor c(i-1);c(i)<=( a(i) and b(i))or (b(i)and c(i-1))or (a(i)and c(i-1));end loop;bcdout<=q(3)&q(2)&q(1)&q(0);cout<=c(3);when "001"=> ------减法:A-B ;A-B-1q(0)<=a(0)xor b(0)xor cin;c(0)<=(not a(0) and b(0))or (b(0)and cin)or (not a(0)and cin);gen2:for i in 1 to 3 loopq(i)<=a(i)xor b(i)xor c(i-1);c(i)<=(not a(i) and b(i))or (b(i)and c(i-1))or (not a(i)and c(i-1));end loop;bcdout<=q(3)&q(2)&q(1)&q(0);cout<=c(3);when "010"=>if cin='0'thenbcdout<=a(3)&a(2)&a(1)&a(0); --传递进位Cin=0 elsebcdout<=a+1; --执行a+1end if;cout<='0';when "011"=>if cin='0'thenbcdout<=a(3)&a(2)&a(1)&a(0);--传递借位Cin=0 elsebcdout<=a-1; --执行a-1end if;cout<='0';when "100"=> --逻辑与:ABq(3)<=a(3)and b(3);q(2)<=a(2)and b(2);q(1)<=a(1)and b(1);q(0)<=a(0)and b(0);bcdout<=q(3)&q(2)&q(1)&q(0);when "101"=> --逻辑或:A+Bq(3)<=a(3)or b(3);q(2)<=a(2)or b(2);q(1)<=a(1)or b(1);q(0)<=a(0)or b(0);bcdout<=q(3)&q(2)&q(1)&q(0);when "110"=> --异或:A⊕Bq(3)<=a(3)xor b(3);q(2)<=a(2)xor b(2);q(1)<=a(1)xor b(1);q(0)<=a(0)xor b(0);bcdout<=q(3)&q(2)&q(1)&q(0);when others=> --逻辑非:Abcdout<=not a(3)& not a(2)& not a(1)& not a(0);cout<='0';end case;end process;end arch;1、波形仿真分析时间控制信号S 进位C 运算(A=6,B=B) 结果bcdout 0—30ns 000 0 A+B(算术加)0001即1 30—60ns 001 1 A-B-1 1010 即A 60—90ns 010 0 A 0110 即6 90—120ns 011 1 A-1 0101 即5 120—150ns 100 x AB 0010 即2 150—180ns 101 x A+B(逻辑或)1111 即F 180—210ns 110 x A⊕B 1101 即D 210—240ns 111 xA1001 即9 2、延时仿真分析每对连接的节点输入信号(source)和输出信号(destination)之间最小/最大传播延迟。

VHDL语言的时序电路设计

VHDL语言的时序电路设计

VHDL语言的时序电路设计-----设计一个可逆计数译码显示电路一、实验目的掌握VHDL设计的基本方法,进一步熟悉MAX+PLUSII的使用。

二、实验内容1、具有清除端、使能端,计数范围为0—9的可逆计数器设计。

输出为8421BCD码。

2、8421BCD码—七段LED译码显示电路设计。

三、实验条件(1)电脑。

(2)开发软件:MAX+PLUSII。

(3)实验设备:EL—EDA—V型、EDA实验开发系统。

(4)拟用芯片:ACEX1K:EP1K100QC208-3。

四、实验要求1、用VHDL设计上述两个电路,用元件例化的方式实现顶层设计。

2、完成功能仿真和时序仿真。

3、对设计结果进行下载和硬件测试。

提示:设计可以采用自顶向下的设计方法或自底向上的设计方法。

一般采用自顶向下的设计方法,即先对顶层进行系统结构描述,再组建底层设计。

五、实验步骤1、用元件例化的方式实现顶层设计;2、设计具有异步清除端、同步使能端,计数范围为0—9的十进制可逆计数器;3、设计8421BCD码/七段LED的显示译码器。

六、实验设计(1)可逆计数、译码及显示电路的VHDL语言程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;------entity count10_top isport(CLR,EN,UP,CLK: in STD_LOGIC;LED7S: OUT STD_LOGIC_VECTOR(6 DOWNTO 0);CO,BO: OUT STD_LOGIC);end count10_top;-------architecture a of count10_top iscomponent count10port( CLR,EN,UP,CLK: in STD_LOGIC;Q: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);CO,BO: OUT STD_LOGIC );end component;component DEC7Sport(A: in STD_LOGIC_VECTOR(3 DOWNTO 0);LED7S: OUT STD_LOGIC_VECTOR(6 DOWNTO 0));end component;SIGNAL D: STD_LOGIC_VECTOR(3 DOWNTO 0);beginU1:count10 PORT MAP (CLR,EN,UP,CLK,D,CO,BO);U2:DEC7S PORT MAP (D,LED7S);end a;----LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;entity count10 isport(CLR,EN,UP,CLK: in STD_LOGIC;Q: BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0);CO,BO: OUT STD_LOGIC);end count10;-----architecture b of count10 isbeginProcess(CLR,EN,UP,CLK)beginIF CLR='0' THENQ<="0000";ELSIF CLK'EVENT AND CLK='1' THENIF EN='1' THENIF UP='1' THENIF Q=9 THENQ<="0000";ELSEQ<=Q+1;END IF;ELSEIF Q=0 THENQ<="1001";ELSEQ<=Q-1;END IF;END IF;END IF;END IF;END Process;CO<='1' when Q=9 ELSE'0';BO<='1' when Q=0 ELSE'0';end b;-----LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;entity DEC7S isPORT(A:IN BIT_VECTOR(3 DOWNTO 0);LED7S:OUT BIT_VECTOR(6 DOWNTO 0)); END DEC7S;ARCHITECTURE one OF DEC7S ISBEGINPROCESS(A)BEGINCASE A(3 DOWNTO 0) ISWHEN "0000"=>LED7S<="0111111";WHEN "0001"=>LED7S<="0000110";WHEN "0010"=>LED7S<="1011011";WHEN "0011"=>LED7S<="1001111";WHEN "0100"=>LED7S<="1100110";WHEN "0101"=>LED7S<="1101101";WHEN "0110"=>LED7S<="1111101";WHEN "0111"=>LED7S<="0000111";WHEN "1000"=>LED7S<="1111111";WHEN "1001"=>LED7S<="1101111";WHEN OTHERS=>NULL;END CASE;END PROCESS;END one;(2)仿真波形(1)系统仿真情况系统功能仿真结果与时序仿真结果分别如图1、图2所示:图1、系统功能仿真结果图2、系统时序仿真结果从系统仿真结果可以看出,本系统完全符合设计要求。

基本时序电路设计(使用VHDL语言)

基本时序电路设计(使用VHDL语言)

实验报告一、实验目的熟悉利用QuartusⅡ的VHDL文本设计流程,学习基本时序电路的设计、多层次电路设计、编译及仿真全过程。

二、实验内容1.设计含异步清零和同步时钟使能的加法计数器。

(1)代码:(2)仿真波形仿真结果分析:clr为清零端,当clr=‘0’时,计数清零;enb为使能端,当enb=‘1’时,允许计数,enb=‘0’时,禁止计数;cout为输出端,计数范围为0~15。

实验内容(6)(1)原理图:(2)仿真波形2.设计7段数码显示译码器。

(1)代码:(2)仿真波形仿真结果分析:七段显示管中的七段分别对应的是O[6]~O[0],当输入为0时,显示0(01111111),十六进制为3F;当输入为1时,显示1(0000110),十六进制为06,一次类推.实验内容3:(1)代码:(2)计数器和译码器连接电路的顶层文件原理图(2)仿真波形仿真结果分析:该原理图的工作原理跟七段显示管的工作原理是一样的(上一题),只是它又引入了一个4位二进制计数器(包括使能端),让所设计的原理图能自动计数并且显示出来。

3.设计数控分频器。

(1)代码:(2)仿真波形实验仿真分析:当在输入端LOAD给定不同输入数据时,将对输入的时钟信号有不同的分频比.三、实验环境计算机、QuartusII软件四、实验结果与讨论1、从实验的仿真波形分析可知,每个程序都可以满足相对的功能条件,与理论结果一致.2、在设置数控分频器时,我只设置4位的,但如果想得到八位的或更高的只要稍微修改里面的参数即可。

六、总结(1)在设计计数器和译码器的连接电路时,一开始忘记cout=‘0’,导致输出cout都没变化,后面根据仿真波形才发现自己的错误。

(2)设计数控分频器,由于对数控分频器原理理解不够透彻,导致了花的时间比较多,不然前面的实验都能在比较快的时间内完成。

基于VHDL的IIC时序电路设计

基于VHDL的IIC时序电路设计

基于VHDL的IIC时序电路设计iic 总线在设计时要看你所使用的器件的传输或接收时序只要会一个,其他的都一样以下是我在一本书上看到的,你看看就会用了library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity reciver isport(reset,clk:in std_logic;sda,scl:inout std_logic;rd:out std_logic;tdata:in std_logic_vector(7 downto 0);rdata:out std_logic_vector(7 downto 0));end reciver;architecture one of reciver issignal rdatai:std_logic_vector(7 downto 0);type state is (start,transmit,ack,sub,ack1,start1,slave,ack2,reading,ack3); signal current:state;beginprocess(clk,reset)variable count:integer range 0 to 40;variable cnt:integer range 0 to 8;beginif reset='1'thensda<='1';scl<='1';rdata<="00000000";current<=start;cnt:=8;count:=0;elsif clk'event and clk='1' thencase current iswhen start=>count:=count+1;case count iswhen 1=>sda<='1';when 2=>scl<='1';when 3=>sda<='0';when 4=>scl<='0';when 10=>count:=0;current<=transmit;end case;when transmit=>count:=count+1;case count iswhen 1=>sda<=tdata(cnt);when 2=>scl<='1';when 3=>scl<='0';when 4=>cnt:=cnt-1;count:=0;if cnt=0 then cnt:=8;current<=ack;rd<='1'; else current<=transmit;rd<='0';end if;when others=>null;end case;when ack=>count:=count+1;case count iswhen 1=>sda<='0';when 2=>scl<='1';when 3=>scl<='0';when 4=>current<=sub;count:=0;when others=>null;end case;when sub=>count:=count+1;case count iswhen 1=>sda<=tdata(cnt);when 2=>scl<='1';when 3=>scl<='0';when 4=>cnt:=cnt-1;count:=0;if cnt=0 then cnt:=8;current<=ack1;rd<='1'; else current<=sub;rd<='0';end if;when others=>null;end case;when ack1=>count:=count+1;case count iswhen 1=>sda<='0';when 2=>scl<='1';when 4=>current<=start1;count:=0;when others=>null;end case;when start1=>count:=count+1;case count iswhen 1=>sda<='1';when 2=>scl<='1';when 3=>sda<='0';when 4=>scl<='0';when 5=>current<=slave;count:=0;when others=>null;end case;when slave=>count:=count+1;case count iswhen 1=>sda<=tdata(cnt);when 2=>scl<='1';when 3=>scl<='0';when 4=>cnt:=cnt-1;count:=0;if cnt=0 then cnt:=8;current<=ack2;rd<='1'; else current<=sub;rd<='0';end if;when others=>null;end case;when ack2=>count:=count+1;case count iswhen 1=>sda<='0';when 2=>scl<='1';when 3=>scl<='0';when 4=>current<=reading;count:=0;when others=>null;end case;when reading=>count:=count+1;case count iswhen 1=>sda<='1';when 4=>scl<='1';when 8=>rdatai(cnt)<=sda;when 10=>scl<='0';when 12=>cnt:=cnt-1;count:=0;if cnt=0 then cnt:=8;current<=ack3;rd<='1';else current<=reading;rd<='0';end if;when others=>null;end case;when ack3=>count:=count+1;case count iswhen 1=>sda<='0';when 2=>scl<='1';when 3=>scl<='0';when 4=>rdata<=rdatai;current<=start;count:=0;when others=>null;end case;end case;end if;end process;end architecture;TOP↑。

用VHDL语言设计延时电路

用VHDL语言设计延时电路

用VHDL语言设计延时电路
用VHDL语言设计延时电路时一般用计数器或计数器的级联来实现。

下面以一个实例来说明如何实现任意时间量的延时。

在5 MHz时钟CLK控制下对同步信号SYNC进行N延时(SYNC脉冲宽度为2 μs,脉冲重复频率为1 kHz;0μs≤N≤998 μs)。

要求每次在同步脉冲上升沿到来时开始延时,并在延时结束后产生宽度为10 μs的选通信号。

需要产生的延时时序如图2所示(延时量N=4.2μs)。

这里采用3个计数器和1个或门产生上述延时信号,如图3所示,模N计数器计延时量;模50计数器计选通信号的宽度;模N+50计数器用于产生使能信号。

用VHDL硬件描述语言进行硬件电路设计时,同一个进程中不能用2个时钟来触发,而时序图中又要求在同步脉冲SYNC的上升沿开始延时,为了解决这一问题,采用了模N+50计数器和1个或门。

当同步脉冲为高电平时,模N计数器和模N+50计数器开始计数,并置dly_en为高电平。

模N计数器满,置dly_enl为高电平同时产生选通信号。

当模N+50计数器计满即选通信号产生完之后置dly_en为低电平。

当下一个同步脉冲到来时重复以上过程。

这种设计电路的好处是当同步脉冲的宽度改变时对时序控制并无影响,因为在计数过程中只用了SYNC的上升沿,从延时开始到选通信号结束,在或门的作用下SYNC对计数器不起控制作用。

上述电路的VHDL程序如下:
该程序选择N=20,即延时量是4.2 μs,由于要使用时钟来判断SYNC的上升沿情况,因此,如果令N=0,产生的delay信号仍然会有1个时钟的固有延时,在计算延时量时应充分考虑到这一点,延时量=(N+1)×时钟周期。

基于CPLD的PWM控制电路设计说明

基于CPLD的PWM控制电路设计说明
一种基于 CPLD 的 PWM 控制电路设计
2008 年 08 月 04 日
社区交流
介绍了利用硬件描述语言 VHDL 设计的一种基于 CPLD 的 PWM 控制电路,该PWM控制电路具有 PWM 开关频率可调,同侧2路信号互锁、延时时间可调、接口简单等特点,可应用于现代直流伺服 系统。
在直流伺服控制系统中,通过专用集成芯片或中小规模的数字集成电路构成的传 统 PWM 控制电路往往存在电路设计复杂,体积大,抗干扰能力差以及设计困难、设计周 期长等缺点 因此 PWM 控制电路的模块化、集成化已成为发展趋势.它不仅可以使系统 体积减小、重量减轻且功耗降低,同时可使系统的可靠性大大提高.随着电子技术的发 展,特别是专用集成电路(ASIC)设计技术的日趋完善,数字化的电子自动化设计(EDA) 工具给电子设计带来了巨大变革,尤其是硬件描述语言的出现,解决了传统电路原理图 设计系统工程的诸多不便.针对以上情况,本文给出一种基于复杂可编程逻辑器件(CPL D)的 PWM 控制电路设计和它的仿真波形. 1 PWM 控制电路基本原理
‘0'; Q<=Qs; cao<=reset or caolock; end a_counter;
在原理图中,延迟模块必不可少,其功能是对 PWM 波形的上升沿进行延时,而不影响 下降沿,从而确保桥路同侧不会发生短路.其模块的 VHDL 程序如下:
entity delay is port(clk: in std_logic; input: in std_logic_vector(1 downto 0); output:out std_logic_vector(1 downto 0) end delay; architecture a_delay of delay is

VHDL设计带报警的59分钟定时器

VHDL设计带报警的59分钟定时器

VHDL实验设计学院(系):信息工程学院专业班级:信研A1101班带报警59分钟定时器的VHDL设计一.系统设计功能概述1.系统设计任务任务要求:系统以秒速度递增至59分钟后,启动报警1秒钟,置位后又以秒速度递减至零并报警1秒钟。

2.系统功能概述本系统是一个59分钟的定时器,具有以下功能:具有整体清零(reset)功能,定时59分钟。

以秒速度递增至59分钟停止,启动报警(cou5)1秒钟。

具有置位(cn)控制,即cn高电平时,clk脉冲上升沿到来,计数加一;cn低电平时,置位结束,进入倒计时阶段,以秒速度使输出计数减一至零结束,并同时报警(cou5)1秒钟。

时钟信号提供秒信号(1HZ);四位数码管静态显示,分钟数和秒钟数的个位和十位都各由一个数码管显示。

二.系统设计方案和程序设计1.系统设计方案2.VHDL程序设计本系统包括5个模块,分别是控制计数aaa模块、分频器frequency模块、报警cou5模块、数码管显示disp模块、译码器 yimaqi模块。

2.1控制计数aaa模块控制计数aaa模块,是该定时器的核心部分。

res为复位端,用来清零,采用异步复位方式,低电平时执行复位;cn用于置位,高电平有效。

cout端将在定时结束时产生高电平。

当cn有效时,clk脉冲上升沿到来,计数加1;当cn为低电平时,置位结束,进入倒计时阶段,每1个时钟周期发出一个脉冲,使输出记数减1,直到记时结束,令cout位为高电平为止。

输出中fhigh[3..0]、flow[3..0]、mhigh[3..0]、mlow[3..0]分别表示分钟和秒钟的高四位和低四位的BCD码。

程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity aaa isport (cn,res,clk:in std_logic;cout :out std_logic;flow,fhigh,mlow,mhigh:out std_logic_vector(3 downto 0));end aaa;architecture art of aaa issignal fdisplow,fdisphigh,mdisplow,mdisphigh:std_logic_vector(3 downto 0);--定义信号分别表示分钟和秒钟的十位和个位beginprocess(clk,cn,res)beginif(res='0')thenmdisplow<="0000";mdisphigh<="0000";fdisplow<="0000";fdisphigh<="0000";cout<='0'; --res低电平执行复位elsif (clk'event and clk='1')thenif cn='1'thenif mdisplow<9 thenmdisplow<=mdisplow+1;--秒钟个位数小于9时执行计数加1cout<='0';elsif mdisplow="1001" and mdisphigh<5 thenmdisplow<="0000";mdisphigh<=mdisphigh+1;--秒钟十位进位加1elsif mdisphigh="0101" and fdisplow<9 thenmdisplow<="0000";mdisphigh<="0000";fdisplow<=fdisplow+1;--满59秒后分钟个位加1elsif fdisplow="1001" and fdisphigh<5 thenmdisplow<="0000";mdisphigh<="0000";fdisplow<="0000";fdisphigh<=fdisphigh+1;--满9分59秒后分钟十位加1elsif fdisplow="1000" and fdisphigh="0101" thenmdisplow<="0000";mdisphigh<="0000";fdisplow<="0101";--计时至59分停止elsif fdisplow="1001" and fdisphigh="0101" thencout<='1';--计时停止cout变为高电平end if;elsif cn='0' thenif mdisplow>0 thenmdisplow<=mdisplow-1;--秒钟减1cout<='0';elsif mdisplow="0000" and mdisphigh>0 thenmdisplow<="1001";mdisphigh<=mdisphigh-1;--个位0时十位减1elsif mdisphigh="0000" and fdisplow>0 thenmdisplow<="1001";mdisphigh<="0101";fdisplow<=fdisplow-1;--分减1elsif fdisplow="0000" and fdisphigh>0 thenmdisplow<="1001";mdisphigh<="0101";fdisplow<="1001";fdisphigh<=fdisphigh-1;--分减10elsif fdisphigh="0000"and fdisplow="0000"and mdisphigh="0000"and mdisplow="0000"thencout<='1';--倒计时结束cout变为高电平end if;end if;end if;end process;mhigh<=mdisphigh;mlow<=mdisplow;fhigh<=fdisphigh;flow<=fdisplow;end art;2.2分频器frequency模块分频器frequency模块有一个输入,三个输出,CLK是系统的时钟,接芯片的16脚,三个输出分别是cout1、cout2、cout3分别给控制计数aaa模块、报警cou5模块、译码器yimaqi模块的三个时钟输入提供相应的时钟信号,电路箱中芯片的时钟是20MHZ,因此对于不同的模块所需要的不同的时钟频率我们必须采用分频器来操作。

VHDL_fpga_数电实验_彩灯_LED_实验报告

VHDL_fpga_数电实验_彩灯_LED_实验报告

彩灯VHDL设计在日常生活中,为了增加聚会或是过节氛围,经常要使用到彩灯循环点亮。

单一的循环可能无法起到理想的效果,通过不同花样的变换则能够很好的完成任务。

多路彩灯循环控制可以有多种实现方法,例如利用单片机可以实现,利用数字电路时序逻辑也可以实现。

我们这里利用VHDL语言实现对多路彩灯的控制。

彩灯的一种点亮方式经过足够长的延时后,转变为了其他的点亮方式。

这就需要一个CLK信号完成,CLK信号可以由晶体振荡器或者是振荡电路产生。

至于各种不同花样彩灯的变换,我们可以通过增加输入信号Sel来控制。

Sel为两位二进制数,分别为00,01,10,11,四种状态对应四种花样。

同时系统还需一个复位信号实现对电路的清零控制。

输出八位彩灯,我们这里用LED发光二极管代替。

当电路输出为“1”时,LED点亮。

当电路输出为“0”时,LED熄灭。

利用VHDL语言实现该功能程序如下:LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;USE IEEE.std_logic_ARITH.ALL;USE IEEE.std_logic_UNSIGNED.ALL;ENTITY cd ISport( clk,clk_use:in std_logic;rst:in std_logic;light:out std_logic_vector(7 downto 0));END cd;ARCHITECTURE control OF cd IStype states is (s0,s1,s2,s3,s4,s5);signal state:states;SIGNAL clk1ms:std_logic:='0';SIGNAL cnt1:std_logic_vector(3 downto 0):="0000";SIGNAL cnt2:std_logic_vector(3 downto 0):="0000";SIGNAL cnt3:std_logic_vector(2 downto 0):="000";SIGNAL cnt4:std_logic_vector(2 downto 0):="000";SIGNAL cnt5:std_logic_vector(3 downto 0):="0000";SIGNAL cnt6:std_logic_vector(3 downto 0):="0000";BEGINPROCESS(clk1ms)BEGINif clk1ms'event and clk1ms='1' thenif state=s0 then --第一种彩灯花样的程序if (cnt1="1111") thencnt1<="0000";else cnt1<= cnt1+1;end if;case cnt1 iswhen "0000"=>light<="10000000";when "0001"=>light<="10100000";when "0010"=>light<="10101000"; when "0011"=>light<="10101010"; when "0100"=>light<="11101010"; when "0101"=>light<="11111010"; when "0110"=>light<="11111110"; when "0111"=>light<="11111111"; when "1000"=>light<="11111110"; when "1001"=>light<="11111010"; when "1010"=>light<="11101010"; when "1011"=>light<="10101010"; when "1100"=>light<="10101000"; when "1101"=>light<="10100000"; when "1110"=>light<="10000000"; when others=>light<="00000000";end case;elsif state=s1 then -- 第二种彩灯花样的程序if cnt2="1111" thenCnt2<="0000";else cnt2<= cnt2+1;end if;case cnt2 iswhen "0000"=>light<="11111111"; when "0001"=>light<="01111111"; when "0010"=>light<="00111111"; when "0011"=>light<="00011111"; when "0100"=>light<="00001111"; when "0101"=>light<="00000111"; when "0110"=>light<="00000011"; when "0111"=>light<="00000001"; when "1000"=>light<="00000011"; when "1001"=>light<="00000111"; when "1010"=>light<="00001111"; when "1011"=>light<="00011111"; when "1100"=>light<="00111111"; when "1101"=>light<="01111111"; when "1110"=>light<="11111111"; when others=>light<="00000000";end case;elsif state=s2 then -- 第三种彩灯花样的程序if cnt3="100" thenCnt3<="000";else cnt3<= cnt3+1;end if;case cnt3 iswhen "000"=>light<="10000001"; when "001"=>light<="11000011"; when "010"=>light<="11100111"; when "011"=>light<="11111111"; when others=>light<="00000000";end case;elsif state=s3 then -- 第四种彩灯花样的程序if cnt4="100" thencnt4<="000";else cnt4<= cnt4+1;end if;case cnt4 iswhen "000"=>light<="00011000"; when "001"=>light<="00111100"; when "010"=>light<="01111110"; when "011"=>light<="11111111"; when others=>light<="00000000";end case;elsif state=s4 then --第五种彩灯花样的程序if cnt5="1111" thenCnt5<="0000";else cnt5<=cnt5+1;end if;case cnt5 iswhen "0000"=>light<="11000000"; when "0001"=>light<="01100000"; when "0010"=>light<="00110000"; when "0011"=>light<="00011000"; when "0100"=>light<="00001100"; when "0101"=>light<="00000110"; when "0110"=>light<="00000011"; when "0111"=>light<="00000110"; when "1000"=>light<="00001100"; when "1001"=>light<="00011000"; when "1010"=>light<="00110000"; when "1011"=>light<="01100000"; when "1100"=>light<="11000000"; when others=>light<="00000000";end case;elsif state=s5 then -- 第六种彩灯花样的程序if cnt6="1111" thenCnt6<="0000";else cnt6<=cnt6+1;end if;case cnt6 iswhen "0000"=>light<="00000011"; when "0001"=>light<="00000110"; when "0010"=>light<="00001100"; when "0011"=>light<="00011000"; when "0100"=>light<="00110000"; when "0101"=>light<="01100000"; when "0110"=>light<="11000000"; when "0111"=>light<="01100000"; when "1000"=>light<="00110000"; when "1001"=>light<="00011000"; when "1010"=>light<="00001100"; when "1011"=>light<="00000110"; when "1100"=>light<="00000011"; when others=>light<="00000000";end case;end if;end if;END PROCESS P1;P2:PROCESS(clk) --分频进程variable cnt:integer range 0 to 10; BEGINIF(RST='0')thencnt:=0;ELSIF(clk'EVENT AND clk='1')thenif cnt<9 thencnt:=cnt+1;clk1ms<='0';elsecnt:=0;clk1ms<='1';end if;end if;end PROCESS P2;process(rst)--循环beginif (rst='1') thenstate<=s0;elseif(clk_use'event and clk_use='1') thencase state iswhen s0 =>state<=s1;when s1=>state<=s2;when s2=>state<=s3;when s3 =>state<=s4;when s4=>state<=s5;when s5=>state<=s1;end case;end if;end if;end process;end control;本控制电路采用VHDL语言设计。

第5章 时序电路的VHDL设计

第5章 时序电路的VHDL设计

5.1 基本时序元件的VHDL表述
5.1.3 含同步复位控制的D触发器及其VHDL表述
5.1 基本时序元件的VHDL表述
5.1.4 基本锁存器及其VHDL表述
CLK高电平, Q随D变化,电平触发型。
5.1 基本时序元件的VHDL表述
5.1.4 基本锁存器及其VHDL表述
5.1 基本时序元件的VHDL表述
...
RANGE[(n)]和REVERSE_RANGE[(n)]
SIGNAL range1 : IN STD LOGIC VECTOR (0 TO 7) ; ...
FOR i IN range1'RANGE LOOP
...
-- FOR i IN 0 TO 7 LOOP
5.4 属性描述与定义语句
3. 数值类属性: LEFT、RIGHT、HIGHT、LOW
ele4 <= obj’LOW
...
;
--15
5.4 属性描述与定义语句
3. 数值类属性
【例5-18】
LIBRARY IEEE;--PARITY GENERATOR USE IEEE.STD_LOGIC_1164.ALL; ENTITY parity IS GENERIC (bus_size : INTEGER := 8 ); PORT (input_bus : IN STD_LOGIC_VECTOR(bus_size-1 DOWNTO 0); even_numbits, odd_numbits : OUT STD_LOGIC ) ; END parity ; ARCHITECTURE behave OF parity IS BEGIN PROCESS (input_bus) VARIABLE temp: STD_LOGIC; BEGIN temp := '0'; FOR i IN input_bus'LOW TO input_bus'HIGH LOOP temp := temp XOR input_bus( i ) ; END LOOP ; --temp奇数时为1,偶数时为0 odd_numbits <= temp ; --奇数时odd_numbits为1 even_numbits <= NOT temp; --偶数时even_numbits为1 END PROCESS; END behave;

vhdl时序电路设计

vhdl时序电路设计

1、设计一个序列脉冲产生电路(产生“10110”序列)(pulse_signal_generator);
2、设计一个模可变的计数器(10进制以下模可变)(change_counter_10);
3、设计一个分频器(N分频);(frequency_divider)
4、设计一个提醒器(每天早上6点,晚上23点提醒)(以分钟作为电路的脉冲信号,一个有24小时共有24*60=1440分钟,6点为计数到第360分钟,23点为计数到第1380分钟)(calling_2)
5、循环8路彩灯控制电路(显示两种以上花色)(color_light_8)
6、硬币存钱罐(能存储5毛和一块的硬币,并能显示存储总额)
7、电子骰子设计(按键,随机产生产生一个点数);
8、自行车速度测量器;
9、完成一个控制AD574-AD转换器电路工作的电路设计。

1 0 1 0 1 低4位加上尾随4个0有效。

fpga的延时电路设计

fpga的延时电路设计

fpga的延时电路设计
FPGA的延时电路设计可以通过多种方式实现,包括使用硬件描述语言(HDL)设计特定的延时模块或使用FPGA开发板上的特定功能。

以下是一些常见的FPGA延时电路设计方法:
1.使用触发器:在FPGA中,可以使用触发器(如D触发器)来
设计延时电路。

通过在触发器的输入端添加适当的逻辑门和延迟单元,可以创建具有特定延迟时间的延时电路。

2.使用时钟生成器:FPGA通常具有内置的时钟生成器,可以生
成具有不同频率和占空比的时钟信号。

通过调整时钟生成器的参数,可以创建具有不同延迟时间的延时电路。

3.使用可编程逻辑块:FPGA中的可编程逻辑块(如查找表
(LUT)和查找表与门(LUT+AND))可以用于设计延时电路。

通过编程逻辑块,可以实现具有特定延迟时间的延时电路。

4.使用模拟和数字转换器:FPGA通常具有模拟和数字转换器
(ADC)和数字到模拟转换器(DAC)。

通过使用这些转换器,可以将模拟信号转换为数字信号或数字信号转换为模拟信号,从而实现延时电路。

需要注意的是,FPGA的延时电路设计需要根据具体的应用需求进行优化。

例如,需要确定延迟时间、精度、稳定性等方面的要求,并选择适当的延时单元、逻辑门、时钟生成器、可编程逻辑块或模拟和数字转换器来实现所需的功能。

EDA 第3章 VHDL语言 3.9

EDA 第3章 VHDL语言 3.9

3.11 仿真延时
3.11.3 仿真
VHDL仿真器和综合器将自动为系统中的信号赋值 配置一足够小而又能满足逻辑排序的延时量,即仿真 软件的最小分辩时间,这个延时量就称为仿真 (Simulation Delta),或称 延时,从而使并行语句 和顺序语句中的并列赋值逻辑得以正确执行。由此可 见,在行为仿真、功能仿真乃至综合中,引入 延时 是必需的。仿真中, 延时的引入由EDA工具自动完 成,无需设计者介入。
--此式表明固有延时是20ns
3.11 仿真延时
3.11.1 传输延时
在行为仿真建模中,另一种延时模型是传输
模型,它仅表示信号传输推迟或延迟了一个 时间段。 传输延时是由半导体延时特性、连线的介质 结构、传输阻抗特性和信号频率特性来决定 的。
3.11 仿真延时
3.11.1 传输延时
固有延时模型的赋值语句可由下式表述: B <= TRANSPORT A AFTER 20 ns;-- 传输延时模型
3.11 仿真延时
延时是VHDL仿真需要的重要特性设 置,为设计建立精确的延时模型,可以使 用VHDL仿真器得到接近实际的精确结果。 VHDL中有两类延时模型能用于行为 仿真建模,即固有延时和传输延时。
3.11 仿真延时
3.11.1 固有延时
固有延时也称为惯性延时,是任何电子器件
都存在的一种Βιβλιοθήκη 时特性。固有延时的主要物 理机制是分布电容效应。 在惯性延时模型中,器件的输出都有一个固 有的延时。当信号的脉冲宽度小于器件的固 有延时时,器件将对输入的信号不作任何反 应。故信号的脉冲宽度必须大于器件的固有 延时。
z <= x XOR y AFTER 5ns ;
--此式表明赋值电路的惯性延时为5ns z <= x XOR y ; --此式表明信号z的数值在时间之后才会更新(省

实验三_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 代码和仿真结果。

基于VHDL语言的超长时间定时器设计及实现

基于VHDL语言的超长时间定时器设计及实现

基于VHDL语言的超长时间定时器设计及实现
引言
传统的定时器硬件连接比较复杂,可靠性差,而且计时时间短,难以满足需要。

本设计采用可编程芯片和VHDL 语言进行软硬件设计,不但可使硬件大为简化,而且稳定性也有明显提高。

由于可编程芯片的频率精度可达到50 MHz,因而计时精度很高。

本设计采用逐位设定预置时间,其最长时间设定可长达99 小时59 分59 秒。

完全可以满足用户的需要,使用也更为方便。

1 系统原理
本定时器的核心器件为EP1C6Q240C8 芯片。

该芯片有选位、置位、启动、复位、倒计时等功能,显示采用2 个3 位LED 数码管,并采用共阴接法,可以动态扫描显示。

其系统原理如2 硬件设计
本系统共有两大模块,分别为控制/定时模块和显示模块。

其中控制/定时模块包括按键的功能定义和计时的逻辑定义。

显示模块则包括片选模块、位扫描模块和数码管译码模块。

设计时可将秒信号输入控制/定时模块,此时系统将输出六个四位BCD 码,以分别表示时、分、秒位。

在预置数时,计数器可以秒的速度递增,从而实现逐位预置数;而在定时倒计数时,计数器可以秒的速度递减,从而实现倒计时。

系统中的位选择器用于对六位进行循环扫描输出,并将扫描输出送到译码器。

译码器模块可对输入的四位进行译码,同时在设置数值时用6 个LED 灯分别指示其所设置的位。

该系统硬件由两部分组成,一部分是EPlC6Q240C8 芯片,另一部分是按键,译码器,LED 数码管,发光二极管及可编程芯片的支持电路。

Setw(置位键):用于选定定时器所需定时的对应位。

发光二极管对应七段数码管设置,。

程序执行vhdl中延时器的编写

程序执行vhdl中延时器的编写

程序执⾏vhdl 中延时器的编写⾸先声明,我是⼀个菜鸟。

⼀下⽂章中出现技术误导情况盖不负责最近由于项⽬的须要也是⼀直在开发fpga ,有点⼼得。

呵呵,主要是下⾯这个程序(延时器)启发了我,record ⼀下:entity delay isport(en:in std_logic;clk:in std_logic;en_delay:out std_logic);end delay;architecture Behavioral of bitmap_Contrl issignal tmp:std_logic;signal tmp1:std_logic;beginprocess(Clk)--控制信号延迟beginif(clk'event and clk='1')thentmp <= En;tmp1 <= tmp;end if;end process;en_delay <= tmp1;end Behavioral;下⾯这个程序为什么可以对en 停⽌延时呢?tmp <= En;tmp1 <= tmp下⾯两句话其实是同时执⾏的,什么意思呢,就是第⼆句话执⾏的时候被tmp 赋值的其实是前⼀刻的值。

En ⾸先将值保存到tmp 中,下次赋值到tmp1中。

这⾥有个关键点:两句话是同时执⾏的。

我想理解这个程序当前编写其他程序应当不成什么问题,我就是从这个程序悟道的。

⽂章结束给⼤家分享下程序员的⼀些笑话语录: 刹车失灵有⼀个物理学家,⼯程师和⼀个程序员驾驶着⼀辆汽车⾏驶在阿尔卑斯⼭脉 上,在下⼭的时候,忽然,汽车的刹车失灵了,汽车⽆法控制地向下冲去, 眼看前⾯就是⼀个悬崖峭壁,但是很幸运的是在这个悬崖的前⾯有⼀些⼩树 让他们的汽车停了下来, ⽽没有掉下⼭去。

三个惊魂未定地从车⾥爬了出来。

物理学家说, “我觉得我们应该建⽴⼀个模型来模拟在下⼭过程中刹车⽚在⾼ 温情况下失灵的情形”。

延时电路的VHDL设计

延时电路的VHDL设计

延时电路的VHDL设计
蒋贤哲;王莉
【期刊名称】《四川大学学报(自然科学版)》
【年(卷),期】2004(041)0z1
【摘要】VHDL语言现在已经成功地应用于硬件电路设计的模拟验证和综合优化
等方面.本文首先采用了VHDL语言设计电路时采取的自顶向下的设计方法设计了
数字电路经常用到的延时电路;而且以具体的延时电路设计分析了设计中所遇到的
问题,并给出了解决方案.
【总页数】6页(P492-497)
【作者】蒋贤哲;王莉
【作者单位】南京航空航天大学自动化学院,南京,中国,210016;南京航空航天大学
自动化学院,南京,中国,210016
【正文语种】中文
【中图分类】TN7
【相关文献】
1.可编程数字控制精密延时电路设计 [J], 马凯;王彦文
2.利用RC延时电路实现矿用馈电开关瞬时失电不跳闸的经济型设计 [J], 夏后强
3.基于Multisim的声光控制延时电路的设计探究 [J], 程建峰
4.可编程逻辑器件与VHDL设计教学探索——评《可编程逻辑器件与VHDL设计》[J], 刘乃迪
5.可编程逻辑器件与VHDL设计教学探索
——评《可编程逻辑器件与VHDL设计》 [J], 刘乃迪
因版权原因,仅展示原文概要,查看原文内容请购买。

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

用VHDL语言设计延时电路
用VHDL语言设计延时电路时一般用计数器或计数器的级联来实现。

下面以一个实例来说明如何实现任意时间量的延时。

在5 MHz时钟CLK控制下对同步信号SYNC进行N延时(SYNC脉冲宽度为2 μs,脉冲重复频率为1 kHz;0μs≤N≤998 μs)。

要求每次在同步脉冲上升沿到来时开始延时,并在延时结束后产生宽度为10 μs的选通信号。

需要产生的延时时序如图2所示(延时量N=4.2μs)。

这里采用3个计数器和1个或门产生上述延时信号,如图3所示,模N计数器计延时量;模50计数器计选通信号的宽度;模N+50计数器用于产生使能信号。

用VHDL硬件描述语言进行硬件电路设计时,同一个进程中不能用2个时钟来触发,而时序图中又要求在同步脉冲SYNC的上升沿开始延时,为了解决这一问题,采用了模N+50计数器和1个或门。

当同步脉冲为高电平时,模N计数器和模N+50计数器开始计数,并置dly_en为高电平。

模N计数器满,置dly_enl为高电平同时产生选通信号。

当模N+50计数器计满即选通信号产生完之后置dly_en为低电平。

当下一个同步脉冲到来时重复以上过程。

这种设计电路的好处是当同步脉冲的宽度改变时对时序控制并无影响,因为在计数过程中只用了SYNC的上升沿,从延时开始到选通信号结束,在或门的作用下SYNC对计数器不起控制作用。

上述电路的VHDL程序如下:
该程序选择N=20,即延时量是4.2 μs,由于要使用时钟来判断SYNC的上升沿情况,因此,如果令N=0,产生的delay信号仍然会有1个时钟的固有延时,在计算延时量时应充分考虑到这一点,延时量=(N+1)×时钟周期。

相关文档
最新文档