【发布时间】: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的类型更改为unsigned或natural。 2.你不需要32位。 3. 不要使用幻数 => 使用整数值。 (无符号类型可以与整数进行比较。) -
@Paebbels 你说得对。但是一个整数通常仍然被认为是一个幻数(并不是说它是一个问题。)修复幻数是定义一个名为“five_second_in_50MHz”左右的常量并测试该常量。
标签: timer vhdl counter intel-fpga