常用电路设计程序Word文件下载.docx

上传人:b****5 文档编号:17081204 上传时间:2022-11-28 格式:DOCX 页数:21 大小:60.53KB
下载 相关 举报
常用电路设计程序Word文件下载.docx_第1页
第1页 / 共21页
常用电路设计程序Word文件下载.docx_第2页
第2页 / 共21页
常用电路设计程序Word文件下载.docx_第3页
第3页 / 共21页
常用电路设计程序Word文件下载.docx_第4页
第4页 / 共21页
常用电路设计程序Word文件下载.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

常用电路设计程序Word文件下载.docx

《常用电路设计程序Word文件下载.docx》由会员分享,可在线阅读,更多相关《常用电路设计程序Word文件下载.docx(21页珍藏版)》请在冰豆网上搜索。

常用电路设计程序Word文件下载.docx

EN:

INSTD_LOGIC;

---加使能控制端

Y:

OUTSTD_LOGIC_VECTOR(7DOWNTO0));

END;

ARCHITECTUREART1OFDECODERIS

BEGIN

PROCESS(SEL,EN)

BEGIN

Y<

=”11111111”;

IF(EN=’1’)THEN

CASESELIS

WHEN"

000"

=>

Y(0)<

=‘0’;

--输出低有效

001"

Y

(1)<

010"

Y

(2)<

011"

Y(3)<

100"

Y(4)<

101"

Y(5)<

110"

Y(6)<

111"

Y(7)<

WHENOTHERS=>

NULL;

ENDCASE;

ELSEY<

ENDIF;

ENDPROCESS;

ENDART1;

方法2:

使用条件选择WHENELSE语句

ARCHITECTUREART2OFDECODERIS

Y(0)<

=‘0’WHEN(EN=’1’ANDSEL="

)ELSE’1’;

Y

(1)<

Y

(2)<

Y(3)<

Y(4)<

Y(5)<

Y(6)<

Y(7)<

