今天依然为大家带来华为海思芯片岗的真题解析,如有错漏,欢迎指正哈。
1. 数字电路设计中,下列哪种手段无法消除竞争冒险现象(d)
a. 加滤波电容,消除毛刺
b. 增加冗余项消除逻辑冒险
c. 增加选通信号,避开毛刺
d. 降低时钟频率
解析:在同步电路中,降低时钟频率可以让寄存器采集数据的时候避开毛刺,因为假定时序路径延时不变,频率降低使时钟沿后移,setup time不变的情况下给了更多的timing margin使毛刺恢复。但与前3个选项相比,这不是从根本上消除毛刺,该毛刺信号还是会被电路传递,只不过降低了setup违例的风险。而在异步电路中,不论时钟频率是多少,毛刺都有被下游寄存器采集的风险。
2. 异步时钟数据采样的方法错误的是(d)
a. 单bit高频时钟脉冲展宽后给低频时钟进行采样
b. 握手信号后再采样
c. 使用fifo隔离进行多bit的采样
d. 高频时钟直接采样低频时钟的多bit数据
解析:多bit数据存在各bit到达采样点的时刻不同的问题,直接采样可能会采集到错误的数据。要通过握手或者fifo或者格雷码转换单bit等方式进行多bit数据传输。
3. 以下不能对多bit的数据总线的时钟异步处理的是:(c)
a. Dmux synchronizer
b. Gray-code
c. 寄存器同步
d. AFIFO
解析:同上一题,多bit数据总线不能直接用寄存器同步方式进行异步处理。
4. 一个4bit位宽的有符号数a=4’b1001取绝对值后的值为abs(a)=4’b0110(错误)
5. 对于两个位宽相同的无符号数a和b, a>b和a正确)
6. 组合逻辑电路的特点是输出信号只是该时刻输入信号的函数,它是无记忆功能的。时序逻辑电路的特点是任何时刻产生的稳定输出信号不仅与该时刻输入信号有关,而且与它过去的状态有关(正确)
7. 高的功能覆盖率意味着高的代码覆盖率(错误)
解析:功能覆盖率和代码覆盖率没有直接的关系。功能覆盖率主要表征测试点关注信号的翻转情况。代码覆盖率包括了:信号翻转覆盖率,条件覆盖率和代码行覆盖率。可以想象一个极端场景:DUT是一个CPU,测试点只观察CPU里的加法器。加法器测全了,功能覆盖率高了,但是代码只测了冰山一角。
如果反过来表达,高的代码覆盖率也同样不意味着高的功能覆盖率。假设DUT是一个8bit无符号加法器,测试两个向量:a=b=8’b1111_1111,和a=b=8’b0理论上就能基本将代码覆盖率打满,但是这只是所有操作数组合的其中两个,很明显功能覆盖率不可能高。
8. 为了发现逻辑缺陷,要想到什么测什么,一定要遍历所有可能(错误)
解析:头脑风暴挖掘测试点是必须的,但是要保证测试点是符合规格说明和约束的,并且是可能会发生的场景。
9. 在verilog中,关于函数,不正确的是(d)
a. 函数可以调用其他函数
b. 函数只能返回一个值
c. 函数必须至少带有一个输入
d. 不能包含任何时延或时延控制
解析:函数是可综合语句,可以综合成组合逻辑。a,b,c是正确的,d是错误的,都是语法规定,没有什么原因可以追溯,当成公理应用即可。
10. 在systemverilog中,任务task可以调用函数function(正确)
11. 下面哪个语句是可以综合的(c)
a. initial过程块
b. forever 循环语句
c. for循环语句
d. fork join
解析:for循环语句多用在多bit信号的同类型操作或者递归操作上。可以放在组合逻辑always块中,或者与generate结合使用。Initial, forever和fork join主要用在验证环境的进程控制上。
12. 同步时序电路和异步时序电路比较,其差异在于后者(c)
a. 没有触发器
b. 没有稳定状态
c. 没有统一的时钟脉冲控制
d. 输出只与内部状态有关
解析:异步时序电路是一种没有全局时钟的设计,所以c是正确的。异步时序电路有多种设计方式,有的设计方式会使用到触发器。并且是有稳定状态的。输出与内部状态和输入都有关系。因此a,b,d都错误。
13. 在模块实例化语句中,悬空端口可通过将端口表达式表示为空白指定为悬空。模块的输入端悬空值为(d)
a. 0
b. x
c. 1
d. z
解析:模块输入不允许有悬空值。悬空则没有驱动,为高阻态z。
14. 下列电路中属于时序逻辑电路的是(b)
a. 译码器
b. 计数器
c. 编码器
d. 数据选择器
解析:一般来说计数器每个周期统计一次进行累加,需要依赖于前一个周期的状态。其他三种基本电路都是组合逻辑,不需要依赖于过去的状态。
15. 以下说法错误的有(a)
a. 为了避免wire信号出现x态,最好是在声明时,赋初始值0
b. 一个模块例化多次,可以使用generatefor循环减少代码
c. 模块例化时,需要将端口显式列出,即使某个端口未连接信号
d. 循环表达式的循环次数必须为常数
解析:如果声明时将wire信号先赋初始值0,而后使用assign语句,相当于多驱动电路,很明显是错的。只有在组合逻辑的always块中可以先将输出信号赋初始值0。
16. 某个状态下,不关心某个寄存器的输出值,那么将其设计为输出0,可以降低功耗(错误)
解析:比起设计为输出0,降低功耗更好的做法是保持寄存器原值。因为功耗来自于信号toggle,如果在上一状态寄存器输出为1,下一状态下输出为0,即便0不使用,也产生了1到0的跳变,同样会有功耗,既然不关心,还不如保持输出为1。
17. 高频时钟域的数据总线(每时钟周期都变化)传递给低频时钟域,哪种同步方式正确?(b)
a. 使用握手信号进行同步
b. 使用异步fifo
c. 使用同步fifo
d. 使用打2拍进行同步
解析:c和d很明显错误。多bit数据不能使用打两拍同步。这道题的难点在于a选项。一般而言握手信号可以用于高频时钟域到低频时钟域的同步,但是为了保证数据不被漏采,从高频到低频握手信号valid_tx需要做信号宽度拓展,至少拓展为1.5个周期的rx时钟,因此相应的数据data_tx也要保持多个n个tx周期不变,n=1.5*clk_rx/clk_tx。这与题目条件数据总线每周期都变化相矛盾。因此只有b是正确的。
18. 同步电路设计中出现setup time不满足,不可以采用下面哪种措施解决(d)
a. 减小信号延迟
b. Pipeline
c. 降低时钟频率
d. 增加时钟频率
解析:setup time是由于时序路径延迟td+tsetup > tclk,而增加时钟频率则减小tclk,保持前两项不变,相当于恶化了setup time的满足。
19. 编写verilog程序时,变量的定义不可与关键字冲突(正确)
20. 关于亚稳态描述正确的是(d)
a. 异步逻辑不会产生亚稳态
b. 采用格雷码能消除亚稳态
c. 亚稳态不会传递,所以不会导致相关逻辑处于不确定态
d. 在时钟有效延的时候外部数据未稳定,导致触发器不能判断数据电平的状态
解析(1)请点击:
2020华为海思校招芯片岗真题解析(1)