单选题(每题2分 共20题)
1.状态机的编码风格包括一段式、两段式和三段式,下列描述正确的是( )
A一段式寄存器输出,易产生毛刺,不利于时序约束;
B二段式组合逻辑输出,不产生毛刺,有利于时序约束;
C三段式寄存器输出,不产生毛刺,有利于时序约束;
D所有描述风格都是寄存器输出,易产生毛刺,有利于时序约束。
解:
C
(1)一段式:一个always块,既描述状态转移,又描述状态的输入输出,当前状态用寄存器输出;
(2)二段式:两个always块,时序逻辑与组合逻辑分开,一个always块采用同步时序描述状态转移;另一个always块采用组合逻辑判断状态转移条件,描述状态转移规律以及输出,当前状态用组合逻辑输出,可能出现竞争冒险,产生毛刺,而且不利于约束,不利于综合器和布局布线器实现高性能的设计;
(3)三段式:三个always块,一个always模块采用同步时序描述状态转移;一个always采用组合逻辑判断状态转移条件,描述状态转移规律;第三个always块使用同步时序描述状态输出,寄存器输出。
三段式与二段式相比,关键在于根据状态转移规律,在上一状态根据输入条件判断出当前状态的输出,从而在不插入额外时钟节拍的前提下,实现了寄存器输出。
2.线网中的值被解释为无符号数。在连续赋值语句中,assign addr[3:0]=-3;addr被赋予的值是( )
A 4'b1101
B 4' b0011
C 4' bxx11
D 4' bzz11
解:
A
3. "a=4' b1100,b=4' bx110" 选出正确的运算结果( )
A a&b=0
B a&&b= 1
C b&a=x
D b&&a=x
解:A
bd应该等于什么?
4.下列描述代码可综合的是( )
A fork... join
B assign/deassign
C if ... else和case
D repeat和forever
解:C
5. reg[255:0] mem[7:0]正确的赋值是( )
A mem[5]==3' d0;
B mem[10]=8' d1;
C mem=0;
D mem[5][3:0]=4' d1;
解:D
6.以下关于逻辑综合中解决congestion问题描述不正确的是( )
A禁用多引脚标准单元,例如4输入引脚以上的标准单元
B使用partial blockage以降低congestion区域的cell density
C过多使用MUX单元不利于congestion的优化,因此MUX单元要尽可能禁用
D尽可能使用DCG做逻辑综合
解:C 不会
A不懂
B是对的
C不是禁用吧,应该是用小的mux,不用太大的
D是对的:
7.综合不包括下面哪一个过程( )
A Translation
B Routing
C Mapping
D Logic Optimization
解:B
综合分为三个部分:Synthesis= Translate + Mapping + Optimization。
1、 Translate 是将 HDL转化为GTECH库元件组成的逻辑电路,这步通过read_verilog进行(verilog代码),verilog代码被读入后,将会被自动translate。GTECH是独立于工艺库的通用元件库。这个时候可以用write -output ./unmapped/design.db输出unmapped的二进制文件。
2、 Mapping 是将GTECH映射到某一指定的工艺库,此网表包含了工艺参数。
3、 Optimization 是将网表按设计者的约束进行优化。
后两步通过加约束后使用compile命令完成。完成optimization之后可以通过
write -format verilog -hierarchy -output./p_syn_sim/design.v
写成verilog格式的网表,这是map后的结果。如果输出的是顶层模块,所有模块的module都会输出到同一个文件中。顶层模块一般在最后。
8.下面关于FIFO的描述正确的是
A FIFO的读写必须属于同一时钟域
B FIFO是先进先出的存储器
C外部不可以直接操作FIFO的读写地址
D FIFO的空信号在写时钟域产生,满信号在读时钟域产生
解:BC都对啊
A异步
C不可以直接操作地址
D空在读,满在写
9. Verilog语言中,下列哪些语句不可以被综合( )
A generate语句块
B for语句块
C function语句块
D force语句
解:D
10. 下面表达式中结果位1' b1的是( )
A 4' b1010&4' b1101
B !4' b1001 || !4' b0000
C &4' b1101
D ~4' b1100
解:B
A = 0
B = 1
C = 0
D = 4'b0011
简答题
11.简述流水线设计的方法和作用。
方法:将较长的组合逻辑拆分成小段,中间加寄存器delay
作用:可以提高时钟频率,提高数据吞吐量
别人写的:
流水线设计的方法和作用_dongdongnihao_的博客-CSDN博客_流水线设计
流水线设计从某种程度上可以提高系统频率,因此常用于高速信号处理领域,如果某个信号可以分为若干步骤处理,而且整个数据处理过程是单项的,即没有反馈运算和迭代运算,前一个步骤的输出就是下一个步骤的输入,可以考虑流水线设计来提高系统的频率。
如下图所示:
典型的流水线设计是将原本一个时钟周期完成的较大的组合逻辑,通过合理的切割后分由多个时钟周期来完成,这样一来该部分逻辑运行的时钟频率就会有明显的提升,尤其当她是一条关键路径时,采用流水线设计后整个系统的性能都会得到提升。
12.怎样用D触发器、与或非组成二分频电路?
将寄存器的Q端通过一个非门连接到dff的D端
13.请根据下面的设计描述,尽可能多的列出你所能想到的用于功能验证的测试点
一个异步FIFO, rdata和wdata均为8位数据,FIFO深度为16,当rst_n输入为低时,FIFO被复位,当wclk的上升沿采样到wr为高时,数据被写入FIFO,当rclk的上升沿采样到rd为高时,FIFO输出数据。此外,当FIFO为空时,empty信号输出为高,当FIFO满时,full信号输出无高。
解:不懂验证啊
套娃一下
14.用D触发器搭建4进制的计数器。
module cnt4b(clk,rst,ena,dout,cout);
input clk,rst,ena;
output [1:0] dout;
output cout;
reg [1:0] cnt;
assign cout=&cnt; //进位输出
assign dout=cnt;
always @(posedge clk or negedge rst)
begin
if(rst==1'b0)
cnt<=2'h0;
else if(ena==1'b1)
cnt<=cnt+1'b1;
end
endmodule
15.设计一个同步fifo,读写时钟相同,其中在写入时每100个时钟周期会写10个,具体哪个时刻写入不确定,在读出侧每10个cycle会读1个,计算FIFO的最小深度?
解:
假如背靠背
20-20*(1/1)*(1/10)= 18
例题:
FPGA/数字IC秋招笔试面试013——FIFO深度计算【字节跳动】【大疆】【简便计算公式】【FPGA探索者】(2022届) - 知乎
16.如下代码在综合时是否可以综合出时钟门控电路?如果能,画出时钟门控示意图,如果不能,请修改使信号out可以综合出时钟门控电路。
always @(posedge clk or negadge rst_n) begin
if(rst_n==1' b0)
out <= 64' b0;
else
if (out en)
out<= data;
else
out<=64' b0;
end
解:
不能综合出门控时钟,把else去了就行
always @(posedge clk or negadge rst_n) begin
if(rst_n==1' b0)
out <= 64' b0;
else
if (out en)
out<= data;
end
编程题
17.用Verilog语言实现一个带使能的模100异步清0计数器;模块定义为module count (out, count_en, clr, clk);
18.画出可以检测11101串的状态转移图,并用Verilog实现FSM;要求每检测到一次该序列,输出2个周期的高电平信号;要求使用低功耗IND的状态机编码方式;
19、补一个乐鑫今年的实习笔试题
verilog 移位运算符 说明_FPGA、数字IC系列(2)——电子科大与北航部分Verilog题目与解析..._小马甲不小的博客-CSDN博客