EDA-Verilog
HDL期末复习题总结必过
选择题
1.大规模可编程器件主要有
FPGA、CPLD
两类,下列对
FPGA
结构与工作原理的描述
中,正确的是(C)。
A.
FPGA
全称为复杂可编程逻辑器件;
B.
FPGA
是基于乘积项结构的可编程逻辑器件;
C.基于
SRAM的FPGA
器件,在每次上电后必须进行一次配置;
D.在Altera
公司生产的器件中,MAX7000
系列属
FPGA
结构。
2.不完整的IF语句,其综合结果可实现(A)
A.时序逻辑电路
B.组合逻辑电
C.双向电路
D.三态控制电路
3.综合是EDA设计流程的关键步骤,在下面对综合的描述中,(D)是错误的。
A.综合就是把抽象设计层次中的一种表示转化成另一种表示的过程;
B.综合就是将电路的高级语言转化成低级的,可与FPGA
/
CPLD的基本结构相映射的网表文件;
C.为实现系统的速度、面积、性能的要求,需要对综合加以约束,称为综合约束;
D.综合可理解为一种映射过程,并且这种映射关系是唯一的,即综合结果是唯一的。
4.大规模可编程器件主要有FPGA、CPLD两类,下列对FPGA结构与工作原理的描述中,正确的是(C)。
A.FPGA全称为复杂可编程逻辑器件;
B.FPGA是基于乘积项结构的可编程逻辑器件;
C.基于SRAM的FPGA器件,在每次上电后必须进行一次配置;
D.在Altera公司生产的器件中,MAX7000系列属FPGA结构。
5.以下关于状态机的描述中正确的是(B)
A.Moore型状态机其输出是当前状态和所有输入的函数
B.与Moore型状态机相比,Mealy型的输出变化要领先一个时钟周期
C.Mealy型状态机其输出是当前状态的函数
D.以上都不对
6.目前应用最广泛的硬件描述语言是(B)。
A.VHDL
B.Verilog
HDL
C.汇编语言
D.C语言
7.一模块的I/O
端口说明:
“input
[7:0]
a;”,则关于该端口说法正确的是(A)。
A.输入端口,位宽为
B.输出端口,位宽为
C.输入端口,位宽为
D.输出端口,位宽为
8.基于
EDA
软件的FPGA
/
CPLD
设计流程为:原理图
/HDL
文本输入
→
综合→___
__→
→
适
配
→
编
程
下
载
→
硬
件
测
试。
正
确的是(B)。
①功能仿真
②时序仿真
③逻辑综合④配置
⑤分配管脚
A.③①
B.①⑤
C.④⑤
D.④②
9.下列标识符中,(A)是不合法的标识符。
A.
9moon
B.
State0
C.
Not_Ack_0
D.
signall
10.下列语句中,不属于并行语句的是:(D)
A.过程语句
B.
assign语句
C.元件例化语句
D.
case语句
11.已知
“a
=1’b1;
b=3'b001;”那么
{a,b}
=(C)
(A)
4'b0011
(B)
3'b001
(C)
4'b1001
(D)
3'b101
12.在verilog
中,下列语句哪个不是分支语句?(D)
(A)
if-else
(B)
case
(C)
casez
(D)
repeat
13.在verilog
语言中整型数据在默认情况与(C)位寄存器数据在实际意义上是相同的。
(A)
(B)
(C)
(D)
14.大规模可编程器件主要有
FPGA、CPLD
两类,下列对
FPGA
结构与工作原理的描述中,正确的是(C)
A.
FPGA
全称为复杂可编程逻辑器件;
B.
FPGA
是基于乘积项结构的可编程逻辑器件;
C.基于
SRAM的FPGA
器件,在每次上电后必须进行一次配置;
D.在Altera
公司生产的器件中,MAX7000
系列属
FPGA
结构。
15.请根据以下两条语句的执行,最后变量
A
中的值是
(A)
reg
[7:0]
A;
A=2'hFF;
A.
8'b0000_0011
B.
8'h03
C.8'b1111_1111
D.8'b11111111
16.下列描述中采用时钟正沿触发且
reset异步下降沿复位的代码描述是
(C)
A、always
@(posedge
clk,negedge
reset)
if(reset)
B、always@(posedge
clk,reset)
if
(!reset)
C、always
@(posedge
clk,negedge
reset)
if(!reset)
D、always
@(negedge
clk,posedge
reset)
if
(reset)
17.关于过程块以及过程赋值描述中,下列正确的是(A)
A、在过程赋值语句中表达式左边的信号一定是寄存器类型;
B、过程块中的语句一定是可综合的;
C、在过程块中,使用过程赋值语句给
wire
赋值不会产生错误;
D、过程块中时序控制的种类有简单延迟、边沿敏感和电平敏感。
18.Verilog
语言与
C
语言的区别,不正确的描述是(C)
A、Verilog
语言可实现并行计算,C
语言只是串行计算;
B、Verilog
语言可以描述电路结构,C
语言仅仅描述算法;
C、Verilog
语言源于
C
语言,包括它的逻辑和延迟;
D、Verilog
语言可以编写测试向量进行仿真和测试。
19.11.下列模块的例化正确的是(C)。
A.Mydesign
design(sin(sin),sout(sout));
B.Mydesign
design(.sin(sin),.sout(sout));
C.Mydesign
design(.sin(sin),.sout(sout););
D.Mydesign
design(.sin(sin);
.sout(sout));
20.下列关于
Verilog
HDL语言中模块的例化说法错误的是(B)。
A.在引用模块时,有些信号要被输入到引用模块中,有些信号要从引用模块中输出
B.在引用模块时,必须严格按照模块定义的端口顺序来连接
C.在引用模块时可以用“
.”符号,表明原模块是定义时规定的端口名,用端口名和被引用模块的端口相对应,提高程序的可读性和可移植性
D.在语句“
Mydesign
design(.port1(port1),.port2
(port2));
”中,被引用的模块为Mydesign
模块
21.下列
Verilog
HDL语言中寄存器类型数据定义与注释矛盾的是(D)。
A.reg
[3:0]
sat
//sat
为
位寄存器
B.reg
cnt
//cnt
为
位寄存器
C.reg
[0:3]
mymem
[0:63]
//mymem
为
个
位寄存器的数组
D.reg
[1:5]
dig
//dig
为
位寄存器
22.下列关于非阻塞赋值运算方式(如
b<=a;)说法错误的是(B)。
A.块结束后才完成赋值操作
B.b的值立刻改变
C.在编写可综合模块时是一种比较常用的赋值方式
D.非阻塞赋值符“
<=”与小于等于符“
<=”意义完全不同,前者用于赋值操作,后者是关系运算符,用于比较大小。
23.下列关于阻塞赋值运算方式(如
b=a;)说法错误的是(A)。
A.赋值语句执行完后,块才结束
B.b的值在赋值语句执行完后立刻就改变的C.在沿触发的always
块中使用时,综合后可能会产生意想不到的结果
D.在“always”模块中的reg
型信号都采用此赋值方式
24.在下列
Verilog
HDL运算符中,属于三目运算符的是(C)。
A.&&
B.!
==
C.?:
D.===
25.当
a
<0
时,s的值是(C)。
assign
s=
(a
>=2)
?
:
(a
0)
?
2:
0;
A.0
B.1
C.2
D.其他
26.在Verilog
HDL
语言中的位拼接运算符是(A)。
A.{
}
B.C.()
D.'
'
27.下面语句中,信号
a
会被综合成(B)。
reg
[5:0]
a;
always
@(posedge
clk)
if
(ss>10)
a
<=
20;
else
if
(ss
15)
a
<=
30;
A.寄存器
B.触发器
C.连线资源
D.其他
28.下列程序段中无锁存器的是(C)。
B.always
@
(al
or
d)
begin
if(al)
q<=d;if(!al)
q<=!d;
end
A.always
@
(al
or
d)
begin
if(al)
q<=
d;
end
D.always
@
(sel[1:0]
or
a
or
b)
case(sel[1:0])
2'
b00:
q<=a;
2'
b11;
q<=b;
Endcase
C.always
@
(al
or
d)
begin
if(al)
q<=d;
else
q<=0;
end
29.程序段如下
:
begin:
reg[7:0]
tem;
count
=
0;
tem
=
rega;
while(tem)
begin
if(tem[0])
count
=
count
+1;
tem
=
tem
>>1;
end
end
如果
rega的值为
'
b10101011,则程序结束后,count的值是()。
A.4
B.5
C.6
D.7
30.多路选择器简称多路器,它的输入输出端口情况是()。
A.多输入,多输出
B.多输入,单输出
C.单输入,多输出
D.单输入,单输出
填空题
1.用
EDA
技术进行电子系统设计的目标是最终完成ASIC的设计与实现。
2.可编程器件分为
FPGA
和
CPLD。
3.随着
EDA
技术的不断完善与成熟,自顶向下的设计方法更多的被应用于
Verilog
HDL
4.设计当中。
5.目前国际上较大的PLD
器件制造公司有
Altera
和
Xilinx
公司。
6.完整的条件语句将产生
组合电路,不完整的条件语句将产生时序电路。
7.阻
塞
性
赋
值
符
号
为
=,非
阻
塞
性
赋
值
符
号
为<=。
8.有限状态机分为
Moore
和
Mealy
两种类型。
9.EDA
缩写的含义为
电子设计自动化
(Electronic
Design
Automation)
10.状态机常用状态编码有
二进制、格雷码
和独热码。
11.Verilog
HDL
中任务可以调用
其他任务
和函数。
12.系统函数和任务函数的首字符标志为
$,预编译指令首字符标志为
#。
13.可编程逻辑器件的优化过程主要是对
速度
和资源的处理过程。
14.大型数字逻辑电路设计采用的IP
核有
软
IP、固
IP
和硬
IP。
15.IEEE
标准的硬件描述语言是
verilog
HDL
和
VHDL。
16.Verilog
语言规定的两种主要的数据类型分别是
wire(或
net)
和
reg
。程序模块中输入,输出信号的缺省类型为
wire(或
net)。
17.Verilog
语言规定了逻辑电路中信号的4
种状态,分别是
0,1,X
和
Z。其中
0
表示低电平状态,1
表示高电平状态,X
表示
不定态(或未知状态),Z
表示
高阻态。
18.块语句有两种,一种是
begin-end
语句,通常用来标志
顺序
执行的语句;
一种是
fork-join
语句,通常用来标志
并行
执行的语句。
19.写出表达式以实现对应电路的逻辑功能
20.下面两段代码中信号
in,q1,q2
和
q3的初值分别为
0,1,2
和
3,那么经过
个时钟周期后,左侧程序中
q3的值变成0,右侧程序中
q3的值变成2。
名词解释
1.EDA
2.ASIC
专用集成电路
3.RTL
寄存器传输级
4.FPGA
现场可编程门阵列
5.SOPC
可编程片上系统
6.CPLD
复杂可编程逻辑器件
7.LPM
参数可定制宏模块库
8.EDA
电子设计自动化
9.IEEE
电子电气工程师协会
10.IP
知识产权核
11.ISP
在系统可编程
12.LUT:查找表
13.HDL:硬件描述语言
14.RTL:寄存器传输逻辑
简答题
1.简要说明仿真时阻塞赋值与非阻塞赋值的区别。
非阻塞(non-blocking)
赋值方式
(b<=
a)
:
b的值被赋成新值
a的操作,并不是立刻完成的,而是在块结束时才完成;
块内的多条赋值语句在块结束时同时赋值;
硬件有对应的电路。
阻塞(blocking)
赋值方式
(b
=
a)
:
b的值立刻被赋成新值
a;
完成该赋值语句后才能执行下一句的操作;
硬件没有对应的电路,因而综合结果未知。
2.简述有限状态机
FSM
分为哪两类?有何区别?有限状态机的状态编码风格主要有哪三种?
FSM的三段式描述风格中,三段分别描述什么?
根据内部结构不同可分为摩尔型Moore状态机和米里型Mearly状态机两种。
摩尔型状态机的输出只由当前状态决定,而次态由输入和现态共同决定;米里型状态机的输出由输入和现态共同决定,而次态也由输入和现态决定。状态编码主要有三种:连续二进制编码、格雷码和独热码。
3.Verilog
HDL
语言进行电路设计方法有哪几种
①自上而下的设计方法(Top-Down)
②自下而上的设计方法(Bottom-Up)
③综合设计的方法
4.简述moore状态机和mealy状态机的区别
答:从输出的时序上看,Mealy机的输出是当前状态和所有输入信号的函数,它的输出是在输入变化后立即发生的。Moore机的输出则仅为当前状态的函数,在输入发生变化时还必须等待时钟的到来,时钟使状态发生变化时才导致输出的变化。
Moore型状态机:次态=f(现状,输入),输出=f(现状);
Mealy型状态机:次态=f(现状,输入),输出=f(现状,输入);
5.简述FPGA内部主要结构及其功能
答:FPGA由6部分组成,分别为可编程输入/输出单元、基本可编程逻辑单元、嵌入式块RAM、丰富的布线资源、底层嵌入功能单元和内嵌专用硬核等。
大多数FPGA的I/O单元被设计为可编程模式,即通过软件的灵活配置,可适应不同的电器标准与I/O物理特性;可以调整匹配阻抗特性,上下拉电阻;可以调整输出驱动电流的大小等。查找表完成纯组合逻辑功能。查找表完成纯组合逻辑功能。嵌入式块RAM可以配置为单端口RAM、双端口RAM、伪双端口RAM、CAM、FIFO等存储结构。布线资源连通FPGA内部所有单元。
6.简述基于数字系统设计流程包括哪些步骤
?
包括五个步骤:
⑴、设计输入:
将设计的结构和功能通过原理图或硬件描述语言进行设计或编程,进行
语法或逻辑检查,通过表示输入完成,否则反复检查直到无任何错误。
⑵、逻辑综合:将较高层的设计描述自动转化为较低层次描述的过程,包括行为综合,逻辑综合和版图综合或结构综合,最后生成电路逻辑网表的过程。
⑶、布局布线:将综合生成的电路网表映射到具体的目标器件中,并产生最终可下载文件的过程。
⑷、仿真:就是按照逻辑功能的算法和仿真库对设计进行模拟,以验证设计并排除错误的过程,包括功能仿真和时序仿真。
⑸、编程配置:将适配后生成的编程文件装入到
PLD
器件的过程,根据不同器件实现编程或配置。
7.简述CPLD和FPGA主要区别。
答:CPLD:主要逻辑阵列块、宏单元、扩展乘积项和可编程连线阵列构成。程序掉电不丢失。
FPGA:FPGA中多使用4输入的LUT,所以每一个LUT可以看成一个有4位地址线的16x1的RAM,程序掉电丢失,需重新加载。
8.EDA设计的基本设计过程。
答:图形输入HDL;文本输入;
综合;适配;时序仿真与功能仿真;编程下载;硬件测试
.9.解释什么是功能仿真?综合答:是直接对HDL、原理图描述或其他描述形式的逻辑功能进行测试模拟,以了解其实现的功能是否满足原设计的要求。仿真过程可不涉及任何具体器件的硬件特性。
10.简述Verilog描述的状态机的一般结构包含哪几个部分。
答:说明部分、主控时序进程、主控组合进程、辅助进程。
(1)
说明部分:使用parameter定义系统状态:
用于描述状态。
(2)
主控时序进程:负责状态机运转和在时钟驱动下负责状态转换的进程。
(3)
主控组合进程:根据外部输入的控制信号和当前状态的状态值确定下一状态(next_state)的取向。
(4)
辅助进程:用于配合状态机工作的组合进程或时序进程
11.简述
Verilog
HDL
编程语言中函数与任务运用有什么特点?
函数和任务都能独立完成相应电路功能,通过在同一模块中的调用实现相应逻辑电路功能。但它们又有以下不同:
⑴、函数中不能包含时序控制语句,对函数的调用,必须在同一仿真时刻返回。而任务可以包含时序控制语句,任务的返回时间和调用时间可以不同。
⑵、在函数中不能调用任务,而任务中可以调用其它任务和函数。但在函数中可以调用其它函数或函数自身。
⑶、函数必须包含至少一个端口,且在函数中只能定义
input
端口。任务可以包含
0个或任何多个端口,且可以定义
input、output
和
inout
端口。
⑷、函数必须返回一个值,而任务不能返回值,只能通过
output
或
inout
端口来传递执行结果。
12.简述
FPGA
与
CPLD
两种器件应用特点。
CPLD
与
FPGA
都是通用可编程逻辑器件,均可在EDA
仿真平台上进行数字逻辑电路设计,它们不同体现在以下几方面:
⑴
FPGA
集成度和复杂度高于
CPLD,所以
FPGA
可实现复杂逻辑电路设计,而
CPLD适合简单和低成本的逻辑电路设计。
⑵、FPGA
内主要由
LUT
和寄存器组成,倾向实现复杂时序逻辑电路设计,而
CPLD内主要由乘积项逻辑组成,倾向实现组合逻辑电路设计。
⑶、FPGA
工艺多为
SRAM、flash
等工艺,掉电后内信息消失,所以该类型需外配存储器,而
CPLD
工艺多为
EEPROM
等工艺,掉电后信息不消失,所以不用外配存储器。
⑷、FPGA
相对
CPLD
成本高,但都可以在内都镶嵌硬核和软核,实现片上系统功能。
13.画出下面程序综合出来的电路图。
always@(posedge
clk)
begin
q0<=~q2;
q1<=
q0;
q2<=
q1;
end
程序填空
1.下面是case语句编写的3-8译码器电路,将横线上的语句补上,使程序形成完整功能
module
decoder38
(sel,csout);
①
②
reg[7:0]
csout;
always@(③)
begin
case(④)
3'b000:csout=8'b11111110;
3'b001:csout=8'b11111101;
3'b010:csout=8'b11111011;
3'b011:csout=8'b11110111;
3'b100:csout=8'b11101111;
3'b101:csout=8'b11011111;
3'b110:csout=8'b10111111;
3'b111:csout=8'b01111111;
default:csout=8'b11111110;
endcase
end
endmodule
①input[2:0]
sel;
②
output[7:0]
csout;③
sel,csout
④sel
2.下面是通过
case语句实现四选一电路部分程序,将横线上的语句补上,使程序形成完整功能
module
mux41a(a,b,c,d,s1,s0,y);
input
a,b,c,d;
①
output
y;
②
always@
(a,b,c,d,s1,s0)
begin:MUX41
case(③)
2'b00:y=a;
2'b01:y=b;
2'b10:y=c;
2'b11:y=d;
④
:y=a;
endcase
end
endmodule
①
input
s1,s0;
②
reg
y;
③
{s1,s0}
④
default
3.下面是通过循环语句实现程序,用以统计一个8位二进制数中含1的数量,将横线上的语句补上,使程序形成完整功能。
module
num_1_e3_16(x,num);
①
output
[3:0]num;
reg
[3:0]num;
②
always@(③)
begin
num=0;
for(i=0;i<=7;i=i+1)
④
end
endmodule
①
input
[7:0]x;
②
integer
i;
③
x
④
if(x[i])
num=num+1;
4.下面是程序功能是一个具有同步置1,异步清零0的D触发器。端口说明
RST:异步清零CLK:时钟输入,SET:同步置1,EN:同步使能,D:数据输入,Q:数据输出
module
e5_3(RST,CLK,SET,EN,D,Q);
input
RST,CLK,SET,EN,D;
①
reg
Q;
always@(②)
begin
if(③)
Q<=0;
else
if(EN)
begin
if(④)
Q<=1;
else
Q<=D;
end
end
endmodule
①
output
Q;
②
posedge
CLK
or
negedge
RST
③
!RST
④
SET
对应RTL图完成Verilog程序。
module
e5_6(set,D,clk,en,reset,Q);
input
set,D,clk,en,reset;
①
reg
Q;
always@(②)
begin
if(reset)
③
else
if(set)
④
else
if(en)
⑤
end
endmodule
①
output
Q;
②
posedge
clk
or
posedge
reset
or
posedge
set
③
Q<=0;
④
Q<=1;
⑤
Q<=D;
编程题
1.试用
Verilog
HDL
描述一个带进位输入、输出的8
位全加器。
端口:
A、B
为加数,CI
为进位输入,S
为和,CO
为进位输出
2.设计一个4位4输入最大数值检测电路,其中,a、b、c和d为4位二进制数,输出为max。
module
max_in4(a,b,c,d,max);
input
[3:0]a,b,c,d;
output
[3:0]max;
wire
[3:0]max1=(a>=b)?a:b;
wire
[3:0]max2=(c>=d)?c:d;
assign
max=(max1>max2)?max1:max2;
endmodule
3.编写一个带异步清零、异步置位的D
触发器。
端口:
CLK
为时钟,D
为输入,CLK
为清零输入端,SET
为置位输入端;
Q
输出端。
4.设计一个带有异步复位控制端和时钟使能控制端的10进制计数器。
端口设定如下:
输入端口:
CLK
:时钟,RST:复位端,EN:时钟使能端,LOAD
:置位控制端,DIN
:置位数据端;输出端口:
COUT:进位输出端,DOUT
:计数输出端
5.编写一个4位加法计数器VHDL程序的进程(不必写整个结构框架),要求复
位信号reset低电平时计数器清零,变高后,在上升沿开始工作;输入时钟信号为clk,输出为
6.填写完成一个8-3线编码器的真值表(5分),并写出其verilog程序
-3线编码器真值表
en
b
y0y1y2
00000000
000
00000010
001
00000100
010
00001000
011
00010000
00100000
01000000
10000000
0
xxxxxxxx
高阻态
7.用IF语句编写一个四选一电路,要求输入d0~d3,s为选择端,输出y。
8.现有输入信号是一个占空比位50%的方波,用VHDL设计一个时钟的5分频
电路,输出为占空比位20%,写出VHDL代码。
9.现有输入信号是一个占空比位50%的方波,用VHDL设计一个时钟的5分频
电路,输出为占空比位50%,写出VHDL代码。
10.试用
verilog
语言描述:图示为一个
位移位寄存器,是由四个
D
触发器
(分别设为
U1,U2,U3,U4)构成的。其中
seri_in
是这个移位寄存器的串行输入;
clk
为移位时脉冲输入;clr
为清零控制信号输入;
Q[1]~Q[3]
则为移位寄存器的并行输出。
11.设计一个带复位端且对输入时钟
clk
进行二分频模块,并画出仿真波形。
module
m2(out,clk,reset);
input
reset,clk;
output
out;
reg
out;
always
@(negedge
clk)
begin
if(reset)
out<=0;
else
out<=~out;
end
endmodule
12.设计一带异步复位端、异步置数段(低电平有效)的四位加法计数器,时钟
clk上升沿有效),复位信号
clr,置数信号
load、输入数据
data、输出
qout
。并画出仿真波形。
module
adder_4(qout,clr,clk,load,data);
output[3:0]
qout;
input[3:0]
data;
input
load,clr,clk;
reg[3:0]
qout;
always
@(posedge
clk
or
negedge
load
or
negedge
clk)
begin
if(!load)
qout<=data;
else
if(!clr)
qout<=0;
else
qout<=qout+1;
end
endmodule
13.试设计一个
3/8
译码器,规定模块定义为
module
Decoder(Out,In,En),其中
Out为译码器输出,In
为译码器输入,En
为译码使能输入。要求:写出
3/8
译码器
Verilog
HDL设计程序并注释;
module
decoder(Out,In,En);
(2
分)
output
[7:0]
out;
input
[2:0]
in;
input
en;
//IO
定义
(3
分)
reg
[7:0]
out;
always
@
(In
or
En)
begin
if(En
==
0)
//若
En
为低电平,3
输出无效电平
(2
分)
Out
=
’
b0;
else
//
若
En
为高电平,3/8
译码
(3
分)
case(in)
’
b000:
Out
=
’
b00000001;
//0
’
b001:
Out
=
’
b00000010;
//1
’
b010:
Out
=
’
b00000100;
//2
’
b011:
Out
=
’
b00001000;
//3
’
b100:
Out
=
’
b00010000;
//4
’
b101:
Out
=
’
b00100000;
//5
’
b110:
Out
=
’
b01000000;
//6
’
b111:
Out
=
’
b10000000;
//7
endcase
end
设计一个