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

server/2025/1/24 7:05:37/

相关阅读

Formalityhttps://blog.csdn.net/weixin_45791458/category_12841971.html?spm=1001.2014.3001.5482https://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/145242304https://chenzhang.blog.csdn.net/article/details/145242304

二、不可读寄存器移除

图1 不可读寄存器的综合

        如图1所示,当Design Compiler识别到不可读寄存器后,它会将其从设计中移除;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

        例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.ppmy.cn/server/160966.html

相关文章

0基础跟德姆(dom)一起学AI 自然语言处理21-fasttext模型架构

1 Fasttext模型架构 FastText 模型架构和 Word2Vec 中的 CBOW 模型很类似, 不同之处在于, FastText 预测标签, 而 CBOW 模型预测中间词. FastText的模型分为三层架构: 输入层: 是对文档embedding之后的向量, 包含N-gram特征隐藏层: 是对输入数据的求和平均输出层: 是文档对应…

c++ 与 Matlab 程序的数据比对

文章目录 背景环境数据保存数据加载 背景 ***避免数据精度误差&#xff0c;快速对比变量 *** 环境 c下载 https://github.com/BlueBrain/HighFive 以及hdf5库 在vs 中配置库 数据保存 #include <highfive/highfive.hpp> using namespace HighFive;std::string fil…

mysql 学习3 SQL语句--整体概述。SQL通用语法,SQL语句分类

SQL通用语法 SQL语句分类 DDL data definition language : 用来创建数据库&#xff0c;创建表&#xff0c;创建表中的字段&#xff0c;创建索引。因此成为 数据定义语言 DML data manipulation language 有了数据库和表以及字段后&#xff0c;那么我们就需要给这个表中 添加数…

YOLOv9改进,YOLOv9检测头融合DSConv卷积,适合目标检测、分割任务

前言 精确分割拓扑管状结构例如血管和道路,对各个领域至关重要,可确保下游任务的准确性和效率。然而,许多因素使任务变得复杂,包括细小脆弱的局部结构和复杂多变的全局形态。在这项工作中,注意到管状结构的特殊特征,并利用这一知识来引导 DSCNet 在三个阶段同时增强感知…

LangChain + llamaFactory + Qwen2-7b-VL 构建本地RAG问答系统

单纯仅靠LLM会产生误导性的 “幻觉”&#xff0c;训练数据会过时&#xff0c;处理特定知识时效率不高&#xff0c;缺乏专业领域的深度洞察&#xff0c;同时在推理能力上也有所欠缺。 正是在这样的背景下&#xff0c;检索增强生成技术&#xff08;Retrieval-Augmented Generati…

Linux 高级路由与流量控制-用 tc qdisc 管理 Linux 网络带宽

大家读完记得觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 此分享内容比较专业&#xff0c;很多与硬件和通讯规则及队列&#xff0c;比较底层需要有技术功底人员深入解读。 Linux 的带宽管理能力 足以媲美许多高端、专用的带宽管理系统。 1 队列&#xff0…

vue2的$el.querySelector在vue3中怎么写

这个也属于直接操作 dom 了&#xff0c;不建议在项目中这样操作&#xff0c;不过我是在vue2升级vue3的时候遇到的&#xff0c;是以前同事写的代码&#xff0c;也没办法 先来看一下对比 在vue2中获取实例是直接通过 this.$refs.xxx 获取绑定属性 refxxx 的实例&#xff0c;并且…

流媒体服务器选择以及评估

让我为您分析几个主流的流媒体服务器方案&#xff1a; 1. **Nginx-RTMP** 优势&#xff1a; - 轻量级&#xff0c;资源占用少 - 配置简单&#xff0c;易于部署 - 支持RTMP/HLS/DASH - 高并发性能好 - 免费开源 劣势&#xff1a; - 功能相对基础 - 缺乏管理界面 - 监控功能有…