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

首先需要明确,无论是组合逻辑还是时序逻辑,在always块中的变量在声明时都必须为reg类型。

但是对于两种情况,综合器会将二者都综合成同一类型吗?下面以实际例子分析:

在下面的Verilog中,a_temp由组合逻辑产生,b_temp由时序逻辑产生:

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被综合为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

在这里插入图片描述

我们可以发现对于未完整赋值的情况,会将reg综合成锁存器;而完整赋值的情况reg会被综合为wire连线。

总结如下:

描述组合逻辑的always块中,寄存器被综合成wire型;如果存在不完整的赋值的情况,则被综合成锁存器。在描述时序逻辑的always块中,寄存器则根据语句块的内容被综合成触发器。

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值