【问题标题】:5 seconds Timer in VHDLVHDL 中的 5 秒定时器
【发布时间】:2017-05-01 20:17:57
【问题描述】:

我在 fpga 中使用 50MHz 时钟并尝试制作 5 秒计时器。低于 cnt_t 达到 5 x 50MHz (x"0EE6B280" --> 250,000,000) 然后将 time_tick_32 设为 1 并使 cnt_t

signal cnt_t    : STD_LOGIC_VECTOR(31 DOWNTO 0) := x"00000000";
signal time_tick : STD_LOGIC:= '0' ;
signal time_tick_32 : STD_LOGIC_VECTOR(31 DOWNTO 0):= x"00000000";


process (clk_50) IS
    begin
      if falling_edge(clk_50)  then
      cnt_t <= cnt_t + '1';
      end if;
    if (cnt_t = x"0EE6B280") then --if 5 seconds  
        time_tick <= '1';
        cnt_t <= x"00000000";
        time_tick_32(0)<=time_tick;
    else
        time_tick <= '0';
        time_tick_32(0)<=time_tick;
    end if;

end process;

【问题讨论】:

  • 不确定这种语言,但您确定要将您的数字与条件内的字符串进行比较吗?
  • @Gogol x"...." 是一个十六进制位串文字。所以这不是与(字符)字符串的比较。
  • 请向我们展示完整的代码。以下是一些提示: 1. 将cnt_t 的类型更改为unsignednatural。 2.你不需要32位。 3. 不要使用幻数 => 使用整数值。 (无符号类型可以与整数进行比较。)
  • @Paebbels 你说得对。但是一个整数通常仍然被认为是一个幻数(并不是说它是一个问题。)修复幻数是定义一个名为“five_second_in_50MHz”左右的常量并测试该常量。

标签: timer vhdl counter intel-fpga


【解决方案1】:

试试:

signal cnt_t    : STD_LOGIC_VECTOR(31 DOWNTO 0) := x"00000000";
signal time_tick : STD_LOGIC:= '0' ;
signal time_tick_32 : STD_LOGIC_VECTOR(31 DOWNTO 0):= x"00000000";


-- I assume you begin your architecture somewhere
-- Can make the following a concurrent statement
-- (unless it is some kind of shift reg assigned in a diff process...
-- then you will get multiple driver issues)
time_tick_32(0) <= time_tick;

process (clk_50) IS
begin
    if rising_edge(clk_50)  then -- Changed to rising_edge; 
                                -- Any particular reason you are using falling_edge?
        if (cnt_t = x"0EE6B280") then --if 5 seconds  
            time_tick <= '1';
            cnt_t <= x"00000000";
        else
            time_tick <= '0';
            cnt_t <= cnt_t + '1';  
        end if;
    end if;
end process;

【讨论】:

  • 您可以在进程外部(架构块内)分配信号,这将构成并发分配。很难确定您使用 time_tick_32 的目的是什么;只要您不将其分配给其他地方,就可以了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-14
  • 1970-01-01
  • 1970-01-01
  • 2019-05-06
相关资源
最近更新 更多