EDA期中考试复习_第1页
EDA期中考试复习_第2页
EDA期中考试复习_第3页
EDA期中考试复习_第4页
EDA期中考试复习_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

EDA期中考试复习

复习纲要:

第一章:

1.概念一一问答题,如:VHDL与软件语言特点、设计流程等

2.习题部分

第三章:

1.程序语法,名称、功能、作用

1.顺序语句:IF;CASE——写在Process中;理解上的“顺序性

2.VHDL常见语法要素

2.并行语句:whenelse;withselect

3.编程题:参考习题

4.改错题:修改语法错误

第一章资料(重点加粗、下划线)

1-1EDA技术与ASIC设计和FPGA开发有什么关系?FPGA在ASIC设计中有什么用途?P3~4

EDA技术与ASIC设计和FPGA开发有什么关系?答:利用EDA技术进行电子系统设计的

最后目标是完成专用集成电路ASIC的设计和实现;FPGA和CPLD是实现这一途径的主流器

件。FPGA和CPLD的应用是EDA技术有机融合软硬件电子设计技术、SoC(片上系统)和ASIC

设计,以及对自动设计与自动实现最典型的诠释。

FPGA在ASIC设计中有什么用途?答:FPGA和CPLD通常也被称为可编程专用IC,或可

编程ASIC。FPGA实现ASiC设计的现场可编程器件。

1-2与软件描述语言相比,VHDL有什么特点?P4~6

答:编译器将软件程序翻译成基于某种特定CPU的机器代码,这种代码仅限于这种CPU

而不能移植,并且机器代码不代表硬件结构,更不能改变CPU的硬件结构,只能被动地为

其特定的硬件电路结构所利用。

综合器将VHDL程序转化的目标是底层的电路结构网表文件,这种满足VHDL设计

程序功能描述的电路结构,不依赖于任何特定硬件环境;具有相对独立性。综合器在将

VHDL(硬件描述语言)表达的电路功能转化成具体的电路结构网表过程中,具有明显的能动

性和创造性,它不是机械的一一对应式的“翻译”,而是根据设计库、工艺库以及预先设置

的各类约束条件,选择最优的方式完成电路结构的设计。

1-3什么是综合?有哪些类型?综合在电子设计自动化中的地位是什么?P6

什么是综合?答:在电子设计领域中综合的概念可以表示为:将用行为和功能层次表达

的电子系统转换为低层次的便于具体实现的模块组合装配的过程。

有哪些类型?答:(1)从自然语言转换到VHDL语言算法表示,即自然语言综合。(2)从

算法表示转换到寄存器传输级(RegisterTransportLevel,RTL),即从行为域到结构域的综

合,即行为综合。(3)从RTL级表示转换到逻辑门(包括触发器)的表示,即逻辑综合。(4)

从逻辑门表示转换到版图表示(ASIC设计),或转换到FPGA的配置网表文件,可称为版图综

合或结构综合。

综合在电子设计自动化中的地位是什么?答:是核心地位(见图卜3)。综合器具有更

复杂的工作环境,综合器在接受VHDL程序并准备对其综合前,必须获得与最终实现设计电

路硬件特征相关的工艺库信息,以及获得优化综合的诸多约束条件信息;根据工艺库和约束

条件信息,将VHDL程序转化成电路实现的相关信息。

1-4在EDA技术中,自顶向下的设计方法的重要意义是什么?P8~10

答:在EDA技术应用中,自顶向下的设计方法,就是在整个设计流程中各设计环节逐

步求精的过程。

1-5IP在EDA技术的应用和发展中的意义是什么?P23-25

答:IP核具有规范的接口协议,良好的可移植与可测试性,为系统开发提供了可靠的

保证。

2-6叙述EDA的FPGA/CPLD设计流程,以及涉及的EDA工具及其在整个流程中的作用。

(P12~14)

