综合:在FPGA上电时使用计数器实现延迟信号

时间:2014-12-02 16:27:48

标签: vhdl fpga

我试图在FPGA上电时延迟20秒。

有一个100Hz的时钟输入,所以如果一个计数器达到20,000,那应该是20秒的延迟。延迟后,应将输出引脚设置为高电平。但是,出于某种原因,这个输出引脚立即变高,并且在上电时根本不会变低。它几乎就像完全跳过s_count< = 20000一样。

这是我的代码:

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增加到最大整数值,只是为了查看我的时钟是否不正确但结果相同。

顶级文件中没有此信号的其他驱动程序。

任何人都能看到我做错了什么?

2 个答案:

答案 0 :(得分:2)

出于某种原因,通过声明设置初始值似乎是这个FPGA /工具集(概要Synplify和FPGA是Actel A3PN250)的问题,即使它在modelsim仿真中有效。

以下代码可以满足我的需求 - 在FPGA打开20秒后将输出设置为高电平:

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity delay is
port 
(
    pi_Clock      : in std_logic;
    pi_Reset      : in std_logic;
    po_Delay_Done : out std_logic
);
end entity;

architecture behavioral of delay is

begin

    process(pi_Clock)
        variable s_count: integer;
    begin
        if rising_edge(pi_Clock) then
            if pi_Reset = '1' then
                s_count := 0;
                po_Delay_Done <= '0';
            else            
                if s_count < 2000 then           
                    s_count := s_count + 1;             
                else
                    po_Delay_Done <= '1';                   
                end if;
            end if;
        end if;      
    end process;    
end architecture;

问题在于,微控制器现在在FPGA启动后向FPGA发送复位信号(pi_Reset ='1')。

希望这对未来的任何人都有帮助,感谢Quantum Ripple和Brian特别建议硬重置。如果你有答案我会接受它。

答案 1 :(得分:0)

您输入的代码没有模拟或综合错误,并且在modelsim仿真软件中具有正确的结果。 (根据上面的第一条评论“fru1tbat”)

关于上述评论,我认为如果您正确合成FPGA板并且设计不起作用(应用复位端口来复位输出和可变参数),则问题与时钟发生器有关。确保时钟发生器并找到正确的频率。