常用电路设计程序Word文件下载.docx
- 文档编号:17081204
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:21
- 大小:60.53KB
常用电路设计程序Word文件下载.docx
《常用电路设计程序Word文件下载.docx》由会员分享,可在线阅读,更多相关《常用电路设计程序Word文件下载.docx(21页珍藏版)》请在冰豆网上搜索。
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 常用 电路设计 程序