LIBRARY IEEE;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_arith.ALL;
USE IEEE.Std_logic_unsigned.ALL;
Entity part1 is
Port
(
busy : IN std_logic;
data_ad : in STD_LOGIC_VECTOR(15 DOWNTO 0);
data : out STD_LOGIC_VECTOR(15 DOWNTO 0)
);
end part1;
architecture rtl of part1 is
signal q1 : STD_LOGIC_VECTOR(15 DOWNTO 0) ;
signal q3 : STD_LOGIC_VECTOR(19 DOWNTO 0) :="00000000000000000000" ;
signal q4 : STD_LOGIC_VECTOR(19 DOWNTO 0) :="00000000000000000000" ;
signal q5 : STD_LOGIC_VECTOR(19 DOWNTO 0) :="00000000000000000000" ;
signal q6 : STD_LOGIC_VECTOR(19 DOWNTO 0) ;
constant a3 : STD_LOGIC_VECTOR(19 DOWNTO 0) :="00100000000000000100"; -- -917500的二进制补码;
constant m : time := 1 us ;
begin
process (busy)
variable q2 : STD_LOGIC_VECTOR(15 DOWNTO 0) ;
begin
if (busy'event and busy ='1') then
q1 <= data_ad after m;
if (q1 < "1000111101011100") then
q2(15 DOWNTO 0) := "0000000000000000";
elsif (q1> "1010001111010110") then
q2(15 DOWNTO 0) := "1111111111111110";
else -- 数值范围变换;
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+a3;
q2(15 DOWNTO 0) := q6(16 DOWNTO 1); -- 右移一位;
end if;
end if;
data <= q2(15 DOWNTO 0);
end process;
end rtl;
---------------------------------------------------------------------------------------------------------------------
编译已能通过,你自己看看改了哪些吧!
发表时间:2004年7月27日9:35:17