第六章数字系统综合设计实例_第1页
第六章数字系统综合设计实例_第2页
第六章数字系统综合设计实例_第3页
第六章数字系统综合设计实例_第4页
第六章数字系统综合设计实例_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第六章第六章 数字系统综合设计实例数字系统综合设计实例交通灯控制器交通灯控制器任务二任务二 半整数分频器的设计半整数分频器的设计任务一任务一正负脉宽数控调制信号发生器的设计正负脉宽数控调制信号发生器的设计任务三任务三 数字秒表的设计数字秒表的设计任务四任务四任务一任务一 半整数分频器的设计半整数分频器的设计阶段一阶段一 小数分频的基本原理小数分频的基本原理 阶段二阶段二 电路组成电路组成 阶段三阶段三 VHDLVHDL程序程序 阶段四阶段四 仿真结果仿真结果阶段一阶段一小数分频的基本原理小数分频的基本原理采用可编程逻辑器件实现分频系数为采用可编程逻辑器件实现分频系数为2.52.5的的分频器,可

2、采用以下方法:设计一个模分频器,可采用以下方法:设计一个模3 3的的计数器,再设计一个扣除脉冲电路,加在模计数器,再设计一个扣除脉冲电路,加在模3 3计数器输出之后,每来两个脉冲就扣除一计数器输出之后,每来两个脉冲就扣除一个脉冲个脉冲( (实际上是使被扣除的脉冲变成很窄实际上是使被扣除的脉冲变成很窄的脉冲,可由异或门实现的脉冲,可由异或门实现) ),就可以得到分,就可以得到分频系数为频系数为2.52.5的小数分频器。采用类似方法,的小数分频器。采用类似方法,可以设计分频系数为任意半整数的分频器。可以设计分频系数为任意半整数的分频器。小数分频的基本原理为脉冲吞小数分频的基本原理为脉冲吞吐计数法:

3、设计两个不同分频吐计数法:设计两个不同分频比的整数分频器,通过控制单比的整数分频器,通过控制单位时间内两种分频比出现的不位时间内两种分频比出现的不同次数,从而获得所需的小数同次数,从而获得所需的小数分频值分频值。 阶段二阶段二电路组成电路组成 图6-1 通用半整数分频器阶段三阶段三 VHDLVHDL程序程序 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY deccount IS PORT ( inclk: IN STD_LOGIC;-时钟源 preset: IN STD_LOGIC

4、_VECTOR(3 DOWNTO 0); -预置分频值Noutclk1: OUT STD_LOGIC; outclk2: BUFFER STD_LOGIC-输出时钟 );END deccount; ARCHITECTURE deccount_arch OF deccount ISSIGNAL clk, divide2: STD_LOGIC;SIGNAL count: STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINclk=inclk XOR divide2; -inclk与divide2异或后作为模N计数器的时钟outclk1=inclk;PROCESS(clk)BEGIN

5、 IF(clkevent AND clk=1) THEN IF(count=0000) THENcount=preset-1;-置整数分频值N outclk2=1; ELSE count=count-1;-模N计数器减法计数 outclk2=0; END IF; END IF;END PROCESS; PROCESS(outclk2)BEGIN IF(outclk2event AND outclk2=1) THEN divide2=NOT divide2;-输出时钟二分频 END IF;END PROCESS;END deccount_arch;阶段四阶段四 仿真结果仿真结果图6-3 半整数分

6、频器仿真波形图任务二任务二 交通灯控制器交通灯控制器阶段一阶段一 功能描述功能描述阶段二阶段二 交通灯控制器的实现交通灯控制器的实现阶段三阶段三 VHDLVHDL程序程序 阶段四阶段四 仿真结果仿真结果 阶段一阶段一 功能描述功能描述设东西方向和南北方向的车流量大致相同,设东西方向和南北方向的车流量大致相同,因此红、黄、绿灯的时长也相同,定为红因此红、黄、绿灯的时长也相同,定为红灯灯45秒,黄灯秒,黄灯5秒,绿灯秒,绿灯40秒,同时用数秒,同时用数码管指示当前状态码管指示当前状态(红、黄、绿灯红、黄、绿灯)剩余时剩余时间。另外,设计一个紧急状态,当紧急状间。另外,设计一个紧急状态,当紧急状态出

