当前位置: 首页 > news >正文

Formality:时序变换(二)(不可读寄存器移除)

相关阅读

Formalityhttps://blog.csdn.net/weixin_45791458/category_12841971.html?spm=1001.2014.3001.5482


一、引言

        时序变换在Design Compiler的首次综合和增量综合中都可能发生,它们包括:时钟门控(Clock Gating)、寄存器合并(Register Merging)、寄存器复制(Register Replication)、常量寄存器移除(Constant Register Removal)、不可读寄存器移除(Unread register removal)、流水线重定时(Pipeline Retiming)、自适应重定时(Adaptive Retiming)、相位反转(Phase Inversion)、多比特寄存器组(Multibit Banking)。

        合适的时序变换越多,就能获得更好的结果质量(QoR),但时序变换会无法避免地造成等价性检查的困难,因为这改变了逻辑锥的结构。虽然使用SVF文件能够解决大部分的问题(关于SVF文件的介绍,参考Design Compiler:set_svf命令以及svf文件简介一文),但对这些时序变换的了解有助于在不使用SVF文件时进行设置和在SVF文件失效时进行调试。

        本文将详细阐述时序变换中的不可读寄存器的移除,将简单介绍不可读寄存器的概念,有关不可读概念的详细介绍,参考下面的这篇博客。

Formality:不可读(unread)的概念https://chenzhang.blog.csdn.net/article/details/145242304

二、不可读寄存器移除

图1 不可读寄存器的综合

        如图1所示,当Design Compiler识别到不可读寄存器后,它会将其从设计中移除(可通过set_unloaded_register_removal命令或compile_delete_unloaded_sequential_cells变量改变);Formality将自动识别不可读寄存器(无需使用SVF文件和用户设置),一般情况下参考设计中会存在未匹配的不可读寄存器,即使不可读寄存器匹配成功了,默认情况下也不会进行验证(可通过verification_verify_unread_compare_points变量改变)。

三、示例

例1 不可读寄存器

// 参考设计
module unread(input a, b, clk, output z);
reg a_r1, a_r2;assign z = a_r1;
always@(posedge clk) begina_r1 <= a;a_r2 <= a & b; // 没有负载
endendmodule// 实现设计
module unread ( a, b, clk, z );input a, b, clk;output z;DFFQXL a_r1_reg ( .D(a), .CK(clk), .Q(z) );
endmodule

        下面的图2是参考设计的原理图,图3是实现设计的原理图。 

图2 参考设计的原理图

图3 实现设计的原理图 

        例1的匹配结果如下所示,可以看出参考设计中存在一个未匹配的不可读点。

*********************************** Matching Results ***********************************2 Compare points matched by name0 Compare points matched by signature analysis0 Compare points matched by topology2 Matched primary inputs, black-box outputs0(0) Unmatched reference(implementation) compare points0(0) Unmatched reference(implementation) primary inputs, black-box outputs1(0) Unmatched reference(implementation) unread points
****************************************************************************************

        使用report_unmatched_points -status unread可以显示该点的详细信息,可以看出不匹配的点就是被Design Compiler移除的不可读寄存器,如下所示。

**************************************************
Report         : unmatched_points-status unread Reference      : r:/WORK/unread
Implementation : i:/WORK/unread
Version        : O-2018.06-SP1
Date           : Thu Jan 23 22:32:31 2025
**************************************************1 Unmatched point (1 reference, 0 implementation):Ref  DFF        r:/WORK/unread/a_r2_reg

        例1的验证结果如下所示,可以看到即使参考设计中出现了未匹配的寄存器,但由于其被识别为不可读寄存器,因此验证成功。

********************************* Verification Results *********************************
Verification SUCCEEDED
----------------------Reference design: r:/WORK/unreadImplementation design: i:/WORK/unread2 Passing compare points
----------------------------------------------------------------------------------------
Matched Compare Points     BBPin    Loop   BBNet     Cut    Port     DFF     LAT   TOTAL
----------------------------------------------------------------------------------------
Passing (equivalent)           0       0       0       0       1       1       0       2
Failing (not equivalent)       0       0       0       0       0       0       0       0
****************************************************************************************

        假设使用RTL描述同时作为参考设计和实现设计,不可读寄存器能够匹配成功,如下所示。

