原文名为《Understanding the global signals for simulation》,由Xilinx发布。我只是做了一下翻译。
Xilinx FPGA都有寄存器置位复位专用电路,该电路会在配置模式结束的时候发出一个脉冲,这个脉冲自动产生,无需编程。所有的寄存器(FF和latch)都会通过专用的全局置位复位(GSR)网络收到这个脉冲,根据寄存器自身的定义执行相应的职位或者复位操作。
对于有些系列的FPGA,必须在首次仿真的时候就考虑到这个内置复位电路的行为,以使前后仿真能够一致。
对于Virtex和Spartan-2系列可以使用手动复位,因为PAR工具可以为复位信号指定比GSR网络更加快速的路由。对于低端的产品则仍然建议使用GSR网络。
如果前仿真的时候没有使用GL甜文推荐GSR,则RTL仿真的初始状态和后仿真的初始状态可能不同,造成仿真结果不一致,也就是设计的等效性没有被满足。
Xilinx FPGA都有寄存器置位复位专用电路,该电路会在配置模式结束的时候发出一个脉冲,这个脉冲自动产生,无需编程。所有的寄存器(FF和latch)都会通过专用的全局置位复位(GSR)网络收到这个脉冲,根据寄存器自身的定义执行相应的职位或者复位操作。
对于有些系列的FPGA,必须在首次仿真的时候就考虑到这个内置复位电路的行为,以使前后仿真能够一致。
对于Virtex和Spartan-2系列可以使用手动复位,因为PAR工具可以为复位信号指定比GSR网络更加快速的路由。对于低端的产品则仍然建议使用GSR网络。
如果前仿真的时候没有使用GL甜文推荐GSR,则RTL仿真的初始状态和后仿真的初始状态可能不同,造成仿真结果不一致,也就是设计的等效性没有被满足。
另外,通过使用全局三态使能(GTS)信号,FPGA在配置模式下将所有输出信号变成高阻态。仿真中也要通过glbl.v来实现该功能的等效。
[img=528,294]toolbox.xilinx/docsan/xilinx4/data/docs/sim/images/x8352.gif[/img]
james 发表于 2008-12-5 07:43
实例 1
-- 提问
testbench代码中使用了“IOBUF_F_12”之类的模块,在xilinx的库里的”IOBUF_F_12“使用了tri0 GTS = [b][color=#ff0000]glbl[/color][/b].GTS 的语句,不知道为什么在试图仿真的时候就报错了,错误如下所示:请各位达人前辈看到后能给小弟一点提点,小弟感激不尽~
# ** Error: (vsim-3043) d:/modeltech_6.0/xilinx_lib/unisims_ver/unisims_ver_source.v(57102): Unresolved referenc
testbench代码中使用了“IOBUF_F_12”之类的模块,在xilinx的库里的”IOBUF_F_12“使用了tri0 GTS = [b][color=#ff0000]glbl[/color][/b].GTS 的语句,不知道为什么在试图仿真的时候就报错了,错误如下所示:请各位达人前辈看到后能给小弟一点提点,小弟感激不尽~
# ** Error: (vsim-3043) d:/modeltech_6.0/xilinx_lib/unisims_ver/unisims_ver_source.v(57102): Unresolved referenc
e to '[b][color=#ff0000]glbl[/color][/b]' in [b][color=#ff0000]glbl[/color][/b].GTS.
# Region: /t_sdrm/sdrmc/obuf0
# ** Error: (vsim-3043) d:/modeltech_6.0/xilinx_lib/unisims_ver/unisims_ver_source.v(46736): Unresolved reference to '[b][color=#ff0000]glbl[/color][/b]' in [b][color=#ff0000]glbl[/color][/b].GTS.
# Region: /t_sdrm/sdrmc/iod0
# ** Error: (vsim-3043) d:/modeltech_6.0/xilinx_lib/unisims_ver/unisims_ver_source.v(46736): Unresolved reference to '[b][color=#ff0000]glbl[/color][/b]' in [b][color=#ff0000]glbl[/color][/b].GTS.
# Region: /t_sdrm/sdrmc/iod1
# ** Error: (vsim-3043) d:/modeltech_6.0/xilinx_lib/unisims_ver/unisims_ver_source.v(46736): Unresolved reference to '[b][color=#ff0000]glbl[/color][/b]' in [b][color=#ff0000]glbl[/color][/b].GTS.
# Region: /t_sdrm/sdrmc/iod2
# ** Error: (vsim-3043) d:/modeltech_6.0/xilinx_lib/unisims_ver/unisims_ver_source.v(4673
# Region: /t_sdrm/sdrmc/obuf0
# ** Error: (vsim-3043) d:/modeltech_6.0/xilinx_lib/unisims_ver/unisims_ver_source.v(46736): Unresolved reference to '[b][color=#ff0000]glbl[/color][/b]' in [b][color=#ff0000]glbl[/color][/b].GTS.
# Region: /t_sdrm/sdrmc/iod0
# ** Error: (vsim-3043) d:/modeltech_6.0/xilinx_lib/unisims_ver/unisims_ver_source.v(46736): Unresolved reference to '[b][color=#ff0000]glbl[/color][/b]' in [b][color=#ff0000]glbl[/color][/b].GTS.
# Region: /t_sdrm/sdrmc/iod1
# ** Error: (vsim-3043) d:/modeltech_6.0/xilinx_lib/unisims_ver/unisims_ver_source.v(46736): Unresolved reference to '[b][color=#ff0000]glbl[/color][/b]' in [b][color=#ff0000]glbl[/color][/b].GTS.
# Region: /t_sdrm/sdrmc/iod2
# ** Error: (vsim-3043) d:/modeltech_6.0/xilinx_lib/unisims_ver/unisims_ver_source.v(4673
6): Unresolved reference to '[b][color=#ff0000]glbl[/color][/b]' in [b][color=#ff0000]glbl[/color][/b].GTS.
················
-- 答复
已经搞定了,错误是因为之前自己没有把[b][color=#ff0000]glbl[/color][/b].v加进去
················
-- 答复
已经搞定了,错误是因为之前自己没有把[b][color=#ff0000]glbl[/color][/b].v加进去
james 发表于 2008-12-5 08:16
实例 2
-- 提问
ise做modelsim se版本的仿真的时候,总是那个glbl不行,明明我编译了啊。
做fpga验证的时候,想仿真p&r后的门级网表, 需要别人的单元库的那个.v文件。
-- 回答1
ise做modelsim se版本的仿真的时候,总是那个glbl不行,明明我编译了啊。
做fpga验证的时候,想仿真p&r后的门级网表, 需要别人的单元库的那个.v文件。
-- 回答1
在Implementation的simulation model properties中要选上
Bring out global tristate net as a port[size=0px]'[/size]
Bring out global set/reset net as a port
这两项的
-- 回答2
首先要把[b][color=#ff0000]glbl[/color][/b].v文件加入到工程中编译,这有些大虾已经讲过,但是编译以后问题并没有解决。我打开*_map.v这个文件发现里面并没有将[b][color=#ff0000]glbl[/color][/b].v实例化,所以我加入以下的语句
[b][color=#ff0000]glbl[/color][/b] [b][color=#ff0000]glbl[/color][/b]();
重新编译、仿真,顺利通过。
james 发表于 2008-12-5 08:29
个人的感觉是,如果所有寄存器都用代码进行了异步复位处理,那么即使没有使用GSR进行仿真,在施加用户定义的异步复位后,前后仿真的结果应该会一致。当然在此之前两者会有不同,因为后仿真启动了全局复位,而前仿真没有,所以初始状态可能不同。
回过头来看看,需要glbl.v的原因其实很简单。因为其他模块需要调用它。前仿真的时候,如果使用了UniSim中的模块,那些模块中又有全局复位的代码,那么就会提示对glbl.v的调用。同样的,后仿真的网表中也有单元用到了全局复位信号,所以当然会提示对glbl.v的调用。
回过头来看看,需要glbl.v的原因其实很简单。因为其他模块需要调用它。前仿真的时候,如果使用了UniSim中的模块,那些模块中又有全局复位的代码,那么就会提示对glbl.v的调用。同样的,后仿真的网表中也有单元用到了全局复位信号,所以当然会提示对glbl.v的调用。
HolySaint 发表于 2009-6-24 16:35
那仿真波形是那个虚线信号是什么意思?
terry2640 发表于 2009-12-28 23:26
一直很好奇这个问题,感谢版主翻译这篇文章!
hunansunjianjun 发表于 2009-12-29 23:55
学习了,版主是个好人!!!
页: [1]
发布评论