在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月20日星期三
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并给出相应的解决方法了。
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并给出相应的解决方法了。
2008年12月22日星期一
Tip: Reset and Chirp process when use USB3500 as USB HOST's PHY
In USB3500 datasheet 7.14 “USB Reset and Chirp”, the reset and chirp process is detailed described using one figure and the description text. But if you do the reset and chirp process following the instruction of the figure, you may not get the correct result.
As show in the following figure (Figure 7.9), first you set xcvrselect = 2'b01, termselect = 1'b1 and opmode = 2'b00 before reset to detect device attachment (T0~T2); then you set xcvrselect = 2'b00, termselect = 1'b0 and opmode = 2'b00 to drive SE0 on bus (T2~T3); then you wait ChirpK on bus to translate to the next state, but you can not watch ChirpK on bus through the reset process using the current setting (xcvrselect/termselect/opmode), this is the problem. Why?
As we know, we can not see the DP/DM by using USB3500. We can only get the bus status through linestate. In USB3500 datasheet 7.1 “Linestate”, it gives the usage and meaning of linestate under different conditions. We can see in Table 7.2, when XCVRSEL[1:0] = 00, TERMSELECT = 0 and OPMODE = 00/01, the only valid linestate value is 00 (SE0) or 01 (J-state). So if we set xcvrselect = 2'b00, termselect = 1'b0 and opmode = 2'b00 in T2~T3, even the device drives ChirpK on bus, we can only get J state on bus.
Solution:
From Table 7.2, we know that in order to see the ChirpK on bus, we must set opmode to 2'b10. So there are two solutions to resolve this problem.
1. Set xcvrselect = 2'b00, termselect = 1'b0 and opmode = 2'b10 in T2~T3. As opmode = 2'b10 only have meanings when host drives ChirpJ/ChirpK (Disable bit stuffing and NRZI encoding), this setting can work well when host drives SE0 on bus. With this setting, design can get the correct ChirpK from linestate at T3.
This method is simple but it may seem a little different with the datasheet.
2. At T2~T3, the bus state is SE0 and then the actual bus state is ChirpK, but due to opmode setting (opmode = 2'b00), the linestate value is 2'b01 (J-state). So we can detect the bus state transition between T2 and T3. If we detect the bus state (linestate) changes from 2'b00 to 2'b01, then we set opmode = 2'b10 to observe the ChirpK from linestate.
Both methods work well and can get the correct reset and chirp process.
As show in the following figure (Figure 7.9), first you set xcvrselect = 2'b01, termselect = 1'b1 and opmode = 2'b00 before reset to detect device attachment (T0~T2); then you set xcvrselect = 2'b00, termselect = 1'b0 and opmode = 2'b00 to drive SE0 on bus (T2~T3); then you wait ChirpK on bus to translate to the next state, but you can not watch ChirpK on bus through the reset process using the current setting (xcvrselect/termselect/opmode), this is the problem. Why?
As we know, we can not see the DP/DM by using USB3500. We can only get the bus status through linestate. In USB3500 datasheet 7.1 “Linestate”, it gives the usage and meaning of linestate under different conditions. We can see in Table 7.2, when XCVRSEL[1:0] = 00, TERMSELECT = 0 and OPMODE = 00/01, the only valid linestate value is 00 (SE0) or 01 (J-state). So if we set xcvrselect = 2'b00, termselect = 1'b0 and opmode = 2'b00 in T2~T3, even the device drives ChirpK on bus, we can only get J state on bus.
Solution:
From Table 7.2, we know that in order to see the ChirpK on bus, we must set opmode to 2'b10. So there are two solutions to resolve this problem.
1. Set xcvrselect = 2'b00, termselect = 1'b0 and opmode = 2'b10 in T2~T3. As opmode = 2'b10 only have meanings when host drives ChirpJ/ChirpK (Disable bit stuffing and NRZI encoding), this setting can work well when host drives SE0 on bus. With this setting, design can get the correct ChirpK from linestate at T3.
This method is simple but it may seem a little different with the datasheet.
2. At T2~T3, the bus state is SE0 and then the actual bus state is ChirpK, but due to opmode setting (opmode = 2'b00), the linestate value is 2'b01 (J-state). So we can detect the bus state transition between T2 and T3. If we detect the bus state (linestate) changes from 2'b00 to 2'b01, then we set opmode = 2'b10 to observe the ChirpK from linestate.
Both methods work well and can get the correct reset and chirp process.
2008年12月3日星期三
[转载] Xilinx ISE所涉及的一些命令以及Command Line的使用
原文:http://www.edacn.net/bbs/viewthread.php?tid=14174
因为目前进行的一个项目使用了多块容量较大的Xilinx FPGA, 对各块FPGA进行synthesis,map,P&R和generating programming file就成了一个大问题。(惭愧啊,group里没有人有modular design的经验)虽然现在的工作站性能比较强劲,但产生每一个programming file还是要花上好几个小时。所以考虑到在Command Line下面进行所有的编译工作,下面是一点点心得,希望对大家有所帮助(不知道有Westor在那本ISE详解里面介绍过这个没有,偶是没有看过那本书了,不过,要是Westor已经写过了的话,:-(. $#@%%N#%&*^$###@#)。废话少说,言归正传。
1.Command的介绍
要完成一次完整的Xilinx FPGA编译过程,涉及到的Command包括了:
XST:
全称为Xilinx Synthesis Technology,这是Xilinx ISE里面附带的一个免费的综合工具。(呵呵,Synplify Pro的购买正在商洽之中)Synthesis完毕后,你可以用任何的文本工具打开后缀名为“.syr”的文件,察看synthesis的具体运行过程及报告。
NGDBuild:
这个命令,其实就是translate啦。这是implementation的第一步。它会把所有的netlist和design constraint合并到一起,生成一个ngd文件供map工具使用。同样的,NGDBuild的报告文件是后缀名为“.bld”的文件。
MAP:
MAP命令是将NGDBuild命令所生成的ngd文件,映射到具体的FPGA器件里面去。MAP将产生一个NCD文件供PAR使用。你可以用任何文本工具打开后缀名为“.mrp”的map报告文件。
PAR:
Place & Route。这个偶就不多说了。免得被砖头砸到。PAR的报告文件后缀名是“.par”。
TRCE:
这个是用来产生偶们最最关心的timing report的。TRCE会分析你的FPGA的设计并且产生一个后缀名为“.twr”的时序报告。你可以用任何文本工具打开它,也可以用xilinx的Timing Analyzer。Timing Analyzer比较直观,推荐新手使用。
Bitgen:
顾名思义,这个Bitgen就是用来generate programming file啦。
2. 使用举例
介绍完Xilinx提供的这些命令后,让我们来看看如何使用它们吧。Xilinx给我们提供了一个很有用的工具:View Command Line Log File。这个工具位于Process for Source窗口的Design Entry Utitlities下面。
双击这个View Command Line Log File,你看到了什么?哈哈,在右边的文本编辑窗口里面出现了类似于下面的语句:
xst -intstyle ise -ifn __projnav/fpga_a.xst -ofn fpga_a.syr
ngdbuild -intstyle ise -dd d:\projects\hardware\hy_multifpga_nwpci_vhd_new_improvetiming/_ngo -uc ./source/hy/fpga_a.ucf -aul -p xc2v6000-ff1152-4 fpga_a.ngc fpga_a.ngd
map -intstyle ise -p xc2v6000-ff1152-4 -cm area -pr b -k 4 -c 100 -tx off -o fpga_a_map.ncd fpga_a.ngd fpga_a.pcf
par -w -intstyle ise -ol high -t 1 fpga_a_map.ncd fpga_a.ncd fpga_a.pcf
trce -intstyle ise -e 1000 -l 1000 -xml fpga_a fpga_a.ncd -o fpga_a.twr fpga_a.pcf
bitgen -intstyle ise -f fpga_a.ut fpga_a.ncd
对了,上面的这些就是你以前曾经使用过的命令啦。其实,我们用ISE作Synthesis,Map,PAR的时候,ISE就会自动调用上面所说的那些command,ISE其实就是一个GUI罢了。:-)
如果双击View Command Line Log File时,出现了下面的错误提示:
Warning: This process is used to display the running command log file that records some application command lines.
这就说明了你还没有implement过你的design,或者你已经清空过了这个design。(在project目录下面,有一个cleanup project files按钮,可以清空)
接下来,就是最后一步啦。你只需要用任何文本编辑器,把上面这段Command的历史纪录Copy&Paste,再存为一个”.Bat”批处理文件,在windows的command line下面执行就可以了。注意需要把这个.bat文件放在你的项目所在目录下。
3. 几点注意
a. 如果要连续跑好几个project,建议先使用Cleanup Project Files.根据偶的经验,如果不进行清空的话,Synthesis和PAR有时会出错。但是这里会出现一个小问题,清空过后,原有的一些文件可能会被删除,比如__projnav目录下面的*.xst(这个时XST的配置文件,做Synthesis的时候,XST会读这个文件以获得相关配置),再比如*.prj(project文件,里面罗列了一些被你的设计所使用的module)以及*.ut文件(ut是Bitgen的配置文件)。这3种文件,在使用Command Line之前最好确认一下是否存在。偶一般会将这3种文件作备份,到时候好拿出来,改一改就用。
b. 在Xilinx的安装目录Xilinx\doc\usenglish\books\docs下,有关于这些command的pdf文件,如果有需要,可以读一读。不过,经过偶苦读一阵之后,偶发现,其实没有太大必要,有问题再说吧。
4. 总结
这是偶第一次发原创,肯定有很多不足之处,恳请赐教。其实这个话题也比较简单,三言两语也可说清楚,但根据偶过去惨痛的新手经验,偶相信还是比较详细地讲解一些为好。至少可以让新手们多了解一些ISE本身嘛。如果大家觉得有那么一丁点儿用处的话,就请re一下先,也不枉偶打那么多字嘛。嘿嘿。
转载请注明作者spriteice
【转载者注】下面是丁丁的回复,感觉也比较有用:
1,Achieve可以进行版本管理,但是文件太大。一般来说,作版本控制最好是保存所有原始输入,如果做FPGA,原始输入包括HDL代码,综合工程.prj或者脚本.tcl,综合约束.sdc,实现约束.ucf,所有core的网表.edn,实现的脚本.bat,再有就是注意综合工具的版本和实现工具的版本。如果所有这些都没有变化,那么可以保证再运行一遍得到完全一样的结果。这也是版本控制的一个关键吧,只要保证可重复性,那么那些结果除了bit你要用到其他也可都不保存。
2,时间标签就是time stamp,在网表文件和bit文件头都有,表示这个文件的生成时间记录,这个不会影响到内部的功能。
3,在插入测试引脚这里,可以利用FPGA Editor来操作,直接编辑.ncd文件,再进行bitgen就可以了,那么如果你需要插入很多测试引脚,利用脚本(好像是.scr)可以帮你自动完成,然后只进行bitgen就可以了,避免重新布局布线浪费时间,避免重新布局布线影响timing。当然FPGA Editor还可以做很多修改了,就不多说了。
4,给一个以前的脚本例子:
综合和实现的命令行:
synplify_pro -batch ../script/chip_syn.tcl
ngdbuild -dd ./_ngo -uc ../script/chip_par.ucf -p xc2s200-fg456-5 .\rev_1\chip.edf chip.ngd
map -p xc2s200-fg456-5 -timing -cm speed -detail -ir -pr b -o chip_map.ncd chip.ngd chip.pcf
par -w -ol med chip_map.ncd chip.ncd chip.pcf
bitgen -w -f ../script/chip_par.ut chip.ncd
copy chip.bit ..\bit\
里面这个chip_par.ut保存了bitgen命令的选项,也可以不用这个文件,都加在命令行里。
后面是chip_syn.tcl:
project -new
#add_file options
add_file -constraint "../script/chip_syn.sdc"'
add_file -verilog "../src/src1.v"
add_file -verilog "../src/src2.v"
add_file -verilog "../src/src3.v"
add_file -verilog "../src/src4.v"
add_file -verilog "../src/src5.v"
add_file -verilog "../src/src6.v"
add_file -verilog "../src/src7.v"
add_file -verilog "../src/src8.v"
#device options
set_option -technology SPARTAN2
set_option -part XC2S200
set_option -package FG456
set_option -speed_grade -5
#compilation/mapping options:
set_option -default_enum_encoding default
set_option -symbolic_fsm_compiler 0
set_option -resource_sharing 0
set_option -use_fsm_explorer 0
#map options
set_option -frequency 50.000
set_option -fanout_limit 100
set_option -disable_io_insertion 0
set_option -pipe 0
set_option -fixgatedclocks 0
set_option -retiming 0
set_option -modular 0
set_option -update_models_cp 0
set_option -verification_mode 0
#simulation options
set_option -write_verilog 0
set_option -write_vhdl
#automatic place and route (vendor) options
set_option -write_apr_constraint 0
#set result format/file last
project -result_file "rev_1/chip.edf"
#implementation attributes
set_option -vlog_std v2001
project -run
只是个人的一点建议,版本控制只要做了就可以,保存archive也要知道这个东东怎么来的,下次可以保证还作出来同样的东东。保存命令行也要知道所有的软件版本等。
因为目前进行的一个项目使用了多块容量较大的Xilinx FPGA, 对各块FPGA进行synthesis,map,P&R和generating programming file就成了一个大问题。(惭愧啊,group里没有人有modular design的经验)虽然现在的工作站性能比较强劲,但产生每一个programming file还是要花上好几个小时。所以考虑到在Command Line下面进行所有的编译工作,下面是一点点心得,希望对大家有所帮助(不知道有Westor在那本ISE详解里面介绍过这个没有,偶是没有看过那本书了,不过,要是Westor已经写过了的话,:-(. $#@%%N#%&*^$###@#)。废话少说,言归正传。
1.Command的介绍
要完成一次完整的Xilinx FPGA编译过程,涉及到的Command包括了:
XST:
全称为Xilinx Synthesis Technology,这是Xilinx ISE里面附带的一个免费的综合工具。(呵呵,Synplify Pro的购买正在商洽之中)Synthesis完毕后,你可以用任何的文本工具打开后缀名为“.syr”的文件,察看synthesis的具体运行过程及报告。
NGDBuild:
这个命令,其实就是translate啦。这是implementation的第一步。它会把所有的netlist和design constraint合并到一起,生成一个ngd文件供map工具使用。同样的,NGDBuild的报告文件是后缀名为“.bld”的文件。
MAP:
MAP命令是将NGDBuild命令所生成的ngd文件,映射到具体的FPGA器件里面去。MAP将产生一个NCD文件供PAR使用。你可以用任何文本工具打开后缀名为“.mrp”的map报告文件。
PAR:
Place & Route。这个偶就不多说了。免得被砖头砸到。PAR的报告文件后缀名是“.par”。
TRCE:
这个是用来产生偶们最最关心的timing report的。TRCE会分析你的FPGA的设计并且产生一个后缀名为“.twr”的时序报告。你可以用任何文本工具打开它,也可以用xilinx的Timing Analyzer。Timing Analyzer比较直观,推荐新手使用。
Bitgen:
顾名思义,这个Bitgen就是用来generate programming file啦。
2. 使用举例
介绍完Xilinx提供的这些命令后,让我们来看看如何使用它们吧。Xilinx给我们提供了一个很有用的工具:View Command Line Log File。这个工具位于Process for Source窗口的Design Entry Utitlities下面。
双击这个View Command Line Log File,你看到了什么?哈哈,在右边的文本编辑窗口里面出现了类似于下面的语句:
xst -intstyle ise -ifn __projnav/fpga_a.xst -ofn fpga_a.syr
ngdbuild -intstyle ise -dd d:\projects\hardware\hy_multifpga_nwpci_vhd_new_improvetiming/_ngo -uc ./source/hy/fpga_a.ucf -aul -p xc2v6000-ff1152-4 fpga_a.ngc fpga_a.ngd
map -intstyle ise -p xc2v6000-ff1152-4 -cm area -pr b -k 4 -c 100 -tx off -o fpga_a_map.ncd fpga_a.ngd fpga_a.pcf
par -w -intstyle ise -ol high -t 1 fpga_a_map.ncd fpga_a.ncd fpga_a.pcf
trce -intstyle ise -e 1000 -l 1000 -xml fpga_a fpga_a.ncd -o fpga_a.twr fpga_a.pcf
bitgen -intstyle ise -f fpga_a.ut fpga_a.ncd
对了,上面的这些就是你以前曾经使用过的命令啦。其实,我们用ISE作Synthesis,Map,PAR的时候,ISE就会自动调用上面所说的那些command,ISE其实就是一个GUI罢了。:-)
如果双击View Command Line Log File时,出现了下面的错误提示:
Warning: This process is used to display the running command log file that records some application command lines.
这就说明了你还没有implement过你的design,或者你已经清空过了这个design。(在project目录下面,有一个cleanup project files按钮,可以清空)
接下来,就是最后一步啦。你只需要用任何文本编辑器,把上面这段Command的历史纪录Copy&Paste,再存为一个”.Bat”批处理文件,在windows的command line下面执行就可以了。注意需要把这个.bat文件放在你的项目所在目录下。
3. 几点注意
a. 如果要连续跑好几个project,建议先使用Cleanup Project Files.根据偶的经验,如果不进行清空的话,Synthesis和PAR有时会出错。但是这里会出现一个小问题,清空过后,原有的一些文件可能会被删除,比如__projnav目录下面的*.xst(这个时XST的配置文件,做Synthesis的时候,XST会读这个文件以获得相关配置),再比如*.prj(project文件,里面罗列了一些被你的设计所使用的module)以及*.ut文件(ut是Bitgen的配置文件)。这3种文件,在使用Command Line之前最好确认一下是否存在。偶一般会将这3种文件作备份,到时候好拿出来,改一改就用。
b. 在Xilinx的安装目录Xilinx\doc\usenglish\books\docs下,有关于这些command的pdf文件,如果有需要,可以读一读。不过,经过偶苦读一阵之后,偶发现,其实没有太大必要,有问题再说吧。
4. 总结
这是偶第一次发原创,肯定有很多不足之处,恳请赐教。其实这个话题也比较简单,三言两语也可说清楚,但根据偶过去惨痛的新手经验,偶相信还是比较详细地讲解一些为好。至少可以让新手们多了解一些ISE本身嘛。如果大家觉得有那么一丁点儿用处的话,就请re一下先,也不枉偶打那么多字嘛。嘿嘿。
转载请注明作者spriteice
【转载者注】下面是丁丁的回复,感觉也比较有用:
1,Achieve可以进行版本管理,但是文件太大。一般来说,作版本控制最好是保存所有原始输入,如果做FPGA,原始输入包括HDL代码,综合工程.prj或者脚本.tcl,综合约束.sdc,实现约束.ucf,所有core的网表.edn,实现的脚本.bat,再有就是注意综合工具的版本和实现工具的版本。如果所有这些都没有变化,那么可以保证再运行一遍得到完全一样的结果。这也是版本控制的一个关键吧,只要保证可重复性,那么那些结果除了bit你要用到其他也可都不保存。
2,时间标签就是time stamp,在网表文件和bit文件头都有,表示这个文件的生成时间记录,这个不会影响到内部的功能。
3,在插入测试引脚这里,可以利用FPGA Editor来操作,直接编辑.ncd文件,再进行bitgen就可以了,那么如果你需要插入很多测试引脚,利用脚本(好像是.scr)可以帮你自动完成,然后只进行bitgen就可以了,避免重新布局布线浪费时间,避免重新布局布线影响timing。当然FPGA Editor还可以做很多修改了,就不多说了。
4,给一个以前的脚本例子:
综合和实现的命令行:
synplify_pro -batch ../script/chip_syn.tcl
ngdbuild -dd ./_ngo -uc ../script/chip_par.ucf -p xc2s200-fg456-5 .\rev_1\chip.edf chip.ngd
map -p xc2s200-fg456-5 -timing -cm speed -detail -ir -pr b -o chip_map.ncd chip.ngd chip.pcf
par -w -ol med chip_map.ncd chip.ncd chip.pcf
bitgen -w -f ../script/chip_par.ut chip.ncd
copy chip.bit ..\bit\
里面这个chip_par.ut保存了bitgen命令的选项,也可以不用这个文件,都加在命令行里。
后面是chip_syn.tcl:
project -new
#add_file options
add_file -constraint "../script/chip_syn.sdc"'
add_file -verilog "../src/src1.v"
add_file -verilog "../src/src2.v"
add_file -verilog "../src/src3.v"
add_file -verilog "../src/src4.v"
add_file -verilog "../src/src5.v"
add_file -verilog "../src/src6.v"
add_file -verilog "../src/src7.v"
add_file -verilog "../src/src8.v"
#device options
set_option -technology SPARTAN2
set_option -part XC2S200
set_option -package FG456
set_option -speed_grade -5
#compilation/mapping options:
set_option -default_enum_encoding default
set_option -symbolic_fsm_compiler 0
set_option -resource_sharing 0
set_option -use_fsm_explorer 0
#map options
set_option -frequency 50.000
set_option -fanout_limit 100
set_option -disable_io_insertion 0
set_option -pipe 0
set_option -fixgatedclocks 0
set_option -retiming 0
set_option -modular 0
set_option -update_models_cp 0
set_option -verification_mode 0
#simulation options
set_option -write_verilog 0
set_option -write_vhdl
#automatic place and route (vendor) options
set_option -write_apr_constraint 0
#set result format/file last
project -result_file "rev_1/chip.edf"
#implementation attributes
set_option -vlog_std v2001
project -run
只是个人的一点建议,版本控制只要做了就可以,保存archive也要知道这个东东怎么来的,下次可以保证还作出来同样的东东。保存命令行也要知道所有的软件版本等。
2008年11月13日星期四
Avoid Using Clock Gating In FPGA Emulation
For power saving consideration, clock gating is used in ASIC design. EDA tools are used to balance clocks which come from the same source clock and only the enable signals are different. But in FPGA design, no balance is done among related clocks. The skew among related clocks may be larger or smaller which can not be forecast. This may lead to unexpected results.
Besides, there is no AND/OR/LATCH… etc. only LUT/FF/BUF in FPGA.
Besides, there is no AND/OR/LATCH… etc. only LUT/FF/BUF in FPGA.
2008年7月7日星期一
the output delay of SRAM generated by Block Memory Generator v2.4 (Xilinx)
使用Xilinx Block Memory Generator v2.4生成的SRAM的输出延时
默认延时是1T,即输入地址后,过1个时钟周期,相应的数据会出现在输出端。如果在Optional Output Registers里面,将Register Output of Memory Primitives选中,则会增加1个时钟周期的延时;若将Register Output of Memory Core选中,也会增加1个时钟周期的延时。若同时将这两个选项选中,则总的输出延时将为3T。
在设计时,需要根据数据通路的时序要求,选择SRAM相应的输出延时。
2008年3月25日星期二
Xilinx/Virtex-5 DCM problem:the minimum frequence of input clock
I have an input clock of 24MHz and I need to get a 48MHz clock using DCM. During PAR, there were the following warnings:
WARNING:Timing:3325 - Timing Constraint
"TS_CLK24 = PERIOD TIMEGRP "CLK24" 42 ns HIGH 50%;"
fails the maximum period check for input clock clk48_gen/CLKIN_IBUFG_OUT to DCM_ADV clk48_gen_DCM_INST because the period constraint value (42000 ps) exceeds the maximum internal period limit of 31251 ps.Please reduce the period of the constraint to remove this timing failure.
...
That means the minimum input clock of the DCM is about 32MHz (10^6/31251ps=31.998976MHz) while my input clock is only 24MHz. I did not know whether this DCM will operate normally or not. I think the intuitional way is that:output this 48MHz signal/clock and observe it on LAs. My FPGA board will be ready in several days. I will test and then update this blog.
The following is someone's explanation I found in Xilinx/Forum:
These warnings usually indicate that the period constraint specified in your design violates one of the Spec'ed operating ranges in the datasheet for that device (ie, faster than the Max Frequency of a DCM, etc.). This doesn't necessarily mean that it won't work, but it does mean that it's outside of the range that Xilinx has tested and guarantees. You might take a look in the datasheet for the device you're targetting to see if the frequency you're requesting is outside of the range for either it's driver or load.
WARNING:Timing:3325 - Timing Constraint
"TS_CLK24 = PERIOD TIMEGRP "CLK24" 42 ns HIGH 50%;"
fails the maximum period check for input clock clk48_gen/CLKIN_IBUFG_OUT to DCM_ADV clk48_gen_DCM_INST because the period constraint value (42000 ps) exceeds the maximum internal period limit of 31251 ps.Please reduce the period of the constraint to remove this timing failure.
...
That means the minimum input clock of the DCM is about 32MHz (10^6/31251ps=31.998976MHz) while my input clock is only 24MHz. I did not know whether this DCM will operate normally or not. I think the intuitional way is that:output this 48MHz signal/clock and observe it on LAs. My FPGA board will be ready in several days. I will test and then update this blog.
The following is someone's explanation I found in Xilinx/Forum:
These warnings usually indicate that the period constraint specified in your design violates one of the Spec'ed operating ranges in the datasheet for that device (ie, faster than the Max Frequency of a DCM, etc.). This doesn't necessarily mean that it won't work, but it does mean that it's outside of the range that Xilinx has tested and guarantees. You might take a look in the datasheet for the device you're targetting to see if the frequency you're requesting is outside of the range for either it's driver or load.
订阅:
博文 (Atom)