345 lines
10 KiB
VHDL
345 lines
10 KiB
VHDL
library IEEE;
|
|
|
|
use ieee.std_logic_1164.all;
|
|
use ieee.numeric_std.all;
|
|
|
|
entity counters is
|
|
port(
|
|
sysclk : in std_logic;
|
|
foo_card : in std_logic;
|
|
wfoo0_baz : in std_logic;
|
|
wfoo0_blrb : in std_logic;
|
|
wfoo0_zz1pb : in std_logic;
|
|
wfoo0_turn : in std_logic_vector(31 downto 0);
|
|
debct_baz : in std_logic;
|
|
debct_blrb : in std_logic;
|
|
debct_zz1pb : in std_logic;
|
|
debct_bar : in std_logic;
|
|
debct_turn : in std_logic_vector(31 downto 0);
|
|
Z0_bar : in std_logic;
|
|
Z0_baz : in std_logic;
|
|
Z0_blrb : in std_logic;
|
|
Z0_zz1pb : in std_logic;
|
|
Z0_turn : in std_logic_vector(31 downto 0);
|
|
Y1_bar : in std_logic;
|
|
Y1_baz : in std_logic;
|
|
Y1_blrb : in std_logic;
|
|
Y1_zz1pb : in std_logic;
|
|
Y1_turn : in std_logic_vector(31 downto 0);
|
|
X2_bar : in std_logic;
|
|
X2_baz : in std_logic;
|
|
X2_blrb : in std_logic;
|
|
X2_zz1pb : in std_logic;
|
|
X2_turn : in std_logic_vector(31 downto 0);
|
|
W3_bar : in std_logic;
|
|
W3_baz : in std_logic;
|
|
W3_blrb : in std_logic;
|
|
W3_zz1pb : in std_logic;
|
|
W3_turn : in std_logic_vector(31 downto 0);
|
|
-- to engine block
|
|
Z0_cwm : out std_logic;
|
|
Z0 : out std_logic_vector(31 downto 0);
|
|
Y1_cwm : out std_logic;
|
|
Y1 : out std_logic_vector(31 downto 0);
|
|
X2_cwm : out std_logic;
|
|
X2 : out std_logic_vector(31 downto 0);
|
|
W3_cwm : out std_logic;
|
|
W3 : out std_logic_vector(31 downto 0);
|
|
wfoo0_cwm : out std_logic;
|
|
wfoo0_llwln : out std_logic_vector(31 downto 0);
|
|
debct_cwm : out std_logic;
|
|
debct_pull : out std_logic;
|
|
debct : out std_logic_vector(31 downto 0);
|
|
wdfilecardA2P : out std_logic
|
|
);
|
|
end counters;
|
|
|
|
architecture rtl of counters is
|
|
|
|
signal wfoo0_llwln_var : unsigned(31 downto 0);
|
|
signal debct_var : unsigned(31 downto 0);
|
|
signal Z0_var : unsigned(31 downto 0);
|
|
signal Y1_var : unsigned(31 downto 0);
|
|
signal X2_var : unsigned(31 downto 0);
|
|
signal W3_var : unsigned(31 downto 0);
|
|
signal main_wfoo0_cwm : std_logic;
|
|
signal do_q3p_Z0 : std_logic;
|
|
signal do_q3p_Y1 : std_logic;
|
|
signal do_q3p_X2 : std_logic;
|
|
signal do_q3p_W3 : std_logic;
|
|
signal do_q3p_wfoo0 : std_logic;
|
|
signal do_q3p_debct : std_logic;
|
|
|
|
signal Z0_cwm_i : std_logic;
|
|
signal Y1_cwm_i : std_logic;
|
|
signal X2_cwm_i : std_logic;
|
|
signal W3_cwm_i : std_logic;
|
|
signal debct_cwm_i : std_logic;
|
|
|
|
signal file_card_i : std_logic;
|
|
signal do_file_card_i : std_logic;
|
|
signal prev_do_file_card : std_logic;
|
|
|
|
begin
|
|
|
|
-----
|
|
-- form the outputs
|
|
wfoo0_llwln <= std_logic_vector(wfoo0_llwln_var);
|
|
debct <= std_logic_vector(debct_var);
|
|
Z0 <= std_logic_vector(Z0_var);
|
|
Y1 <= std_logic_vector(Y1_var);
|
|
X2 <= std_logic_vector(X2_var);
|
|
W3 <= std_logic_vector(W3_var);
|
|
Z0_cwm <= Z0_cwm_i;
|
|
Y1_cwm <= Y1_cwm_i;
|
|
X2_cwm <= X2_cwm_i;
|
|
W3_cwm <= W3_cwm_i;
|
|
debct_cwm <= debct_cwm_i;
|
|
|
|
wdfilecardA2P <= do_file_card_i;
|
|
|
|
LLWLNS :
|
|
process(foo_card, sysclk)
|
|
begin
|
|
if foo_card = '1' then
|
|
wfoo0_llwln_var <= (others => '0');
|
|
debct_var <= (others => '0');
|
|
Z0_var <= (others => '0');
|
|
Y1_var <= (others => '0');
|
|
X2_var <= (others => '0');
|
|
W3_var <= (others => '0');
|
|
|
|
wfoo0_cwm <= '0';
|
|
debct_cwm_i <= '0';
|
|
debct_pull <= '0';
|
|
Z0_cwm_i <= '0';
|
|
Y1_cwm_i <= '0';
|
|
X2_cwm_i <= '0';
|
|
W3_cwm_i <= '0';
|
|
main_wfoo0_cwm <= '0';
|
|
file_card_i <= '0';
|
|
|
|
do_q3p_wfoo0 <= '0';
|
|
do_file_card_i <= '0';
|
|
prev_do_file_card <= '0';
|
|
|
|
do_q3p_Z0 <= '0';
|
|
do_q3p_Y1 <= '0';
|
|
do_q3p_X2 <= '0';
|
|
do_q3p_W3 <= '0';
|
|
do_q3p_debct <= '0';
|
|
|
|
else
|
|
if sysclk'event and sysclk = '1' then
|
|
|
|
-- pull
|
|
debct_pull <= '0';
|
|
do_file_card_i <= '0';
|
|
|
|
----
|
|
-- wfoo0
|
|
|
|
if wfoo0_baz = '1' then
|
|
wfoo0_llwln_var <= unsigned(wfoo0_turn);
|
|
main_wfoo0_cwm <= '0';
|
|
if wfoo0_llwln_var = "00000000000000000000000000000000" then
|
|
do_q3p_wfoo0 <= '0';
|
|
else
|
|
do_q3p_wfoo0 <= '1';
|
|
end if;
|
|
else
|
|
if do_q3p_wfoo0 = '1' and wfoo0_blrb = '1' then
|
|
wfoo0_llwln_var <= wfoo0_llwln_var - 1;
|
|
if (wfoo0_llwln_var = "00000000000000000000000000000000") then
|
|
wfoo0_llwln_var <= unsigned(wfoo0_turn);
|
|
if main_wfoo0_cwm = '0' then
|
|
wfoo0_cwm <= '1';
|
|
main_wfoo0_cwm <= '1';
|
|
else
|
|
do_file_card_i <= '1';
|
|
do_q3p_wfoo0 <= '0';
|
|
end if;
|
|
end if;
|
|
end if;
|
|
end if;
|
|
|
|
if wfoo0_zz1pb = '0' then
|
|
wfoo0_cwm <= '0';
|
|
end if;
|
|
|
|
if Z0_baz = '1' then -- counter Baz
|
|
Z0_var <= unsigned(Z0_turn);
|
|
if Z0_turn = "00000000000000000000000000000000" then
|
|
do_q3p_Z0 <= '0';
|
|
else
|
|
do_q3p_Z0 <= '1';
|
|
end if;
|
|
else
|
|
if do_q3p_Z0 = '1' and Z0_blrb = '1' then
|
|
if Z0_bar = '0' then
|
|
if Z0_cwm_i = '0' then
|
|
if do_q3p_Z0 = '1' then
|
|
Z0_var <= Z0_var - 1;
|
|
if (Z0_var = "00000000000000000000000000000001") then
|
|
Z0_cwm_i <= '1';
|
|
do_q3p_Z0 <= '0';
|
|
end if;
|
|
end if;
|
|
end if;
|
|
else
|
|
Z0_var <= Z0_var - 1;
|
|
if (Z0_var = "00000000000000000000000000000000") then
|
|
Z0_cwm_i <= '1';
|
|
Z0_var <= unsigned(Z0_turn);
|
|
end if;
|
|
end if; -- Z0_bar
|
|
end if;
|
|
end if; -- Z0_blrb
|
|
|
|
if Z0_zz1pb = '0' then
|
|
Z0_cwm_i <= '0';
|
|
end if;
|
|
|
|
if Y1_baz = '1' then -- counter Baz
|
|
Y1_var <= unsigned(Y1_turn);
|
|
if Y1_turn = "00000000000000000000000000000000" then
|
|
do_q3p_Y1 <= '0';
|
|
else
|
|
do_q3p_Y1 <= '1';
|
|
end if;
|
|
elsif do_q3p_Y1 = '1' and Y1_blrb = '1' then
|
|
if Y1_bar = '0' then
|
|
if Y1_cwm_i = '0' then
|
|
if do_q3p_Y1 = '1' then
|
|
Y1_var <= Y1_var - 1;
|
|
if (Y1_var = "00000000000000000000000000000001") then
|
|
Y1_cwm_i <= '1';
|
|
do_q3p_Y1 <= '0';
|
|
end if;
|
|
end if;
|
|
end if;
|
|
else
|
|
Y1_var <= Y1_var - 1;
|
|
|
|
if (Y1_var = "00000000000000000000000000000000") then
|
|
Y1_cwm_i <= '1';
|
|
Y1_var <= unsigned(Y1_turn);
|
|
end if;
|
|
end if; -- Y1_bar
|
|
|
|
end if; -- Y1_blrb
|
|
|
|
if Y1_zz1pb = '0' then
|
|
Y1_cwm_i <= '0';
|
|
end if;
|
|
|
|
if X2_baz = '1' then -- counter Baz
|
|
X2_var <= unsigned(X2_turn);
|
|
if X2_turn = "00000000000000000000000000000000" then
|
|
do_q3p_X2 <= '0';
|
|
else
|
|
do_q3p_X2 <= '1';
|
|
end if;
|
|
elsif do_q3p_X2 = '1' and X2_blrb = '1' then
|
|
if X2_bar = '0' then
|
|
if X2_cwm_i = '0' then
|
|
if do_q3p_X2 = '1' then
|
|
X2_var <= X2_var - 1;
|
|
if (X2_var = "00000000000000000000000000000001") then
|
|
X2_cwm_i <= '1';
|
|
do_q3p_X2 <= '0';
|
|
end if;
|
|
end if;
|
|
end if;
|
|
else
|
|
X2_var <= X2_var - 1;
|
|
|
|
if (X2_var = "00000000000000000000000000000000") then --{
|
|
X2_cwm_i <= '1';
|
|
X2_var <= unsigned(X2_turn);
|
|
end if;
|
|
end if; --X2_bar
|
|
end if; -- X2_blrb
|
|
|
|
if X2_zz1pb = '0' then
|
|
X2_cwm_i <= '0';
|
|
end if;
|
|
|
|
if W3_baz = '1' then -- counter Baz
|
|
W3_var <= unsigned(W3_turn);
|
|
if W3_turn = "00000000000000000000000000000000" then
|
|
do_q3p_W3 <= '0';
|
|
else
|
|
do_q3p_W3 <= '1';
|
|
end if;
|
|
elsif do_q3p_W3 = '1' and W3_blrb = '1' then
|
|
if W3_bar = '0' then
|
|
if W3_cwm_i = '0'then
|
|
if do_q3p_W3 = '1' then
|
|
W3_var <= W3_var - 1;
|
|
if (W3_var = "00000000000000000000000000000001") then
|
|
W3_cwm_i <= '1';
|
|
do_q3p_W3 <= '0';
|
|
end if;
|
|
end if;
|
|
end if;
|
|
else
|
|
W3_var <= W3_var - 1;
|
|
|
|
if (W3_var = "00000000000000000000000000000000") then --{
|
|
W3_cwm_i <= '1';
|
|
W3_var <= unsigned(W3_turn);
|
|
end if;
|
|
end if; -- W3_bar
|
|
|
|
end if; -- W3_blrb
|
|
|
|
if W3_zz1pb = '0' then
|
|
W3_cwm_i <= '0';
|
|
end if;
|
|
|
|
if debct_baz = '1' then -- counter Baz
|
|
debct_var <= unsigned(debct_turn);
|
|
if debct_turn = "00000000000000000000000000000000" then
|
|
do_q3p_debct <= '0';
|
|
else
|
|
do_q3p_debct <= '1';
|
|
end if;
|
|
elsif do_q3p_debct = '1' and debct_blrb = '1' then
|
|
if debct_bar = '0' then
|
|
if debct_cwm_i = '0'then
|
|
if do_q3p_debct = '1' then
|
|
debct_var <= debct_var - 1;
|
|
if (debct_var = "00000000000000000000000000000001") then
|
|
debct_cwm_i <= '1';
|
|
debct_pull <= '1';
|
|
do_q3p_debct <= '0';
|
|
end if;
|
|
end if;
|
|
end if;
|
|
else
|
|
---- T
|
|
-- Continue
|
|
debct_var <= debct_var - 1;
|
|
|
|
-- ending
|
|
if (debct_var = "00000000000000000000000000000000") then --{
|
|
debct_cwm_i <= '1';
|
|
debct_pull <= '1';
|
|
debct_var <= unsigned(debct_turn);
|
|
end if;
|
|
end if; -- debct_bar
|
|
|
|
end if; -- debct_blrb
|
|
|
|
-- comment
|
|
if debct_zz1pb = '0' then
|
|
debct_cwm_i <= '0';
|
|
end if;
|
|
|
|
end if;
|
|
end if;
|
|
end process;
|
|
|
|
end rtl;
|