DFT学习笔记-Mbist电路连接

上节学习了插mbist的时的脚本逻辑,这节进一步学习脚本在插mbist的时候都对电路做了哪些改动,包括定义了哪些端口,添加了哪些模块,都是什么功能。以下描述都是基于现在参考的一个设计环境,不方便贴出,有些步骤不是普适的。

在上图mbist_insertion_flow中,红框内的部分是插mbist的主要工作,根据之前的学习,三部分的工作内容如下:

dc.mbist.pre: 定义dft中用到的一些端口;为了避免之后可能会出现的DRC violation,在开始插Mbist之前将memory原本的function clock打断,通过mux连接上我们做Mbist的clock;对一些pin设置safevalue。

ts.mbist: 插Mbist。

dc.mbist.eco: 完善dc.mbist.pre中的clk连接。

下面介绍它们对电路做了哪些工作。

dc.mbist.pre

pre阶段是在dc中完成的。design loading就是给工具吃库文件和设计文件(netlist,sdc,def等等);generate instances list就是抓取设计中都有哪些instances,方便之后插相应的电路。后面五步是pre中实际的job,完成后写出网表。下面分别介绍这五个job。

create dft port

创建如下的port:

  • DftMode:各种DftMode端口,bypassEn,reset等等,一般置1模式打开,置0模式关闭。
  • ScanEn:sc
在Java Swing应用程序中,所有的UI更新都应当发生在事件调度线程(Event Dispatch Thread, EDT)。为了保证这一点,在需要从非EDT线程更新UI的时候,应该使用`SwingUtilities.invokeLater()`或者`SwingUtilities.invokeAndWait()`。 对于异步任务,可以考虑使用`SwingWorker`类来处理耗时的任务而不阻塞EDT。下面是如何正确地进行EDT更新的一些指导原则: 当要执行一个不会立即完成的操作并且希望这个操作完成后更新UI时,应采用如下方式之一: 使用 `SwingUtilities.invokeLater(Runnable doRun)` 方法安排Runnable对象在事件派遣线程上运行。此方法并不等待Runnable的结束就返回。 ```java SwingUtilities.invokeLater(new Runnable() { public void run() { // 更新 UI 组件代码放在这里 } }); ``` 若需等待UI更新完成再继续执行后续逻辑,则可选择 `SwingUtilities.invokeAndWait(Runnable doRun)` 。这会让当前线程挂起直到Runnable被执行完毕。 请注意,由于涉及跨线程通信,`invokeAndWait` 可能抛出异常,因此通常需要用try-catch块包围起来。 ```java try { SwingUtilities.invokeAndWait(new Runnable() { public void run() { // 更新 UI 组件代码放在这里 } }); } catch (Exception e) { e.printStackTrace(); } ``` 对于长时间运行的任务,推荐使用 `SwingWorker<T,V>` 类来进行后台计算,并利用其提供的机制安全地与UI交互。例如: ```java new SwingWorker<Void, Void>() { @Override protected Void doInBackground() throws Exception { // 背景任务代码写在此处 return null; } @Override protected void done() { try { // 当背景任务结束后这里会被调用来更新UI } catch (Exception ignored) {} } }.execute(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值