*********************************** Matching Results ***********************************2 Compare points matched by name0 Compare points matched by signature analysis0 Compare points matched by topology2 Matched primary inputs, black-box outputs0(0) Unmatched reference(implementation) compare points0(0) Unmatched reference(implementation) primary inputs, black-box outputs
****************************************************************************************

        验证结果如下所示,可以看出不可读的比较点默认情况下会被归为Not Compared类而不进行验证。

********************************* Verification Results *********************************
Verification SUCCEEDED
----------------------Reference design: r:/WORK/unreadImplementation design: i:/WORK/unread2 Passing compare points
----------------------------------------------------------------------------------------
Matched Compare Points     BBPin    Loop   BBNet     Cut    Port     DFF     LAT   TOTAL
----------------------------------------------------------------------------------------
Passing (equivalent)           0       0       0       0       1       1       0       2
Failing (not equivalent)       0       0       0       0       0       0       0       0
Not ComparedUnread                       0       0       0       0       0       1       0       1
****************************************************************************************

        如果将verification_verify_unread_compare_points变量设置为true,则会对成功匹配的不可读比较点进行验证,如下所示。

********************************* Verification Results *********************************
Verification SUCCEEDED
----------------------Reference design: r:/WORK/unreadImplementation design: i:/WORK/unread3 Passing compare points
----------------------------------------------------------------------------------------
Matched Compare Points     BBPin    Loop   BBNet     Cut    Port     DFF     LAT   TOTAL
----------------------------------------------------------------------------------------
Passing (equivalent)           0       0       0       0       1       2       0       3
Failing (not equivalent)       0       0       0       0       0       0       0       0
****************************************************************************************
http://www.lryc.cn/news/529087.html

相关文章:

  • MathType下载与安装详细教程
  • docker中运行的MySQL怎么修改密码
  • 内外网文件摆渡企业常见应用场景和对应方案
  • 【Block总结】PKI 模块,无膨胀多尺度卷积,增强特征提取的能力|即插即用
  • 自制一个入门STM32 四足机器人具体开发顺序
  • 物联网智能项目之——智能家居项目的实现!
  • [免费]微信小程序智能商城系统(uniapp+Springboot后端+vue管理端)【论文+源码+SQL脚本】
  • C28.【C++ Cont】顺序表的实现
  • 【电工基础】低压电器元件,低压断路器(空开QF),接触器(KM)
  • 从 UTC 日期时间字符串获取 Unix 时间戳:C 和 C++ 中的挑战与解决方案
  • [前端开发]记录国内快速cdn库,用于在线引入JavaScript第三方库
  • 留学生scratch计算机haskell函数ocaml编程ruby语言prolog作业VB
  • CF 766A.Mahmoud and Longest Uncommon Subsequence(Java实现)
  • React 的 12 个核心概念
  • 玩转大语言模型——使用langchain和Ollama本地部署大语言模型
  • 【数据结构】(2)时间、空间复杂度
  • 分享14分数据分析相关ChatGPT提示词
  • dify实现原理分析-rag-数据检索的实现
  • Day30-【AI思考】-错题分类进阶体系——12维错误定位模型
  • 全国31省空间权重矩阵(地理相邻空间、公路铁路地理距离空间、经济空间)权重矩阵数据-社科数据
  • Docker容器数据恢复
  • Visual Studio使用GitHub Copilot提高.NET开发工作效率
  • 【matlab】绘图 离散数据--->连续函数
  • Python大数据可视化:基于python的电影天堂数据可视化_django+hive
  • 几种K8s运维管理平台对比说明
  • YOLO11/ultralytics:环境搭建
  • Effective Objective-C 2.0 读书笔记—— 消息转发
  • 【Python-办公自动化】实现自动化输出json数据类型的分析报告和正逆转换
  • Docker小游戏 | 使用Docker部署RPG网页小游戏
  • 技术周总结 01.13~01.19 周日(Spring Visual Studio git)