所有Spartan和Virtex FPGA都是基于SRAM的。
它们在上电后配置
使用ISE工具生成的比特流。
该比特流包括初始化数据
部分中的每个触发器和RAM位。
因此,实际上所有触发器都会在“通电”时复位
您认为配置过程是“开机”。
没有重置时ISE的默认操作
指定是在比特流中将触发器初始化为零。
那里的默认动作
指定的复位(异步或同步)是将触发器初始化为
重置源代码中指定的状态。
例如,如果你想要一个触发器
在初始化之后,你需要以某种方式指定。
最简单的方法
是给它一个重置。
在代码中省略重置的一个大问题是模拟器不会
假设在模拟开始时触发器为零。
所以在这种情况下模拟
与硬件不匹配。
通常我会在模块中添加一个异步复位输入
用于模拟,但是当我实例化模块时,只需将其降低。
这适合一对
目的。
首先,在源代码中拼写出每个触发器的复位状态
因此比特流将触发器初始化为指定的值
启动。
其次,它为我提供了一种通过添加短重置来正确模拟的方法
在我的测试平台中脉冲。
HTH,
的Gabor
- Gabor
以上来自于谷歌翻译
以下为原文
All Spartan and Virtex FPGA's are SRAM-based. They are configured after power-on from
a bitstream you generate with the ISE tools. This bitstream includes initialization data for
every flip-flop and RAM bit in the part. So in effect all flip-flops are reset at "power on" if
you think of the configuration process as "power on". The default action for ISE when no reset
is specified is to initialize the flip-flop to zero in the bitstream. The default action when there
is a reset specified (asynchronous or synchronous) is to initialize the flip-flop to the
reset state as specified in the source code. So for example if you want a flip-flop to
be "1" after initialization you would need to specify that somehow. The simplest way
is to give it a reset.
One big problem with leaving out reset in your code is that the simulator will not
assume flip-flops to be zero at the start of simulation. So in this case the simulation
will not match the hardware. Often I add an asynchonous reset input to my modules
for simulation but then just tie it low when I instantiate the module. This serves a couple
of purposes. First, the reset state of each flip-flop is spelled out in the source code
and therefore the bitstream will initialize the flip-flops to the specified value on
start-up. Second, it gives me a way to simulate correctly by adding a short reset
pulse in my testbench.
HTH,
Gabor
-- Gabor