答:L设计输入(原理图/HDL文本编辑)(EDA设计输入器将电路系统以一定的表达方式

输入计算机);2.综合(EDA综合器就是将电路的高级语言(如行为描述)转换成低级的,可

与FPGA/CPLD的基本结构相映射的网表文件或程序。);3适配(EDA适配器的功能是将由

综合器产生的网表文件配置于指定的目标器件中,使之产生最终的下载文件,如JEDEC、JAM

格式的文件。);4.时序仿真(EDA时序仿真器就是接近真实器件运行特性的仿真,仿真文件

中已包含了器件硬件特性参数,因而,仿真精度高。)与功能仿真(EDA功能仿真器直接对

VHDL原理图描述或其他描述形式的逻辑功能进行测试模拟,以了解其实现的功能是否满

足原设计的要求,仿真过程不涉及任何具体器件的硬件特性。);5.编程下载(EDA编程下

载把适配后生成的下载或配置文件,通过编程器或编程电缆向FPGA或CPLD下载,以便进

行硬件调试和验证(HardwareDebugging)。);6.硬件测试(最后是将含有载入了设计的FPGA

或CPLD的硬件系统进行统一测试,以便最终验证设计项目在目标系统上的实际工作情况,

以排除错误,改进设计。其中EDA的嵌入式逻辑分析仪是将含有载入了设计的FPGA的硬件

系统进行统一测试,并将测试波形在PC机上显示、观察和分析。)。

图14自顶向下的设计流程

第三章资料

基础部分(可不看)

例3-1

libraryieee;

useieee.std_logic_1164.all;

entitymux21ais---关键词entity后为实体名

port(a,b,s:inbit;

y:outbit);

endentitymux21a;

architecturebhvofmux21ais---关键词architecture后为结构体名

begin

process(a,b,s)

begin

if(s='1')theny<=a;

elsey<=b;

endif;

endprocess;

endarchitecturebhv;

1.条件语句

名称:IF_THEN_ELSE

功能作用:属于顺序语句。

用于条件语句的判断表达式可以是一个值,也可以是更复杂的逻辑或运算表达式,

如例3-1中的(s='1')或以下IF语句表述

ifathen

if(sl=,0')and(s2=*T)or(c<b+l)then...

中的a或(sl='0')and(s2=T)or(c<b+l)«其表达形式不同,但本质上都输出一个用于

作逻辑判断的布尔值:“真”或“伪”。其中的and和or是逻辑与和逻辑或的逻辑操作符。

2.数据类型

名称:包括位矢量bit、整数类型integer、布尔类型boolean和标准逻辑类型stdjogic

等。

功能作用:详见p59

3.进程语句和顺序语句

名称:process

功能作用:所有顺序描述语句都必须放在进程语句中(也包括放在过程语句中)。

在一个结构体中可以包含任意个进程语句结构,所有的进程语句本身都是并行语

句,而由任一进程process引导的语句(包含在其中的语句)属于顺序语句。

4.端口语句和端口信号名

名称:port

功能作用:描述电路的端口及端口信号必须用端口语句port()来引导,并在语句结尾处

加分号

5.端口模式

名称:in,out,inout,buffer

功能作用:in:输入端口。

out:输出端口。

inout:双向端口。

buffer:缓冲端口。

6.关键字

名称:entity,erchitecture,end,if,else,else,out,in,and,or等

7.标识符

设计者程序中自定义。

考试范围(主要是程序结构和语句)

3.2半加器

例3-2

libraryieee;

useieee.std_logic_1164.all;

entityh_adderis

port(

A:instd_logic;

B:instdlogic;

SO:outstd_logic;

CO:outstdlogic

);

endentityhadder;

architecturefhlofh_adderis

begin

SO<=AxorB;---并行语句没有先后顺序

CO<=AandB;---并行语句没有写在process中

endarchitecturefhl;

串行语句:写在进程的内部

3.3四选一多路选择器

4选1多路选择器及case语句表述方式

例3-3

libraryieee;

useieee.stdlogic1164.all;

entitymux41ais

port(a,b,c,d,sO,si:instdlogic;

y:outstd_logic

);

endentitymux41a;

architecturebhvofmux41ais

signals:std_logic_vector(1downto0);—s是信号名,说明语句部分:定义当

前语句中间的信号量

begin

s<=si&s0;--&并量连接符&,0'=>'10'

process(si,s0)

begin

case(s)is

when"00'=>y<=a;

when〃01〃=>y<=b;

when〃10〃=>y<=c;

when=>y<=d;

whenothers=>null;

endcase;

endprocess;

endbhv;

在此进程中的的case语句一定是顺序语句。

1.CASE语句

case语句属于顺序语句,必须放在进程语句process中使用。

表述如下:

case〈表达式》is

when<选择符或标识符>=><顺序语句);...;<顺序语句》;

