VHDL.docx
- 文档编号:6469268
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:10
- 大小:31KB
VHDL.docx
《VHDL.docx》由会员分享,可在线阅读,更多相关《VHDL.docx(10页珍藏版)》请在冰豆网上搜索。
VHDL
1`题叙述VHDL中的各种语言层次。
行为级,寄存器传输级,逻辑级
第2题
对下面的功能写一个实体(Component_A)和一个结构体(rtl):
d_out<=(a_inandb_in)andc_in;
类型指定为std_logic。
ENTITYCOMPONENTAIS
PORT(ain,bin,cin:
instdlogic;dout:
outstdlogic)
ENDCONPONENTA;
Architecturertlofcomponeteis;
D﹤=(ainandbin)andcin;
ENDRTL;
第3题
解释程序包、例化、类属和结构VHDL。
程序包:
数据类型或对象一经说明,它的名字便在说明点到该说明区域终点之间可见。
在一个大的设计中,如果某些数据要在多个实体中使用,则它们应当在程序包中说明,因为程序包可用来向外部环境输出名字(因而也可输出对象)。
事实上,VHDL程序包中就是许多说明。
程序包可分为两部分:
说明部分和包体部分。
例化:
一个实体的结构体中引用某些元件,称为元件例化(Componentinstantiation),用元件例化语句表示。
该元件称为实例元件或例化元件(instance)。
类属:
实体说明与元件说明中除了可以有端口说明外,还可以有类属说明。
我们将被例化元件称为子元件,类属说明则为父元件把值传递给子元件提供了一种手段。
类属的典型应用是将子类型的范围、例化子元件的个数、以及数组对象的大小(尤其是端口的大小)参量化,或者是简单地记录诸如温度等物理特性参数。
类属表中所能出现的对象只能是constant类型,由于这是一个默认的类型,因此无需再加以指定,类属表中对象的方式只能是in。
由于类属是方式为in的常量,因此它的值只能读入,而不能赋给或传递给方式为out或inout的参量。
结构VHDL:
结构VHDL类似于网表,它将不同的元件(实体)连接在一起。
一个实体通常包含着若干个元件,并将其互相连接起来,这样的实体可用结构VHDL描述(即层次化设计方法)。
每个元件也形成了一个新的层次级别。
结构VHDL可以简单地把若干个元件互相连接,元件互连可以用原理图实现。
结构VHDL与平台、版本、工艺和工具无关。
第4题
代码中的"--"的语义是什么?
VHDL代码中的"--"表示注释。
凡是和"--"在同一行,并且在"--"后面的内容都是注释内容
第5题
信号赋值符号是什么样的?
<=
第6题
VHDL语言中定义了哪两种延迟模型?
传输延迟和惯性延迟:
其中:
传输延迟:
任何宽度的脉冲波形都能传播到输出端的延迟特性称为传输延迟特性(TransportDelay)。
惯性延迟:
当元件的输入信号宽度太窄,元件的输出端可能得不到响应。
这样一种延迟特性称为惯性延迟(InertialDelay)。
第7题
画出图2.25输出信号C1和C2的波形。
第8题
完成表2.8和表2.9。
两个例子中均给定信号a的波形。
(a)architecturertlofexis
begin
b<=a;
c<=b;
end;
表2.8
(b)architecturertlofexis
begin
c<=b;
b<=a;
end;
表2.9
第9题
assert语句有哪些错误级别?
Note,Warning,Error和Failure.在某些VHDL系统中,如果严重级别为Error或Failure的限制条件不能为真,则会导致模拟过程的终止。
第10题
重写下面的VHDL代码,增加assert语句,使得如果向量a的值等于"111"时,打印信息"toomenyones"。
architecturertlofexis
signala:
std_logic_vector(2downto0);
begin
assertnot(a="111")
report"toomanyones";
a<=candb;
end;
第11题
(a)VHDL中有哪3类对象?
(b)为什么除bit和bit_vector之外,还需要其它数据类型?
(a)信号、变量和常量。
(b)VHDL中的对象可以有丰富的数据类型。
它们与软件程序设计语言中的类型相类似,可以更方便的对电路进行行为描述。
第12题
(a)位串文字用在什么地方?
(b)VHDL标准中为哪种数据类型定义了位串文字?
(a)位串文字用在二进制向量复制,可以使代码易读。
(b)bit_vector
第13题
什么是数组的片?
数组的一位或者一部分称作数组的片
第14题
下面的VHDL代码中使用聚集给向量a赋值有什么优点?
architecturertlofexis
signala:
std_logic_vector(31downto0);
begin
a<=(others=>'1');
…
end;
简单,易懂
第15题
下面的赋值语句执行之后向量a将得到什么值?
architecturertlofexis
signala,b:
std_logic_vector(4downto0);
signalc:
std_logic_vector(0to1);
begin
a<=(1=>'0',3=>'1',others=>b
(2));
b<=(1=>'1',3=>'0',others=>c
(1));
c<="10";
end;
a="01010",b="00010",c="10"
第16题
(a)对下面的语句模拟时,信号a的初值是什么?
typemytypeis('T','R','0','1');
signala:
mytype;
(b)数据类型为bit的信号,其初值是什么?
(c)数据类型为std_logic的信号,其初值是什么?
(d)是否可以指定一个信号的初值?
如果能,如何指定?
(a)a='T'(b)'0'(c)'X'
(d)Signal信号名:
信号类型:
=信号初值;
第17题
如何描述时钟边沿?
CLK'event
第18题
设计一个元件,图2.26表示其输入和输出。
该元件应当有下面的行为:
Sel
q
00
01
10
11
others
axorb
aorb
anorb
aandb
'XX'
(a)用if语句。
(b)用case语句。
(c)用whenelse语句。
EntityComponent_Ais
Port(a,b,sel:
inbit;
Q:
outbit);
EndComponent;
(a)用if语句。
Architectureif_arcofComponent_Ais
Begin
Process(sel,a,b)
Begin
Ifsel="00"then
Q<=axorb;
Elsifsel="01"then
Q<=aorb;
Elsifsel="10"then
Q<=anorb;
Elsifsel="11"then
Q<=aandb;
Elseq<="XX";
Endif;
Endprocess;
End;
(b)用case语句。
Architecturecase_arcofComponent_Ais
Begin
Process(sel,a,b)
Caseselis
When"00"=>q<=axorb;
When"01"=>q<=aorb;
When"10"=>q<=anorb;
When"11"=>q<=aandb;
Whenothers=>q<="XX";
Endcase;
Endprocess;
End;
(c)用whenelse语句。
Architecturewhen_else_arcofComponent_Ais
Begin
Q<=axorbwhensel="00"else
Aorbwhensel="01"else
Anorbwhensel="10"else
Aandbwhensel="11"else"XX";
End;
第19题
(a)数据类型bit在哪个库中定义?
(b)哪个(哪些)库和程序包总是可见的?
(a)标准程序包STD;
(b)WORK库和STD库总是可见的。
第20题
至少说出可以保存在程序包中的4种项目。
函数、过程、类型、常量、属性和模板
第21题
(a)至少说出可以定义函数的3个位置。
(b)这3个位置中哪个位置有助于函数的再利用?
(c)若要使用别的设计者的程序包应当怎么做?
(a)函数可以在package,architecture,process中定义;
(b)在Package中定义函数有利于函数的再利用;
(c)在entity之前使用Library和use语句包含其他设计者的程序包。
第22题
数据类型std_logic为决断类型,其含义是什么?
一般情况下,一个信号只能有一个信号源。
特殊情况下一个信号可以有多个信号源,即为决断信号的情况。
Std_logic为决断类型,说明std_logic定义的信号可以有多个信号源,一个决断信号必须预先给定一个与之关联的决断函数,以便在各个源的值不相同时按照决断函数的规定得到确定的值。
第23题
函数与过程有什么区别?
函数只能用以计算并返回数值,而不能用以改变与函数形参相关的对象的值,因此,函数的参量只能是方式为in的信号或常量;而过程则可以改变与过程形参相关的对象的值,因而过程的参量可以为in,out,inout方式。
函数必须定义返回值的类型,而过程不需要。
子程序的运行过程与进程的运行过程不同。
进程运行不会停止,只是处在激活与挂起两种状态,挂起时信号、变量值保持不变,因而进程内部定义的变量再激活时仍保持挂起时的值,初值只在开始运行时一次性赋值。
而子程序则在每一次被调用时赋初值,与先前是否被调用过无关。
子程序返回时,其运行即结束,将输出值或返回值传送给调用者之后不再保存任何信息。
第24题
为什么不应当把函数和过程中的向量长度定义在函数/过程中?
所有函数和过程一般不指定向量的长度,这意味着子程序可以用任意长度的向量调用
第25题
(a)设计一个程序包,使其包含2个函数:
average和sum。
函数average应返回两个数的平均数(四舍五入),函数sum应返回其和。
这两个函数都应同时定义于整数和std_logic_vector。
(b)用上面的函数设计一个元件(c1)。
该元件应有4个输入a,b,c和d。
输入a和b的类型为整数(0到127),输入c和d的类型为std_logic_vector(7downto0)。
该元件应有4个输出:
average1,average2,sum1,sum2,即每个函数对应一个输出。
average1和sum1的类型为整数(0到127),而Average2和sum2的类型为std_logic_vector(7downto0)。
(a)
Libraryieee;
Useieee.std_logic_1164.all;
Packagemy_packageis
Functionaverage(a,b:
ininteger)
Returninteger;
Functionaverage(a,b:
instd_logic_vector)
Returnstd_logic_vector;
End;
Packagebodymy_packageis
Functionaverage(a,b:
ininteger)returnintegeris
Begin
Return(a+b)/2;
End;
Functionaverage(a,b:
instd_logic_vector)returnstd_logic_vectoris
Begin
Return(a+b)srl1;
End;
End;
Sum函数请同学们自己实现。
(b)
Libraryieee;
Librarymy_package;
Useieee.std_logic_1164.all;
Usework.my_package.all;
Entitymy_Componentis
Port(a,b:
ininteger;
c,d:
instd_logic_vector(7downto0);
average1,average2:
outinteger;
sum1,sum2:
outstd_logic_vector(7downto0));
Endmy_Component;
Architecturebehaviorofmy_Componentis
Begin
Average1<=average(a,b);
Sum1<=sum(a,b);
Average2<=average(c,d);
Sum2<=sum(c,d);
End;
第26题
(a)在VHDL-93标准中定义了哪些移位操作?
(b)不用这些移位操作是否可以设计移位寄存器?
(a)逻辑左移、逻辑右移、算术左移、算术右移、循环左移、循环右移;
(b)可以使用结构描述设计移位寄存器。
第27题
什么是层次化设计?
VHDL提供一种机制来降低复杂性——层次化设计。
VHDL提供层次化结构描述的手段。
一个电路系统用一个实体描述,组成该电路系统的每个元件实际上也是一个一个的实体。
整个电路系统可以作为更大型电路系统的一个元件。
设计层次由设计元件组成,这些元件又包含有另一些元件、独立的VHDL代码或者两者的混合。
层次可以比作一棵倒立的树。
最下面的分支是叶子元件。
第28题
用VHDL描述图2.27所示的方框图,即在元件top中例化元件c1(两次)和元件c2。
Entityc1is……
Entityc2is……
Entitytopis
Port(a,b,c,d:
inData_Type;
Q:
outData_Type);
Endtop;
Architecturestroftopis
ComponentC1
Port(a,b:
inData_Type;
q1:
outData_Type);
Endcomponent;
ComponentC2
Port(d1,d2:
inData_Type;
q:
outData_Type);
Endcomponent;
Signali1,i2:
Data_Type;
Fortop_c11,top_c12:
C1useentitywork.c1;
Fortop_c2:
C2useentitywork.c2;
Begin
top_c11:
C1portmap(a,b,i1);
top_c12:
C1portmap(c,d,i2);
top_c2:
C2portmap(i1,i2,q);
End;
第29题
(a)是否允许几个实体与一个结构体关联?
(b)是否允许几个结构体与一个实体关联?
(a)不允许;(b)允许。
第30题
如果有几个结构体,你如何指定哪一个需要模拟/综合?
可以使用配置指定语句指定需要例化模拟的结构体。
For<元件指定>use<连接指示>
例:
forU1:
compuseentityp(architecture1);
第31题
在例化过程中哪个命令可以用来改变类属参数的值?
如果被例化的元件被指定是一个类属元件,可以在例化时使用类属匹配命令改变其值(genericmap);
第32题
(a)设计一个带类属参数的或门,它有N个输入和一个延迟Tdelay。
N的默认值为3,Tdelay默认值为3ns。
(b)在调用该或门的元件中将该类属元件例化2次。
使一个或门元件中的类属参数改变为N=4和Tdelay=2ns,而另一个元件中的类属参数改变为N=5和Tdelay=3ns。
(a)
Entityor_compis
Generic(Tdelay:
Time:
=3ns;N:
Positive:
=3);
Port(a:
inbit_vector(N-1downto0);B:
outbit);
Endor_comp;
(b)
Architecture…..
Componentor_comp
Generic(Tdelay:
Time;N:
Positive);
Port(a:
inbit_vector(N-1downto0);B:
outbit);
Endcomponent;
Foror1,or2:
or_compuseentitywork.or_comp;
Begin
Or1:
or_compgenericmap(Tdelay=>2ns,N=>4)
Portmap(……);
Or2:
or_compgenericmap(Tdelay=>3ns,N=>5)
Protmap(……);
End;
第33题
在元件top中把下面的元件(c1)例化10次。
entityc1is
port(a,b:
instd_logic;
q:
out:
std_logic);
end;
元件top应有下面的实体:
entitytopis
port(a,b:
instd_logic_vector(9downto0);
q:
out:
std_logic_vector(9downto0));
end;
提示:
使用生成语句。
Architecture……
Compnentc1_comp
Port(a,b:
instd_logic;Q:
outstd_logic);
Endcomponent;
ForU1:
c1_compuseentitywork.c1;
Begin
C_gen:
foriin9downto0generate
U:
c1_compportmap(a(i),b(i),q(i));
Endgeneratec_gen;
End;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VHDL
![提示](https://static.bdocx.com/images/bang_tan.gif)