← 2022 · 海光 笔试

推荐答案 测试一下

以下verilog语句:

A、addr的值 B、mem_array[addr]的值 C、mem_array[addr]的值以及addr的值 D、都不敏感
多选题 中等 笔试真题多选

参考答案

正确选项:C。解析:Verilog 中 always @(敏感列表) 的敏感列表可以是任意表达式,表达式中出现的所有信号都会成为敏感信号。此处敏感列表为 mem_array[addr],该表达式包含两个变量:addr 和 mem_array(注意 mem_array 是一个数组,但表达式 mem_array[addr] 的取值依赖于 addr 和数组元素 mem_array[addr] 的值)。因此,当 addr 变化时(导致索引改变)或 mem_array[addr] 本身的值变化时,表达式都会更新,从而触发 always 块。data 通过阻塞赋值获取 mem_array[addr] 的值,所以 data 的最终取值同时受 addr 和 mem_array[addr] 影响。选项 A 和 B 都只描述了部分因素,C 正确。选项 D 显然错误。易错点:部分考生可能误认为敏感列表只对 mem_array[addr] 这个元素值敏感,而忽略 addr 变化导致的索引改变也会触发;或者混淆“敏感列表”与“赋值依赖”的概念。另外,这种写法在实际 RTL 设计中很少使用,因为综合工具通常不支持数组元素作为敏感列表(会导致不可综合或产生锁存器),标准推荐使用 always @(*) 或显式列出所有输入信号。

涉及知识点

  • Verilog敏感列表的构成规则
  • 表达式作为敏感列表的语义
  • 阻塞赋值与组合逻辑建模
  • 数组索引在敏感列表中的隐含敏感
  • 不可综合的常见写法
  • 锁存器的产生与避免
← 上一题
登录后反馈错题
下一题 →