2009年6月26日星期五

How to speed up emulation/system debug?

2009年5月20日星期三

ISE:After add source (verilog) and set top module, no sub-modules appeared below the top module

在ISE中,我们添加了source file后,ISE软件会自动对这些source file进行分析,然后在Sources视图中显示其层次结构,即top下有哪些子模块,这些子模块下又分别有哪些更小的子模块。有时候ISE不能自动确定top module,需要我们手工设置一下。
现在遇到的问题是,在添加了source file后,在Sources视图中,top module下没有相应的子模块,即没有显示出design的相应层次结构。如果打算使用partition,也会因为无法找到相应的子模块而没法进行。
最开始怀疑是design的coding style有什么问题,但不知道具体是什么问题。在和Xilinx的AE联系后,发现ISE10.1版本在处理大的source file时有些问题,导致无法正常显示design的hierarchy。解决办法有两个:
1. 每个module放在一个文件中,然后把这些文件都添加到ISE中。在我的case里,所有module都放在一个文件里面了,导致这个文件很大(10M左右)。
2. 设置环境变量并改变其值
XILINX_DU_REDUCTION_SIZE 1000000
default值是1000000,表示1M的意思。如果文件很大,譬如10M,则可以将这个值设为15000000(至少要比文件的大小要大)。

2009年5月18日星期一

ISE: Map failed due to timing can not meet

在用ISE Implement Design的时候,在Map阶段就由于timing的问题fail了。Error信息如下:
Pack:1653 - At least one timing constraint is impossible to meet because component delays alone exceed the constraint. A physical timing constraint summary will appear in the map report. This summary will show a MINIMUM net delay for the paths. For more information about the Timing Analyzer, consult the Xilinx Timing Analyzer Reference manual. For more information on TRCE, consult the Xilinx Development System Reference Guide "TRACE" chapter.

由于在Map阶段,还没有考虑wire delay而只有cell delay,所以这个时候timing无法满足是必须要解决的。问题是fail以后,无法生成STA report,这样也就无法确定是哪条path出了问题。解决方法是:设置环境变量set XIL_TIMING_ALLOW_IMPOSSIBLE=1,让ISE在impossible的情况下仍然继续下去。这样可以生成STA report,我们就可以定位critical path并给出相应的解决方法了。

2009年4月25日星期六

在blogpot中显示程序源代码

在blog上写些技术性的东西,总有需要将源代码在帖子中显示的需求。在网上找了好久,相关的资料倒是不少,但自己毫无CSS基础,看了别人的说明自己也搞不定,一个大问题就是不知道这些方法中所提供的CSS代码放置在模板中的哪个位置。最后在下面这篇博文的评论/回复中找到了答案,这段CSS代码需放在模板的HTML代码的</head>前(“布局”-->“修改HTML”)。我放在了下面这段的后面了。
-----------------------------------------------
Blogger Template Style
Name: Rounders 3
Designer: Douglas Bowman
URL: www.stopdesign.com
Date: 27 Feb 2004
Updated by: Blogger Team
----------------------------------------------- */

但是这个解决方法对缩进,"<"和">"的支持好像不是很好,不知是否有更好的解决方法~~

国良先生的博文:
http://klcintw4.blogspot.com/2006/11/blog-post_03.html

2009年4月24日星期五

如何修改DC关于wire的命名规则

用DC综合一个设计,在一个子模块中出现了名字为N110和n110的两个wire,在APR flow中,如果不区分大小写,就会有问题。解决方法如下:
在.synopsys_dc.setup中加入下面这个name rule
define_name_rules Jerry_Rule -restricted "mailto:!@#$%%5E&*%28%29%5C%5C-%5B%5D/" -case_insensitive -first_restricted "0-9 _ \\"
在综合脚本compile后,write netlist前加入下面这句
change_names -rules Jerry_Rule -hierarchy

其中,-case_insensitive 是让DC不产生这种仅大小写不同的wire name的选项。

另外,我写了个Perl Script,可用于check 综合后的netlist中是否有这种仅大小写不同的wire name。

下面的"while() {"实际为"while(<SRCFILE>) {", 下面这个代码框在处理<和>时会有问题,不知道有什么好的解决方法~~

#! /usr/bin/perl -w
use strict;

my $srcfile = $ARGV[0];
my @var;
my $word;
my %var_hash;
my $key;
my $value;
my $module;

open SRCFILE, "< $srcfile" or die "can not open the source file:$!";
while () {
@var = split /\s+\(,;\)/;
if (/\bmodule\b\s+(\w+)/) {
$module = $1;
print "Begin parser module $module...\n";
foreach $key (sort keys %var_hash) {
delete $var_hash{$key};
}
} elsif(/\bendmodule\b/) {
print "End parser module $module.\n";
}
foreach $word (@var) {
unless ($word =~ /(^\s+$)(^$)/) {
unless (exists $var_hash{$word}) {
foreach $key (sort keys %var_hash) {
if (($word =~ /\b$key\b/i) && ($key =~ /\b$word\b/i)) {
print "ERROR: $word and $key are the same except case\n";
}
}
}
if ($word =~ /^\w+/) {
$var_hash{$word} = 1;
}
}
}
}

2009年3月14日星期六

Techniques to improving timing

There are several methods can be used to improve timing.
1. Move critical signal close to output of a gate, this may be used in ECO phase.
2. Move critical signal closer to the output
3. Replicate logic
4. Use Complex Gate
5. Retiming – move logic to next T
6. Retiming - move Logic to prev T

7. Clock Gating
8. Additional methods
1)Use Low Vt cell to improve timing
2)Size up weak gates in the path

2009年1月12日星期一

USB3500作为USB HOST PHY使用时的一些注意事项

1. 在EOP阶段,USB3500不会给相应的TXREADY信号,我们只需要把要发送的数据告诉USB3500即可,USB3500会自己处理SYNC和EOP的事情。
2.HOSTDISC仅在USB3500处于High Speed模式时有效,若不在High Speed模式,则HOSTDISC=0;另外,若发生了disconnect, HOSTDISC的值是每隔1个Micro Frame的脉冲,而不是level信号,这点需要注意。在我们原先的ASIC design中,也会每隔1个Micro Frame去采样EPHY送出来的Disconnect信号,若直接用USB3500的HOSTDISC取代EPHY的Disconnect信号,则由于design和USB3500的采样时刻未必一直,导致design内部看不到USB3500的HOSTDISC信号。解决办法就是在用HOSTDISC取代EPHY的Disconnect信号的同时,取消每隔1个Micro Frame采样Disconnect信号的做法。
3.还有一个需要特别注意的地方,即在TXVALID为高时,USB3500的控制信号(XCVRSEL/TERMSEL/OPMODE) 需保持稳定,否则USB3500的内部状态会乱掉,导致输出不正常。