library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_signed.all; entity Speed is port(reset, start, clk : in std_logic; --清零、起步和时钟(时钟每秒来一次) sp : in std_logic_vector(2 downto 0); --速度 clkout : out std_logic); --每100m输出一个信号 end entity Speed; architecture bhv of Speed is variable kinside : std_logic_vector(2 downto 0); variable cnt : std_logic_vector(2 downto 0); begin process(reset, start, clk, sp) begin cnt := "000"; clkout <= '0'; if reset = '0' then --判断是否清零 if start = '1' then --判断是否上车 clkout <= '0'; if sp /= "000" then --判断速度是否为零 kinside := 100 / sp; if cnt /= kinside then --判断是否到达100m(即输出一个clkout) if clk'event and clk = '1' then cnt := cnt + 1; end if; else clkout <= '1'; cnt := "000"; end if; else clkout <= '0'; end if; else clkout <= '0'; cnt := "000"; end if; else cnt := "000"; clkout <= '0'; end if; end process; end architecture bhv;
时间: 2024-03-07 07:52:09 浏览: 81
PID.rar_PID控制IEEE文章_VHDL PID_logic_pid vhdl
这段代码的作用是实现一个测量车速的模块,通过输入速度信号 sp 和时钟信号 clk,每100米输出一个时钟信号 clkout。同时,模块还包含清零信号 reset 和起步信号 start,用于控制测量过程的启动和停止。
在代码中,使用了 std_logic_1164、std_logic_unsigned 和 std_logic_signed 这三个库。在 process 进程中,使用了变量 kinside 和 cnt,用于记录车行驶的距离和已经输出的 clkout 个数。在每次时钟信号上升沿时,判断是否已经行驶100米,如果是,则输出一个时钟信号 clkout,并将 cnt 清零。如果速度为零,则不输出时钟信号。当接收到清零信号 reset 时,cnt 和 clkout 均被清零。
阅读全文