VHDL对时钟的误解

时间:2013-05-29 12:53:22

标签: vhdl

我对我的VHDL代码有疑问。该代码适用于能够检测矿井的机器人。这段代码是这个特定探雷器的代码。 teller_sensor进程无效。我知道,因为它将在FPGA芯片上编程,所以你只能有一个时钟。但我不知道如何使这个过程发挥作用。我希望你们愿意帮助我:)。

罗伯特

以下是代码:

LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
use IEEE.numeric_std.all;
library ieee; use ieee.numeric_std.all;

entity metaal_detector is
port (clk    : in std_logic;
      sensor : in std_logic;
      reset  : in std_logic;
      metaal : out std_logic
);
end entity metaal_detector;

architecture behavioural of metaal_detector is
signal count, count_sensor, stand, clock1, sensor1, stand1 : unsigned (10 downto 0);
signal reset_teller, resets, metaals: std_logic;

begin

teller_clk: process (clk)
begin
if rising_edge(clk) then
  if ((reset ='1') or (resets = '1')) then
    count <= (others => '0');
  else
    count <= count + 1;
  end if;
end if;
end process;


teller_sensor: process (sensor)
begin
if rising_edge(clk) then
  if ((reset ='1') or (resets = '1')) then
    count_sensor <= (others => '0');
  else
    if (sensor'event and sensor='1') then
      count_sensor <= count_sensor + 1;
    end if;
  end if;
end if;
end process;


process(clk)
begin
if (unsigned(clock1) = 71) then
  stand <= clock1;
  reset_teller <= '1';
else
  reset_teller <= '0';
  stand <= stand;
end if;
end process;

process(clk)
begin
if (unsigned(stand1) < 70) then
  metaals <= '1';
else
  metaals <= '0';
end if;
end process;


clock1 <= count;
sensor1 <= count_sensor;
stand1 <= stand;
resets <= reset_teller;
metaal <= metaals;

end architecture behavioural;

1 个答案:

答案 0 :(得分:1)

在流程顶部指定clk而不是传感器。然后对传感器的状态进行采样,也就是说在感兴趣的时钟边缘。

这种方法并非没有理论问题(亚稳态,抽样理论),但它可能会让你走上一定程度的功能。

现在没有任何事情发生,因为它只有在传感器的变化触发过程的同时碰巧出现clk的上升沿时才会发生。在硬件中很少见(并且在边缘检测器是时钟输入的一部分的典型块中无法实现) - 在模拟中很可能(您必须阅读详细的语言和模拟器规则)但无论如何都不能它会做你需要的。