目录
specify and verify DFT requirement
在为设计插入Mbist电路时,用到的工具主要是dc(design compiler)以及tsessent,dc用来做插入Mbist之前及之后的处理,tessent用来插Mbist电路。这个图里是mbist insertion的完整flow,红框里是插mbist电路的主要流程。具体来说,开始插Mbist之前,为了避免之后可能会出现的一些DRC violation,我们会在dc.mbist.pre里将memory原本的function clock打断,连接上我们做Mbist的clock,相当于提前clean一下DRC;接着,我们在tessent里插具体的mbist电路;最后,在插完Mbist之后,还要把clock连接还原,这一部分就是dc.mbist_eco。
- 在submit job之前,我们要prepare一些文件。
- 并且还要记得在脚本里source好工具的运行环境。
- 然后就是红框里的job。
- 最后,把所有的mbist的所有job完成之后,我们将新的sdc文件提取出来,方便后面的仿真,Mbist_insertion_flow就算是完成了。
下面介绍下我学习过程中认为可能比较重要的脚本以及里头一些可能比较关键的步骤。
Mbist flow-prepare
需要准备的文件包括:
1.设计的库文件
2. design database文件
3. 或许用到的一些自定义连接文件
这三类文件一般放在三个不同的脚本里,为相应的路径定义好关键字,用的时候直接在脚本里source一下,就根据关键字可以提取他们的路径了。
EDA_Setting
这块没啥好说的,就是把不同工具软件的环境及路径在脚本里定义好,source这个脚本是开始工作的第一步,不然工具是起不来的。
dc.mbist.pre
像之前说的,这一步的核心就是画框的部分,将原来memory的function clock打断,插入mux,再连上Mbist的clock。脚本的关键步骤包括:
design loading
- cell的database loading:变量定义,memory/IP等的配置,编写好的相关操作的脚本(相当于自定义函数);
- 设计文件的loading:网表,subBlock的网表,SDC文件,这里要记得用current_design命令指定好当前设计的block。最后通过link命令,将吃进去的库与设计link起来。
generate instances list
抓取各种instances的list。
create dft port
定义相关端口的功能及输入/输出方向。
create tdr bits buffer
创建tdr比特buffer
mem clk connectio
为了减少插mbist电路时的DRC,在原来的function clk连接上插入新的mux。最终插好的结构跟图中DFT clock的结构类似。在脚本中插的就是这三个mux,脚本里首先断开原有的function clk连接,新建了function和mbist两个mux,在这个block里,这两个mux的I0都是原来的function clk;然后又创建了一个mux作为它俩的开关,这个mux的s_pin就是MbistMode,它的I0及I1分别是function mux及mbist mux的z_pin,当MbistMode=1的时候,mux就选通Mbist_clk,=0就选通function clk。
不过这个脚本里没有将插完mux后的电路完全连好,而是将未竟的连接写到一个新的eco脚本里,等mbist电路插完之后再source它,最终才连好电路。
memory safevalue
这一步是为了将一些用不上的pin设成安全值。脚本创建了两个端口,分别连buffer和inverter,然后创建mux,当safevalue=0的时候,mux的I1接buffer端口,否则接inverter端口。我的理解是tdrCmn_bit是可控的,把它控成0的时候,这种连接就可以保证mux的输出z恒为safevalue的值。
pre DFT
在dft之前定义好需要用到的特殊端口(clk port等)和cell,以及一些特殊的连接。
netlist write out
将做完pre的netlist写到results目录下的文件里。
ts.mbist
完成dc.mbist.pre之后,就可以起tessent工具插mbist电路了。
design loading
与pre中的flow类似,首先要进行design loading,这里要注意三个地方,一个是在吃文件之前要用set_context指定当前的工作环境为dft,并且指定吃的文件是非rtl网表,也就是门级网表,另外要记得为工具指定吐出文件的存放路径,最后,在吃设计的网表的时候要吃做完mbist.pre后吐出的网表。
specify and verify DFT requirement
指定DFT规范要求,添加约束,并且进行run DRC。首先指定设计级别是block,接着指定dft规范为mbist的规范,然后添加约束,设置DFTMode及MbistMode均为1,最后run DRC。
create DFTSpecification
首先对memory分组,然后通过create_dft_specification命令,根据指定的规范类型生成具体的dft规范。在后续根据规范创建ijtag,sib和tdr。
process DFTSpecification
通过process_dft_specification命令生成并插入DFT specification需要的所有DFT硬件结构。
etract ICL
这个命令验证创建的ICL 模块是否有DRC问题,没有的话就会抽取ICL文件。
systhesis
最后run_systhesis进行综合。到这里Mbist电路就算是插完了。
dc.mbist.eco
这里与pre对应,通过source mem_clk_eco文件将相应的clk连接完整。这里吃的网表也是上级吐出的网表,即插完mbist电路的网表。
ts.mbist_sdc_extract
通过extract_sdc命令抽取mbist完成后的sdc文件,用于后续的仿真。