EDA复习文档格式.docx

上传人:b****3 文档编号:17270881 上传时间:2022-11-30 格式:DOCX 页数:23 大小:20.61KB
下载 相关 举报
EDA复习文档格式.docx_第1页
第1页 / 共23页
EDA复习文档格式.docx_第2页
第2页 / 共23页
EDA复习文档格式.docx_第3页
第3页 / 共23页
EDA复习文档格式.docx_第4页
第4页 / 共23页
EDA复习文档格式.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

EDA复习文档格式.docx

《EDA复习文档格式.docx》由会员分享,可在线阅读,更多相关《EDA复习文档格式.docx(23页珍藏版)》请在冰豆网上搜索。

EDA复习文档格式.docx

ENDPROCESS;

4.2.1D触发器的VHDL描述

【例4-6】

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYDFF1IS

PORT(CLK:

INSTD_LOGIC;

D:

Q:

OUTSTD_LOGIC);

END;

ARCHITECTUREbhvOFDFF1IS

SIGNALQ1:

STD_LOGIC;

--类似于在芯片内部定义一个数据的暂存节点

PROCESS(CLK,Q1)

IFCLK'

EVENTANDCLK='

1'

THENQ1<

=D;

ENDPROCESS;

Q<

=Q1;

--将内部的暂存数据向端口输出(双横线--是注释符号)

ENDbhv;

4.3.1半加器描述

【例4-16】

LIBRARYIEEE;

--半加器描述

(1):

布尔方程描述方法

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYh_adderIS

PORT(a,b:

INSTD_LOGIC;

co,so:

OUTSTD_LOGIC);

ENDENTITYh_adder;

ARCHITECTUREfh1OFh_adderis

BEGIN

so<

=NOT(aXOR(NOTb));

co<

=aANDb;

ENDARCHITECTUREfh1;

【例4-17】

--半加器描述

(2):

真值表描述方法

PORT(a,b:

SIGNALabc:

STD_LOGIC_VECTOR(1DOWNTO0);

--定义标准逻辑位矢量数据类型

abc<

=a&

b;

--a相并b,即a与b并置操作

PROCESS(abc)

CASEabcIS--类似于真值表的CASE语句

WHEN"

00"

=>

so<

='

;

co<

;

01"

10"

11"

WHENOTHERS=>

NULL;

ENDCASE;

ENDARCHITECTUREfh1;

【例4-18】

LIBRARYIEEE;

--或门逻辑描述

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYor2aIS

INSTD_LOGIC;

c:

ENDENTITYor2a;

ARCHITECTUREoneOFor2aIS

c<

=aORb;

【例4-19】

LIBRARYIEEE;

--1位二进制全加器顶层设计描述

ENTITYf_adderIS

PORT(ain,bin,cin:

cout,sum:

ENDENTITYf_adder;

ARCHITECTUREfd1OFf_adderIS

COMPONENTh_adder--调用半加器声明语句

PORT(a,b:

co,so:

ENDCOMPONENT;

COMPONENTor2a

PORT(a,b:

ENDCOMPONENT;

SIGNALd,e,f:

STD_LOGIC;

--定义3个信号作为内部的连接线。

u1:

h_adderPORTMAP(a=>

ain,b=>

bin,co=>

d,so=>

e);

--例化语句

u2:

e,b=>

cin,co=>

f,so=>

sum);

u3:

or2aPORTMAP(a=>

d,b=>

f,c=>

cout);

ENDARCHITECTUREfd1;

4.4四进制计数器设计

【例4-20】

ENTITYCNT4IS

PORT(CLK:

INBIT;

BUFFERINTEGERRANGE15DOWNTO0);

END;

ARCHITECTUREbhvOFCNT4IS

BEGIN

PROCESS(CLK)

THEN

Q<

=Q+1;

ENDbhv;

4.5一般加法计数器设计

【例4-22】

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYCNT10IS

PORT(CLK,RST,EN:

CQ:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

COUT:

ENDCNT10;

ARCHITECTUREbehavOFCNT10IS

PROCESS(CLK,RST,EN)

VARIABLECQI:

STD_LOGIC_VECTOR(3DOWNTO0);

IFRST=‘1’THENCQI:

=(OTHERS=>

’0’);

--计数器异步复位

ELSIFCLK’EVENTANDCLK=‘1’THEN--检测时钟上升沿

IFEN=‘1’THEN--检测是否允许计数(同步使能)

IFCQI<

9THENCQI:

=CQI+1;

--允许计数,检测是否小于9

ELSECQI:

‘0’);

--大于9,计数值清零

IFCQI=9THENCOUT<

=‘1’;

--计数大于9,输出进位信号

ELSECOUT<

=‘0’;

CQ<

=CQI;

--将计数值向端口输出

ENDbehav;

4.5.3含并行置位的移位寄存器设计

【例4-23】

ENTITYSHFRTIS--8位右移寄存器

PORT(CLK,LOAD:

DIN:

INSTD_LOGIC_VECTOR(7DOWNTO0);

QB:

ENDSHFRT;

ARCHITECTUREbehavOFSHFRTIS

PROCESS(CLK,LOAD)

VARIABLEREG8:

STD_LOGIC_VECTOR(7DOWNTO0);

IFCLK'

IFLOAD='

THENREG8:

=DIN;

--由(LOAD='

)装载新数据

ELSEREG8(6DOWNTO0):

=REG8(7DOWNTO1);

ENDIF;

QB<

=REG8(0);

--输出最低位

ENDPROCESS;

6.1.4进程中的信号与变量赋值

【例6-1】

USEIEEE.STD_LOGIC_1164.all;

ENTITYDFF3IS

PORT(CLK,D1:

Q1:

ARCHITECTUREbhvOFDFF3IS

PROCESS(CLK)

VARIABLEQQ:

THENQQ:

=D1;

Q1<

=QQ;

【例6-2】

ARCHITECTUREbhvOFDFF3IS

SIGNALQQ:

THENQQ<

【例6-3】

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYDFF3IS

PORT(CLK,D1:

OUTSTD_LOGIC);

SIGNALA,B:

PROCESS(CLK)BEGIN

A<

B<

=A;

Q1<

=B;

【例6-4】

VARIABLEA,B:

A:

B:

【例6-7】

ENTITYmux4IS

PORT(i0,i1,i2,i3,a,b:

q:

ENDmux4;

ARCHITECTUREbody_mux4OFmux4IS

process(i0,i1,i2,i3,a,b)

variablemuxval:

integerrange7downto0;

begin

muxval:

=0;

if(a='

)thenmuxval:

=muxval+1;

endif;

if(b='

=muxval+2;

casemuxvalis

when0=>

q<

=i0;

when1=>

=i1;

when2=>

=i2;

when3=>

=i3;

whenothers=>

null;

endcase;

endprocess;

ENDbody_mux4;

【例6-8】

LibraryIEEE;

ENTITYSHIFTIS

PORT(CLK,C0:

--时钟和进位输入

MD:

INSTD_LOGIC_VECTOR(2DOWNTO0);

--移位模式控制字

--待加载移位的数据

OUTSTD_LOGIC_VECTOR(7DOWNTO0);

--移位数据输出

CN:

--进位输出

ENDENTITY;

ARCHITECTUREBEHAVOFSHIFTIS

SIGNALREG:

SIGNALCY:

BEGIN

PROCESS(CLK,MD,C0)

CASEMDIS

001"

REG(0)<

=C0;

REG(7DOWNTO1)<

=REG(6DOWNTO0);

CY<

=REG(7);

--带进位循环左移

WHEN“010”=>

--自循环左移

011"

REG(7)<

=REG(0);

REG(6DOWNTO0)<

=REG(7DOWNTO1);

--自循环右移

100"

REG(7)<

--带进位循环右移

101"

REG(7DOWNTO0)<

=D(7DOWNTO0);

--加载待移数

REG<

=REG;

=CY;

--保持

QB(7DOWNTO0)<

=REG(7DOWNTO0);

CN<

=CY;

--移位后输出

ENDBEHAV;

6.2.1三态门设计

【例6-9】

ENTITYtri_sIS

port(enable:

datain:

dataout:

OUTSTD_LOGIC_VECTOR(7DOWNTO0));

ENDtri_s;

ARCHITECTUREbhvOFtri_sIS

PROCESS(enable,datain)

IFenable='

THENdataout<

=datain;

ELSEdataout<

="

ZZZZZZZZ"

ENDIF;

6.2.2双向端口设计

【例6-10】

libraryieee;

useieee.std_logic_1164.all;

entitytri_stateis

port(control:

instd_logic;

in1:

instd_logic_vector(7downto0);

inoutstd_logic_vector(7downto0);

x:

outstd_logic_vector(7downto0));

endtri_state;

architecturebody_trioftri_stateis

process(control,q,in1)

if(control='

)thenx<

=q;

="

elseq<

=in1;

x<

ZZZZZZZZ“;

endif;

endbody_tri;

6.2.3三态总线电路设计

【例6-12】

ENTITYtristate2IS

port(input3,input2,input1,input0:

INSTD_LOGIC_VECTOR(7DOWNTO0);

enable:

INSTD_LOGIC_VECTOR(1DOWNTO0);

output:

OUTSTD_LOGIC_VECTOR(7DOWNTO0));

ENDtristate2;

ARCHITECTUREmultiple_driversOFtristate2IS

PROCESS(enable,input3,input2,input1,input0)

IFenable="

THENoutput<

=input3;

ELSEoutput<

=(OTHERS=>

'

Z'

);

=input2;

IFenable="

=input1;

=input0;

ENDmultiple_drivers;

数据溢出及其处理

解决方法—用并置符扩展位,但不能解决减法溢出的问题

useieee.std_logic_unsigned.all;

entityarith_unsignedis

Port(a,b:

instd_logic_vector(3downto0);

s1,s2:

outstd_logic_vector(4downto0));

endarith_unsigned;

architectureoneofarith_unsignedis

s1<

=('

&

a)+('

b);

s2<

a)-('

end;

减法溢出的解决方法—用并置符在数据前补符号位:

数据前用并置符补符号位后,既解决了加法溢出的问题,也解决了减法溢出的问题!

entityarith_signedis

endarith_signed;

architectureoneofarith_signedis

=(a(3)&

a)+(b(3)&

a)-(b(3)&

8.1.3一般有限状态机的设计

【例8-1】

ENTITYs_machineIS

PORT(clk,reset:

state_inputs:

INSTD_LOGIC_VECTOR(0TO1);

comb_outputs:

OUTINTEGERRANGE0TO15);

ENDs_machine;

ARCHITECTUREbehvOF

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

当前位置:首页 > 高中教育 > 语文

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

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