Академический Документы
Профессиональный Документы
Культура Документы
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity ncoR is
generic
(
size : integer := 20
);
port
(
clk
: in std_logic;
reset : in std_logic;
x0
y0
z0
end ncoR ;
: std_logic;
-- Component declarations
component addsubR
generic
(
size : integer := 20
);
-- Adder
port
(
dataa : in
datab : in
result : out
as
: in
std_logic
);
end component;
component anglelut
generic
(
size : integer := 20
);
port
(
index : in std_logic_vector (4 downto 0);
atan
);
end component;
component fsmR
port
(
clk : in std_logic ;
reset : in std_logic ;
start : in std_logic ;
cnt : in std_logic_vector (4 downto 0);
initial : out std_logic ;
nxt : out std_logic ;
done : out std_logic
);
end component;
component shiftR
-- Shifter
generic
(
size : integer := 20
);
port
(
data : in
sdata : out
n
);
end component;
begin
: in
std_logic_vector (4 downto 0)
process (clk,newx,newy,newz,z0,nxt,fin)
begin
if (rising_edge(clk)) then
if fin='1' then
xreg <= x0;
yreg <= y0;
zreg <= z0;
cnt<=(others=> '0');
elsif nxt='1' then
xreg <= newx;
yreg <= newy;
zreg <= newz;
cnt <= cnt + '1';
end if;
end if;
end process;
as <= yreg(size-1);
-- MSB of y register
addx : addsubR
register
-- Accumulator for x
generic map
(
size => size
)
port map
(
dataa => xreg,
datab => syreg,
result => newx,
as => as
);
addy : addsubR
register
generic map
(
size => size
)
port map
(
dataa => yreg,
datab => sxreg,
result => newy,
as => nas
);
-- Accumulator for y
addz : addsubR
register
-- Accumulator for z
generic map
(
size => size
)
port map
(
dataa => zreg,
datab => atan,
result => newz,
as => as
);
lut : anglelut
generic map
(
size => size
)
port map
(
index
=> cnt,
state_mach : fsmR
port map
(
clk => clk,
reset => reset,
start => start,
cnt => cnt,
initial => fin,
nxt => nxt,
done => done
);
shiftx : shiftR
-- Shifting x value
generic map
(
size => size
)
port map
(
data => xreg,
sdata => sxreg,
n
);
=> cnt
shifty : shiftR
-- Shifting y value
generic map
(
size => size
)
port map
(
data => yreg,
sdata => syreg,
n
=> cnt
);
end arch;
Lookup table
library IEEE;
use IEEE.Std_Logic_1164.all;
use IEEE.Std_Logic_arith.all;
entity anglelut is
generic
(
size : positive := 20
);
port
(
index
atan
);
end anglelut ;
begin
case index is
when "00000" => tinfo <= X"3243F"; -- 45
when "00001" => tinfo <= X"1DAC6"; -- 26.565
when "00010" => tinfo <= X"0FADB"; -- 14.036
when "00011" => tinfo <= X"07F56"; -- 7.125
end case;
end process;
end table;