介绍
我们要实现的连0检测器是指,一串二进制数据从高位开始到第一个变成1中间连0的个数。
设计文件
library ieee;
use ieee.std_logic_1164.all;
entity zeros is
generic(n : integer := 16);
port( inp : in std_logic_vector(n-1 downto 0);
outp : out integer range 0 to n);
end zeros;
architecture zeros of zeros is
begin
process(inp)
variable count : integer range 0 to n;
begin
count := 0;
for i in inp'range loop
case inp(i) is
when '0' => count := count + 1;
when others => exit;
end case;
end loop;
outp <= count;
end process;
end architecture;
测试文件
library ieee;
use ieee.std_logic_1164.all;
entity tb_zeros is
generic(n : integer := 16);
end entity;
architecture zeros of tb_zeros is
component zeros is
port( inp : in std_logic_vector(n-1 downto 0);
outp : out integer range 0 to n);
end component;
signal inp : std_logic_vector(n-1 downto 0);
signal outp : integer range 0 to n;
begin
dut : zeros
port map(inp,outp);
process
begin
inp <= "0000001110000010";
wait for 20ns;
inp <= "0000000010000010";
wait for 20ns;
end process;
end architecture;
仿真结果
从仿真结果中可以看出,我们可以检测到一串数据从开始连0的个数。通过改变n的大小就可以检测不同长度的二进制数据连0的个数了。
结语
有什么问题大家留言哈。