when〈选择符或标识符)=><顺序语句);...;〈顺序语句》;

whenothers=><顺序语句);

endcase;

2.case语句多条件选择值的一般表达式如下:

选择值[|选择值]

选择值可以有四种不同的表达方式:

单个普通值,如6。

数值选择范围,如(2to4),表示2、3或4.

并列数值,如3|5,表示取值3或5。

混合方式,以上三种方式混合。

如例3-4

sel:inintegerrange0to15;

caseselis

when0=>zl<=〃010〃;

when1|3=>z2<=〃110〃;

when4to7|2=>z3<="Oil";

whenothers=>z4<=〃111〃;

endcase;

3.3.3IEEE库预定义标准逻辑位与矢量(P69)

3.3.4预定义标准数据类型(P70)

3.3.5信号定义和数据对象(P71)

3.3.6并置操作符&

操作符&表示信号或是数组合并起来形成新的数组矢量。例如:"VH"&"DL"的结果是〃VHDL”;

'0'&'[&'[的结果为"011"。

语句S<=sl&sO的作用是令:S(l)<=si;S(0)<=sOo

3.3.74选1多路选择器的VHDL不同描述方式

【例3-6]【例3-7】【例3-8]

S<=sl&s0;S<=sl&s0;

PROCESS(si,SO)BEGINS<=slsO;WITHSSELECT

IF(S=,,0011)THENy<=a;y<=aWHENS=,10011ELSEy<=aWHEN"00”,

ELSIF(S=n01n)THENy<=b;bWHENS="01”ELSEbWHEN"01”,

ELSIE(S=”10”)THENy<=c;CWHENS=n10,1ELSECWHEN"10”,

ELSEy<=d;ENDIF;d;dWHEN“11”;

ENDPROCESS;ENDBHVENDBHV;

ENDBHV;

顺序语句并行语句并行语句

条件信号赋值选择信号赋值

例3-6的语句表述结构与例3-1相似,只是if语句的条件判断式的变量变成了两位二进制

数,所以就有了四种可能的选择。IF语句形式如下:

IF_THEN_ELSE_ELSE_ENDIF

1.WHEN_ELSE条件信号赋值语句

该语句属于并行语句,不需要进程语句process引导。也称并行赋值语句(相对于进程中

的赋值语句),一般表达式如下:

赋值目标<=表达式WHEN赋值条件ELSE

表达式WHEN赋值条件ELSE

表达式;

需要注意由于条件测试的顺序性,条件信号赋值语句中的第一子句具有最高赋值优先级。

z<-awhenpl='1'else

bwhenp2=T'else

c;

注意只有最后一个"表达式"后有个分号。

2.选择信号赋值语句

with选择表达式select

赋值目标信号<=表达式when选择值,

表达式when选择值,

表达式when选择值;

由于属于并行语句,选择信号赋值语句不在进程中应用,但其功能却与进程中的case语句

的功能相似。

选择信号赋值语句在条件句中未能覆盖所有条件选择时,要求在末尾加上与NULL类似含义

的关键词UNAFFECTEDo

UNAFFECTEDWHENOTHERS;

3.4全加器

3.4.1全加器设计

例3-9

libraryieee;—全加器顶层设计描述

useieee.std_logic_1164.all;

entityfadderis

port(ain,bin,cin:instd_logic;

cout,sum:outstdlogic

);

endentityf_adder;

architecturefdloff_adderis

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

port(A,B:instd_logic;CO,SO:outstd_logic);

endcomponent;

componentor2a---调用或门元件声明语句,or2a是实体名不是文件名

port(a,b:instd_logic;c:outstd_logic);

endcomponent;

signalnetl,net2,net3:stdlogic;--定义3个信号作为内部的连接线,信号量的导线

begin

ul:h_adderportmap(A=>ain,B=>bin,CO=>net2,SO=>netl);

