【SOC 芯片设计 DFT 学习专栏 -- RTL 中的信号名和 Netlist 中的信号名差异】

Overview

本文将介绍 soc 设计中 RTL-to-Netlist 映射及 RTL 中的信号名和 Netlist 中的信号名差异,

在 SoC设计中,RTL-to-Netlist映射 是从RTL(Register Transfer Level)代码转换为Netlist的过程。这通常涉及将用硬件描述语言(如Verilog或VHDL)编写的高层次设计转化为门级网络表,后者由逻辑门及其互连构成。以下详细说明这一过程及其常见的信号命名差异。

RTL-to-Netlist 映射过程

  1. 综合(Synthesis):
  • 由EDA工具(如Synopsys Design Compiler、Cadence Genus等)将RTL代码转化为逻辑门级的描述。

  • RTL中的逻辑行为会被映射到目标工艺库的基本逻辑单元,如与门(AND)、或门(OR)、触发器(FF)等。

  • 综合过程考虑了时序约束(timing constraints)、功耗优化、面积优化等因素。

  1. 优化(Optimization):
  • 对逻辑单元进行重组、简化或门级优化,以满足设计约束。

  • 包括扇出调整、逻辑折叠、路径延迟优化等。

  1. 信号名映射:
  • 在RTL到Netlist映射中,信号名可能会由于工具生成机制而发生变化。

  • 原因包括逻辑优化、资源共享、层级展平(flattening)或冗余信号移除等。

RTL与Netlist中信号名的差异*

差异原因

  1. 层级结构的展平:
  • RTL代码中常以模块化设计,信号名保留其模块名层级。

  • 在Netlist中,为了方便优化和分析,工具可能将设计展平(flattening),信号名因此丢失层级信息或以新规则命名。

例子:

verilog 复制代码
// RTL 中的代码
module top();
    wire a;
    submodule u1(.b(a));
endmodule
module submodule(input b);
    wire c;
    assign c = b & 1'b1;
endmodule

信号名变化:

  • RTL: top.u1.b

  • Netlist: u1_btop_b

  1. 逻辑优化或重命名:
  • 在综合过程中,冗余信号可能被优化掉或重新命名。

  • 工具也可能根据逻辑用途生成新名。

例子:

verilog 复制代码
// RTL 中的信号
wire temp_signal = input1 & input2;

综合后若 temp_signal 被优化:

Netlist中可能直接消失或者映射为内部信号:

  • net_12345
  1. 资源共享的信号变更:
  • 多个实例化模块或信号可能因共享逻辑单元而合并,信号名发生变化。
  1. 时钟、复位信号的重命名:
  • 工具为时钟/复位等全局信号添加特定前缀或后缀,例如 clk_reset_

常见的映射规则

  • 如果不展平层级,Netlist信号名通常是 顶层模块名.子模块名.信号名

  • 如果展平层级,Netlist信号名常以 实例名_信号名 格式表示。

  • 临时信号、优化信号可能生成伪随机ID名,如 net1234

具体信号映射实例

例子:简单寄存器

RTL代码:

verilog 复制代码
module example(input clk, input rst, input d, output reg q);
    always @(posedge clk or posedge rst) begin
        if (rst)
            q <= 1'b0;
        else
            q <= d;
    end
endmodule

Netlist映射:

verilog 复制代码
DFF_X1 q_reg ( // D触发器实例
    .D(d),
    .CK(clk),
    .Q(q)
);

信号映射:

  • RTL 信号名:q

  • Netlist 信号名:保持 q 或自动重命名为 q_reg_Q

例子:优化过程的差异

RTL代码:

verilog 复制代码
assign out = a & b & c;

优化后Netlist:

verilog 复制代码
NAND3_X1 U1 (.A1(a), .A2(b), .A3(c), .ZN(net_5678));
INV_X1 U2 (.A(net_5678), .ZN(out));

信号映射:

  • RTL 信号名:out

  • Netlist 信号名:逻辑分解后可能引入中间信号 net_5678

小结

  • 在RTL到Netlist映射中,信号名差异主要由层级展平、逻辑优化和工具重命名规则引起。

  • 理解信号的功能和工具生成规则,可以更方便地在两者间导航。

  • 可以通过保存综合报告或启用工具设置来保留更多可追踪性信息,例如 -keep_hierarchy 参数或信号标签文件。

相关推荐
FPGA小c鸡2 分钟前
FPGA跨时钟域设计完全指南:从亚稳态到CDC同步器(附实战案例与代码)
fpga开发
浮游本尊37 分钟前
React 18.x 学习计划 - 第十四天:实战整合与进阶收尾
前端·学习·react.js
The_Uniform_C@t21 小时前
PWN | 对CTF WIKI的复现+再学习 (第八期)
网络·学习·网络安全·二进制
前路不黑暗@3 小时前
Java项目:Java脚手架项目的登录认证服务(十三)
java·spring boot·笔记·学习·spring·spring cloud·maven
前路不黑暗@3 小时前
Java项目:Java脚手架项目的 C 端用户服务(十五)
java·开发语言·spring boot·学习·spring cloud·maven·mybatis
Hello_Embed4 小时前
Modbus 传感器开发:STM32F030 libmodbus 移植
笔记·stm32·学习·freertos·modbus
知识分享小能手5 小时前
SQL Server 2019入门学习教程,从入门到精通,SQL Server 2019 视图操作 — 语法知识点及使用方法详解(16)
sql·学习·sqlserver
前路不黑暗@6 小时前
Java项目:Java脚手架项目的 B 端用户服务(十四)
android·java·开发语言·spring boot·笔记·学习·spring cloud
锅包一切6 小时前
PART17 一维动态规划
c++·学习·算法·leetcode·动态规划·力扣·刷题