<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ATEGPU</title>
	<atom:link href="http://www.ategpu.com/feed" rel="self" type="application/rss+xml" />
	<link>http://www.ategpu.com</link>
	<description>Embedded GPU With OpenGL ES API</description>
	<lastBuildDate>Tue, 24 Apr 2012 14:55:31 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>VCS, modelsim, NCsim‘s code coverage</title>
		<link>http://www.ategpu.com/2012/04/24/vcs-modelsim-ncsim%e2%80%98s-code-coverage.html</link>
		<comments>http://www.ategpu.com/2012/04/24/vcs-modelsim-ncsim%e2%80%98s-code-coverage.html#comments</comments>
		<pubDate>Tue, 24 Apr 2012 14:55:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[coverage]]></category>
		<category><![CDATA[modelsim]]></category>
		<category><![CDATA[ncsim]]></category>
		<category><![CDATA[vcs]]></category>

		<guid isPermaLink="false">http://www.ategpu.com/2012/04/24/vcs-modelsim-ncsim%e2%80%98s-code-coverage.html</guid>
		<description><![CDATA[Coverage
Functional verification comprises a large portion of the resources required to design and validate a complex system. Often, the validation must be comprehensive without redundant effort. To minimize wasted effort, coverage is used as a guide for directing verification resources by identifying tested and untested portions of the design.
Coverage is defined as the percentage of [...]]]></description>
		<wfw:commentRss>http://www.ategpu.com/2012/04/24/vcs-modelsim-ncsim%e2%80%98s-code-coverage.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Connectivity Report scripts</title>
		<link>http://www.ategpu.com/2012/04/20/connectivity-report-scripts.html</link>
		<comments>http://www.ategpu.com/2012/04/20/connectivity-report-scripts.html#comments</comments>
		<pubDate>Thu, 19 Apr 2012 16:07:40 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[dc]]></category>
		<category><![CDATA[function]]></category>
		<category><![CDATA[tcl]]></category>

		<guid isPermaLink="false">http://www.ategpu.com/2012/04/20/connectivity-report-scripts.html</guid>
		<description><![CDATA[Connectivity Report scripts
 
 
# Auxiliary function:
# Converts DC collection to TCL list
#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;
proc c2l {collection} {
  set my_list {}
  foreach_in_collection coll_element $collection {
    set element [get_object_name $coll_element]
    lappend my_list $element
  }
  return $my_list
}
 
# Auxiliary function:
# Deletes one list (or element) from another list
# &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;
proc ldelete {list list_to_del} {
  foreach str $list_to_del {
    set ix [lsearch -exact $list [...]]]></description>
		<wfw:commentRss>http://www.ategpu.com/2012/04/20/connectivity-report-scripts.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Design For Test Scripts</title>
		<link>http://www.ategpu.com/2012/04/20/design-for-test-scripts.html</link>
		<comments>http://www.ategpu.com/2012/04/20/design-for-test-scripts.html#comments</comments>
		<pubDate>Thu, 19 Apr 2012 16:02:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[dc]]></category>
		<category><![CDATA[function]]></category>
		<category><![CDATA[tcl]]></category>

		<guid isPermaLink="false">http://www.ategpu.com/2012/04/20/design-for-test-scripts.html</guid>
		<description><![CDATA[Design For Test Scripts
 
 
# The number of scan chains will be determined automatically taking into account
# the total number of registers in the core.
# In order to configure core-level scan insertion, run the following function: 
#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;
proc config_scan_chain {max_length} {
  set chains_num [expr [sizeof_collection [all_registers]] / $max_length + 1]
  set_scan_configuration -chain_count $chains_num -dedicated_scan_ports true
  preview_scan -show all
}
 
 
# [...]]]></description>
		<wfw:commentRss>http://www.ategpu.com/2012/04/20/design-for-test-scripts.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Timing Report Functions</title>
		<link>http://www.ategpu.com/2012/04/19/timing-report-functions.html</link>
		<comments>http://www.ategpu.com/2012/04/19/timing-report-functions.html#comments</comments>
		<pubDate>Thu, 19 Apr 2012 15:59:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[dc]]></category>
		<category><![CDATA[function]]></category>
		<category><![CDATA[tcl]]></category>

		<guid isPermaLink="false">http://www.ategpu.com/2012/04/19/timing-report-functions.html</guid>
		<description><![CDATA[Timing Report Functions
 
# Auxiliary function
#==========================================================================
proc c2l {collection} {
  set my_list {}
  foreach_in_collection coll_element $collection {
    set element [get_object_name $coll_element]
    lappend my_list $element
  }
  return $my_list
}
 
# Prints maximum slack report for each one of
# input ports
# Argument: maximum slack value (note, slack 
# values are negative and maximum value corresponds
# to the minimal slack)
#==========================================================================
proc get_input_slack {max_slack} [...]]]></description>
		<wfw:commentRss>http://www.ategpu.com/2012/04/19/timing-report-functions.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Synthesis Functions</title>
		<link>http://www.ategpu.com/2012/04/19/synthesis-functions.html</link>
		<comments>http://www.ategpu.com/2012/04/19/synthesis-functions.html#comments</comments>
		<pubDate>Thu, 19 Apr 2012 15:55:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[dc]]></category>
		<category><![CDATA[function]]></category>
		<category><![CDATA[tcl]]></category>

		<guid isPermaLink="false">http://www.ategpu.com/2012/04/19/synthesis-functions.html</guid>
		<description><![CDATA[Synthesis Functions
 
# Auxiliary Function
#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;
proc c2l {collection} {
  set my_list {}
  foreach_in_collection coll_element $collection {
    set element [get_object_name $coll_element]
    lappend my_list $element
  }
  return $my_list
}
 
#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;
# Auxiliary function:
# Deletes list or value from the other list
# Arguments : initial list and list (or value) to delete
# Return value : part of initial list with values which are
# [...]]]></description>
		<wfw:commentRss>http://www.ategpu.com/2012/04/19/synthesis-functions.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Design Compiler Enhancement functions</title>
		<link>http://www.ategpu.com/2012/04/19/design-compiler-enhancement-functions.html</link>
		<comments>http://www.ategpu.com/2012/04/19/design-compiler-enhancement-functions.html#comments</comments>
		<pubDate>Thu, 19 Apr 2012 15:53:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[dc]]></category>
		<category><![CDATA[function]]></category>
		<category><![CDATA[tcl]]></category>

		<guid isPermaLink="false">http://www.ategpu.com/2012/04/19/design-compiler-enhancement-functions.html</guid>
		<description><![CDATA[Design Compiler Enhancement functions
 
#====================================================================
# Graphical version of &#8220;man&#8221; command: opens
# man results in separate TK window
# Note: download view.tk application and set the correct path to 
# this application inside the body of vman procedure
 
# Example : vman report_timing
#====================================================================
proc vman {args} {
  eval man $args &#62; tmpfile
  exec view.tk tmpfile &#38;
  after 500 file delete [...]]]></description>
		<wfw:commentRss>http://www.ategpu.com/2012/04/19/design-compiler-enhancement-functions.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DFT / TetraMAX Script</title>
		<link>http://www.ategpu.com/2012/04/18/dft-tetramax-script.html</link>
		<comments>http://www.ategpu.com/2012/04/18/dft-tetramax-script.html#comments</comments>
		<pubDate>Tue, 17 Apr 2012 17:05:07 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[dft]]></category>
		<category><![CDATA[TetraMax]]></category>

		<guid isPermaLink="false">http://www.ategpu.com/2012/04/18/dft-tetramax-script.html</guid>
		<description><![CDATA[DFT Compiler basic script
read_verilog -rtl design_name.v
current_design top_name
link
compile -scan
create_test_protocol
dft_dft
preview_dft
insert_dft
change_names -rules verilog -hier
write -f verilog -hier -out design_name.scan.v
exit
DFT MAX basic script
read_verilog -netlist design_name.v
current_design top_name
link
set_dft_signal -view exist -type Reset -active 0 -port rst_name
set_scan_state test_ready
set_dft_configuration -clock_controller enable
set_dft_signal -view exist -type ScanClock -timing [list 45 55] -port clk_name1
set_dft_signal -view exist -type ScanClock -timing [list 45 55] -port clk_name2
set_dft_signal -view exist [...]]]></description>
		<wfw:commentRss>http://www.ategpu.com/2012/04/18/dft-tetramax-script.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DFTC theory</title>
		<link>http://www.ategpu.com/2012/04/18/dftc-theory.html</link>
		<comments>http://www.ategpu.com/2012/04/18/dftc-theory.html#comments</comments>
		<pubDate>Tue, 17 Apr 2012 16:46:42 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[dft]]></category>

		<guid isPermaLink="false">http://www.ategpu.com/2012/04/18/dftc-theory.html</guid>
		<description><![CDATA[DFTC是干什么的呢？他是Synopsys套件中负责IC后端design-for-test的compiler。其主要功能是根据用户的配置，创建一个平衡高效的扫描链，并报告各个阶段的测试覆盖率和相应的DFT DRC violation。
一个典型的DFTC过程包括七个过程：
1. read design：读入RTL设计
2. create test protocol：指?lk/rst/scan_en/test_mode等然后检查testability并尽量修正violation。
3. compile and save：利用compile -scan 插入scan寄存器（添加MUX）
4. read gate and protocol：读入综合后网表后再检查testability并尽量修正violation
5. preview DFT：设置并预览不同的scan chain方案选择最优（test vol/time都小者）
6. insert DFT：最终插入扫描链并检查testability及修正violation
7. handoff：保存结果。可以为tetramax所用产生测试向量。
关于protocol，需要详细说明。为了让DFTC能正确测试testability，需要事先告知其一些配置信息。比如哪个clock要作为扫描用clock，软件根据这个信息去遍历所有寄存器，看看有哪些寄存器不受该clock控制，则相应的会有若干逻辑无法通过寄存器输出，即无法测试，从而产生violation。再比如存在gated clock的情况下，外部时钟无法直接控制寄存器，此时在protocol中test mode就要置1，这样clock才会通过MUX直接控制寄存器。凡此种种，为了让DFTC明白我们的意图，就要把这些情况在protocol中进行说明。那么如何确认DFTC已经正确理解我们的protocol输入呢？report_dft_signal命令可以达到这个目的，他会显示出各个控制信号及其时序特性（如果有），我们可以据此对照我们的意图来进行确认。
如果产生了violation，一般可以通过design vision的图形界面来定位问题所在并实施措施。主要的方法有两类：一是从RTL上直接修改，和时序不满足时采取的措施一样，这是最可靠的；而是采用auto fix命令，由工具自动修正，此法虽好，但是一旦源代码修改就可能要重新auto fix，达不到RTL修改所具有的一劳永逸的效果。
在插入扫描链之前，先要评估各种可能的方案，这个工作由preview dft 来完成。我们可以指定扫描链数目，方法是：-chian_count N。另外，为了平衡扫描链（即使得各个扫描链长度接近，这样测试速度可以提高）一般需要扫描链穿越多个时钟域，方法：-clock_mixing mix_clock。
在扫描链穿越多个时钟域时，会碰到另外一个问题：由于要采用同一扫描时钟驱动不同的时钟域，各个时钟域的skew不同，在跨越时极可能产生亚稳态造成误操作。为此在两个时钟域中间插入一个lockup latch来解决该问题。该latch由前一时钟的clock使能，在下降沿放行，上升沿保持，因此只要skew小于1/2时钟，即第二个时钟能在1/2个时钟延迟之前进行抽样就可以保证逻辑无误，这在绝大多数电路中是可靠的。
]]></description>
		<wfw:commentRss>http://www.ategpu.com/2012/04/18/dftc-theory.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Atpg Debug Tools</title>
		<link>http://www.ategpu.com/2012/04/18/atpg-debug-tools.html</link>
		<comments>http://www.ategpu.com/2012/04/18/atpg-debug-tools.html#comments</comments>
		<pubDate>Tue, 17 Apr 2012 16:43:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[TetraMax]]></category>

		<guid isPermaLink="false">http://www.ategpu.com/2012/04/18/atpg-debug-tools.html</guid>
		<description><![CDATA[ATPG debug要熟悉工具的一些功能。
STIL文件中定义的各种procedure与dft测试原理的对照。
一般shift过程之前有一个force Pi的过程。
由上图可以知道最主要的过程就是shift和capture，所以在自动向量生成过程中
最常见而必要解决的错误是shift错误和capture错误。
为了便于分析这些错误，TetraMAX提供了几个常见的视图，这些视图可以对照上图分析。
1.test_setup视图：主要用于查看分析在test_setup阶段出现的error
2.load_unload视图：主要用于分析查看load_unload阶段的问题
3.shift视图，主要用于分析查看shift阶段出现的问题
4.clock cone，clock off， clock on视图，主要用于查看和分析capture阶段出现的问题。
5.constraint视图：主要用于分析查看在fore pi以及其他约束情况下出现的error
常见ATPG rules错误分析。
1.scan chain blockage.（S1）
具体原因是因为clk或者reset，set或者数据不确定（x状态），导致数据无法向后传输。
如：reset没声明，或者reset在shift状态下没有稳定
scan的一些端口没有声明或者不稳定：
数据端口不稳定：
S1问题可以通过修改spf文件或者修改scan脚本解决。另外一些pad库也会导致这个问题。
2.Bidirectional Contention Problem（Z4）
这个问题一般发生在test_setup状态，由于双向总线上要求输入输出以及输出驱动至少有一个处于Z状态才算稳定，
所以在test_setup状态一些信号的初始化没有设置好，容易导致冲突：
如下：
这个问题可以修改spf文件的test_setup procedure，将双向的io force成z状态
3.bidi bus driver enable affected by scan cell(Z9)
这个问题的原因是因为总线的使能信号受到scan cell的影响，导致使能信号不稳定。
如下:
如果是顶层pad，可以将这个警告忽略不计。
或者可以加入MUX在测试模式下固定其为输入或者为输出。
或者调整工具的contention检查（set_contention bus -capture),让工具只检测clock前后的冲突
通常一些Z问题是因为io和输出驱动没有一个在Z状态（初始化或者在运行过程中）。
常见ATPG faults分析
1.AN &#8211; atpg untestable &#8211; notdetected
这个是由于一些TCS导致或者黑盒子的blockage或者latch不透明，导致观测端无法观测数据。
如：constraint引起的AN：
如：latch不透明引起的AN
lath引起的AN可以通过run_justification调整
2.UB-undetectable-blocked
UT-undetectable-tied
由于constraint导致的无法检测问题
]]></description>
		<wfw:commentRss>http://www.ategpu.com/2012/04/18/atpg-debug-tools.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>stil format</title>
		<link>http://www.ategpu.com/2012/04/18/stil-format.html</link>
		<comments>http://www.ategpu.com/2012/04/18/stil-format.html#comments</comments>
		<pubDate>Tue, 17 Apr 2012 16:41:11 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Others]]></category>
		<category><![CDATA[TetraMax]]></category>

		<guid isPermaLink="false">http://www.ategpu.com/2012/04/18/stil-format.html</guid>
		<description><![CDATA[stil文件是atpg的基础，用好atpg工具当然要熟悉stil格式。
下面是基本说明：）
STIL 1.0 {
 Extension Design P2000.5;
}
Header {
 Title &#8221; TetraMAX (TM) 2000.05-i000622_173054 STIL output&#8221;;
 Date &#8220;Wed Dec 31 17:21:05 1999&#8243;;
 History { }
}
Signals {
 CLK In; RSTB In; SDI2 In; SDI1 In; INC In; SCAN In; HACKIN In; si4 In;
 six In; D0 InOut; D1 InOut; D2 InOut; D3 InOut; SDO2 Out; COUT Out;
 HACKOUT [...]]]></description>
		<wfw:commentRss>http://www.ategpu.com/2012/04/18/stil-format.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

