推荐答案
测试一下
题目
如下verilog描述中哪个或者哪几个会生成寄存器
A、always@(clk)
B、always@(negedge clk)
C、always@(posedge clk)
D、assignreg_a=reg_b;
参考答案与知识点
参考答案
正确答案是B和C。
解析:在Verilog中,生成寄存器(即触发器)的关键条件是使用always块且敏感列表包含时钟边沿(posedge或negedge),并且在块内对变量进行赋值(通常使用非阻塞赋值<=)。
选项A:always@(clk)敏感列表是电平敏感(clk变化即触发),而不是边沿敏感。这种写法通常用于组合逻辑或锁存器生成,若块内条件语句不完整可能综合为锁存器,但不会生成寄存器(触发器)。因此A不会生成寄存器。
选项B:always@(negedge clk)是下降沿敏感,属于时序逻辑的典型写法,赋值语句reg_a<=reg_b会综合为下降沿触发的寄存器(D触发器)。
选项C:always@(posedge clk)是上升沿敏感,同样会综合为上升沿触发的寄存器。
选项D:assign reg_a=reg_b;是连续赋值语句,用于描述组合逻辑,生成的是连线(wire)或组合逻辑输出,不会生成寄存器。
因此,只有B和C会生成寄存器。
易错点:注意区分电平敏感与边沿敏感;注意assign语句对应组合逻辑;注意always@(clk)可能综合为锁存器而非寄存器。
涉及知识点
- always块的边沿敏感与电平敏感
- 寄存器(触发器)的生成条件
- 非阻塞赋值与阻塞赋值的区别
- 组合逻辑与时序逻辑的区分
- 连续赋值语句assign的特性