EDA技术7-典型时序电路设计实例_第1页
EDA技术7-典型时序电路设计实例_第2页
EDA技术7-典型时序电路设计实例_第3页
EDA技术7-典型时序电路设计实例_第4页
EDA技术7-典型时序电路设计实例_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

典型时序电路设计实例CHAPTER主要内容7段数码管显示的模10计数器(SSD)移位寄存器电路27段数码管显示的模10计数器(SSD)移位寄存器电路3实验4:计数器+7段LED数码管显示1.7段LED数码管显示模块2.计数器模块3.顶层文件-例化计数器+译码器显示译码器-复习数电用来驱动各种显示器件,从而将用二进制代码表示的数字、文字、符号翻译成人们习惯的形式直观地显示出来的电路,称为显示译码器。数字、文字、符号代码译码器显示器67半导体数码管显示器件:常用的是七段显示器件abcdefgabcdefg510YaYbYgabg510510发光二极管Ya-Yg:控制信号高电平时,对应的LED亮低电平时,对应的LED灭输入4位BCD码,产生7个输出,分别驱动相应显示器件;考虑7段输出与数字的对应关系,可以得出如下关系

abcdefg0:0000--11111101:0001--01100002:0010--11011013:0011--1111001

abcdfgabcdefg111111001100001101101e有4个共阳极7段显示管,所有的阳极都连接在一起,并通过一个PNP晶体管接到+3.3V电压上。abcdfgabcdefg000000110011110010010eXABCDEFGDP000000011110011111200100101300001101410011001501001001601000001700011111800000001900001001

BCD-七段显示译码器A3-A0:输入数据要设计的七段显示译码器aYaYbYcYdYeYfYg译码器A3A2A1A0bcdefg电子与通信工程系十进制数

A3A2A1A0

YaYbYcYdYeYfYg

显示字形

0

0000

11111

100

1

0001

01100001

2

001011011012

3

001111110013

4

010001100114

5

010110110115

6011000111116

7

011111100007

8

100011111118

9

100111100119

LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYSSDIS PORT(data:INSTD_LOGIC_VECTOR(3DOWNTO0); LED7S:OUTSTD_LOGIC_VECTOR(6DOWNTO0));END;ARCHITECTUREoneOFSSDISBEGIN

PROCESS(data) BEGIN为方便标示,Yx我们使用LED7S(x)来标示

CASEdataIS–方向为6downto0,gfedcba WHEN"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"1010"=>LED7S<="1110111"; WHEN"1011"=>LED7S<="1111100"; WHEN"1100"=>LED7S<="0111001"; WHEN"1101"=>LED7S<="1011110"; WHEN"1110"=>LED7S<="1111001"; WHEN"1111"=>LED7S<="1110001"; WHENOTHERS=>NULL;

END

CASE;

END

PROCESS;END;带有复位和时钟使能的10进制计数器LIBRARYIEEE;ENTITYCNTISPORT(CLK,RST,EN:INSTD_LOGIC;CQ:OUTSTD_LOGIC_VECTOR(3DOWNTO0);COUT:OUTSTD_LOGIC;)ENDCNT;ARCHITECTUREbehavOFCNTIS

SIGNALCQI:STD_LOGIC_VECTOR(0DOWNTO3);BEGINPROCESS(CLK,RST,EN)IF(RST=‘1’)THENCQI<=(OTHERS=>'0');--计数器复位

ELSIF

