数字IC后端学习笔记:等效性检查和ECO

news2024/11/18 7:51:27

1.形式验证工具

        对于某些电路的移植,一般不需要对新电路进行仿真验证,而可以直接通过EDA工具来分析该电路的功能是否与原电路一致,此种验证方法可以大量减少验证时间,提高电路的效率。

        等效性检查(Equivalence Check)是目前形式验证的主流,用于比较两个电路逻辑功能的一致性。它是通过采用匹配点并比较这些点之间的逻辑来完成等效性检查的。其生成一种数据结构,并将其与相同输入特性曲线条件下的输出数值特性曲线进行比较。如果它们不同,则表示被比较的两个电路是不等效的。工具使用的具体流程如下图所示。首先需要给工具提供完整正确的原设计、相关的工艺库及准备验证的设计,其次需要对检查过程给定约束条件和设置参数,并确定比较范围和匹配点,如果结果不相等则需要进行诊断。它通常用来比较RTL代码和布局布线后提取的网表逻辑功能是否一致、加入扫描链之前和之后的网表在正常工作模式下的逻辑功能是否一致以及ECO修正之前和之后的网表逻辑功能是否一致。

        在ECO阶段,RTL不会经历完整的综合流程。当定位了一个错误或者在设计流程的最后阶段需要增加一个新的调整时,首先要确认对RTL功能修改,然后需要进行测试以确信所做的修改符合预期。此后直接在网表上进行修改。我们怎样才能确认修改后的网表与RTL是一致的呢?我们可以对修改后的网表进行门级仿真并检查修改是否达到了预期目标。但门级仿真是不能够提供担保的,不能100%的确定修改后的RTL和修改后的网表是等效的。

         下面是一些等效性检查工具。

生产厂商工具名
CadenceConformal
SynopsysFormality
MentorFormalPro
MagmaQuartz Forma

2.网表ECO

        ECO是一个重要的设计阶段。在ECO阶段,可以不对RTL代码进行重新综合,而是直接对网表进行修改。在接近芯片设计的最后阶段(tape-out)时,对RTL代码修改并重新综合会带来高昂的代价。如果只需要进行微小的修改,那么在tape-out之前可以通过ECO加以解决。下面是ECO的流程。

  • 在RTL代码上修正错误并对其进行验证,保证芯片功能符合预期。
  • 通过ECO,在网表上直接进行错误修复。可以添加或修改逻辑门来修复错误,ECO阶段能够进行的修复工作是受限的。典型情况下,可以增加几个触发器和一些逻辑门。如果涉及几百个触发器和几百个逻辑门,最好全部重新综合,这比ECO要简单。在ECO中,控制单元(状态机)的修改比数据通路的修改更容易。
  • 接下来在修改过的RTL代码和修改过的网表之间进行等效性检查以确保二者在功能上是等效的。

        由于ECO直接在网表上进行,网表修改后的功能不便于直接分析。下面将讨论两种典型的ECO方法。

        方法1:修改逻辑锥

        这一方法通过对已有的逻辑门进行增加和重新排列达到修改逻辑功能并与更新后的RTL功能匹配的目的。这涉及查看驱动触发器的逻辑锥,查看现有节点和对逻辑锥进行修改等操作。这需要采用试错法反复试验,但可以通过增加最少的逻辑门达到修改的目的。这一方法需要在修改区域附近空闲逻辑门数量较少时更为有效。ECO Compiler或Conformal LEC等工具可以帮助设计进行ECO。

        方法2:新逻辑覆盖

        采用此方法时,需要使用逻辑门额外地设计一组逻辑电路,其输出通过一个选择器接入现有的触发器。当满足给定的条件时,通过选择器可以选择我们需要的值,在其他条件下,通过选择器选择旧的值。这种方法更为直观,但需要使用更多的逻辑门。我们在下面将会采用方法2的例子加以分析。

        示例描述

        状态机从一个FIFO中读出数据,通过dataout和dataout_valid将其交给接收代理电路。接收代理电路通过target_rdy指出一个数据传输阶段的完成。换句话说,当dataout_valid和target_rdy都有效时,一个数据传输操作结束。控制器在一个数据传输阶段会始终驱动dataout和dataout_valid,直到target_rdy有效。状态机持续处于数据传输阶段,直到它从数据FIFO中读取到了end_of_pkt标识。在最后一个数据传输完成后,dataout_last信号有效。这是一个在两个代理之间进行数据传输的典型协议,两个代理可以通过dataout_valid和target_rdy分别进行流量控制。

        错误

        状态机在设计时有一个错误,它没有考虑到FIFO在包传输结束前(end_of_pkt信号前)可能暂时为空。如果数据FIFO被读空时包没有结束,状态机会对一个空的FIFO进行读操作,从而导致错误的发生。

        ECO修正

        在BURST_DATA状态时,跳转到另一个状态WAIT_NONEMPTY并等待FIFO进入非空状态。被注释的代码指出了需要增加的新状态和逻辑。这里需要创建一个新的状态,一些输出需要做出改变。示例代码如下:

reg [2:0] xmitstate, xmitstate_nxt;
reg fifo_rden;
reg [15:0] dataout, dataout_nxt;
reg dataout_valid, dataout_valid_nxt;
reg dataout_last, dataout_last_nxt;

parameter IDLE = 3'b000,
          DATA_AVAIL = 3'b001,
          FIRST_DATA = 3'b010,
          BURST_DATA = 3'b011,
          LAST_DATA = 3'b100;

//新加的状态
//parameter WAIT_NONEMPTY = 3'b101; 

always@(posedge clk, negedge rstb) begin
    if(!rstb) begin
        xmitstate <= IDLE;
        dataout <= 0;
        dataout_valid <= 0;
        dataout_last <= 0;
    end
    else begin
        xmitstate <= xmitstate_nxt;
        dataout <= dataout_nxt;
        dataout_valid <= dataout_valid_nxt;
        dataout_last <= dataout_last_nxt;
    end
end

always@(*) begin
    xmitstate_nxt = xmitstate;
    fifo_nxt = 1'b0;
    dataout_nxt = dataout;
    dataout_valid_nxt = 1'b0;
    dataout_last_nxt = 1'b0;
    
    case(xmistate)
        IDLE: begin
            if(start_xmit)
                xmitstate_nxt = DATA_AVAIL;
        end
        DATA_AVAIL: begin
            if(!fifo_empty) begin
                xmitstate = FIRST_DATA;
                fifo_rden = 1'b1;
            end
        end
        FIRST_DATA: begin
            data_out_nxt = fifo_rddata;
            dataout_valid_nxt = 1'b1;
            if(end_of_pkt) begin
                xmitstate_nxt = LAST_DATA;
                dataout_last_nxt = 1'b1;
            end
            else begin
                xmitstate_nxt = BURST_DATA;
                fifo_rden = 1'b1;
            end
        end
        BURST_DATA: begin
            if(target_rdy) begin
                data_out_nxt = fifo_rddata;
                dataout_valid_nxt = 1'b1;
                if(end_of_pkt) begin
                    xmitstate_nxt = LAST_DATA;
                    dataout_last_nxt = 1'b1;
                end
              //else if(fifo_empty)
              //    xmitstate_nxt = WAIT_NONEMPTY;
                else 
                    fifo_rden = 1'b1;
            end
            else begin
                dataout_nxt = data_out;
                dataout_valid_nxt = 1'b1;
            end
        end
        LAST_DATA: begin
            if(target_rdy)
                xmitstate_nxt = IDLE;
            else begin
                dataout_nxt = dataout;
                dataout_valid_nxt = 1'b1;
                dataout_last_nxt = 1'b1;
            end
        end
        /*新加的状态
        WAIT_NONEMPTY: begin
            if(target_rdy) begin
                if(!fifo_empty) begin
                    xmitstate_nxt = FIRST_DATA;
                    fifo_rden = 1'b1;
                end
                else 
                    xmitstate_nxt = DATA_AVAIL;
            end
            else 
                dataout_valid_nxt = 1'b1; 
                dataout_nxt = dataout;             
        end
        */
    endcase 
end

        进行ECO

        对于修改错误时新加入的RTL代码,需要改变xmistate_nxt[2:0], dataout_valid_nxt和fifo_rden。接下来我们要解决xmistate_nxt[2:0]逻辑,它可能是三者中最困难的。

        第一个覆盖条件

if((xmitstate == BURST_DATA) && target_rdy && !end_of_pkt && fifo_empty)
    xmitstate_nxt = WAIT_NONEMPTY

即