7、现时,两个方向都禁止通行,指示红态出现时,两个方向都禁止通行,指示红灯。紧急状态解除后,重新计数并指示时灯。紧急状态解除后,重新计数并指示时间。间。 阶段二阶段二交通灯控制器的实现交通灯控制器的实现 交通灯控制器是状态机的一个典型应用,交通灯控制器是状态机的一个典型应用,除了计数器是状态机外,还有东西、南北除了计数器是状态机外,还有东西、南北方向的不同状态组合方向的不同状态组合(红绿、红黄、绿红、红绿、红黄、绿红、黄红黄红4个状态个状态),如表,如表6-1所示。但我们可以所示。但我们可以简单地将其看成两个简单地将其看成两个(东西、南北东西、南北)减减1计数计数的计数器,通过检测两个方向的计数值

8、,的计数器,通过检测两个方向的计数值,可以检测红、黄、绿灯组合的跳变。这样可以检测红、黄、绿灯组合的跳变。这样使一个较复杂的状态机设计变成一个较简使一个较复杂的状态机设计变成一个较简单的计数器设计。单的计数器设计。 表表6-1 交通灯的交通灯的4种可能亮灯状态种可能亮灯状态图图6-4 交通灯控制器外部接口交通灯控制器外部接口 阶段三阶段三 VHDLVHDL程序程序 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY deccount IS PORT ( inclk: IN STD_LO

9、GIC;-时钟源 preset: IN STD_LOGIC_VECTOR(3 DOWNTO 0); -预置分频值Noutclk1: OUT STD_LOGIC; outclk2: BUFFER STD_LOGIC-输出时钟 );END deccount; ARCHITECTURE deccount_arch OF deccount ISSIGNAL clk, divide2: STD_LOGIC;SIGNAL count: STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINclk=inclk XOR divide2; 表表6-2 交通灯设计中的状态跳变点交通灯设计中的状态跳变

10、点阶段三阶段三 VHDLVHDL程序程序 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY traffic ISPORT(clk,urgency: IN STD_LOGIC; led: BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0); East_West,South_North:BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0);END traffic;ARCHITECTURE rtl OF traffic ISBEGIN PROCESS(

11、clk) BEGIN IF urgency=0 THEN led=10000001; East_West=00000000; South_North01000110 OR South_North01000110 THEN East_West=01000101; South_North=01000000; led=10000100; ELSIFEast_West=00000110AND South_North=00000001 THEN East_West=00000101; South_North=00000101; led=10000010;ELSIFEast_West=00000001AN

12、D South_North=00000001 AND led=10000010 THEN East_West=01000000; South_North=01000101; led=00100001; ELSIFEast_West=00000001AND South_North=00000110 THEN East_West=00000101; South_North=00000101; led=01000001;ELSIFEast_West=00000001AND South_North=00000001 AND led=01000001 THEN East_West=01000101; S

13、outh_North=01000000; led=10000100; ELSIF East_West(3 DOWNTO 0)=0 THEN East_West=East_West-7; South_North=South_North-1;ELSIF South_North(3 DOWNTO 0)=0 THEN East_West=East_West-1; South_North=South_North-7; ELSE East_West=East_West-1; South_North=South_North-1; END IF; END IF; END PROCESS;END rtl;阶段四

14、阶段四 仿真结果仿真结果 图图6-5 交通灯控制器仿真波形图交通灯控制器仿真波形图任务三正负脉宽数控调制信号发生器任务三正负脉宽数控调制信号发生器的设计的设计 阶段一阶段一 设计思路设计思路阶段二阶段二 VHDLVHDL程序程序 阶段一阶段一 设计思路设计思路图图6-6是脉宽数控调制信号发生器逻辑图,是脉宽数控调制信号发生器逻辑图,此信号发生器是由两个完全相同的可自加此信号发生器是由两个完全相同的可自加载加法计数器载加法计数器LCNT8组成的,它的输出信组成的,它的输出信号的高低电平脉宽可分别由两组号的高低电平脉宽可分别由两组8位预置数位预置数进行控制。进行控制。图图6-6 脉宽数控调制信号发

