【问题标题】:VHDL code for metal detector金属探测器的VHDL代码
【发布时间】:2012-06-05 13:18:43
【问题描述】:

我目前正在研究金属探测器,但不知道如何在我的 VHDL 代码中实现它。

ENTITY sensor IS

   port ( metaldetector : in std_logic;
          metal         : out std_logic;
        );
END ENTITY sensor;

只要传感器附近没有任何金属,“金属探测器”就会获得 6.1kHz 频率的脉冲。所以只要“金属探测器”不断收到脉冲,输出端口“金属”就应该是“0”。

当缺少一个脉冲(或多个脉冲)时,“金属”应变为“1”,直到下一个脉冲。

编写一个可以做到这一点的代码应该不难,但我就是想不通。任何帮助都会很棒!

【问题讨论】:

  • 到目前为止你得到了什么?一方面,如果您要测量脉冲或缺少脉冲,您还需要一个时钟输入。
  • 我不知道如何执行此操作,但您对 clk 输入的看法是正确的。
  • 我们不会为您编写所有代码 - 您需要尝试就具体问题提出具体问题。例如,对于如何找出 6.1kHz 列车是否缺少脉冲,您的第一个想法是什么?
  • @Martin 我不希望你给我写完整的代码,但我什至不知道如何开始。你能解释一下如何解决这个问题吗?如何开始?我想我们需要一个计数器,(一旦有新脉冲就会被重置。如果数字超过特定值,它应该生成一个金属 = '1'?)我真的不知道如何开始,所以任何指针都会受到赞赏。 ;)
  • 听起来你确实有一个起点:)为此编写代码(可能先在伪代码中,然后正确获取 VHDL 语法)

标签: vhdl


【解决方案1】:

在其他学生的帮助下,我们设法解决了这个问题,并进行了很多尝试。 我将在这里发布我们的解决方案,希望它对其他人有用。 :)

LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.numeric_std.ALL;

ENTITY sensor IS
     port ( metaldetector : in std_logic;
            clk : in std_logic;
            metal : out std_logic
          );
END ENTITY sensor;

ARCHITECTURE sensorbehav OF sensor IS   
    signal new_count, count: unsigned(20 downto 0);

    begin

    process (clk, metaldetector)
    begin
        if (rising_edge (clk)) then
            if (metaldetector = '1') then
                count <= (others => '0');
            else 
                count <= new_count;
      end if;
    end if;
end process;

process (count)
    begin
        new_count <= count + 1;
end process;

process (count)
    begin
    if (count > 9000) then
        metal <= '1';
    else
        metal <= '0';
    end if;
end process;
END ARCHITECTURE;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-18
    • 1970-01-01
    • 1970-01-01
    • 2019-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多