u2:h_adderportmap(netl,cin,net3,sum);--例化语句,u2模块的编号

u3:or2aportmap(a=>net2,b=>net3,c=>cout);

endarchitecturefdl;

例3-10

libraryieee;

useieee.std_logic_1164.all;

entityor2ais

port(a,b:instd_logic;c:outstd_logic);

endentity;

architectureoneofor2ais

begin

c<=aorb;

endarchitectureone;

注意:这里假设参与设计的半加器文件、或门文件和全加器顶层设计文件存放于同一文件夹

3.4.2VHDL例化语句

例化语句分两个部分组成,第一部分是将一个现成的设计实体定义为一个元件,语句的功能

是对待调用的这个元件做H1调用声明,最简表达式如下:

component元件名is

port(端口名表);

endcomponent文件名;

命名方式与实体中port()语句一致,即对于需要调用的元件,只需要将该元件对应的VHDL

程序的实体描述直接复制过来即可,即只需将entity改写为component»

元件定义语句必须放在结构体的architecture和begin之间。(调用声明的端口说明中的

端口符号可与原文件不同但排列方式、端口模式、数据类型、功能定义等必须相同)。

元件例化语句的第二部分则是此元件与当前设计实体(顶层文件)中元件间及端口的连接说

明。此语句所谓的“端口名关联法”有如F表达式:

例化名:元件名portmap([端口名=>]连接端口名,一.);

其中的例化名是必须存在的。

对应于例3-9中的元件名有hadder,or2a,其例化名分别为ul,u2,u3.

portmap是端口映射,或端口连接的意思...P76-77

位置关联法(位置映射法),关联表述的信号位置十分重要,不能放错;而且,一旦关联例

化语句确定后,被连接的元件的源文件中的端口表内的信号排列位置就不能再变动了。

3.4.38位加法器设计及算术操作符应用(加法器应用题P77)

例3-11是直接利用加法算术操作符“+”完成的8位加法器的VHDL程序

libraryieee;

useieee.std_logic_1164.all;

useieee.stdlogicunsigned.all;-unsigned无符号数,此程序包中包含算术操作符的重载函数

entityadder8bis

port(A,B:instd_logic_vector(7downto0);—vector位矢量

cin:instd_logic;

cout:outstd_logic;

dout:outstd_logic_vector(7downto0)

);

endentityadder8b;

architecturebhvofadder8bis

signaldata:std_logic_vector(8downto0);

begin

data<=('O'&A)+('O'&B)+(〃00000000〃&cin);一&并置连接符

cout<=data(8);

dout<=data(7downto0);

endarchitecturebhv;

3.5乘法器

3.5.1统计位矢中含'1'个数的电路模块设计

例3-12所描述的电路是一个统计输入的8位位矢中含'1,个数的程序。

libraryieee;

useieee.stdlogic1164.all;

useieee.std_logic_unsigned.all;

entitycntcis

port(din:instd_logic_vector(7downto0);

cnth:outstdlogic_vector(3downto0));

endentitycntc;

architecturebhvofcntcis

begin

process(din)

variableQ:std_logic_vector(3downto0);

begin

Q:=〃0000〃;

fornin0to7loop―n是loop的循环变量

if(din(n)='1')thenQ:=Q+l;

endif;

endloop;

cnth<=Q;

endprocess;

endbhv;

改程序有三个需要注意的语句结构:

(1)变量关键词variable的用法。

变量variable与信号signal一样,都属于数据对象,在此程序在的功能与信号相似,

但变量的赋值符号与信号的赋值符号不同,信号的赋值符号是“〈=”,而变量的赋值符号是

“:=”。与信号不同,变量的功能主要用于数据的暂存,而且只能在进程中定义变量,所

以,变量无法将数据传递出进程。

(2)程序中的if语句没有关键词else。这种用法是一种条件响应不完整的现象,即没有

表达当条件(din(n)='0')时作何处理。

(3)程序使用了循环语句即loop语句的一种类型。

3.5.2FOR_LOOP循环语句用法

loop语句的常用表达方式有如下两种:

(1)单个loop语句

[loop标号:]loop

顺序语句

endloop[loop标号];

这种循环方式是一种最简答的语句形式,它的循环方式需引入其他控制语句(如exit语句)