=’0’WHEN(EN=’1’ANDSEL="

ENDART2;

注意:

使用了8条WHENELSE语句

1.38-3线优先编码器

8-3线优先编码器

输入信号为y0、y1、y2、y3、y4、y5、y6和y7,

输出信号为OUT0、OUT1和OUT2。

输入信号中y0的优先级别最低,依次类推,y7的优先级别最高。

下面我们用两种方法设计8-3线优先编码器。

使用条件赋值语句

ENTITYENCODERIS

PORT(y0,y1,y2,y3,y4,y5,y6,y7:

OUT0,OUT1,OUT2:

ENDENCODER;

ARCHITECTUREART1OFENCODERIS

SIGNALOUTS:

STD_LOGIC_VECTOR(2DOWNTO0);

BEGIN

OUTS(2DOWNTO0)<

="

111”WHENy7=‘1’ELSE

"

WHENy6=‘1’ELSE

WHENy5=‘1’ELSE

WHENy4=‘1’ELSE

WHENy3=‘1’ELSE

WHENy2=‘1’ELSE

WHENy1=‘1’ELSE

WHENy0=‘1’ELSE

XXX"

OUT0<

=OUTS(0);

OUT1<

=OUTS

(1);

OUT2<

=OUTS

(2);

ENDART1;

使用IF语句

PORT(IN1:

INSTD_LOGIC_VECTOR(7DOWNTO0);

OUT1:

OUTSTD_LOGIC_VECTOR(2DOWNTO0));

ARCHITECTUREART2OFENCODERIS

PROCESS(IN1)

IFIN1(7)=‘1’THENOUT1<

="

ELSIFIN1(6)=‘1’THENOUT1<

ELSIFIN1(5)=‘1’THENOUT1<

ELSIFIN1(4)=‘1’THENOUT1<

ELSIFIN1(3)=‘1’THENOUT1<

ELSIFIN1

(2)=‘1’THENOUT1<

ELSIFIN1

(1)=‘1’THENOUT1<

ELSIFIN1(0)=‘1’THENOUT1<

ELSEOUT1<

ENDIF;

ENDPROCESS;

1.4加法器—带进位的4位加法器

用FOR-LOOP语句实现

ENTITYADDER4IS

PORT(A,B:

INSTD_LOGIC_VECTOR(3DOWNTO0);

CIN:

INSTD_LOGIC;

SUM:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

COUT:

OUTSTD_LOGIC);

ENDADDER4;

ARCHITECTUREARTOFADDER4IS

SIGNALC:

STD_LOGIC_VECTOR(4DOWNTO0);

PROCESS(A,B,CIN,C)

C(0)<

=CIN;

FORIIN0TO3LOOP---用FOR循环语句实现多位相加

SUM(I)<

=A(I)XORB(I)XORC(I);

C(I+1)<

=(A(I)ANDB(I))OR(C(I)AND(A(I))OR(C(I)ANDB(I));

ENDLOOP;

COUT<

=C(4);

---总的进位输出

ENDPROCESS;

ENDART;

直接使用加法“+”函数

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

----运算符重载

ENTITYADDER4_OPIS

PORT(A,B:

ENDADDER4_OP;

ARCHITECTUREARTOFADDER4_OPIS

SIGNALAA,BB:

AA<

=‘0’&

A;

--4位扩展成5位,提供进位空间

BB<

='

0'

&

B;

C<

=AA+BB+CIN;

SUM<

=C(3DOWNTO0);

COUNT<

ENDART;

1.58位比较器设计

比较器可以比较两个二进制的大小,下面是一个8位比较器的VHDL描述。

有两个8位二进制数,分别是A和B,输出为YA,YB,YC,当A>

B时,YA=1;

当A<

B时,YB=1;

当A=B时,YC=1。

USEIEEE.STD_LOGIC_VECTOR(7DOWNTO0);

ENTITYCOMPAREIS

YA,YB,YC:

ENDCOMPARE;

ARCHITECTUREARTOFCOMPAREIS

PROCESS(A,B)

IF(A>

B)THENYA<

1'

;

YB<

YC<

ELSIF(A<

ELSEYA<

ENDIF;

ENDPROCESS;

1.6多路选择器

选择器常用于信号的切换,用IF语句、CASE语句、条件赋值语句、选择赋值语句都可以描述多路选择器。

例用CASE语句进行描述

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYMUX4TO1IS

PORT(A,B,C,D:

SEL:

INSTD_LOGIC_VECTOR(1DOWNTO0);

Q:

ENDMUX4TO1;

ARCHITECTURERTLOFMUX4TO1IS

PROCESS(SEL,A,B,C,D)

CASESELIS

00"

=>

Q<

=A;

01"

Q<

=B;

10"

=C;

WHENOTHERS=>

Q<

=D;

ENDCASE;

ENDRTL;

选择器常用于信号的切换,用IF语句、CASE语句、条件赋值语句、选择信号赋值语句都可以描述多路选择器。

思考:

用选择信号赋值语句如何进行描述?

WITHSELSELECT

=AWHEN"

00“,

BWHEN"

CWHEN"

DWHENOTHERS;

1.7总线驱动器设计

Ⅰ:

单向总线驱动器设计

在微型计算机的总线驱动中经常要用单向总线缓冲器,它通常由多个三态门组成,用来驱动地址总线和控制总线。

一个8位的单向总线缓冲器如图所示。

ENTITYTR1_BUF8IS

PORT(DIN:

EN:

DOUNT:

OUTSTD_LOGIC_VECTOR(7DOWNTO0));

ARCHITECTUREARTOFTR1_BUF8IS

PROCESS(EN,DIN)

IF(EN=‘1’)THEN

DOUT<

=DIN;

ELSE

ZZZZZZZZ"

ENDIF;

Ⅱ:

双向总线缓冲器设计

双向总线缓冲器用于数据总线的驱动和缓冲,典型的双向总线缓冲器如图所示。

图中的双向总线缓冲器有两个数据输入输出端A和B,一个方向控制端DIR和一个选通端EN。

EN=0时双向缓冲器选通

DIR=0,则A=B(B送A)

DIR=1,则B=A(A送B)

ENTITYBIDIRIS

PORT(A,B:

INOUTSTD_LOGIC_VECTOR(7DOWNTO0);

EN,DIR:

INSTD_STD_LOGIC);

ENDBIDIR;

ARCHITECTUREARTOFBIDIRIS

SIGNALAOUT,BOUT:

STD_LOGIC_VECTOR(7DOWNTO0);

PROCESS(A,EN,DIR)

IFEN=‘0’ANDDIR=‘1’THENBOUT<

=A;

ELSEBOUT<

"

B<

=BOUT;

PROCESS(B,EN,DIR)

IFEN=‘0’ANDDIR=‘1’THENAOUT<

=B;

ELSEAOUT<

A<

=AOUT;

ENDART;

2时序逻辑电路设计

时序电路设计主要有:

触发器、寄存器、计数器、分频器、序列信号发生器、序列信号检测器

2.1D触发器的设计

设计如图所示的D触发器

ENTITYDFF2IS

PORT(CLK,CD,SD,D:

Q,NOTQ:

ENDDFF2;

ARCHITECTURERTLOFDFF2IS

PROCESS(CLK,SD,CD)

IFCD='

THENQ<

NOTQ<

ELSIFSD='

ELSIFCLK'

EVENTANDCLK='

1‘THENQ<

=D;

2.2移位寄存器的设计

下面给出一个8位的移位寄存器,其具有左移一位或右移一位、并行输入和同步复位的功能。

ENTITYSHIFTERIS

PORT(DATA:

SHIFT_LEFT:

SHIFT_RIGHT:

RESET:

MODE:

INSTD_LOGIC_VECTOR(1DOWNTO0);

QOUT:

BUFFERSTD_LOGIC_VECTOR(7DOWNTO0));

ENDSHIFTER;

ARCHITECTUREARTOFSHIFTERIS

PROCESS

WAITUNTILRISING_EDGE(CLK);

IFRESET=‘1’THENQOUT<

00000000"

ELSE--同步复位功能的实现

CASEMODEIS

WHEN"

QOUT<

=SHIFT_RIGHT&

QOUT(7DOWNTO1);

--右移一位

=QOUT(6DOWNTO0)&

SHIFT_LEFT;

--左移一位

WHEN“11”=>

=DATA;

--并行加载

2.3计数器

例:

模为60具有异步复位、同步置数功能的8421BCD码计数器

ENTITYClock60IS

PORT(CI,RESET,LOAD,CLK:

D:

CO:

OUTSTD_LOGIC;

Q10,Q1:

ENDCNTM60;

ARCHITECTUREARTOFCNTM60IS

SIGNALQH,QL:

STD_LOGIC_VECTOR(3DOWNTO0);

CO<

=‘1’WHEN(QH="

0101“ANDQL="

1001“ANDCI=‘1’)ELSE

'

--进位输出的产生

PROCESS(CLK,RESET)

IFRESET=‘0’THENQH<

0000"

QL<

--异步复位

EVENTANDCLK=‘1’THEN--同步置数

IFLOAD=‘1’THENQH<

=D(7DOWNTO4);

QL<

=D(3DOWNTO0);

ELSIFCI=‘1’THEN--模60的实现

IFQL=9THENQL<

IFQH=5THENQH<

ELSEQH<

=QH+1;

--计数功能的实现

ENDIF

ELSE

=QL+1;

--ENDIFLOAD

Q10<

=QH;

Q1<

=QL;

2.4N分频器的设计

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYFREDIVNIS

PORT(CLK:

OUTCLK:

ENDFREDIVN;

ARCHITECTURERTLOFFREDIVNIS

CONSTANTN:

INTEGER:

=9;

SIGNALCOUNT:

INTEGERRANGENDOWNTO0;

PROCESS(CLK)

IF(CLK'

)THEN

IF(COUNT=N-1)THENCOUNT<

=0;

ELSECOUNT<

=COUNT+1;

IFCOUNT<

(INTEGER(N/2))THENOUTCLK<

ELSEOUTCLK<

2.5序列信号发生器

在数字信号的传输和数字系统的测试中,有时需要用到一组特定的串行数字信号,产生序列信号的电路称为序列信号发生器。

如产生“01111110”序列的序列信号发生器(序列可任意)

该电路可由计数器与数据选择器构成,其VHDL描述如下:

--“01111110”序列信号发生器

ENTITYSENQGENIS

PORT(CLK,CLR,CLK1:

--两个时钟信号

ZO:

ENDSENQGEN;

ARCHITECTUREARTOFSENQGENIS

SIGNALCOUNT:

--序列发生器的关键是计数器,COUNT的宽度决定序列的长度,此为8位

SIGNALZ:

STD_LOGIC:

=‘0’;

--赋初值仅对仿真有用

PROCESS(CLK,CLR)--8进制计数器进程

IFCLR=‘1’THENCOUNT<

ELSIFCLK=‘1’ANDCLK'

EVENTTHEN

IFCOUNT="

111“THENCOUNT<

--此处可不要

=COUNT+1;

PROCESS(COUNT)--数据选择器进程,计数器计数时输出01111110序列BEGIN

CASECOUNTIS

Z<

=‘1’;

10

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1