VHDL.docx

上传人:b****2 文档编号:24312862 上传时间:2023-05-26 格式:DOCX 页数:20 大小:68.33KB
下载 相关 举报
VHDL.docx_第1页
第1页 / 共20页
VHDL.docx_第2页
第2页 / 共20页
VHDL.docx_第3页
第3页 / 共20页
VHDL.docx_第4页
第4页 / 共20页
VHDL.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

VHDL.docx

《VHDL.docx》由会员分享,可在线阅读,更多相关《VHDL.docx(20页珍藏版)》请在冰豆网上搜索。

VHDL.docx

VHDL

实验练习要求掌握:

1.掌握MAX+PLUSII的基本操作方法

2.文本输入、编辑、建库、存盘、综合。

3.文本编辑时对VHDL语言的格式要求,能够查错。

4.波型仿真步骤,打开波型编辑器、节点输入、输入波型设置、存盘、仿真、时标调整。

5.了解图形编辑方法。

实验2-1.实验内容:

3-8译码器的设计。

当EN=1时,译码器正常工作;当EN=0时,译码器不工作。

LIBRARYieee;

USEieee.std_logic_1164.ALL;

ENTITYdecode3_8IS

PORT(a,b,c,en:

INSTD_LOGIC;

y:

OUTSTD_LOGIC_VECTOR(7downto0));

ENDdecode3_8;

ARCHITECTUREqqqOFdecode3_8IS

BEGIN

indate<=c&b&a;

PROCESS(indate,en)

BEGIN

IFen='1'THEN;

CASEindateIS

WHEN"000"=>y<="11111110";

WHEN"001"=>y<="11111101";

WHEN"010"=>y<="11111011";

WHEN"011"=>y<="11110111";

WHEN"100"=>y<="11101111";

WHEN"101"=>y<="11011111";

WHEN"110"=>y<="10111111";

WHEN"111"=>y<="0111111";

WHENothers=>segment<="XXXXXXX";

ENDCASE;

ELSE

y<="11111111";

ENDIF;

ENDPROCESS;

ENDqqq;

--***********************************************

实验2-2.用构造体的结构描述方式实现如图所示组合逻辑电路,仿真其功能并进行功能描述。

方法1

--***********************************************

LIBRARYieee;

USEieee.std_logic_1164.all;

ENTITYnot2IS

PORT(a:

INSTD_LOGIC;

c:

OUTSTD_LOGIC);

ENDnot2;

ARCHITECTUREand22OFnot2IS

BEGIN

c<=nota;

ENDand22;

--***********************************************

LIBRARYieee;

USEieee.std_logic_1164.all;

ENTITYnand2IS

PORT(a,b:

INSTD_LOGIC;

c:

inOUTSTD_LOGIC);

ENDnand2;

ARCHITECTUREand22OFnand2IS

BEGIN

c<=anandb;

ENDand22;

--***********************************************

LIBRARYieee;

USEieee.std_logic_1164.ALL;

ENTITYsssIS

PORT(

ai,bi:

INSTD_LOGIC;

mi,li:

INOUTSTD_LOGIC;

gi:

OUTSTD_LOGIC);

ENDsss;

ARCHITECTUREaOFsssIS

COMPONENTnot2--元件调用声明

PORT(a:

INSTD_LOGIC;

c:

OUTSTD_LOGIC);

ENDCOMPONENT;

COMPONENTnand22--元件调用声明

PORT(a,b:

INSTD_LOGIC;

c:

OUTSTD_LOGIC);

ENDCOMPONENT;

signalaa,bb:

STD_LOGIC;

BEGIN

u1:

not2

PORTMAP(ai,aa);

u2:

not2

PORTMAP(bi,bb);

u3:

nand22

PORTMAP(aa,bi,mi);

u4:

nand22

PORTMAP(bb,ai,li);

u5:

nand22

PORTMAP(mi,li,gi);

ENDa;

--***********************************************

方法2采用逻辑表达式的描述方式实现如图所示组合逻辑电路

--***********************************************

LIBRARYieee;

USEieee.std_logic_1164.ALL;

ENTITYsss2IS

PORT(

ai,bi:

INSTD_LOGIC;

mi,li:

inOUTSTD_LOGIC;

gi:

OUTSTD_LOGIC);

ENDsss2;