后才能确定:"loop标号”可任选。用法如下:

L2:loop

a:=a+1;

exitL2whena>10;一当a大于10跳出循环

endloopL2;

此程序的循环方式由exit语句确定,即当a>10时结束执行a:=a+l的循环。

(2)FORLOOP语句,语法格式如下:

[loop标号:]for循环变量,in循环次数范围loop

顺序语句

endloop[loop标号];

FOR后血的“循环变量”是一个临时变量,如n,属于loop语句的局部变量,不必事先定义。

这个变量只能作为赋值源,不能被赋值,它由loop语句自动定义。使用时应当注意,在loop

语句范围内不要再使用其他与此循环变量同名的标识符,如n。

3.5.3移位相加型乘法器

例3-13是基于移位相加原理的4x4位乘法器的VHDL程序。

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

useieee.std_logic_arith.all;

entitymult4bis

generic(S:integer:=4);一定义参数S为整数类型且等于4便于修改电路规模

port(R:outstd_logic_vector(2*Sdownto1);

A,B:instd_logic_vector(Sdownto1)

);

endentitymuIt4b;

architectureoneofmult4bis

signalAO:Std_logic_vector(2*Sdownto1);-2*S为8表示8位(S为4位“0000”)

begin

A0<=convstdlogicvector(0,S)&A;一类型转换函数

process

variableRI:stdlogicvector(2*Sdownto1);一定义变量数据类型

begin

RI:=(others=>'O');--变量赋值,若S=4,则此句等效于RI:="00000000”

foriin1toSloop

