← vivo提前批芯片设计岗(20.06.07)

推荐答案 测试一下

下面verilog中哪个或者几个会生成寄存器

A always@(clk) B always@(posedge clk) C always@(posedge clk) D assign reg_a=reg_b;
多选题 中等 笔试真题多选

参考答案

正确选项为B和C(假设C也是always@(posedge clk))。 解析:在Verilog中,寄存器(D触发器)的生成条件是在always块中明确使用边沿触发的敏感列表(posedge或negedge),且内部使用非阻塞赋值(<=)或阻塞赋值(=)但综合工具会推断为时序逻辑。具体分析每个选项: - 选项A:always@(clk)中敏感列表只写了clk,未指定边沿,这属于电平敏感列表,综合工具会将其视为组合逻辑(或锁存器),不生成寄存器。正确的写法应该是always@(posedge clk)或always@(negedge clk)。 - 选项B:always@(posedge clk) reg_a<=reg_b; 使用了posedge clk明确指定时钟上升沿触发,非阻塞赋值,综合工具会推断为D触发器,生成寄存器。 - 选项C:与选项B完全一致(题目中B和C重复,假设C同样为posedge clk),同样生成寄存器。 - 选项D:assign reg_a=reg_b; 连续赋值,组合逻辑,不生成寄存器。 易错点:① 误以为always@(clk)能生成寄存器,实际上必须指定边沿;② 混淆非阻塞赋值与阻塞赋值,虽然都可以在时序逻辑中使用,但非阻塞赋值更常用来避免竞争;③ 连续赋值(assign)只能用于组合逻辑。

涉及知识点

  • 寄存器生成条件:边沿触发always
  • 敏感列表写法:posedge/negedge
  • 时序逻辑与非阻塞赋值
  • 组合逻辑与连续赋值assign
  • 电平敏感与边沿敏感区别
← 上一题
登录后反馈错题
下一题 →