ARCHITECTUREaOFsss2IS

SIGNALaa,bb:

STD_LOGIC;

BEGIN

aa<=notai;

bb<=notbi;

mi<=aanandbi;

li<=bbnandai;

gi<=minandli;

ENDa;

--***********************************************

实验3-1.描述一个7段显示译码器逻辑(共阴极),仿真其功能。

LIBRARYieee;

USEieee.std_logic_1164.ALL;

ENTITYdecode4_7IS

PORT(

bcd:

INSTD_LOGIC_VECTOR(3downto0);

segment:

OUTSTD_LOGIC_VECTOR(6downto0));

ENDdecode4_7;

ARCHITECTUREqqqOFdecode4_7IS

BEGIN

PROCESS(bcd)

BEGIN

CASEbcdIS

WHEN"0000"=>segment<="0111111";--06fh

WHEN"0001"=>segment<="0000110";--106h

WHEN"0010"=>segment<="1011011";--25bh

WHEN"0011"=>segment<="1001111";--34fh

WHEN"0100"=>segment<="1100110";--466h

WHEN"0101"=>segment<="1101101";--56dh

WHEN"0110"=>segment<="1111100";--67ch

WHEN"0111"=>segment<="0000111";--707h

WHEN"1000"=>segment<="1111111";--87fh

WHEN"1001"=>segment<="1100111";--967h

WHENothers=>segment<="0000000";--others

ENDCASE;

ENDPROCESS;

ENDqqq;

--***********************************************

实验3-2.设计一个3bits的可逆计数器。

提示信息:

由名称可以知道,它的计数方式可以加(检测到CLK时钟的上升沿,计数器加1),也可以减(检测到CLK时钟的上升沿,计数器减1)。

使用一个控制信号DIR决定计数器是作加法或减法的动作。

LIBRARYieee;

USEieee.std_logic_1164.ALL;

USEieee.std_logic_unsigned.ALL;

ENTITYcount3IS

PORT(clk,dir:

INSTD_LOGIC;

q:

OUTSTD_LOGIC_VECTOR(2downto0));

ENDcount3;

ARCHITECTUREqqqOFcount3IS

signalq_3:

STD_LOGIC_VECTOR(2downto0);

BEGIN

q(0)<=q_3(0);

q

(1)<=q_3

(1);

q

(2)<=q_3

(2);

PROCESS(clk,dir)

BEGIN

IFclk'EVENTANDclk='1'THEN

IFdir='1'THEN

q_3<=q_3+'1';

else

q_3<=q_3-'1';

ENDIF;

ENDIF;

ENDPROCESS;

ENDqqq;

--***********************************************

实验4-1.如下表所示为四位双向移位寄存器74LS194的真值表,编写程序描述该逻辑,仿真其功能。

其中各端口功能说明如下:

D0~D3:

并行数码输入端。

Cr:

异步清0端,低电平有效。

SR,SL:

右移,左移串行数码输入端。

S1,S0:

工作方式控制端。

00不变、01左移、10右移、11置数。

LIBRARYieee;

USEieee.std_logic_1164.ALL;

ENTITYshift4IS

PORT(

cr,cp,sr,sl,s1,s0:

inSTD_LOGIC;

d:

inSTD_LOGIC_VECTOR(3downto0);

q:

OUTSTD_LOGIC_VECTOR(3downto0));

ENDshift4;

ARCHITECTUREqqqOFshift4IS

signalq_4:

STD_LOGIC_VECTOR(3downto0);

BEGIN

q(0)<=q_4(0);

q

(1)<=q_4

(1);

q

(2)<=q_4

(2);

q(3)<=q_4(3);

PROCESS(cr,cp,s1,s0)

BEGIN

IFcr='0'THEN

q_4<="0000";

elsifcp'EVENTANDcp='1'THEN

IFs1='1'ANDs0='0'THEN

q_4(3)<=sl;

q_4

(2)<=q_4(3);

q_4

(1)<=q_4

(2);

q_4(0)<=q_4

(1);

elsifs1='0'ANDs0='1'THEN

q_4(0)<=sr;

q_4

(1)<=q_4(0);

q_4

(2)<=q_4

(1);

q_4(3)<=q_4

(2);

elsifs1='1'ANDs0='1'THEN

q_4<=d;

else

