剪断了,理就不会乱——Scan Reorder

640?wx_fmt=gif

在Coarse Placement和Legalization之间,其实还有很重要的一个步骤, 就是对Scan Chain(扫描链)的处理。英文名Scan Reorder,直译为扫描链重组

那讲Scan Reorder之前,有必要对Scan Chain的基本知识做一定普及。Scan chain其实是可测试性设计(DFT)中的内容。DFTDesign for test,其实是探测错误序列的一种设计方法学,由于芯片内部是一个黑盒子,在外部难以控制。测试人员通过DFT技术,可以从外部控制和观测电路内部触发器的信号值。DFT通常需要单独的一个部门来完成,很复杂,有专门的书籍可以参考。基本概念可以参考:

而在后端PR中,我们更关注的是DFT中的Scan Chain,有了它,我们的芯片就更加具有测试性。Scan Chain将芯片中的所应用的普通寄存器替换成带有扫描功能的扫描寄存器首尾相连成串,从而可以实现附加的测试功能。那扫描寄存器特殊在什么地方呢?我们从它的结构图来看一下:

640?wx_fmt=jpeg

从上图中可以看出,它比普通存储器多了SI,SE,SO这3个端口。

1. 其中SI,SO也就是scan_in与scan_out端,定义了一条scan chain的input和output端。通常情况下,每一个input会驱动一条scan chain,一个ouput也是用来观察一条scan chain的。

2. SE是scan enable信号,它控制着scan cell的工作模式。从图中可以看出,SE,SI,D端通过一个Mux实现工作模式的切换。当SE输入为0时,scan cell工作在普通模式下,相当于是普通的flop;当SE输入为1时,scan cell就进入scan模式,相当于一个移位寄存器。

scan cell通常定义在lib库中直接导入,可以通过get_cells_of_scan_chain来做一些检查。


用图片说明可能会更加形象,对整个逻辑电路来说,未插入scan chain时,电路图如下:

640?wx_fmt=jpeg

插入scan chain以后,软件会自动地用scan flip flop(SFF)替换掉普通的flip flop,并且连接SFF到scan chain上,这样就实现了移位扫描的功能,如下图所示:

640?wx_fmt=jpeg


而后端对于扫描链的定义,通常使用DEF文件来定义,我们一般称它为scan def,配合下图,我们写出scan DEF语句来说明:

640?wx_fmt=jpeg

SCANCHAINS 1 ;   scan chain数量

- chain0         scan chain名字scan chain起点 代表着单独的寄存器单元,上图中out_reg_0,_1,_2,_3都是floating单元 

        out_reg_2 ( IN SI ) ( OUT Q )

    + ORDERED     需要放在一起的单元,上图中out_reg_4与u_buf就是ORDERED单元,用方框圈出 scan chain终点


概念都了解完以后,那我们后端到底需要对scan chain做些什么呢?

其实,在做完coarse placement后,Scan Cell大部分是按照连接的顺序随机的乱放的。这样其实会极大地占用绕线资源。因此,在后续步骤开始之前,我们希望对扫描链的连线进行处理,在不影响逻辑功能的前提下,重新进行连接,从而减少走线长度。那这个重组的过程,我们就称之为扫描链重组(Scan Reorder) 。整个过程,可以用下面两张图来形象地说明:

Scan Reorder之前:可以看到,每个scan cell的连接得乱七八糟,专业术语叫做detour

640?wx_fmt=jpeg

Scan Reorder之后:仔细看,走线少了很多,也规整了不少吧!那这就是我们希望得到的结果~~(当然前提是不能影响逻辑功能)

640?wx_fmt=jpeg


如果用前文DEF的例子解释:

640?wx_fmt=jpeg

经过Scan Reorder之后,变成如下的电路连接:

640?wx_fmt=jpeg

可以看到,被方框圈住的out_reg_4和u_buf就类似一个整体一样,位置重新进行了排列。

那对应的Scan DEF信息变化就是:

640?wx_fmt=jpeg

左边的DEF格式前文已经说明,那右边reorder之后的大家能看懂嘛?

右边就多了一个#符号,这里可以理解为标志位,与着下面的#ORDERED segment 1相关联,就是为了说明它在FLOATING信息里的排列位置。

最后,我们可以使用report_scan_chains来报出scan chain的组成,使用check_scan_chain来检查其合理性

  Checking Scan Chain scan_segment_88  

  STOP: u__noram/u_etm/u_fifo/ts_0_lockLD_865264

 ....                                                                            

     thru: u_noram/uersistent_cell_0_buf_intsi54506_i/Z

  STATUS:  VALIDATED, Sequential Length = 524, Instance Count = 524, Partition = partition_1


640?wx_fmt=jpeg

公司招聘

各大IC公司招聘各类IC工程师

简历请戳邮箱:taozhang3260@163.com

  • 10
    点赞
  • 85
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值