Мы разрабатываем робот для моего университетского проекта с группой, мы - первые студенты электротехники. робот должен обнаруживать мины с помощью простого LC-осциллятора в компараторе. выход этой схемы является блочной волной, так что наш FPGA может рассчитывать до определенного числа, а затем сравнивать с заранее определенным числом, чтобы увидеть, есть ли какое-либо изменение частоты генератора (что означает, что есть металлический объект под сенсором). Я написал это, но он швы, что восходящий_сигнал (датчик) не работает, не понимаю, потому что оба счетчика практически одинаковы. сущность часов точно такая же, но с часами в качестве входных данных.сравнить два тактовых сигнала
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
use IEEE.numeric_std.all;
entity metaal_detector is
port(
sensor, reset: in std_logic;
sensor_out: out std_logic_vector(10 downto 0)
);
end entity metaal_detector;
architecture behavioural of metaal_detector is
signal count, new_count : unsigned (10 downto 0);
begin
process (sensor)
begin
if (rising_edge (sensor)) then
if (reset = '1') then
count <= (others => '0'); -- zet op 0 bij reset
else
count <= new_count;
end if;
end if;
end process;
process (count)
begin
new_count <= count + 1;
end process;
sensor_out <= std_logic_vector (count);
end architecture behavioural;
это мой испытательный стенд:
library IEEE;
use IEEE.std_logic_1164.all;
entity testbench is
end entity testbench;
architecture test of testbench is
component sensor_control is
port(
clk, reset, sensor: in std_logic;
metaal: out std_logic;
reset_teller: out std_logic
);
end component;
component counter is
port(
clk, reset: in std_logic;
count_out: out std_logic_vector(10 downto 0)
);
end component;
component metaal_detector is
port(
sensor, reset: in std_logic;
sensor_out: out std_logic_vector(10 downto 0)
);
end component;
signal sensor, clock, reset, metaal, reset_teller: std_logic;
signal count1, sensor1: std_logic_vector(10 downto 0);
begin
clock <= '1' after 0 ns,
'0' after 10 ns when clock /= '0' else '1' after 10 ns;
reset <= '1' after 0 ns,
'0' after 35 ns;
sensor <= '1' after 0 ns,
'0' after 30 ns when sensor /= '0' else '1' after 30 ns;
lblb0: sensor_control port map (clock, reset, sensor, metaal, reset_teller);
lbl0: counter port map(clock, reset_teller, count1);
lbl1: metaal_detector port map(sensor, reset_teller, sensor1);
end architecture test;
, если я использую CLK вместо часов где-то, потому что если пытаться так много вещей.
оцените, если бы вы могли объяснить, что я делаю что-то неправильно.
Дэвид Кестер
вы говорите «оба счетчика» ...? первый процесс не считается, не так ли? 'count <= new_count;' на самом деле ничего не увеличивает. Второй процесс вместо этого выглядит как счетчик, но на самом деле. Счетчик обычно имеет значение «a = a + 1». – Fabrizio