(CLK'EVENTANDCLK='1')THEN--检测时钟上升沿

IF

(EN='1')THEN--检测是否允许计数

IF

(CQI<"1001")THENCQI<=CQI+1;

ELSECQI<=(OTHERS=>'0');

ENDIF;

ENDIF;

ENDIF;

IF

(CQI="1001")THENCOUT<='1';--计数大于9,输出进位信号

ELSE

COUT<=‘0’;

ENDIF;CQ<=CQI;--将计数值向端口输出

ENDPROCESS;ENDbehavior;LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYLED_COUNTERISPORT(CLK,RST,EN:INSTD_LOGIC; COUT:OUTSTD_LOGIC; LED:OUTSTD_LOGIC_VECTOR(6DOWNTO0));END;ARCHITECTUREbhvOFLED_COUNTERIS SIGNALCNT_TO_SSD:STD_LOGIC_VECTOR(3DOWNTO0);顶层例化:

COMPONENTDECL7S

PORT( data:INSTD_LOGIC_VECTOR(3DOWNTO0); LED7S:OUTSTD_LOGIC_VECTOR(6DOWNTO0) );

ENDCOMPONENT;

COMPONENTCNT

PORT(CLK,RST,EN:INSTD_LOGIC;CQ:OUTSTD_LOGIC_VECTOR(3DOWNTO0);COUT:OUTSTD_LOGIC);

ENDCOMPONENT;BEGINUUT_DECL7S:SSDPORTMAP(data=>CNT_TO_SSD,LED7S=>LED);UUT_CNT:CNTPORTMAP(CLK=>CLK,RST=>RST,EN=>EN,CQ=>CNT_TO_SSD,COUT=>COUT);

END;如果模10000计数器显示需要4个SSD,我们这里可以用一个dig来表示数码管的位选信号,用一个位宽为4的dig(3downto0)来表示数码管段选信号。当你想最后一个数码管显示数字1时,只需给dig(3downto0)赋值“1110”选中最后一位数码管,并且seg[7:0]赋值“10011111”即可。26由于数码管动态显示,在轮流显示过程中,每位数码管的点亮时间为1ms~16ms,由于人的视觉暂留现象及发光二极体的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示资料,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O口,而且功耗更低。Clk来决定,例如Spartan6的时钟频率为100Mhz,周期为10ns,需要时钟分频。选用refresh周期为4ms。动态扫描原理在许多情况下为了节省I/O管脚和内部逻辑资源,常用动态扫描的方法进行显示。动态扫描显示利用了时分原理和人的视觉暂留现象。例如,4位扫描数码显示.器将时间划分为4个扫描周期:

周期1一>周期2一>周期3一>周期4每个周期只选通一位数据。在周期1显示第1个数码,周期2显示第2个数码管。在扫描四个周期后,又重新按顺序循环。如果扫描的速度足够快,人的感觉就象4个数码同时显示。

扫描模块文件

LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYSCAN4AIS PORT(CLK_SCAN:INSTD_LOGIC;DATA_IN:INSTD_LOGIC_VECTOR(3DOWNTO0); SEL:OUTSTD_LOGIC_VECTOR(3DOWNTO0);DOUT:OUTSTD_LOGIC_VECTOR(6DOWNTO0));ENDSCAN4A;

ARCHITECTUREBEHAVEOFSCAN4AIS SIGNALS1:STD_LOGIC_VECTOR(1DOWNTO0); SIGNALBCD_OUT:STD_LOGIC_VECTOR(3DOWNTO0);BEGIN PROCESS(CLK_SCAN) BEGIN IF(CLK_SCAN'EVENTANDCLK_SCAN='1')THENIF(S1=“11")THENS1<="00";ELSES1<=S1+1;ENDIF; ENDIF; ENDPROCESS;

PROCESS(S1) BEGIN CASES1IS WHEN"00"=>SEL<=“1110”; WHEN"01"=>SEL<=“1101”; WHEN"10"=>SEL<=“1011”; WHEN"11"=>SEL<=“0111”;WHENOTHERS=>SEL<=“0000”; ENDCASE; ENDPROCESS;PROCESS(data_in) BEGIN CASEdata_inIS WHEN"0000"=>DOUT<="00000011"; WHEN"0001"=>DOUT<=“10011111"; WHEN"0010"=>DOUT<="00100101"; WHEN"0011"=>DOUT<="00001101"; WHEN"0100"=>DOUT<="10011001"; WHEN"0101"=>DOUT<="01001001"; WHEN"0110"=>DOUT<="01000001"; WHEN"0111"=>DOUT<="00011111"; WHEN"1000"=>DOUT<="00000001"; WHEN"1001"=>DOUT<="00001001"; WHENOTHERS=>DOUT<="00000011"; ENDCASE; ENDPROCESS;ENDBEHAVE;7段数码管显示的模10计数器(SSD)移位寄存器电路33带有并行置位的移位寄存器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYSHFRTIS--8位右移寄存器

PORT(CLK,LOAD:INSTD_LOGIC;DIN:INSTD_LOGIC_VECTOR(7DOWNTO0);QB:OUTSTD_LOGIC);ENDSHFRT;ARCHITECTUREbehaviorOFSHFRTIS SIGNALREG8:STD_LOGIC_VECTOR(7DOWNTO0);BEGIN

PROCESS(CLK,LOAD)

BEGIN

IF(CLK'EVENTANDCLK='1')THEN

IF(LOAD='1')THEN--装载新数据

REG8<=DIN;

ELSE REG8(6DOWNTO0)<=REG8(7DOWNTO1); QB<=REG8(0);

ENDIF;

ENDIF;

ENDPROCESS;

ENDbehavior;电子与通信工程系(1)在第二个时钟到来时,LOAD为高电平(2)第三个时钟,以及以后的时钟信号都是移位时钟(3)第四个时钟后,QB输出了右移出的第1个位‘1’工作时序(1)在第一个时钟到来时,LOAD为低电平LIBRARY

IEEE;USE

IEEE.STD_LOGIC_1164.ALL;ENTITY

SHIFT

ISPORT(CLK,C0:INSTD_LOGIC;--时钟和进位输入 MD:INSTD_LOGIC_VECTOR(2DOWNTO0);--移位模式控制字

D:INSTD_LOGIC_VECTOR(7DOWNTO0);--待加载移位的数据

QB:OUTSTD_LOGIC_VECTOR(7DOWNTO0);--移位数据输出

CN:OUTSTD_LOGIC);--进位输出ENDENTITY;ARCHITECTUREBEHAVOFSHIFTIS

SIGNALREG:STD_LOGIC_VECTOR(7DOWNTO0);

SIGNALC

温馨提示

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

最新文档

评论

0/150

提交评论