if((xmitstate == 3'b011) && target_rdy && !end_of_pkt && fifo_empty)
    xmitstate_nxt = 3'b101

        第二个覆盖条件

if((xmitstate == WAIT_NONEMPTY) && target_rdy && !fifo_empty)
    xmitstate_nxt = FIRST_DATA;

即

if((xmitstate == 3'b101) && target_rdy && !fifo_empty)
    xmitstate_nxt = 3'b010;

        第三个覆盖条件 

if((xmitstate == WAIT_NONEMPTY) && target_rdy && fifo_empty)
    xmitstate_nxt = DATA_AVAIL;

即

if((xmitstate == 3'b101) && target_rdy && fifo_empty)
    xmitstate_nxt = 3'b001;

        下图展示了对xmitstate[2]的ECO,对另外两个比特的ECO方法与此类似。当然,在实际ECO时,根据单元库可以选择的逻辑门,可以对逻辑电路进一步优化。在ECO时,最初进入xmitstate[2]触发器的输入,被切断并连接到一个由或门和与门构成的选择器,通过控制选择器可以决定选择新加入的逻辑分支还是最初的逻辑分支。以上三个覆盖条件不能同时全部满足,且可以发现第二和第三覆盖条件中,xmitstate[2]都为0,且用(xmitstate == 3'b101) && target_rdy就可同时覆盖这两者。这就导致了ECO中只出现了两个覆盖条件A和B。

        ECO的解释

        在图中的点A和点B处,有两个覆盖条件。当第一个覆盖条件(点A)为真时,我们希望xmitstate[2]的输入为1。当A为1时,或门OR-A输出为1,此时第二个覆盖条件为假,即B点为1,与门AND-B输出也为1。当第二个或第三个条件为真时,我们希望xmitstate[2]的输入为0,。在这种情况下,点B为0,且AND-B的输出也为0。这是在第二种和第三种覆盖条件下我们所期望的结果。

        总之,我们能够在第一种覆盖条件下得到1,在第二种和第三种条件下得到0。在这些条件下所得到的的逻辑值不依赖最初的条件,因为这些条件处于逻辑锥的前部。当所有覆盖条件均不为真时,点B为1,且点A为0,这使得点C(最初的值)传递到触发器的输入端。

 以上内容来源于《Verilog高级数字系统设计技术和实例分析》和《SOC设计方法与实现》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/706990.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Nuxt重构的填坑之路

我的个人网站是用vuecli写的&#xff0c;SEO不忍直视。于是用Nuxt重构了代码&#xff0c;过程中踩了无数坑&#xff0c;记录如下 一&#xff1a;body样式不生效 正常的body样式设置不能生效&#xff0c;需要在nuxt.config.js中配置 1、设置bodyAttrs的class属性&#xff0c;…

毕业论文设计题目大全(源码+论文)_kaic

1 四足步行机器人设计-机械部分 2 吸扫一体机器人外壳注塑模具设计 3 吸扫一体机器人控制系统设计设计 4 吸扫一体机器人机械结构设计 5 汽车雨刷器机械结构及控制系统软硬件电路设计 6 家庭智能防盗报警系统的设计 7 小区电气智能控制系统的设计 8 果蔬智能售卖…

第66篇:顶级APT后门Sunburst通信流量全过程复盘分析

Part1 前言 大家好&#xff0c;我是ABC_123。前面几周分享了Solarwinds供应链攻击事件的详细攻击流程及Sunburst后门的设计思路&#xff0c;但是多数朋友还是对Sunburst后门的通信过程还是没看明白。本期ABC_123就从流量的角度&#xff0c;把Sunburst后门的通信过程完整地复盘…

压缩点云数据

压缩分辨率参数 LOW_RES_ONLINE_COMPRESSION&#xff1a;低分辨率的在线压缩模式&#xff0c;不保留颜色信息。 MED_RES_ONLINE_COMPRESSION&#xff1a;中等分辨率的在线压缩模式&#xff0c;不保留颜色信息。 HIGH_RES_ONLINE_COMPRESSION&#xff1a;高分辨率的在线压缩模…

Nacos架构与原理 - Nacos-Sync

文章目录 概述官网系统模块架构同步任务管理页面注册中心管理页面使用场景 概述 NacosSync 是⼀个支持多种注册中心的同步组件,基于 Spring boot 开发框架,数据层采用Spring Data JPA &#xff0c;遵循了标准的 JPA 访问规范&#xff0c;支持多种数据源存储,默认使用Hibernate…

c++11 标准模板(STL)(std::basic_ostream)(二)

定义于头文件 <ostream> template< class CharT, class Traits std::char_traits<CharT> > class basic_ostream : virtual public std::basic_ios<CharT, Traits> 类模板 basic_ostream 提供字符流上的高层输出操作。受支持操作包含有格式…

float:right 浮动布局后怎么清除浮动对后面元素的影响

1 用overflow:hidden和overflow:auto 在父元素上 2 用伪元素进行清除浮动 ::after

Ubuntu20.04LTS下安装Intel Realsense D435i驱动与ROS运行D435i节点

Ubuntu20.04LTS下安装Intel Realsense D435i驱动与ROS运行D435i节点 1&#xff1a;RealSense的SDK安装 1.1&#xff1a;更新初始化 sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade1.2&#xff1a;注册服务器的公钥 sudo apt-k…

安卓水果店的设计与实现

1.项目概述 随着科学技术和社会经济的不断提高&#xff0c;人们对服务的快捷、便利性要求也越来越高&#xff0c;从而对智能手机上的应用软件提出了更高的要求。一个基于安卓技术的水果系统能够为用户提供一个方便日常操作的便捷点餐功能,它能够满足广大手机用户的对日常水果的…

【Java可执行命令】(七)C头文件创建工具 javah:以Java本机接口(JNI)规范创建C头文件,深入解析创建工具javah ~

Java可执行命令详解之javah 1️⃣ 概念2️⃣ 优势和缺点3️⃣ 使用3.1 语法格式3.1.1 可选参数&#xff1a;-o < file>3.1.2 可选参数&#xff1a;-classpath < path>3.1.3 可选参数&#xff1a;-jni 4️⃣ 应用场景5️⃣ 实现原理6️⃣ 注意事项&#x1f33e; 总结…

win系统安装配置minio笔记

win系统安装配置minio笔记 下载win64版本的minio.exe 可以去minio官网下载&#xff0c;也可以直接在csdn下载&#xff0c;这里提供一个下载地址 https://download.csdn.net/download/ThinkPet/87976200?spm1001.2014.3001.5501配置并启动minio.exe 可以在cmd命令里执行 m…

k8s calico ipip模式详解

一、简介 Calico 是一种容器之间互通的网络方案。在虚拟化平台中&#xff0c;比如 OpenStack、Docker 等都需要实现 workloads 之间互连&#xff0c;但同时也需要对容器做隔离控制。而在多数的虚拟化平台实现中&#xff0c;通常都使用二层隔离技术来实现容器的网络&#xff0c…

毕业喽 ! ——为赋新词强说愁

文章目录 一、引言二、回首六年三、腾讯实习四、遗憾和展望 一、引言 临近毕业&#xff0c;满头思绪&#xff0c;满腔感概&#xff0c;不知从何说起&#xff0c;对离别的不舍、对学生时代即将落幕的留恋和感慨、对即将只身踏入社会的迷茫和不安。果真应验了杜甫老先生的那句话—…

MATLAB散点图绘制

clfx linspace(-3*pi,3*pi,100);y sin(x);color linspace(1,10,length(x));scatter(x,y,25,color,filled);hold onscatter(x0.25*pi,y,100,[0 0 0],*); 大部分时候处理数据还是散点图用的比较多 这里主要是scatter函数&#xff0c;用法是&#xff1a; scatter&#xff08…

华为OD机试真题 Python 实现【机房布局】【2023Q1 200分】,附详细解题思路

目录 一、题目描述二、输入描述三、输出描述四、补充说明五、解题思路六、Python算法源码七、效果展示1、输入2、输出 一、题目描述 小明正在规划一个大型数据中心机房&#xff0c;为了使得机柜上的机器都能正常满负荷工作&#xff0c;需要确保在每个机柜边上至少要有一个电箱…

pytorch3d 安装报错 RuntimeError: Not compiled with GPU support pytorch3d

安装环境 NVIDIA GeForce RTX 3090 cuda 11.3 python 3.8.5 torch 1.11.0 torchvision 0.12.0 环境安装命令 conda install pytorch1.11.0 torchvision0.12.0 torchaudio0.11.0 cudatoolkit11.3 -c pytorch安装pytorch3d参考官网链接 https://github.com/facebookresearch/p…

Java 的拷贝(深拷贝、浅拷贝)

在对象的拷贝中&#xff0c;很多初学者可能搞不清到底是拷贝了引用还是拷贝了对象。在拷贝中这里就分为引用拷贝、浅拷贝、深拷贝进行讲述。 引用拷贝 引用拷贝会生成一个新的对象引用地址&#xff0c;但是两个最终指向依然是同一个对象。如何更好的理解引用拷贝呢&#xff1…

工具类之打印表格ByList

前言 昨天在测试应用的时候&#xff0c;因为要查看数据库表里面的数据&#xff0c;但是又懒得去看数据库里面查找那张表&#xff0c;反而直接代码查看更方便。于是做了一个打印List的工具类&#xff0c;可以将List里面的数据进行打印成一个表格展示&#xff0c;List里面的元素…

CH543乐得瑞单C口显示器方案(LDR6020)

首先显示器的种类很多&#xff0c;有桌面显示器&#xff0c;便携显示器&#xff0c;智能显示器&#xff0c;甚至AR眼镜也可以算是一个微型显示器。以往的显示器传输视频信号多为VGA和HDMI,当然DP也有&#xff0c;只是占少数&#xff0c;再早之前还有模拟信号接口等等&#xff0…

牛客网基础语法91~100题

牛客网基础语法91~100题&#x1f618;&#x1f618;&#x1f618; &#x1f4ab;前言&#xff1a;今天是咱们第九期刷牛客网上的题目。 &#x1f4ab;目标&#xff1a;对短除法的使用&#xff0c;对函数的递归使用熟练。 &#x1f4ab;鸡汤&#xff1a;绊脚石乃是进身之阶。先干…