问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

always块中的REG型变量会被综合成什么结构

创作时间:
作者:
@小白创作中心

always块中的REG型变量会被综合成什么结构

引用
CSDN
1.
https://blog.csdn.net/qq_43433724/article/details/138185404

在Verilog HDL编程中,always块中的变量在声明时都必须为reg类型。但是,对于组合逻辑和时序逻辑,综合器会将二者综合成不同的结构。下面通过实际例子进行分析。

组合逻辑与时序逻辑的综合结果

考虑以下Verilog模块:

module full_add(
    input clk,
    input [3:0]a,
    input [3:0]b,
    output [7:0]c,
    output [3:0] d
    );
reg [3:0]a_temp;
reg [3:0]b_temp; 
always@(*)
begin
    a_temp=a;
end
assign c=a_temp;
always@(posedge clk)
begin
    b_temp<=b;
end
assign d=b_temp;
endmodule

在这个模块中,a_temp由组合逻辑产生,而b_temp由时序逻辑产生。下面是它们的综合结果:

从综合结果可以看出:

  • a_temp被综合为wire型
  • b_temp被综合为触发器

因此,即使在声明时都被声明为寄存器,但根据其是组合逻辑还是时序逻辑,最终的综合结果是不同的。

不完整赋值情况下的综合结果

再考虑以下情况:

module full_add(
    input en,
    input [3:0]a,
    input [3:0]b,
    output  [3:0]c,
    output  [3:0]d
    );
reg [3:0]a_temp;
reg [3:0]b_temp;
always@(*)
begin
    if(en)
        a_temp<=a;
end
assign c=a_temp;
always@(*)
begin
    if(en)
        b_temp<=b;
    else
        b_temp<=0;
end
assign d=b_temp;
endmodule

在这个模块中:

  • 对于未完整赋值的情况(如a_temp),reg会被综合成锁存器
  • 对于完整赋值的情况(如b_temp),reg会被综合为wire连线。

总结

  • 在描述组合逻辑的always块中,寄存器被综合成wire型;如果存在不完整的赋值的情况,则被综合成锁存器。
  • 在描述时序逻辑的always块中,寄存器则根据语句块的内容被综合成触发器。
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号