1、已知 “a =1b’1; b=3b'001;”那么{a,b}=( C )
(A) 4b'0011 (B) 3b'001 (C) 4b'1001 (D) 3b'101
2、在verilog中,下列语句哪个不是分支语句?( D )
(A) if-else (B) case (C) casez (D) repeat
3、Verilog HDL语言进行电路设计方法有哪几种 ?
①自上而下的设计方法(Top-Down)
②自下而上的设计方法(Bottom-Up)
③综合设计的方法
4、在verilog语言中,a=4b'1011,那么 &a=(D )
(A) 4b'1011 (B) 4b'1111 (C) 1b'1 (D) 1b'0
5、在verilog语言中整型数据与( C )位寄存器数据在实际意义上是相同的。
(A) 8 (B) 16 (C) 32 (D) 64
6、大规模可编程器件主要有FPGA、CPLD两类,下列对FPGA结构与工作原理的描述中,正确的是C 。
A.FPGA全称为复杂可编程逻辑器件;
B.FPGA是基于乘积项结构的可编程逻辑器件;(基于查找表)
C.基于SRAM的FPGA器件,在每次上电后必须进行一次配置;
D.在Altera公司生产的器件中,MAX7000系列属FPGA结构。(MAX7000属于CPLD)
7. 子系统设计优化,主要考虑提高资源利用率减少功耗,以及提高运行速度;指出下列哪些方法是面积优化B。
①流水线设计
②资源共享
③逻辑优化
④串行化
⑤寄存器配平 (长路径缩短,短路径加长,使其达到平衡从而提高工作频率)
⑥关键路径法
A.①③⑤ B.②③④ C.②⑤⑥ D.①④⑥
8、下列标识符中,_____A_____是不合法的标识符。
A.9moon B.State0 C. Not_Ack_0 D. signall
9、 下列语句中,不属于并行语句的是:____D___
A. 过程语句 B.assign语句 C.元件例化语句 D.case语句(条件语句是串行语句)
10、P,Q,R都是4bit的输入矢量,下面哪一种表达形式是正确的 5)
1)input P[3:0],Q,R;
2)input P,Q,R[3:0];
3)input P[3:0],Q[3:0],R[3:0];
4)input [3:0] P,[3:0]Q,[0:3]R;
5)input [3:0] P,Q,R;
11、请根据以下两条语句的执行,最后变量A中的值是___①___。
reg [7:0] A;
A=2'hFF;
① 8'b0000_0011 ② 8'h03 ③ 8'b1111_1111 ④ 8'b11111111
3、简述基于数字系统设计流程包括哪些步骤?
包括五个步骤:
⑴、设计输入:将设计的结构和功能通过原理图或硬件描述语言进行设计或编程,进行语法或逻辑检查,通过表示输入完成,否则反复检查直到无任何错误。
⑵、逻辑综合:将较高层的设计描述自动转化为较低层次描述的过程,包括行为综合,逻辑综合和版图综合,最后生成电路逻辑网表。
⑶、布局布线:将综合生成的电路网表映射到具体的目标器件中,并产生最终可下载文件的过程。
⑷、仿真:按照逻辑功能的算法和仿真库对设计进行模拟,以验证设计并排除错误的过程,包括功能仿真和时序仿真。
⑸、编程配置:将适配后生成的编程文件装入到PLD器件的过程,根据不同器件实现编程或配置。
4、简述Verilog HDL编程语言中函数与任务运用有什么特点?
⑴、函数中不能包含时序控制语句,对函数的调用,必须在同一仿真时刻返回。而任务可以包含时序控制语句,任务的返回时间和调用时间可以不同。
⑵、在函数中不能调用任务,而任务中可以调用其它任务和函数。但在函数中可以调用其它函数或函数自身。
⑶、函数必须包含至少一个端口,且在函数中只能定义input端口。任务可以包含0个或任何多个端口,且可以定义input、output和inout端口。
⑷、函数必须返回一个值,而任务不能返回值,只能通过output 或inout端口来传递执行结果。
5、简述FPGA与CPLD两种器件应用特点。
CPLD与FPGA都是通用可编程逻辑器件,均可在EDA仿真平台上进行数字逻辑电路设计,它们不同体现在以下几方面:
⑴FPGA集成度和复杂度高于CPLD,所以FPGA可实现复杂逻辑电路设计,而CPLD适合简单和低成本的逻辑电路设计。
⑵FPGA内主要由LUT和寄存器组成,倾向实现复杂时序逻辑电路设计,而CPLD内主要由乘积项逻辑组成,倾向实现组合逻辑电路设计。
⑶FPGA工艺多为SRAM、flash等工艺,掉电后内信息消失,所以该类型需外配存储器,而CPLD工艺多为EEPROM等工艺,掉电后信息不消失,所以不用外配存储器。
⑷FPGA相对CPLD成本高,但都可以在内部镶嵌硬核和软核,实现片上系统功能。
6. begin-end语句块和fork-join语句块的区别:
1.执行顺序与作用:begin-end语句块按照语句顺序执行可以用于综合电路程序和仿真测试程序。fork-join语句块所有语句均在同一时刻开始执行,不可以用于可综合电路程序。
2.语句前面延迟时间的意义:begin-end语句块为相对于前一条语句执行结束的时间,fork-join语句块为相对于并行语句块启动的时间;
3.起始时间:begin-end语句块为首句开始执行的时间,fork-join语句块为转入并行语句块的时间;
4.结束时间:begin-end语句块为最后一条语句执行结束的时间,fork-join语句块为执行时间最长的那条语句执行结束的时间;
5.行为描述的意义:begin-end语句块为电路中的数据在时钟及控制信号的作用下,沿数据通道中各级寄存器之间的传送过程。fork-join语句块为程序各部分同时开始工作的过程。
1、利用有限状态机,以格雷码编码方式设计一个从输出信号序列中检测出101信号的电路图,其电路图、状态图和状态表如图所示。
module mealyfsm(
input clk,reset,din,
output reg qout
);
parameter [1:0] S0=2'b00, S1=2'b01, S2=2'b11;
reg [1:0] cs, ns;
always @(posedge clk or posedge reset) begin
if(reset)
cs <= S0;
else
cs <= ns;
end
always @(*) begin
case(cs)
S0:
if(!din)
ns = S0;
else
ns = S1;
S1:
if(!din)
ns = S2;
else
ns = S1;
S2:
if(!din)
ns = S0;
else
ns = S1;
default: ns = S0;
endcase
end
always @(posedge clk or posedge reset) begin
if(reset)
dout <= 0;
else if(cs == S2 && din)
dout <= 1;
end
endmodule
2、 程序注解,并说明整个程序完成的功能。
module A(a,b); // 定义模块名为A,端口为a,b
output a; // 定义a为输出端口
input [6:0] b; // 定义b为输入端口,b为7位二进制数
reg [2:0] sum; // sum为reg型变量,用于统计赞成的人数
integer i; // 定义整型变量i为循环变量
reg a; // 定义a为寄存器变量
always @(*) begin // 过程语句,组合逻辑
sum = 0; // sum初值为0
for(i=0;i<=6;i=i+1) // for语句,统计b二进制位为1的个数
if(b[i])
sum = sum + 1;
if(sum[2]) // 若超过4票赞成,则表决通过
a = 1;
else
a = 0; // 若不到四人则不通过
end
endmodule
4、下面是通过case语句实现四选一电路部分程序,将横线上的语句补上,使程序形成完整功能。
case({s1,s0})
2’b00:out=i0;
2’b01:out=i1;
2’b10:out=i2;
2’b11:out=i3;
3、标注各语句功能,指出整个程序完成的电路功能。
// 带同步清0/同步置1(低电平有效)的D触发器.
module dff_syn(q,qn,d,clk,set,reset); //定义模块diff_syn
input d,clk,set,reset;
output reg q,qn; //定义端口d,clk,set,reset为输入端口,q,qn为输出端口
always @(posedge clk) begin //对clk信号上升沿有效
if(~reset) begin
q<=1'b0;
qn<=1'b1;
end //同步清零,低电平有效
else if(~set) begin
q<=1'b1;
qn<=1'b0;
end //同步置位, 低电平有效
else begin
q<=d;
qn<=~d;
end //q输出为d, qn输出为非d;
end
endmodule //模块结束
5、根据下列给定的仿真输入输出波形图2,说明完成此功能的电路是什么功能电路?并写出对应的Verilog HDL(图中clk,clr为输入,q,c为输出)。
4进制加法计数器
module counter(clk,clr,q,c);
input clk,clr;
output reg [1:0] q;
output c;
always @(posedge clk or negedge clr) begin
if(~clr)
q<=2’h0;
else if(q==2’h3)
q<=2’h0;
else
q<=q+1;
end
assign c=(q==2'h3);
endmodule