海思2022数字芯片
笔试日期2021.04.14
笔试时间 2021.04.14
单选
1.以下低功耗措施中,哪种不是降低电路翻转率的方法?
A.在不进行算术运算的时候,使这些模块的输入保持不变,不让新的操作数进来
B.采用Gray码或One-hot码作为状态机编码
C.减少电路中的glitch
D.重新安排“if-else”表达试,可将毛刺或快变化信号移至逻辑锥体的前部
解释:D
2.以下Verilog代码中,a=12,b=10.则z的运算结果为:
Input [3:0]a;
Input [3:0] b;
output signed [7:0] z;
wire signed [3:0]c;
assign c= a[3:0]*b[3:0];
assign z=c;
A.120
B.-8
C.8
D.-120
解释:B
补位用符号位补上。c=4’b1000-->z=8’b11111000(最高位为符号位)
考察:有符号数的位宽转换
有符号数的位转换关键在于符号位(首位)
1、有符号数位宽小到位宽大(4位转换为8位)
关键操作:转换时,高位补原符号位!!!(区别于无符号数的高位补零)
例如:将4位有符号数1100,转换为8位有符号数。
2、有符号数位宽大到位宽小(8位转换为4位)
有符号数位宽大到位宽小的转换就很简单了,直接截取低n位即可。
例如:将8位有符号数1111 1100,转换为4位有符号数。
结论
对于短位宽赋值给长位宽的情况,需要对高位进行位扩展,具体是扩展1还是扩展0,记住:完全依据右操作数!,具体如下:
1)右操作数是无符号数,则无论左操作数是什么类型,高位都扩展成0;
2)右操作数是有符号数,则要看右操作数的符号位,按照右操作数的符号位扩展,符号位是1就扩展1,是0就扩展0;
3)位扩展后的左操作按照是无符号数还是有符号数解释成对应的十进制数值,如果是无符号数,则直接转换成十进制数值,如果是有符号数,则看成2的补码解释成十进制数;
4)从上面4种情况看出,有符号数赋值成无符号数会出现数据错误的情况,因此要避免这种赋值,而其他情况都是可以保证数据正确的。
3.constraint c_0{
src dist {0:=30, [1:3]:=90};
}
请问如上表达式约束,src数值为0的概率为多大:( )
A. 0.2
B. 0.25
C. 0.1
D. 0.6
解释:C
Systemverilog中权重分布由操作符dist实现,有两种形式:“:=”或“:/”。
“:=”表示值的权重是相等的,“:/”表示值的权重是均分的。
权重不用百分比表示,权重和也不一定是100.
例如:
src dist {0:=40; [1:3]:=60;};
即src=0的概率是40/220,src=1的概率是60/220,是2的概率是60/220,是3的概率是60/220.
再例如:
dst dist {0:/40; [1:3]:/60;};
即dst=0的概率是40/100,dst=1的概率是20/100,是2的概率是20/100,是3的概率是20/100.
综上:src dist {0:=30; [1:3]:=90;}; dst=0的概率是30/(90*3+30)=30/300=0.1
4.分析下面的一段程序,正确的打印结果是:
fork
begin
#20
$ display("A");
end
begin
#10
$ display("B");
end
join_none
#5
$ display("C");
A.CBA
B. BCA
C.ABC
D.C
解释 A
https://blog.csdn.net/qq_31348733/article/details/100382377
1.join:The parent process blocks until all the processes spawned by this fork complete.
简单来说:fork…join内的所有语句都是并发执行(对于begin…end内部是顺序执行)
2.join_any:The parent process blocks until any one of the processes spawned by this fork completes.
简单来说:一旦fork…join_any内任何一个线程完成,父线程就会继续运行
3.join_none:The parent process continues to execute concurrently with all the processes spawned by the fork. The spawned processes do not start executing until the parent thread executes a blocking statement or terminates.
简单来说:子线程和父线程会同时执行。
5.下面有关Cache的说法哪一个是不正确的?
A. 设置Cache的理论基础,是程序访问的局部生原理
B. Cache与主存统一编址,Cache的地址空间属于主存的一部分
C. 设置Cache的目的,是解决CPU和主存之间的速度匹配问题
D. Cache的功能匀由硬件实现,对程序员是透明的
解释:B
A:使用Cache改善系统性能的依据是程序的局部性原理 [1]
B:cache的地址与内存地址是两码事,不统一编址,也没有从属关系
C:Cache是介于CPU和主存之间的小容量存储器,存取速度比主存快,接近CPU。它能高速地向CPU提供指令和数据,提高程序的执行速度。Cache技术是为了解决CPU和主存之间速度不匹配而采用的一项重要技术。
D:Cache是主存的缓冲存储器,由高速的SRAM组成,所有控制逻辑全部由硬件实现,对程序员而言是透明的。随着半导体器件集成度的不断提高,当前有些CPU已内置Cache,并且出现了两级以上的多级Cache系统。
Cache通常采用相联存储器。Cache又分为L1Cache(一级缓存)和L2Cache(二级缓存),L1Cache主要是集成在CPU内部,而L2Cache集成在主板上或是CPU上。
6.对于独立复位的模块,只需要考虑对后级模块的影响,无需考虑对前级模块的影响。
A.正确
B.错误
解释:B考虑到可能会存在反馈电路,因此选择错误。
7.System Verilog中,下面那种数组在使用前需要先执行new操作( )
A. Dynamic arrays
B. Associative arrays
C. packed array
D. 多维数组
解释:A
8.System Verilog中,下面哪种数组在使用前需要执行new操作( )
a.压缩数组
b.联合数组
c.动态数组
d.多维数组
解析:C动态数组通过new ( )函数预先分配存储空间。
9.下列哪个不是Verilog系统函数( )
A. $ finish
B. $ head
C. $ time
D. $ write
解释:B
$readmemb和$readmemh用来从文件中读取数据到存贮器中。
$finish的作用是退出仿真器,返回主操作系统,也就是结束仿真过程。
$write(p1,p2,....pn);输出信息,即将参数p2到pn按参数p1给定的格式输出。
$time返回一个64位的整数来表示当前的仿真时刻值
10.以下Verilog运算符号中,优先级最高的是?
A.==
B.“
C.!
D.?:
解析:B
11.模块只收敛做到0.75V,提压到0.85V可以正常工作
A.正确
B.错误
解释:B
12.异步电路都不需要STA进行约束检查
A.是
B.否
解释:A STA都是针对同步电路的
13.在设计状态机时,有两种常用的编码方式:one-hot code、binary code,前者相对于后者的优势主要体现在
A.实现电路的速度更快
B.实现电路的面积更小
C.编码方式简单
D.实现电路的功耗更低
解释:A
独热码和二进制码的优缺点比较:
二进制码、格雷码使用最少的触发器,但是消耗较多的组合逻辑(用于译码) ;
独热码则正好相反,因为状态比较时仅需要比较一位,从而在一定程度上简化了译码逻辑。虽然在表示同样的状态时,独热码占用较多的位,也就是消耗较多的触发器,但这些额外的触发器占用面积可与译码电路省下来的面积相抵消。
在CPLD更多的提供组合逻辑,而FPGA提供更多的触发器资源,所以在CPLD中更多的使用二进制、格雷编码,在FPGA中更多使用独热编码。
另一方面,对于小型设计gray-code和binary-code编码更有效。对于大型设计,one-hot编码更高效。
14.对于相同位数输入的变量比较器,大于和小于的面积是一样的
A.对
B.错误
解释:B 需要考虑有无符号位,如果无符号,大小面积相同;有符号是不同
15.有关综合的说法,以下哪个选项是错误的?
A. 相同的RTL代码,每次综合出来的网表可能是不一样的
B. 综合网表可用于EDA功能仿真
C. casez是不可综合的
D. 时序逻辑always语句中,if-else如果else的分支缺乏,会综合成latch
解释:D
在组合逻辑中,当缺少嵌套if-else语句中的最后一个else子句时,它将推断一个锁存器,因为寄存器必须记住原来的值。
在一个时序逻辑的always语句块中,如果最后的else语句丢失,仍然会继续推断出触发器。
16.在Verilog代码中,对有符号数进行比特选择或拼接,其结果是无符号数
A.正确
B.错误
解释:B
1、对于长位宽赋值给短位宽的情况,无论左操作数、右操作数是有符号数还是无符号数,都是直接截断高位,而左操作数二进制所表示的实际十进制数据要看左操作数是无符号数还是有符号数,如果左操作数是无符号数,直接转换成十进制即可,如果是有符号数,则看成2的补码解释成十进制数,这也是实际计算机系统中有符号数的表示方法。
2、对于短位宽赋值给长位宽的情况,需要对高位进行位扩展,具体是扩展1还是扩展0,记住:完全依据右操作数!,具体如下:
1)右操作数是无符号数,则无论左操作数是什么类型,高位都扩展成0;
2)右操作数是有符号数,则要看右操作数的符号位,按照右操作数的符号位扩展,符号位是1就扩展1,是0就扩展0;
3)位扩展后的左操作按照是无符号数还是有符号数解释成对应的十进制数值,如果是无符号数,则直接转换成十进制数值,如果是有符号数,则看成2的补码解释成十进制数;
4)从上面4种情况看出,有符号数赋值成无符号数会出现数据错误的情况,因此要避免这种赋值,而其他情况都是可以保证数据正确的。
17.reg [0:31] little_vect; little_vect[0+:8]是多少?
A. little-vect[0 : 7]
B. 1ittle_vect[7: 0]
解释:A
举例说明:
reg [31:0] big_vect;
reg [0:31] little_vect;
问题:
big_vect[0 +:8] 转化后一定是big_vect[较大的数值 **:** 较小的数值]
little_vect[0 +:8] 转化后一定是little_vect[较小的数值 **:** 较大的数值]
reg [31:0] big_vect;为大端,那么转化后的也一定是大端,**形式不变**
big_vect [0+: 8] 从0 开始,升序,位宽为8 ======》》》》》big_vect [7 :0]
little_vect [0 +: 8] 从0 开始,升序,位宽为8 ======》》》》》little_vect [0 :7]
big_vect [15 -: 8] 从15开始,降序,位宽为8 ======》》》》》big_vect [15 :8]
little_vect [15 -: 8] 从15开始,降序,位宽为8 ======》》》》》little_vect [8:15]
18.时序逻辑always语句中,if-else如果else的分支缺乏,会综合成latch
A.正确
B.错误
解释:B
在一个时序逻辑的always语句块中,如果最后的else语句丢失,仍然会继续推断出触发器。
19.关于功耗,以下描述不正确的是:
A.设计者需要关注平均功耗、峰值功耗和功耗跳变
B.改变芯片的供电电压和时钟频率都会对芯片功耗产生影响
C.对于可关断的摸块,使用时钟门控即可降低功耗
D.芯片的功耗会受实际信号的影响,所以功耗测试需要结合业务来开展。
解释:A 平均功耗存疑
20.一个D触发器, 其数据Tsu=2ns,Tcq=3ns,Thd=1ns,则此触发器的最高工作频率为: (注:Tsu数据相对时钟的建立时间,Thd数据相对时钟的保持时间,Tcq输出相对时钟的延迟)
A.200MHz
B.500MHz
C.100MEz
D.333MHz
解释:A
Tmin=Tcq+Tgate+Tsu-Tskew=2+3=5ns
21.在Verilog HDL中,*timescale编译器指令格式为: timescale AB.其中A指的是时延精度,B指的是时延单位。
A. 正确
B. 错误
解释:B A是时延单位,B是时延精度。
22.reg signed [0:4] b, b=8'sh8f,赋值后b的值是多少?
A. 5'h1F
B. 5'h0F
C. 8'h8F
解释:B
1、对于长位宽赋值给短位宽的情况,无论左操作数、右操作数是有符号数还是无符号数,都是直接截断高位,而左操作数二进制所表示的实际十进制数据要看左操作数是无符号数还是有符号数,如果左操作数是无符号数,直接转换成十进制即可,如果是有符号数,则看成2的补码解释成十进制数,这也是实际计算机系统中有符号数的表示方法。
23.在GVIM编译器中,将全英文的字符串old全部替换成字符串new,正确的命令是:
A. s/o1d/new/
B. s/o1d/new/g
C. s/o1d/new/g
D. s/o1d/new/
解释:C
24.在Verilog语言中,a=4'b0101,b=4'b1010,那么~(a^b)= ( )
A. 4'b0000
B. 1'b1
C. 1'b0
D. 4'b1111
解释:A
a^b是指ab异或;~(a^b)取反
a^b=4’b1111;
~(a^b)=4’b0000
25.timescale 1ns/10ps,其中1ns代表time unit,10ps代表time precision.
A.正确
B.错误
解释:A同21题
26.generate for循环语句中使用的标尺变量可定义为integer
A.正确
B.错误
解释:B
需要注意三点:
①generate-for语句必须用genvar关键字定义for的索引变量;
②for的内容必须用begin...end块包起来,哪怕只有一句;
③begin...end块必须起个名字;
27.在PerI脚本中,使用( )退出当前循环
A. last
B. break
C. next
D. exit
解释:A
#last 退出循环陈述
#next 到循环的下一个陈述
28.多bit信号的异步处理时,可以用打两拍的方式,也可以用异步fifo
A.正确
B.错误
解释:B 单比特可以用打两拍
多选
1、Initial和always的区别是
A. initial只执行1次,always执行多次
B. initial不可以被综合,always可以综合
C. always中时序和过程语句描述与initial相同
解释:AB
always语句是循环语句,initial只执行一次。它们不能嵌套。
2.在设计中,可以被用于进行不同时钟域隔离的memory类型为
A. two-port Register File
B. single-port RAM
C. single-port Register File
D. dual-port RAM
解释:AD
寄存器文件(register file)又称寄存器堆,是CPU中多个寄存器组成的阵列,通常由快速的静态随机读写存储器(SRAM)实现。这种RAM具有专门的读端口与写端口,可以多路并发访问不同的寄存器。
3.
有如下的代码,下面$ cast返回值为1的有( )
class A;
endclass;
class B extends A;
endclass;
class C extends B;
endclass;
Aa=new(…);
Bb=new(…);
Cc=new(…);
A. a=c; Scast (b,a)
B. $ cast (b,c)
C. $ cast (b,a)
D. a=b; $ cast (b,a)
解释:
4.如下时钟组合中,哪些是同步时钟?
A.不同PLL产生的相位不同,频率相同的时钟
B.相同PLL产生的2分频时钟和4分频时钟
C.同一PLL产生的相位相差180°,频率相同的时钟
D.不同PLL产生的频率不同的时钟
解释:BC
无法判定两个时钟间相位时,则可以称这两个时钟为异步时钟(asynchronous clocks)。
5.影响CMOS电路动态功耗的因素有哪些:
A.工艺
B.翻转率
C.供电电压
D.温度
解释:ABCD
动态功耗来源于:
(1)当门翻转时,负载电容充电和放电,称为翻转功耗:
(2)pmos和nmos管的串并联结构都导通时的有短路电流,称为短路功耗。
6.芯片的工作条件主要是指( )
A.工艺
B.温度
C.电压
D.湿度
解释:BCD
7.Verilog法关于任务和函数,描述正确的有( )。
A.任务可以调用还数(function)。
B.函数可以调用函数。
C.任务(task)可以调用任务。
D.函数可以调用任务。
解释:ABC
verilog语言任务可以调用函数和任务函数可以调用函数。
如果程序中有一段语句需要执行多次,则重复性的语句非常多,代码会变得冗长且难懂,维护难度也很大,任务和函数具备将重复性语句聚合起来的能力,类似C语言的子程序。通常任务和函数来代替重复性语句,也有效简化程序结构,增加代码的可读性。因此,task利function都是可综合的,不过综合出来的都是组合逻辑电路。
任务(task)
任务就是封装在task-endtask之间的一段语句。任务是通过调用来执行的,也只能通过调用来执行,如果定义了任务,但整个过程都没有调用它,它是不会执行的。调用任务时可能需要它来处理某些数据并返回操作结果,所以任务应当有接受数据的输入端和返回数据的输出端。另外,任务可以彼此调用,任务还可以调用函数。
任务定义
task task-ld;
[declaration]
procedural-statement
endtask
其中,task和endtask将它们之间的内容标志成一个任务定义,task标志着一个任务定义结构的开始: task-ld是任务名,可选项在定义任务时,有下列六点需要注意:
1、在第一行task语句中不能列出端口名称。
2、任务的输入、输出和双向端口数量不受限制,甚至可以没有输入、输出和双向端口。
3、在任务定义的描述语句中,可以出现不可综合操作符合语句,但这样会造成任务不可综合。
4、在任务中可以调用其他的任务或函数,也可以调用自身。
5、在任务定义结构中不可出现initial和always语句。
6.在任务定义中可以出现"disable中止语句",将中断正在执行的任务,但其是不可综合的。当任务被中断后,程序流程将返回任务调用
8.逻辑函数可以有的表达式为( )
A.真值表
B.卡诺图
C.逻辑表达式
D.组合图
解释:ABC
任何一个逻辑函数,其表达式的形式都不是唯一,或与式、与或式等等可以相互转化的。但它的真值表是唯一的,真值表相当于是普通函数的值域,值域不同就不是同一函数了。逻辑函数的最小项表达式与真值表具有一一对应的关系,所以逻辑函数的最小项表达式是唯一的。相同变量构成的最大项表达式与最小式表达式互为反函数(互补关系),同样它与真值表也是一一对应的关系,最大项表达式也是唯一的。
9.基于FPGA和ASIC芯片设计的差异需要关注的有
A.上下电流程
B.时钟频率
C.时钟复位
D. memory控制
解释:ABCD
10.异步电路的处理方式包括
A.多bit DMCX同步
B.握手协议同步
C.多bit格雷码同步
D.影步FIFO同步
解释:ABCD
对以一位的异步信号可以使用“一位同步器进行同步”(使用两级触发器),而对于多位的异步信号,可以采用如下方法:1:可以采用保持寄存器加握手信号的方法(多数据,控制,地址);2:特殊的具体应用电路结构,根据应用的不同而不同;3:异步FIFO。(最常用的缓存单元是DPRAM)
---------------------------------------
附:创芯人才网数字芯片设计高薪职位推荐
扫描二维码,查看数字IC职位