繁体   English   中英

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

[英]Synthesis: Implementing a delay signal using a counter on power-up of 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增加到最大整数值,只是为了查看我的时钟是否不正确但结果相同。

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

有人看到我在做什么错吗?

由于某种原因,即使通过模型声明仿真工作,该FPGA /工具集(概要Synplify和FPGA是Actel A3PN250)也可能是通过声明设置初始值的问题。

以下代码实现了我想要的-在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发送复位信号(pi_Reset ='1')。

希望这对将来的任何人有帮助,这要归功于Quantum Ripple和Brian提出的硬重置建议。 如果您有答案,我会接受。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM