|
|
- library ieee;
- use ieee.std_logic_1164.all;
- use ieee.numeric_std.all;
-
-
- entity firo is
- generic (
- TOGGLE : boolean := true
- );
- port (
- frun_i : in std_logic;
- fdata_o : out std_logic
- );
- end entity firo;
-
-
- architecture rtl of firo is
-
- -- signal for inverter loop
- signal s_ring : std_logic_vector(15 downto 0);
- signal s_tff : std_logic;
-
- -- attributes for synplify synthesis tool to preserve inverter loop
- attribute syn_keep : boolean;
- attribute syn_hier : string;
- attribute syn_hier of rtl : architecture is "hard";
- attribute syn_keep of s_ring : signal is true;
- attribute syn_keep of s_tff : signal is true;
-
- begin
-
- firoring : for index in 1 to 15 generate
- s_ring(index) <= not(s_ring(index - 1));
- end generate;
-
- s_ring(0) <= (s_ring(15) xor s_ring(14) xor s_ring(7) xor s_ring(6) xor s_ring(5) xor s_ring(4) xor s_ring(2)) and frun_i;
-
- with_toggle : if TOGGLE generate
- tffP : process(frun_i, s_ring(15)) is
- begin
- if (not frun_i) then
- s_tff <= '0';
- elsif (rising_edge(s_ring(15))) then
- s_tff <= not s_tff;
- end if;
- end process tffP;
- fdata_o <= s_ring(15) xor s_tff;
- else generate
- fdata_o <= s_ring(15);
- end generate;
-
-
- end architecture rtl;
|