if(B(l)=’1')then

RI:=RI+to_stdlogicvector(to_bitvector(A0)SLL(i-l)

endif;

endloop;

R<=RI;

endprocess;

endarchitectureone;

3.5.4GENERIC参数定义语句

GENERIC语句也像端口定义语句那样常常与port语句并行出现。

一般地,参数传递说明语句(GENERIC语句)是种常数参数的端口界面,常以•种说明的

形式放在实体或块结构体前的说明部分。十分方便地改变一个设计实体或一个元件的内部电

路结构和规模。

参数传递说明语句的一般书写方式如下:

GENERIC(常数名:数据类型[:设定值]

{:常数名:数据类型[:设定值]});

GENERIC语句能(在编译过程中)从外部动态地接受赋值,以此类似于端口port。

将GENERIC语句放在实体定义语句中间,且放在端口说明语句前面。

3.5.5整数数据类型

在例3-13中的GENERIC语句中,定义参数S的数据类型是整数类型INTEGER。整数数据类

型INTEGER的元素包含正整数、负整数和零。作无符号数处理。

在定义整数类型时,VHDL综合器通常要求使用关键词range构成的子句来为所定义的数限

定范围,然后根据所限定的范围来决定表示此信号或变量的二进制数位数。

如以下定义表述:

signakQ:integerrange15downto0;

定义Q的数据对象是信号,数据类型是整数,并限定Q的取值范围是0T5,共16个值,可

用二进制数表示。因此,VHDL综合器自动将Q综合成由四条信号线构成的总线方式信号:Q

(3),Q(2),Q⑴和Q(l)。

整数常量的书写方式如下:

1,35-----H进制整数1和35

10E3一一十进制整数,等于十进制整数1000,E为科学计数法

16#D9#——K六进制整数,等于十六进制数据D9H

8#720#—―八进制整数,等于八进制数7200

2#11010010»——二进制整数,等于二进制数11010010B

注意在语句中,整数的表达不加引号,如1、0、25等

自然数类型NATURAL是整数类型的一个子类型,它包含0和所有正整数。

3.5.6省略赋值操作符

一般地,为了简化表达和位数不定情况下的赋值,可以使用短语“(others=>x)”,这是一

个省略赋值操作符,它可以在较多位的位矢量赋值中省略化赋值,如有

signaldl:std_logic_vector(4downto0);

variableal:std_logic_vector(15downto0);

dl<=(others=>'T);

al:=(others=>'0');

最下的语句等同于:dl="11111";al:="0000000000000000".

利用“(others=>x)”还可以给位矢量的某一部分位赋值之后再使用others给其余的位赋值

如下:dl<=(l=>e(3),3=>e(5),others=>e(1));

上式的1和3分别表示dl的第1位dl(1)和dl的第三位dl(3)o此式的含义是用e(3)的值

取代dl(l)的值,用e(5)的值取代dl(3)的值,dl余下的3个位的值都用e(l)取代。也可改

写为如下:

dl〈=e(l)&e(5)&e(l)&e(3)&e(l);

3.5.7移位操作符

六种移位操作符SLL、SRL、SLA,SRA、ROL和ROR

移位操作符格式如下:

标识符移位操作符移位位数;一如“10110001”SRL3,结果是“00010110”

SLL是将位矢向左移,右边跟进的位补零;

SRL的功能恰好与SLL相反;

ROL的位移方式稍有不同,它们移出的位将用于依次填补位移空的位,执行是的循环式位移

方式;

SLA和SRA是算术位移操作符,其移空位用最初的首位来填补。

例3-14

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitydecoder3to8is

port(din:instd_logic_vector(2downto0);一3位二进制

dout:outbit_vector(7downto0)—数据类型为位矢量

);

endentitydecoder3to8;

architecturebehaveofdecoder3to8is

begin

dout〈二〃00000001〃SLLconv_integer(din);--被移位部分是常数

endarchitecturebehave;

3.5.8各类运算操作对数据类型的要求(程序例子p86)

淡3-2VHDL操作符列表给出了不同数据类型定义和用法

类型操作符功能操作数数据类型

+加整数

—减整数

&并置一维数组

*乘整数和实数(包括浮点数)

/除整数和实数(包括浮点数)

MOD取模整数

REM取余整数

算术操作符SLL逻辑左移BIT、BITJ7ECTOR或布尔型一维数组

SRL逻辑右移BIT、BIT_VECTOR或布尔型一维数组

SLA算术左移BIT、BIT_VECTOR或布尔型一维数组

SRA算术右移BIT、BIT_VECTOR或布尔型一维数组

ROL逻辑循环左移BIT、BIT_UECTOR或布尔型一维数组

ROR逻辑循环右移BIT、BIT_VECTOR或布尔型一维数组

**乘方整数

ABS取绝对值整数

=等干任何敷据类型

/=不等于任何数据类型

<小于枚举与整数类型,及对应的一维数组

关系操作符

>大于枚举与整数类型,及对应的一维数组

<-小于等于枚举与整数类型,及对应的一维数组

>-大于等于枚举与整数类型,及对应的一维数组

AND与BIT,BOOLEAN,STD.LOGIC

OR或BIT.BOOLEAN,STD.LOGIC

NAND与非BIT,BOOLEAN,STD>OGIC

送辑操作符NOR却BIT,BOOLEAN,STD>OGIC

XOR异或BIT,BOOLEAN,STD.LOGIC

XNOR异或3EBIT,BOOLEAN,STD_LOGIC

NOT非BIT,BOOLEAN,STD_LOGIC

+正整数

符号操作符

—负整期

【例3-19]

SIGNALa,b,c:STD_LOGIC_VECTOR(3DOWNTO0);

SIGNALd,e,f,g:STD_LOGIC_VECTOR(1DOWNTO0);

SIGNALh,工,j,k:STD_LOGIC;

SIGNAL1,m,n,。,p:BOOLEAN;

d<=eORfORg;—两个操作符OR相同,不需括号

1<=(mXORn)AND(oXORp);—操作符不同,必须加括号

h<=iANDjORk;--两个操作符不同,未加括号,表达错误

a<=bANDe;—操作数b与e的位矢长度不一致,表达错误

h<=iOR1;-i的数据类型是STD_LOGIC,而1的数据类型是

...—布尔量,因而不能相互作用,表达错误

表3-3VHDL操作符优先级

运算符优先级

NOT,ABS,**最高优先级

*,/,MOD,REM

+(正号),一(负号)

+»->&

SLL,SLA,SRL,SRA,ROL,ROR

=>/=><»<=,>,>=

AND,OR,NAND,NOR,XOR,XNOR最低尤先级

3.5.9数据类型转换函数(不重要)

表3/IEEE库数据类型转换函数表

函数名功能

所在程序包:STD_LOGIC_1164

to_stdlogicvector(A)由bit_vector类型转换为std_logic_vector

to__bitvector(A)由std_logic_vector转换为bit_vector

to_stdlogic(A)由bit转换成stdjogic

to_bit(A)由stdjogic类型转换成bit类型

所在程序包:STD_LOGIC_ARITH

conv_std_logic_vector(A,位长)将integer转换成std_logic_vector类型,A是整数

conv_integEA)将std_logic_vector转换成integer

conv__unsigned(A,位长)将unsigned,signed,integer类型转换为指定位长的unsigned类型

conv_signed(A,位长)将unsigned,signed,integer类型转换为指定位长的signed类型

所在程序包:STD_LOGIC_UNSIGNED

conv_integer(A)由std_logic_vector转换成integer

例3-20中各例句都调用了数据类型转换函数,在程序包ieee.std_logic_1164中的转换函

数,它们在程序包中定义的函数首如下:

FUNCTIONTO_STDLOGICVECTOR(S:BIT_VECTOR)

RETURNSTD_LOGIC_VECTOR;

【例3-20]

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYampIS

PORT(al,a2:INBIT_VECTOR(3DOWNTO0);

cl,c2,c3:INSTD_LOGIC_VECTOR(3DOWNTO0);

bl,b2,b3:INTEGERRANGE0TO15;

dl,d2,d3,d4:OUTSTD_LOGIC_VECTOR(3DOWNTO0));

ENDamp;

dl<=TO_STDLOGICVECTOR(alANDa2);--(1)

d2<=CObA/_STD_LOGIC_VECTOR(bl,4)WHENCONV_INTEGER(b2)=9

elseCONV_STD_LOGIC__VECTOR(b3,4);—(2)

d3<=ClWHENCONV_INTEGER(c2)=8ELSEc3;—(3)

d4<=clWHENc2=8elsec3;—(4)

例3-21是个利用转换函数conv_integer(),以及在进程中对同一信号先后赋值不同数据

类型的特性,完成了3-8译码器的设计程序。

【例3-21]

LIBRARYIEEE;

USEIEEE.STD__LOGIC__1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYdecoder3s8IS

PORT(input:INSTD_LOG工C_VECTOR(2DOWNTO0);

output:OUTSTD_LOGIC_VECTOR(7DOWNTO0));

ENDdecoder3to8;

ARCHITECTUREbehaveOFdecoder3to8IS

BEGIN

PROCESS(input)BEGIN

output<=(OTHERS=>T0f);output(CONV_INTEGER(input))<=T1T;

ENDPROCESS;

ENDbehave;

例3-22是几个预定义转换函数的函数首表达式,从中可以了解类型转换函数的来源。

【例3-22]

FUNCTIONTo-bit(s:std_ulogic;xmap:BIT:=T0T)RETURNBIT;

FUNCTIONTo_bitvector(s:std_logic_vector;

xmap:BIT:=T0T)RETURNBIT_VECTOR;

FUNCTIONTo_bitvector(s:std_ulogic_vector;

xmap:BIT:=T0T)RETURNBIT_VECTOR;

下面是To_bitvector的函数体,其中的ALIAS是表述缩略语句之关键词。

FUNCTIONTobitvector(s:stdlogicvector;

xmap:BIT:=T0T)

RETURNBITVECTORIS

ALIASsv:stdlogicvector(sTLENGTH-1DOWNTO0)ISs;

VARIABLEresult:BITVECTOR(STLENGTH-1DOWNTO0);

BEGIN

FORiINresultTRANGELOOP

CASESV(i)IS

WHENT0T|TLT=>result(i):=T0T;

WHENT1T|THT=>result(i):=T1T;

WHENOTHERS=>result(i):=xmap;

ENDCASE;

ENDLOOP;

RETURNresult;

END;

3.5.10GENERIC参数传递映射的语句

GENERIC的完整用法,如下8x8位乘法器

【例3-23]

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYMULT8BIS

PORT(DI,D2:INSTD_LOGIC_VECTOR(7DOWNTO0);

Q:OUTSTD_LOGIC_VECTOR(15DOWNTO0));

END;

ARCHITECTUREBHVOFMULT8BIS

COMPONENTMULT4B--MULT4B模块的调用声明

GENERIC(S:integer);--照抄MULT4B实体中关于参数"端口"定义的语句

PORT(R:OUTstd_logic_vector?(2*3DOWNTO1);

AfB:INstd__logic_vector(SDOWNTO1));

ENDCOMPONENT;

BEGIN

Ul:MULT4BGENERICMAP(S=>8)

PORTMAP(R=>Q,A=>D1,B=>D2);

END;

例化名:元件名GENERICMAP(类属表)

部分习题(课后作业仅供参考)

3-2画出与以下实体描述对应的原理图符号元件:

ENTITYbuf3sIS-实体1:三态缓冲器

PORT(input:INSTD_LOGIC;一输入端

enable:INSTD_LOGIC;一使能端

output:OUTSTD_LOGIC);一输出端

ENDbuf3s;

buf3s

input

output

ENTITYmux21IS--实体2:2选1多路选择器

PORT(inO,ini,sei:INSTD_LOGIC;

output:OUTSTD_LOGIC);

mux21

-----inO

output------

------ini

sei

3-4给出1位全减器的VHDL描述;最终实现8位全减器。要求:

1)首先设计1位半减器,然后用例化语句将它们连接起来,图4-20中h_suber是半减器,diff是

输出差(diff=x-y),s_out是借位输出(s_out=l,x<y),sub_in是借位输入。

图3-18全减器结构图

一解(1.1):实现1位半减器h_suber(diff=x-y;s_out=l,x<y)

LIBRARYIEEE;-半减器描述⑴:布尔方程描述方法

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYh_suberIS

PORT(x,y:INSTD_LOGIC;

diff,s_out:OUTSTD_LOGIC);

ENDENTITYh_suber;

ARCHITECTUREhslOFh_suberIS

BEGIN

Diff<=xXOR(NOTy);

s_out<=(NOTx)ANDy;

ENDARCHITECTUREhsl;

--解(1.2):采用例化实现图4-20的1位全减器

LIBRARYIEEE;位二进制全减器顺层设计描述

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYf_suberIS

PORT(xin,yin,subJn:INSTD_LOGIC;

sub_out,diff_out:OUTSTD_LOGIC);

ENDENTITYf_suber;

ARCHITECTUREfslOFf_suberIS

COMPONENTh_suber--调用半减器声明语句

PORT(x,y:INSTD_LOGIC;

diff,s_out:OUTSTD_LOGIC);

ENDCOMPONENT;

SIGNALa,b,c:STD_LOGIC;-定义1个信号作为内部的连接线。

BEGIN

=〉

ul:h__suberPORTMAP(x=>xin/y=>yin/diffa,s_out=>b);

u2:h_suberPORTMAP(x=>azy=>sub_in,diff=>diff_out,s_out=>c);

sub_out<=cORb;

ENDARCHITECTUREfsl;

⑵以1位全减器为基本硬件,构成串行借位的8位减法器,要求用例化语句来完成此项设

计(减法运算是x-y-sun_in=difft)o

x7---------xinsub_out---------sout

y7---------yinu7

I--------subjndiff_out---------diff7

..................al

xl---------xinsub_out

yl--------yinul

--------subjndiff_out---------diffl

a0

xO---------xinsub_out---------

yO--------yinuO

sin---------subjndiff_out---------diffO

串行借位的8位减法器

-解(2):采用例化方法,以1位全减器为基本硬件•;实现串行借位的8位减法器(上图所示)。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYsuber_8IS

RORT(xOzxl,x2zx3zx4zx5zx6,x7:INSTD_L0GIC;

yO,yl,y2,y3,y4,y5,y6,y7,sin:INSTD_L0GIC;

diffOzdiffl,diff2,diff3:OUTSTD_LOGIC;

diff4,diff5zdiff6,diff7,sout:OUTSTD_LOGIC);

ENDENTITYsuber_8;

ARCHITECTUREs8OFsuber_8IS

COMPONENTf_suber--调用全减器声明语句

PORT(xin,yin,sub_in:INSTD_LOGIC;

sub_ou

温馨提示

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

评论

0/150

提交评论