ENDIF;

else

ENDIF;

ENDPROCESS;

ENDqqq;

--***********************************************

实验5-1.设计1个4位加减法器,实体名称为subadd4。

完成后仿真验证。

输入端口:

a,b——实现加法与减法运算的操作数输入(4位);

sub——控制端,值为’0’时实现加法运算,值为’1’时实现减法运算。

输出端口:

s——和与差输出(4位);

co——进位与借位输出。

LIBRARYieee;

USEieee.std_logic_1164.ALL;

USEieee.std_logic_unsigned.ALL;

ENTITYsubadd4IS

PORT(a,b:

INSTD_LOGIC_VECTOR(3downto0);

sub:

INSTD_LOGIC;

s:

OUTSTD_LOGIC_VECTOR(3downto0);

co:

OUTSTD_LOGIC);

ENDsubadd4;

ARCHITECTUREqqqOFsubadd4IS

signalss:

STD_LOGIC_VECTOR(4downto0);

BEGIN

PROCESS(a,b,sub)

BEGIN

IF(sub='0')THEN

ss<=a+b;

else

ss<=a-b;

ENDIF;

s(0)<=ss(0);

s

(1)<=ss

(1);

s

(2)<=ss

(2);

s(3)<=ss(3);

co<=ss(4);

ENDPROCESS;

ENDqqq;

--***********************************************

实验5-2.

(1)完成1位全加器的设计。

提示信息:

输入为A,B,C,其中A、B为输入数据,C为输入的进位标志位;输出为Sum和Carr,其中Sum为本次运算结果位,Carr为本次进位标志位。

步骤1.一位半加器设计。

--***********************************************

LIBRARYieee;

USEieee.std_logic_1164.all;

ENTITYhalf_adderIS

PORT(a,b:

INSTD_LOGIC;

s,co:

OUTSTD_LOGIC);

ENDhalf_adder;

ARCHITECTUREddddOFhalf_adderIS

signalc,d:

STD_LOGIC;

BEGIN

c<=aorb;

d<=anandb;

co<=notb;

s<=candd;

ENDdddd;

步骤2.一位全加器设计。

--***********************************************

LIBRARYieee;

USEieee.std_logic_1164.all;

ENTITYfull_adderIS

PORT(a,b,cin:

INSTD_LOGIC;

s,co:

OUTSTD_LOGIC);

ENDfull_adder;

ARCHITECTUREddddOFfull_adderIS

signalu0_s,u0_co,u1_co:

STD_LOGIC;

COMPONENThalf_adder--元件调用声明

PORT(a,b:

INSTD_LOGIC;

s,co:

OUTSTD_LOGIC);

ENDCOMPONENT;

BEGIN

u0:

half_adder

PORTMAP(a,b,u0_s,u0_co);

u1:

half_adder

PORTMAP(u0_s,cin,s,u1_co);

co<=u0_cooru1_co;

ENDdddd;

--***************************************************

实验5-2.

(2)完成4位全加法器的设计。

提示信息:

一个4位的全加法器可以由4个1位的全加法器级联而成。

LIBRARYieee;

USEieee.std_logic_1164.all;

ENTITYfull4IS

PORT(cin:

INSTD_LOGIC;

a,b:

INSTD_LOGIC_VECTOR(3downto0);

co:

OUTSTD_LOGIC;

s:

OUTSTD_LOGIC_VECTOR(3downto0));

ENDfull4;

ARCHITECTUREddddOFfull4IS

SIGNALc:

STD_LOGIC_VECTOR(3downto0);

COMPONENTfull_adder--元件调用声明

PORT(a,b,cin:

INSTD_LOGIC;

s,co:

OUTSTD_LOGIC);

ENDCOMPONENT;

BEGIN

u0:

full_adder

PORTMAP(a(0),b(0),cin,s(0),c(0));

u1:

full_adder

PORTMAP(a

(1),b

(1),c(0),s

(1),c

(1));

u2:

full_adder

PORTMAP(a

(2),b

(2),c

(1),s

(2),c

(2));

u3:

full_adder

PORTMAP(a(3),b(3),c

(2),s(3),c(3));

co<=c(3);

ENDdddd;

--**************************************************

VHDL语言课下练习:

1.非同步复位/置位D触发器的设计。

设计思路:

参考P156/例7-32

--**************************************************

2.设计一个串行输入、串行输出移位寄存器它具有两个输入端:

数据输入端a,时钟输入端clk;一个数据输出端b。

设计思路:

参考P159-160/例7-37/例7—36。

--**************************************************

3.设计一个带允许端的十二进制计数器。

该计数器由4个触发器构成,clr输入端用于清零,en端用于控制计数器工作,clk为时钟脉冲(计数脉冲)输入端,qa,qb,qc,qd为计数器的4位二进制计数值输出端。

设计思路:

参考P165/例7-41。

--**************************************************

4.设计一个可并行置数,并行输出的3位移位寄存器。

输入端口:

Clk——时钟输入端;

Clrn——同步清零端,低电平有效;

Sh——移位控制端,低电平有效;

Di——移位输入端;

Ldn——置数控制端,高电平有效;

D——置数输入端(3位)。

清零操作优先级别最高,其次是移位操作,最后是置数操作。

移位方向不限定。

输出端口:

Q——输出端(3位)。

LIBRARYieee;

USEieee.std_logic_1164.all;

ENTITYshift3IS

PORT(Sh,Ldn,Di,Clk,Clrn:

INSTD_LOGIC;

D:

INSTD_LOGIC_VECTOR(2DOWNTO0);

Q:

OUTSTD_LOGIC_VECTOR(2DOWNTO0));

ENDshift3;

ARCHITECTUREaOFshift3IS

Signaltmp:

STD_LOGIC_VECTOR(2DOWNTO0);

BEGIN

PROCESS(Clk)

BEGIN

IF(Clk'EventANDClk='1')THEN

IFClrn='0'THEN

tmp<="000";

ELSIFSh='1'THEN

tmp

(2)<=Di;

tmp

(1)<=tmp

(2);

tmp(0)<=tmp

(1);

ELSIFLdn='1'THEN

tmp<=D;

ENDIF;

ENDIF;

ENDPROCESS;

Q<=tmp;

ENDa;

--**************************************************

5.设计1个8位二进制数的求补电路,(说明:

补码求取规则为正数的补码与其原码相同,负数的补码等于其原码除符号位保持不变,其余各位按位取反,再在最低位加1。

输入端口:

a——原码输入(8位)。

输出端口:

b——补码输出(8位)。

设计思路:

原码输入的最高位a(7)为符号位,为零时b=a,为零时b=nota+‘1’,

参考P146/例7-16

--**************************************************

6.设计一个两位数的十进制计数器(十进制计数器即按照8421BCD码进行计数的电路)。

输入端口:

Clrn——同步清零端,低电平有效;

Load——同步置数端,低电平有效;且清零操作优先于置数操作。

Ent1——计数使能端;

Clk——时钟输入端。

Da,Db——置数输入端,其中Da对应个位,Db对应十位。

输出端口:

Qa,Qb——计数输出端,其中Qa对应个位,Qb对应十位;

Co——进位输出端。

LIBRARYieee;

USEieee.std_logic_1164.all;

USEieee.std_logic_unsigned.all;

ENTITYbcd2IS

PORT(clrn,Load,ent1,clk:

INSTD_LOGIC;

da,db:

INSTD_LOGIC_VECTOR(3downto0);

qa,qb:

OUTSTD_LOGIC_VECTOR(3downto0);

co:

OUTSTD_LOGIC);

ENDbcd2;

ARCHITECTUREaOFbcd2IS

SIGNALent2:

STD_LOGIC;

BEGIN

PROCESS(clk)

VARIABLEtmpa,tmpb:

STD_LOGIC_VECTOR(3downto0);

BEGIN

IF(clk'eventANDclk='1')THEN

IFclrn='0'THEN

tmpa:

="0000";

tmpb:

="0000";

ELSIFLoad='0'THEN

tmpa:

=Da;

tmpb:

=Db;

ELSIFEnt1='1'THEN

IFtmpa="1001"THEN

tmpa:

="0000";

IFtmpb="1001"THEN

tmpb:

="0000";

ELSE

tmpb:

=tmpb+1;

ENDIF;

ELSE

tmpa:

=tmpa+1;

ENDIF;

ENDIF;

ENDIF;

Qa<

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

当前位置:首页 > IT计算机 > 电脑基础知识

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

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