8 use ieee.std_logic_1164.
all;
9 use ieee.numeric_std.
all;
19 USE_EXTERNAL_WRITE : boolean := false;
20 N_TOBS_IN : integer := 5;
21 N_TOBS_OUT : integer := 10
26 IN_Start : in std_logic_vector(1 downto 0);
27 IN_Write : in std_logic_vector(1 downto 0);
30 OUT_Start : out std_logic;
31 OUT_Write : out std_logic;
44 constant N_TOBS : integer := N_TOBS_OUT - N_TOBS_IN;
46 signal FifoReset : std_logic;
47 signal OutWrite, OutStart : std_logic;
48 signal Done : std_logic;
49 signal WriteInt, Write0, Write1 : std_logic;
50 signal Ack : std_logic_vector(1 downto 0);
51 signal Acknowledge : std_logic := '0';
53 signal OneOrTwo : integer range 0 to 1 := 0;
54 signal TOB_Count : integer range 0 to N_TOBS_OUT-1 := 0;
55 signal Start : std_logic;
62 Start <= IN_Start(0) or IN_Start(1);
63 Write0 <= IN_Write(0) when USE_EXTERNAL_WRITE else (WriteInt or Start);
64 Write1 <= IN_Write(1) when USE_EXTERNAL_WRITE else (WriteInt or Start);
68 FASTFIFO_DATA_DEPTH => N_TOBS_OUT
)
71 IN_Reset => FifoReset,
72 IN_Data => IN_Data
(0),
74 IN_Ack => Ack
(0) and (not Done
),
80 FASTFIFO_DATA_DEPTH => N_TOBS_OUT
)
83 IN_Reset => FifoReset,
84 IN_Data => IN_Data
(1),
86 IN_Ack => Ack
(1) and (not Done
),
90 OneOrTwo <= 0 when (TOBEnergy(Data(0)) > TOBEnergy(Data(1))) else 1;
91 Done <= '1' when (unsigned(TOBEnergy(Data(0))) = 0 and unsigned(TOBEnergy(Data(1))) = 0) else '0';
92 Ack(0) <= Acknowledge when OneOrTwo = 0 else '0';
93 Ack(1) <= Acknowledge when OneOrTwo = 1 else '0';
95 delayProc :
process (clk)
is
97 if rising_edge(clk) then
98 OUT_Data <= Data(OneOrTwo);
99 OUT_Start <= OutStart;
100 OUT_Write <= (OutWrite or OutStart) and not Done;
104 CounterProc :
process (clk)
is
106 if rising_edge(clk) then
108 if TOB_Count > 0 then
109 report "Early start!" severity error;
111 if IN_Start /= "11" then
112 report "Start error: one of the 2 starts is 0!" severity error;
116 TOB_Count <= N_TOBS_OUT-1;
119 if TOB_Count > 0 then
120 TOB_Count <= TOB_Count - 1;
127 end process CounterProc;
131 WritingProc :
process(clk)
is
133 if rising_edge(clk) then
134 if TOB_Count > N_TOBS+2 or Start = '1' then
137 elsif TOB_Count < N_TOBS+2 then
144 end process WritingProc;
146 ReadingProc :
process (clk)
is
148 if rising_edge(clk) then
149 if TOB_Count > 1 or Start = '1' then
154 elsif TOB_Count > 0 then
165 end process ReadingProc;
169 end architecture str;
External data-types and functions.
array(natural range <> ) of AlgoTriggerObject AlgoTriggerObjects
Algorithm OUTPUT port.
std_logic_vector( OUT_TOB_WIDTH- 1 downto 0) AlgoTriggerObject
Algorithm Trigger Object TOB.
Fast FIFO, without control signal but with 1 clock tick i/0 delay.