15、生器逻辑图脉宽数控调制信号发生器逻辑图阶段二阶段二 VHDLVHDL程序程序 (1)8位可自加载加法计数器的源程序LCNT8.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164,.ALL;ENTITY LCNT8 IS -8位可自加载加法计数器PORT(CLK,LD:IN STD_LOGIC; -工作时钟/预置值加载信号 D:IN INTEGER RANGE 0 TO 255;-8位分频预置数 CAO:OUT STD_LOGIC); -计数溢出输出END ENTITY LCNT8;ARCHITECTURE ART OF LCNT8 IS SIGNAL COUNT:I

16、NTEGER RANGE 0 TO 255; -8位计数器设置BEGINPROCESS ( CLK ) ISBEGINIF CLKEVENT AND CLK= 1 THEN IF LD= 1 THEN COUNT=D; -LD为高电平时加载预置数ELSE COUNT=COUNT+1; -否则继续计数 END IF; END IF;END PROCESS;PROCESS (CLK, COUNT) ISBEGIN IF CLKEVENT AND CLK=1 THEN IF COUNT=255 THEN CAO= 1;ELSE CAOCLK,LD=LD1,D=A,CAO=CAO1);U2:LCNT8

17、 PORT MAP(CLK=CLK,LD=LD2,D=B,CAO=CAO2);PROCESS(CAO1,CAO2) ISBEGINIF CAO1= 1 THEN PSINT= 0;ELSIF CAO2 EVENT AND CAO2= 1 THEN PSINT=1;END IF;END PROCESS;LD1=NOT PSINT;LD2=PSINT;PSOUT=PSINT;END ARCHITECTURE ART; 任务四任务四 数字秒表的设计数字秒表的设计 阶段一阶段一 设计思路设计思路阶段二阶段二 VHDLVHDL程序程序 阶段一阶段一 设计思路设计思路今需设计一个计时范围为今需设计一个计时

18、范围为0.01秒秒1小时的小时的数字秒表,首先需要获得一个比较精确的数字秒表,首先需要获得一个比较精确的计时基准信号,这里是周期为计时基准信号,这里是周期为1/100 s的计的计时脉冲。其次,除了对每一计数器需设置时脉冲。其次,除了对每一计数器需设置清零信号输入外,还需在六个计数器设置清零信号输入外,还需在六个计数器设置时钟使能信号,即计时允许信号,以便作时钟使能信号,即计时允许信号,以便作为秒表的计时起、停控制开关为秒表的计时起、停控制开关 。因此数字秒表可由一个分频器、四个十进因此数字秒表可由一个分频器、四个十进制计数器制计数器(1/100秒、秒、1/10秒、秒、1秒、秒、1分分)以以及两

19、个六进制计数器及两个六进制计数器(10秒、秒、10分分)组成,组成,如图如图6-7所示。所示。图图6-7 数字秒表电路逻辑图数字秒表电路逻辑图阶段二阶段二 VHDLVHDL程序程序 1) 3 MHz100 Hz分频器的源程序CLKGEN.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY CLKGEN IS PORT (CLK:IN STD_LOGIC; -3 MHz信号输入 NEWCLK:OUT STD_LOGIC); -100 Hz计时时钟信号输出END ENTITY CLKGEN;ARCHITECTURE ART OF CLKGEN IS

20、 SIGNAL CNTER:INTEGER RANGE 0 TO 10#29999#; -十进制计数预制数BEGINPROCESS(CLK) IS -分频计数器,由3 MHz时钟产生100 Hz信号BEGIN IS IF CLKEVENT AND CLK=1 THEN IF CNTER=10#29999# THEN CNTER=0;-3 MHz信号变为100 Hz,计数常数为30 000ELSE CNTER=CNTER+1; END IF; END IF;END PROCESS;PROCESS(CNTER) IS -计数溢出信号控制BEGIN IF CNTER=10#29999# THEN N

21、EWCLK=1; ELSE NEWCLK=0; END IF;END PROCESS;END ARCHITECTURE ART; 2) 六进制计数器的源程序CNT6.VHD(十进制计数器的源程序CNT10.VHD与此类似)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT6 ISPORT (CLK:IN STD_LOGIC; CLR:IN STD_LOGIC; ENA: IN STD_LOGIC; CQ:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); CARRY_OUT: OUT STD_LOGIC ); END ENTITY C

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论