【发布时间】:2014-12-03 01:47:36
【问题描述】:
我试图在 FPGA 上电时延迟 20 秒。
有一个 100Hz 的时钟输入,所以如果计数器达到 20,000,那应该是 20 秒的延迟。延迟后,它应该将输出引脚设置为高电平。然而,由于某种原因,这个输出引脚会立即变高,并且在上电时根本不会变低。就好像它完全跳过了 s_count
这是我的代码:
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity delay is
port
(
pi_Clock : in std_logic;
po_Delay_Done : out std_logic
);
end entity;
architecture behavioral of delay is
begin
process(pi_Clock)
variable s_count : integer := 0;
begin
if rising_edge(pi_Clock) then
if s_count <= 20000 then
s_count := s_count + 1;
po_Delay_Done <= '0';
else
po_Delay_Done <= '1';
end if;
end if;
end process;
end architecture;
我已将 20000 增加到最大整数值,只是为了查看我的时钟是否不正确但结果相同。
顶层文件中没有此信号的其他驱动程序。
有人知道我做错了吗?
【问题讨论】:
-
20,000 @ 100Hz = 200 秒,而不是 20 秒。您还可以尝试每 N 个周期切换一次(根据需要而变化),看看您是否可以在该输出上生成任何活动。
-
啊,是的,感谢您指出这一点。我已经确认我可以用时钟周期切换它,因此该变量必须正确递增。也许合成错误地优化了我的信号分配,因为计数从未重置为零?
-
你在模拟中试过了吗?直接进行综合可能会遇到引脚映射问题。一些其他的尝试:为输出设置一个默认值以设置初始状态,添加一个重置(即使你不使用它),确保你的 pi_Clock 在上电时没有表现异常(高频输入尖峰)起来。
-
另外,请提及这是哪个合成工具和 FPGA。仍然有可能某些工具不支持变量的初始值,并期望进行传统的重置。
-
我还没有在模拟中尝试过这个。我很尴尬地说我还没有弄清楚如何使用这个工具集来使用 sim,我只是在使用示波器来查看输出引脚。合成器工具是 Synopsis Synplify,FPGA 是 Actel A3PN250。我会尝试你的建议。