用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,因此对于不同的模块所需要的不同的时钟频率我们必须采用分频器来操作。

  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)×时钟周期。

相关文档
最新文档