library IEEE;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_arith.ALL;
use IEEE.Std_logic_unsigned.all;
Entity part11 is
Port( clk : IN std_logic;
data_in: in STD_LOGIC_VECTOR(15 DOWNTO 0);
data_out : out STD_LOGIC_VECTOR(15 DOWNTO 0));
end part11;
architecture rtl of part11 is
begin
process (clk)
variable q1 : STD_LOGIC_VECTOR(15 DOWNTO 0) ;
variable q2 : STD_LOGIC_VECTOR(15 DOWNTO 0);
variable q3 : STD_LOGIC_VECTOR(19 DOWNTO 0):="00000000000000000000";
variable q4 : STD_LOGIC_VECTOR(19 DOWNTO 0):="00000000000000000000";
variable q5 : STD_LOGIC_VECTOR(19 DOWNTO 0):="00000000000000000000";
variable q6 : STD_LOGIC_VECTOR(19 DOWNTO 0) ;
begin
if(clk'event and clk ='0')then
q1:= data_in ;
if(q1 < "1000111101011100")then --输入q1值小于8f5c,输出为0000;
q2(15 DOWNTO 0):="0000000000000000";
elsif(q1> "1010001111010110")then --输入q1值大于A3D6,输出为3FFE;
q2(15 DOWNTO 0):="0011111111111110";
else
--数值变换,8y=25x-917500,x为输出值(8F5C --- A3D6),y为变换后的值(0000 -- 3FFE);
q3(15 DOWNTO 0):=q1;
q4(19 DOWNTO 4):=q3(15 DOWNTO 0); -- 左移四位;
q5(18 DOWNTO 3):=q3(15 DOWNTO 0); --左移三位;
q6:=q3+q4+q5+"00100000000000000100"; --25x-917500;
q2(15 DOWNTO 0):= q6(18 DOWNTO 3); --右移三位;
end if;
data_out <= q2(15 DOWNTO 0);
end if;
end process;
end rtl;