【问题标题】:VHDL Clock problem while creating modulo 16 counter创建模16计数器时出现VHDL时钟问题
【发布时间】:2018-09-23 17:19:55
【问题描述】:

我使用 basys3 板创建了这个简单的 mod16 计数器,但我的时钟出现了问题。代码本身确实有效,但是一个计数(从“1”变为“2”等)持续 40 秒,而不是 1 秒!我试图将“clk_vector” if 条件降低到 1,但它也没有帮助。

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

entity mod_16_k is
    Port ( switch : in STD_LOGIC_VECTOR (3 downto 0);
           CLK1 : in STD_LOGIC;
           reset : in STD_LOGIC;
           led : out STD_LOGIC_VECTOR (15 downto 0));
end mod_16_k;
architecture Behavioral of mod_16_k is

signal      clk_vector   :integer;
signal      clk_vec2      :std_logic_vector(15 downto 0); 

begin
zegar_wew : process(CLK1)
begin

if(CLK1'event and CLK1 = '1')  then
    clk_vector <= clk_vector + 1;
        if(clk_vector = 100000000) then
            clk_vec2 <= std_logic_vector(unsigned(clk_vec2)  + 1);
        end if;
end if;
end process;
led <= clk_vec2;
end Behavioral;

时钟的 .XDC 线是:

如果我们查看 basys3 数据表,时钟连接到“W5”端口。

你有什么想法,这里可能是什么问题?它可能与检测 clk 的上升沿有关,但是所有的变化(从 1 到 2 等)都会持续约 40 秒。

【问题讨论】:

  • 检查这部分“开始 zegar_wew : process(CLK1) begin”。哪个引脚是您的内部时钟?
  • W5 就像第二张照片中的一样
  • 查看此示例,您需要分配 PIN 和 OUT,fpga4student.com/2017/08/…,您的变量“zegar_wew”已分配但什么也不做。
  • 我的意思是..“zegar_wew”是一个进程的名称,主要参数是 CLK1,它是 std_logic 类型的变量。我正在检查进程参数的上升沿,如果它是真的,那么我正在研究在架构中创建的信号。我真的不明白你所说的“分配但什么都不做”是什么意思
  • 2^^32 = 4294967296 个值,除以每秒 100,000,000 个时钟,在识别单个值时每 42.9 秒为您提供一个事件。使用周期为 1 秒的计数器。

标签: vhdl vivado


【解决方案1】:

这是因为您忘记在达到 1 秒后重置 clk_vector。因为是整数,所以是 32 位,所以会计算 2^32 而不是 100000000。

这应该可行:

If(CLK1'event and CLK1 = '1')  then
        if(clk_vector = 100000000-1) then
            clk_vector <= 0;
            clk_vec2 <= std_logic_vector(unsigned(clk_vec2)  + 1);
        else
                clk_vector <= clk_vector + 1;
        end if;
end if;

另外,请注意,要计数 1 秒,您需要数到 100000000-1,我们从零开始计数!

【讨论】:

  • 我在这里错了吗? vivado 应该削减所有超出提供范围的数据。
  • 是的,但是您的代码中没有说 not 使用 32 位,您是在对特定值进行比较。你应该用signal clk_vector : integer range 0 to 100000000-1; 约束你的整数。即使这样,它也不会计数到 100000000-1,而是到 2 的下一次幂,因为其他位将被 Vivado 丢弃。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-04
  • 2022-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-06
  • 1970-01-01
相关资源
最近更新 更多