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块中,寄存器则根据语句块的内容被综合成触发器。

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-29 12:38:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-29 12:38:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-29 12:38:04       82 阅读
  4. Python语言-面向对象

    2024-04-29 12:38:04       91 阅读

热门阅读

  1. ssh连接自动断开的几种可能

    2024-04-29 12:38:04       38 阅读
  2. linux 提权总结_linux提权

    2024-04-29 12:38:04       29 阅读
  3. 阿赵Json工具AzhaoJson的Lua版本

    2024-04-29 12:38:04       25 阅读
  4. 【Spark】读取本地文件

    2024-04-29 12:38:04       34 阅读
  5. rust语言tokio库spawn, blocking_spawn等的使用

    2024-04-29 12:38:04       59 阅读
  6. Element

    Element

    2024-04-29 12:38:04      32 阅读
  7. H3C 交换机配置 IGMP-snooping 注意点

    2024-04-29 12:38:04       41 阅读
  8. SVM中常用的核函数及适用场景

    2024-04-29 12:38:04       37 阅读
  9. Grafana - Configure generic OAuth2 authentication

    2024-04-29 12:38:04       83 阅读