我对我的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;
答案 0 :(得分:1)
在流程顶部指定clk而不是传感器。然后对传感器的状态进行采样,也就是说在感兴趣的时钟边缘。
这种方法并非没有理论问题(亚稳态,抽样理论),但它可能会让你走上一定程度的功能。
现在没有任何事情发生,因为它只有在传感器的变化触发过程的同时碰巧出现clk的上升沿时才会发生。在硬件中很少见(并且在边缘检测器是时钟输入的一部分的典型块中无法实现) - 在模拟中很可能(您必须阅读详细的语言和模拟器规则)但无论如何都不能它会做你需要的。