2013-05-19 3 views
1

Мы разрабатываем робот для моего университетского проекта с группой, мы - первые студенты электротехники. робот должен обнаруживать мины с помощью простого 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 вместо часов где-то, потому что если пытаться так много вещей.

оцените, если бы вы могли объяснить, что я делаю что-то неправильно.

Дэвид Кестер

+0

вы говорите «оба счетчика» ...? первый процесс не считается, не так ли? 'count <= new_count;' на самом деле ничего не увеличивает. Второй процесс вместо этого выглядит как счетчик, но на самом деле. Счетчик обычно имеет значение «a = a + 1». – Fabrizio

ответ

0

вам не нужно отделить «NEW_COUNT» материал от «подсчета» вещи ... просто объединить их в один процесс! счетчик (с синхронным сбросом) обычно выполняется следующим образом:

process (clock) 
begin 
    if rising_edge(clock) then 
     if reset='1' then 
     count <= (others => '0'); 
     else  -- or, with clock enable: elsif clock_enable='1' then 
     count <= count + 1; 
     end if; 
    end if; 
end process;