-- ======================================================================= -- Author: Antonio Esteves, GEC-DI-UM. -- File: fsm.vhd -- Date: 12 August 2000 -- -- FSM THAT CONTROLS THE EXECUTION OF THE PART ALLOCATED TO EACH -- FPGA ON THE HW/SW IMPLEMENTATION OF THE CONVOLUTION. -- ======================================================================= library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; use IEEE.std_logic_unsigned.all; entity fsm is port ( clk : in STD_LOGIC; reset_ff : in STD_LOGIC; start_fsm : in STD_LOGIC; read_done : in STD_LOGIC; write_done : in STD_LOGIC; written3l : in STD_LOGIC; wr_finished : in STD_LOGIC; counting_l : in STD_LOGIC; counting_c : in STD_LOGIC; counting_ml : in STD_LOGIC; counting_mc : in STD_LOGIC; rst_a3l : out STD_LOGIC; rst_cdone_max_min : out STD_LOGIC; rst_cdonel : out STD_LOGIC; rst_1ptcontrib : out STD_LOGIC; set_cdone : out STD_LOGIC; set_a3l : out STD_LOGIC; set_cdonel : out STD_LOGIC; load_line : out STD_LOGIC; load_column : out STD_LOGIC; load_mline : out STD_LOGIC; load_mcolumn : out STD_LOGIC; clk_line : out STD_LOGIC; clk_column : out STD_LOGIC; clk_mline : out STD_LOGIC; clk_mcolumn : out STD_LOGIC; we_store1pt : out STD_LOGIC; ce_s1_m1_m2 : out STD_LOGIC; ce_a1_a2 : out STD_LOGIC; ce_add3 : out STD_LOGIC; ce_mult3 : out STD_LOGIC; ce_add4 : out STD_LOGIC; ce_1ptcontrib : out STD_LOGIC ); end; architecture fsm_arch of fsm is -- symbolic encoded state machine: fsm_state type fsm_state_type is ( inic_vars, wait_read, inic_line, inic_line2, convol_end, convol_end2, wait_write, wait_restart, cmp_line, set_accept3l, wait_written3l, inic_column, inic_column2, conv_1l_end, conv_1l_end2, wait_save1l, clear_cdonel, inc_line, cmp_column, inic_1ptcontrib, inic_linesMask, inic_linesMask2, store1pt, inc_column, cmp_linesMask, inc_linesMask, inic_colMask, inic_colMask2, cmp_colMask, inc_colMask, calc1_A, calc1_B, calc2_A, calc2_B, calc3_A, calc3_B, calc4, calc5_A, calc5_B, calc5_C, calc6_A, calc6_B, calc6_C, calc7_A, calc7_B ); signal fsm_state: fsm_state_type; begin finite_state_machine: process (clk, reset_ff) begin if reset_ff='1' then fsm_state <= wait_restart; elsif clk'event and clk='1' then case fsm_state is -- ------------------------------------------- when inic_vars => rst_cdonel <= '1' ; rst_a3l <= '1' ; rst_cdone_max_min <= '1' ; rst_1ptcontrib <= '0' ; set_cdone <= '0' ; set_a3l <= '0' ; set_cdonel <= '0' ; load_line <= '0' ; load_column <= '0' ; load_mline <= '0' ; load_mcolumn <= '0' ; clk_line <= '0' ; clk_column <= '0' ; clk_mline <= '0' ; clk_mcolumn <= '0' ; we_store1pt <= '0' ; ce_s1_m1_m2 <= '0' ; ce_a1_a2 <= '0' ; ce_add3 <= '0' ; ce_mult3 <= '0' ; ce_add4 <= '0' ; ce_1ptcontrib <= '0' ; fsm_state <= wait_read; when wait_read => rst_a3l <= '0' ; rst_cdone_max_min <= '0' ; rst_cdonel <= '0' ; rst_1ptcontrib <= '0' ; set_cdone <= '0' ; set_a3l <= '0' ; set_cdonel <= '0' ; load_line <= '0' ; load_column <= '0' ; load_mline <= '0' ; load_mcolumn <= '0' ; clk_line <= '0' ; clk_column <= '0' ; clk_mline <= '0' ; clk_mcolumn <= '0' ; we_store1pt <= '0' ; ce_s1_m1_m2 <= '0' ; ce_a1_a2 <= '0' ; ce_add3 <= '0' ; ce_mult3 <= '0' ; ce_add4 <= '0' ; ce_1ptcontrib <= '0' ; if read_done='0' then fsm_state <= wait_read; elsif read_done='1' then fsm_state <= inic_line; end if; when inic_line => load_line <= '1' ; rst_a3l <= '0' ; rst_cdone_max_min <= '0' ; rst_cdonel <= '0' ; rst_1ptcontrib <= '0' ; set_cdone <= '0' ; set_a3l <= '0' ; set_cdonel <= '0' ; load_column <= '0' ; load_mline <= '0' ; load_mcolumn <= '0' ; clk_line <= '0' ; clk_column <= '0' ; clk_mline <= '0' ; clk_mcolumn <= '0' ; we_store1pt <= '0' ; ce_s1_m1_m2 <= '0' ; ce_a1_a2 <= '0' ; ce_add3 <= '0' ; ce_mult3 <= '0' ; ce_add4 <= '0' ; ce_1ptcontrib <= '0' ; fsm_state <= inic_line2; when inic_line2 => load_line <= '1' ; clk_line <= '1' ; rst_a3l <= '0' ; rst_cdone_max_min <= '0' ; rst_cdonel <= '0' ; rst_1ptcontrib <= '0' ; set_cdone <= '0' ; set_a3l <= '0' ; set_cdonel <= '0' ; load_column <= '0' ; load_mline <= '0' ; load_mcolumn <= '0' ; clk_column <= '0' ; clk_mline <= '0' ; clk_mcolumn <= '0' ; we_store1pt <= '0' ; ce_s1_m1_m2 <= '0' ; ce_a1_a2 <= '0' ; ce_add3 <= '0' ; ce_mult3 <= '0' ; ce_add4 <= '0' ; ce_1ptcontrib <= '0' ; fsm_state <= cmp_line; when convol_end => set_cdone <= '1' ; rst_a3l <= '0' ; rst_cdone_max_min <= '0' ; rst_cdonel <= '0' ; rst_1ptcontrib <= '0' ; set_a3l <= '0' ; set_cdonel <= '0' ; load_line <= '0' ; load_column <= '0' ; load_mline <= '0' ; load_mcolumn <= '0' ; clk_line <= '0' ; clk_column <= '0' ; clk_mline <= '0' ; clk_mcolumn <= '0' ; we_store1pt <= '0' ; ce_s1_m1_m2 <= '0' ; ce_a1_a2 <= '0' ; ce_add3 <= '0' ; ce_mult3 <= '0' ; ce_add4 <= '0' ; ce_1ptcontrib <= '0' ; fsm_state <= convol_end2; when convol_end2 => set_cdone <= '1' ; rst_a3l <= '0' ; rst_cdone_max_min <= '0' ; rst_cdonel <= '0' ; rst_1ptcontrib <= '0' ; set_a3l <= '0' ; set_cdonel <= '0' ; load_line <= '0' ; load_column <= '0' ; load_mline <= '0' ; load_mcolumn <= '0' ; clk_line <= '0' ; clk_column <= '0' ; clk_mline <= '0' ; clk_mcolumn <= '0' ; we_store1pt <= '0' ; ce_s1_m1_m2 <= '0' ; ce_a1_a2 <= '0' ; ce_add3 <= '0' ; ce_mult3 <= '0' ; ce_add4 <= '0' ; ce_1ptcontrib <= '0' ; fsm_state <= wait_write; when wait_write => rst_a3l <= '0' ; rst_cdone_max_min <= '0' ; rst_cdonel <= '0' ; rst_1ptcontrib <= '0' ; set_cdone <= '0' ; set_a3l <= '0' ; set_cdonel <= '0' ; load_line <= '0' ; load_column <= '0' ; load_mline <= '0' ; load_mcolumn <= '0' ; clk_line <= '0' ; clk_column <= '0' ; clk_mline <= '0' ; clk_mcolumn <= '0' ; we_store1pt <= '0' ; ce_s1_m1_m2 <= '0' ; ce_a1_a2 <= '0' ; ce_add3 <= '0' ; ce_mult3 <= '0' ; ce_add4 <= '0' ; ce_1ptcontrib <= '0' ; if write_done <= '1' then fsm_state <= wait_restart; elsif write_done='0' then fsm_state <= wait_write; end if; when wait_restart => rst_a3l <= '0' ; rst_cdone_max_min <= '0' ; rst_cdonel <= '0' ; rst_1ptcontrib <= '0' ; set_cdone <= '0' ; set_a3l <= '0' ; set_cdonel <= '0' ; load_line <= '0' ; load_column <= '0' ; load_mline <= '0' ; load_mcolumn <= '0' ; clk_line <= '0' ; clk_column <= '0' ; clk_mline <= '0' ; clk_mcolumn <= '0' ; we_store1pt <= '0' ; ce_s1_m1_m2 <= '0' ; ce_a1_a2 <= '0' ; ce_add3 <= '0' ; ce_mult3 <= '0' ; ce_add4 <= '0' ; ce_1ptcontrib <= '0' ; if start_fsm='1' then fsm_state <= inic_vars; elsif start_fsm='0' then fsm_state <= wait_restart; end if; -- ------------------------------------------- -- SUB-FSM lines -- ------------------------------------------- when cmp_line => rst_a3l <= '0' ; rst_cdone_max_min <= '0' ; rst_cdonel <= '0' ; rst_1ptcontrib <= '0' ; set_cdone <= '0' ; set_a3l <= '0' ; set_cdonel <= '0' ; load_line <= '0' ; load_column <= '0' ; load_mline <= '0' ; load_mcolumn <= '0' ; clk_line <= '0' ; clk_column <= '0' ; clk_mline <= '0' ; clk_mcolumn <= '0' ; we_store1pt <= '0' ; ce_s1_m1_m2 <= '0' ; ce_a1_a2 <= '0' ; ce_add3 <= '0' ; ce_mult3 <= '0' ; ce_add4 <= '0' ; ce_1ptcontrib <= '0' ; if counting_l='1' then fsm_state <= set_accept3l; elsif counting_l='0' then fsm_state <= convol_end; end if; when set_accept3l => set_a3l <= '1' ; rst_a3l <= '0' ; rst_cdone_max_min <= '0' ; rst_cdonel <= '0' ; rst_1ptcontrib <= '0' ; set_cdone <= '0' ; set_cdonel <= '0' ; load_line <= '0' ; load_column <= '0' ; load_mline <= '0' ; load_mcolumn <= '0' ; clk_line <= '0' ; clk_column <= '0' ; clk_mline <= '0' ; clk_mcolumn <= '0' ; we_store1pt <= '0' ; ce_s1_m1_m2 <= '0' ; ce_a1_a2 <= '0' ; ce_add3 <= '0' ; ce_mult3 <= '0' ; ce_add4 <= '0' ; ce_1ptcontrib <= '0' ; fsm_state <= wait_written3l; when wait_written3l => rst_cdone_max_min <= '0' ; rst_cdonel <= '0' ; rst_1ptcontrib <= '0' ; set_cdone <= '0' ; set_a3l <= '0' ; set_cdonel <= '0' ; load_line <= '0' ; load_column <= '0' ; load_mline <= '0' ; load_mcolumn <= '0' ; clk_line <= '0' ; clk_column <= '0' ; clk_mline <= '0' ; clk_mcolumn <= '0' ; we_store1pt <= '0' ; ce_s1_m1_m2 <= '0' ; ce_a1_a2 <= '0' ; ce_add3 <= '0' ; ce_mult3 <= '0' ; ce_add4 <= '0' ; ce_1ptcontrib <= '0' ; if written3l='1' then fsm_state <= inic_column; rst_a3l <='1'; elsif written3l='0' then fsm_state <= wait_written3l; rst_a3l <='0'; end if; when inic_column => load_column <= '1' ; rst_a3l <= '0' ; rst_cdone_max_min <= '0' ; rst_cdonel <= '0' ; rst_1ptcontrib <= '0' ; set_cdone <= '0' ; set_a3l <= '0' ; set_cdonel <= '0' ; load_line <= '0' ; load_mline <= '0' ; load_mcolumn <= '0' ; clk_line <= '0' ; clk_column <= '0' ; clk_mline <= '0' ; clk_mcolumn <= '0' ; we_store1pt <= '0' ; ce_s1_m1_m2 <= '0' ; ce_a1_a2 <= '0' ; ce_add3 <= '0' ; ce_mult3 <= '0' ; ce_add4 <= '0' ; ce_1ptcontrib <= '0' ; fsm_state <= inic_column2; when inic_column2 => load_column <= '1' ; clk_column <= '1' ; rst_a3l <= '0' ; rst_cdone_max_min <= '0' ; rst_cdonel <= '0' ; rst_1ptcontrib <= '0' ; set_cdone <= '0' ; set_a3l <= '0' ; set_cdonel <= '0' ; load_line <= '0' ; load_mline <= '0' ; load_mcolumn <= '0' ; clk_line <= '0' ; clk_mline <= '0' ; clk_mcolumn <= '0' ; we_store1pt <= '0' ; ce_s1_m1_m2 <= '0' ; ce_a1_a2 <= '0' ; ce_add3 <= '0' ; ce_mult3 <= '0' ; ce_add4 <= '0' ; ce_1ptcontrib <= '0' ; fsm_state <= cmp_column; when conv_1l_end => set_cdonel <= '1' ; rst_a3l <= '0' ; rst_cdone_max_min <= '0' ; rst_cdonel <= '0' ; rst_1ptcontrib <= '0' ; set_cdone <= '0' ; set_a3l <= '0' ; load_line <= '0' ; load_column <= '0' ; load_mline <= '0' ; load_mcolumn <= '0' ; clk_line <= '0' ; clk_column <= '0' ; clk_mline <= '0' ; clk_mcolumn <= '0' ; we_store1pt <= '0' ; ce_s1_m1_m2 <= '0' ; ce_a1_a2 <= '0' ; ce_add3 <= '0' ; ce_mult3 <= '0' ; ce_add4 <= '0' ; ce_1ptcontrib <= '0' ; fsm_state <= conv_1l_end2; when conv_1l_end2 => set_cdonel <= '1' ; rst_a3l <= '0' ; rst_cdone_max_min <= '0' ; rst_cdonel <= '0' ; rst_1ptcontrib <= '0' ; set_cdone <= '0' ; set_a3l <= '0' ; load_line <= '0' ; load_column <= '0' ; load_mline <= '0' ; load_mcolumn <= '0' ; clk_line <= '0' ; clk_column <= '0' ; clk_mline <= '0' ; clk_mcolumn <= '0' ; we_store1pt <= '0' ; ce_s1_m1_m2 <= '0' ; ce_a1_a2 <= '0' ; ce_add3 <= '0' ; ce_mult3 <= '0' ; ce_add4 <= '0' ; ce_1ptcontrib <= '0' ; fsm_state <= wait_save1l; when wait_save1l => rst_a3l <= '0' ; rst_cdone_max_min <= '0' ; rst_cdonel <= '0' ; rst_1ptcontrib <= '0' ; set_cdone <= '0' ; set_a3l <= '0' ; set_cdonel <= '0' ; load_line <= '0' ; load_column <= '0' ; load_mline <= '0' ; load_mcolumn <= '0' ; clk_line <= '0' ; clk_column <= '0' ; clk_mline <= '0' ; clk_mcolumn <= '0' ; we_store1pt <= '0' ; ce_s1_m1_m2 <= '0' ; ce_a1_a2 <= '0' ; ce_add3 <= '0' ; ce_mult3 <= '0' ; ce_add4 <= '0' ; ce_1ptcontrib <= '0' ; if wr_finished='0' then fsm_state <= wait_save1l; elsif wr_finished = '1' then fsm_state <= clear_cdonel; end if; when clear_cdonel => rst_cdonel <= '1' ; rst_a3l <= '0' ; rst_cdone_max_min <= '0' ; rst_1ptcontrib <= '0' ; set_cdone <= '0' ; set_a3l <= '0' ; set_cdonel <= '0' ; load_line <= '0' ; load_column <= '0' ; load_mline <= '0' ; load_mcolumn <= '0' ; clk_line <= '0' ; clk_column <= '0' ; clk_mline <= '0' ; clk_mcolumn <= '0' ; we_store1pt <= '0' ; ce_s1_m1_m2 <= '0' ; ce_a1_a2 <= '0' ; ce_add3 <= '0' ; ce_mult3 <= '0' ; ce_add4 <= '0' ; ce_1ptcontrib <= '0' ; fsm_state <= inc_line; when inc_line => clk_line <= '1' ; rst_a3l <= '0' ; rst_cdone_max_min <= '0' ; rst_cdonel <= '0' ; rst_1ptcontrib <= '0' ; set_cdone <= '0' ; set_a3l <= '0' ; set_cdonel <= '0' ; load_line <= '0' ; load_column <= '0' ; load_mline <= '0' ; load_mcolumn <= '0' ; clk_column <= '0' ; clk_mline <= '0' ; clk_mcolumn <= '0' ; we_store1pt <= '0' ; ce_s1_m1_m2 <= '0' ; ce_a1_a2 <= '0' ; ce_add3 <= '0' ; ce_mult3 <= '0' ; ce_add4 <= '0' ; ce_1ptcontrib <= '0' ; fsm_state <= cmp_line; -- ------------------------------------------- -- SUB-FSM columns -- ------------------------------------------- when cmp_column => rst_a3l <= '0' ; rst_cdone_max_min <= '0' ; rst_cdonel <= '0' ; rst_1ptcontrib <= '0' ; set_cdone <= '0' ; set_a3l <= '0' ; set_cdonel <= '0' ; load_line <= '0' ; load_column <= '0' ; load_mline <= '0' ; load_mcolumn <= '0' ; clk_line <= '0' ; clk_column <= '0' ; clk_mline <= '0' ; clk_mcolumn <= '0' ; we_store1pt <= '0' ; ce_s1_m1_m2 <= '0' ; ce_a1_a2 <= '0' ; ce_add3 <= '0' ; ce_mult3 <= '0' ; ce_add4 <= '0' ; ce_1ptcontrib <= '0' ; if counting_c='0' then fsm_state <= conv_1l_end; elsif counting_c='1' then fsm_state <= inic_1ptcontrib; end if; when inic_1ptcontrib => rst_1ptcontrib <= '1' ; rst_a3l <= '0' ; rst_cdone_max_min <= '0' ; rst_cdonel <= '0' ; set_cdone <= '0' ; set_a3l <= '0' ; set_cdonel <= '0' ; load_line <= '0' ; load_column <= '0' ; load_mline <= '0' ; load_mcolumn <= '0' ; clk_line <= '0' ; clk_column <= '0' ; clk_mline <= '0' ; clk_mcolumn <= '0' ; we_store1pt <= '0' ; ce_s1_m1_m2 <= '0' ; ce_a1_a2 <= '0' ; ce_add3 <= '0' ; ce_mult3 <= '0' ; ce_add4 <= '0' ; ce_1ptcontrib <= '0' ; fsm_state <= inic_linesMask; when inic_linesMask => load_mline <= '1' ; rst_a3l <= '0' ; rst_cdone_max_min <= '0' ; rst_cdonel <= '0' ; rst_1ptcontrib <= '0' ; set_cdone <= '0' ; set_a3l <= '0' ; set_cdonel <= '0' ; load_line <= '0' ; load_column <= '0' ; load_mcolumn <= '0' ; clk_line <= '0' ; clk_column <= '0' ; clk_mline <= '0' ; clk_mcolumn <= '0' ; we_store1pt <= '0' ; ce_s1_m1_m2 <= '0' ; ce_a1_a2 <= '0' ; ce_add3 <= '0' ; ce_mult3 <= '0' ; ce_add4 <= '0' ; ce_1ptcontrib <= '0' ; fsm_state <= inic_linesMask2; when inic_linesMask2 => load_mline <= '1' ; clk_mline <= '1' ; rst_a3l <= '0' ; rst_cdone_max_min <= '0' ; rst_cdonel <= '0' ; rst_1ptcontrib <= '0' ; set_cdone <= '0' ; set_a3l <= '0' ; set_cdonel <= '0' ; load_line <= '0' ; load_column <= '0' ; load_mcolumn <= '0' ; clk_line <= '0' ; clk_column <= '0' ; clk_mcolumn <= '0' ; we_store1pt <= '0' ; ce_s1_m1_m2 <= '0' ; ce_a1_a2 <= '0' ; ce_add3 <= '0' ; ce_mult3 <= '0' ; ce_add4 <= '0' ; ce_1ptcontrib <= '0' ; fsm_state <= cmp_linesMask; when store1pt => we_store1pt <= '1' ; rst_a3l <= '0' ; rst_cdone_max_min <= '0' ; rst_cdonel <= '0' ; rst_1ptcontrib <= '0' ; set_cdone <= '0' ; set_a3l <= '0' ; set_cdonel <= '0' ; load_line <= '0' ; load_column <= '0' ; load_mline <= '0' ; load_mcolumn <= '0' ; clk_line <= '0' ; clk_column <= '0' ; clk_mline <= '0' ; clk_mcolumn <= '0' ; ce_s1_m1_m2 <= '0' ; ce_a1_a2 <= '0' ; ce_add3 <= '0' ; ce_mult3 <= '0' ; ce_add4 <= '0' ; ce_1ptcontrib <= '0' ; fsm_state <= inc_column; when inc_column => clk_column <= '1' ; we_store1pt <= '1' ; rst_a3l <= '0' ; rst_cdone_max_min <= '0' ; rst_cdonel <= '0' ; rst_1ptcontrib <= '0' ; set_cdone <= '0' ; set_a3l <= '0' ; set_cdonel <= '0' ; load_line <= '0' ; load_column <= '0' ; load_mline <= '0' ; load_mcolumn <= '0' ; clk_line <= '0' ; clk_mline <= '0' ; clk_mcolumn <= '0' ; ce_s1_m1_m2 <= '0' ; ce_a1_a2 <= '0' ; ce_add3 <= '0' ; ce_mult3 <= '0' ; ce_add4 <= '0' ; ce_1ptcontrib <= '0' ; fsm_state <= cmp_column; -- ------------------------------------------- -- SUB-FSM mask -- ------------------------------------------- when cmp_linesMask => rst_a3l <= '0' ; rst_cdone_max_min <= '0' ; rst_cdonel <= '0' ; rst_1ptcontrib <= '0' ; set_cdone <= '0' ; set_a3l <= '0' ; set_cdonel <= '0' ; load_line <= '0' ; load_column <= '0' ; load_mline <= '0' ; load_mcolumn <= '0' ; clk_line <= '0' ; clk_column <= '0' ; clk_mline <= '0' ; clk_mcolumn <= '0' ; we_store1pt <= '0' ; ce_s1_m1_m2 <= '0' ; ce_a1_a2 <= '0' ; ce_add3 <= '0' ; ce_mult3 <= '0' ; ce_add4 <= '0' ; ce_1ptcontrib <= '0' ; if counting_ml='0' then fsm_state <= store1pt; elsif counting_ml='1' then fsm_state <= inc_linesMask; end if; when inc_linesMask => clk_mline <= '1' ; rst_a3l <= '0' ; rst_cdone_max_min <= '0' ; rst_cdonel <= '0' ; rst_1ptcontrib <= '0' ; set_cdone <= '0' ; set_a3l <= '0' ; set_cdonel <= '0' ; load_line <= '0' ; load_column <= '0' ; load_mline <= '0' ; load_mcolumn <= '0' ; clk_line <= '0' ; clk_column <= '0' ; clk_mcolumn <= '0' ; we_store1pt <= '0' ; ce_s1_m1_m2 <= '0' ; ce_a1_a2 <= '0' ; ce_add3 <= '0' ; ce_mult3 <= '0' ; ce_add4 <= '0' ; ce_1ptcontrib <= '0' ; fsm_state <= inic_colMask; when inic_colMask => load_mcolumn <= '1' ; rst_a3l <= '0' ; rst_cdone_max_min <= '0' ; rst_cdonel <= '0' ; rst_1ptcontrib <= '0' ; set_cdone <= '0' ; set_a3l <= '0' ; set_cdonel <= '0' ; load_line <= '0' ; load_column <= '0' ; load_mline <= '0' ; clk_line <= '0' ; clk_column <= '0' ; clk_mline <= '0' ; clk_mcolumn <= '0' ; we_store1pt <= '0' ; ce_s1_m1_m2 <= '0' ; ce_a1_a2 <= '0' ; ce_add3 <= '0' ; ce_mult3 <= '0' ; ce_add4 <= '0' ; ce_1ptcontrib <= '0' ; fsm_state <= inic_colMask2; when inic_colMask2 => load_mcolumn <= '1' ; clk_mcolumn <= '1' ; rst_a3l <= '0' ; rst_cdone_max_min <= '0' ; rst_cdonel <= '0' ; rst_1ptcontrib <= '0' ; set_cdone <= '0' ; set_a3l <= '0' ; set_cdonel <= '0' ; load_line <= '0' ; load_column <= '0' ; load_mline <= '0' ; clk_line <= '0' ; clk_column <= '0' ; clk_mline <= '0' ; we_store1pt <= '0' ; ce_s1_m1_m2 <= '0' ; ce_a1_a2 <= '0' ; ce_add3 <= '0' ; ce_mult3 <= '0' ; ce_add4 <= '0' ; ce_1ptcontrib <= '0' ; fsm_state <= cmp_colMask; when cmp_colMask => rst_a3l <= '0' ; rst_cdone_max_min <= '0' ; rst_cdonel <= '0' ; rst_1ptcontrib <= '0' ; set_cdone <= '0' ; set_a3l <= '0' ; set_cdonel <= '0' ; load_line <= '0' ; load_column <= '0' ; load_mline <= '0' ; load_mcolumn <= '0' ; clk_line <= '0' ; clk_column <= '0' ; clk_mline <= '0' ; clk_mcolumn <= '0' ; we_store1pt <= '0' ; ce_s1_m1_m2 <= '0' ; ce_a1_a2 <= '0' ; ce_add3 <= '0' ; ce_mult3 <= '0' ; ce_add4 <= '0' ; ce_1ptcontrib <= '0' ; if counting_mc='0' then fsm_state <= cmp_linesMask; elsif counting_mc='1' then fsm_state <= inc_colMask; end if; when inc_colMask => clk_mcolumn <= '1' ; rst_a3l <= '0' ; rst_cdone_max_min <= '0' ; rst_cdonel <= '0' ; rst_1ptcontrib <= '0' ; set_cdone <= '0' ; set_a3l <= '0' ; set_cdonel <= '0' ; load_line <= '0' ; load_column <= '0' ; load_mline <= '0' ; load_mcolumn <= '0' ; clk_line <= '0' ; clk_column <= '0' ; clk_mline <= '0' ; we_store1pt <= '0' ; ce_s1_m1_m2 <= '0' ; ce_a1_a2 <= '0' ; ce_add3 <= '0' ; ce_mult3 <= '0' ; ce_add4 <= '0' ; ce_1ptcontrib <= '0' ; fsm_state <= calc1_A; -- ------------------------------------------- -- SUB-FSM 1pt_contrib -- ------------------------------------------- when calc1_A => rst_a3l <= '0' ; rst_cdone_max_min <= '0' ; rst_cdonel <= '0' ; rst_1ptcontrib <= '0' ; set_cdone <= '0' ; set_a3l <= '0' ; set_cdonel <= '0' ; load_line <= '0' ; load_column <= '0' ; load_mline <= '0' ; load_mcolumn <= '0' ; clk_line <= '0' ; clk_column <= '0' ; clk_mline <= '0' ; clk_mcolumn <= '0' ; we_store1pt <= '0' ; ce_s1_m1_m2 <= '0' ; ce_a1_a2 <= '0' ; ce_add3 <= '0' ; ce_mult3 <= '0' ; ce_add4 <= '0' ; ce_1ptcontrib <= '0' ; fsm_state <= calc1_B; when calc1_B => ce_s1_m1_m2 <= '1' ; rst_a3l <= '0' ; rst_cdone_max_min <= '0' ; rst_cdonel <= '0' ; rst_1ptcontrib <= '0' ; set_cdone <= '0' ; set_a3l <= '0' ; set_cdonel <= '0' ; load_line <= '0' ; load_column <= '0' ; load_mline <= '0' ; load_mcolumn <= '0' ; clk_line <= '0' ; clk_column <= '0' ; clk_mline <= '0' ; clk_mcolumn <= '0' ; we_store1pt <= '0' ; ce_a1_a2 <= '0' ; ce_add3 <= '0' ; ce_mult3 <= '0' ; ce_add4 <= '0' ; ce_1ptcontrib <= '0' ; fsm_state <= calc2_A; when calc2_A => rst_a3l <= '0' ; rst_cdone_max_min <= '0' ; rst_cdonel <= '0' ; rst_1ptcontrib <= '0' ; set_cdone <= '0' ; set_a3l <= '0' ; set_cdonel <= '0' ; load_line <= '0' ; load_column <= '0' ; load_mline <= '0' ; load_mcolumn <= '0' ; clk_line <= '0' ; clk_column <= '0' ; clk_mline <= '0' ; clk_mcolumn <= '0' ; we_store1pt <= '0' ; ce_s1_m1_m2 <= '0' ; ce_a1_a2 <= '0' ; ce_add3 <= '0' ; ce_mult3 <= '0' ; ce_add4 <= '0' ; ce_1ptcontrib <= '0' ; fsm_state <= calc2_B; when calc2_B => ce_a1_a2 <= '1' ; rst_a3l <= '0' ; rst_cdone_max_min <= '0' ; rst_cdonel <= '0' ; rst_1ptcontrib <= '0' ; set_cdone <= '0' ; set_a3l <= '0' ; set_cdonel <= '0' ; load_line <= '0' ; load_column <= '0' ; load_mline <= '0' ; load_mcolumn <= '0' ; clk_line <= '0' ; clk_column <= '0' ; clk_mline <= '0' ; clk_mcolumn <= '0' ; we_store1pt <= '0' ; ce_s1_m1_m2 <= '0' ; ce_add3 <= '0' ; ce_mult3 <= '0' ; ce_add4 <= '0' ; ce_1ptcontrib <= '0' ; fsm_state <= calc3_A; when calc3_A => rst_a3l <= '0' ; rst_cdone_max_min <= '0' ; rst_cdonel <= '0' ; rst_1ptcontrib <= '0' ; set_cdone <= '0' ; set_a3l <= '0' ; set_cdonel <= '0' ; load_line <= '0' ; load_column <= '0' ; load_mline <= '0' ; load_mcolumn <= '0' ; clk_line <= '0' ; clk_column <= '0' ; clk_mline <= '0' ; clk_mcolumn <= '0' ; we_store1pt <= '0' ; ce_s1_m1_m2 <= '0' ; ce_a1_a2 <= '0' ; ce_add3 <= '0' ; ce_mult3 <= '0' ; ce_add4 <= '0' ; ce_1ptcontrib <= '0' ; fsm_state <= calc3_B; when calc3_B => ce_add3 <= '1' ; rst_a3l <= '0' ; rst_cdone_max_min <= '0' ; rst_cdonel <= '0' ; rst_1ptcontrib <= '0' ; set_cdone <= '0' ; set_a3l <= '0' ; set_cdonel <= '0' ; load_line <= '0' ; load_column <= '0' ; load_mline <= '0' ; load_mcolumn <= '0' ; clk_line <= '0' ; clk_column <= '0' ; clk_mline <= '0' ; clk_mcolumn <= '0' ; we_store1pt <= '0' ; ce_s1_m1_m2 <= '0' ; ce_a1_a2 <= '0' ; ce_mult3 <= '0' ; ce_add4 <= '0' ; ce_1ptcontrib <= '0' ; fsm_state <= calc4; when calc4 => rst_a3l <= '0' ; rst_cdone_max_min <= '0' ; rst_cdonel <= '0' ; rst_1ptcontrib <= '0' ; set_cdone <= '0' ; set_a3l <= '0' ; set_cdonel <= '0' ; load_line <= '0' ; load_column <= '0' ; load_mline <= '0' ; load_mcolumn <= '0' ; clk_line <= '0' ; clk_column <= '0' ; clk_mline <= '0' ; clk_mcolumn <= '0' ; we_store1pt <= '0' ; ce_s1_m1_m2 <= '0' ; ce_a1_a2 <= '0' ; ce_add3 <= '0' ; ce_mult3 <= '0' ; ce_add4 <= '0' ; ce_1ptcontrib <= '0' ; fsm_state <= calc5_A; when calc5_A => rst_a3l <= '0' ; rst_cdone_max_min <= '0' ; rst_cdonel <= '0' ; rst_1ptcontrib <= '0' ; set_cdone <= '0' ; set_a3l <= '0' ; set_cdonel <= '0' ; load_line <= '0' ; load_column <= '0' ; load_mline <= '0' ; load_mcolumn <= '0' ; clk_line <= '0' ; clk_column <= '0' ; clk_mline <= '0' ; clk_mcolumn <= '0' ; we_store1pt <= '0' ; ce_s1_m1_m2 <= '0' ; ce_a1_a2 <= '0' ; ce_add3 <= '0' ; ce_mult3 <= '0' ; ce_add4 <= '0' ; ce_1ptcontrib <= '0' ; fsm_state <= calc5_B; when calc5_B => rst_a3l <= '0' ; rst_cdone_max_min <= '0' ; rst_cdonel <= '0' ; rst_1ptcontrib <= '0' ; set_cdone <= '0' ; set_a3l <= '0' ; set_cdonel <= '0' ; load_line <= '0' ; load_column <= '0' ; load_mline <= '0' ; load_mcolumn <= '0' ; clk_line <= '0' ; clk_column <= '0' ; clk_mline <= '0' ; clk_mcolumn <= '0' ; we_store1pt <= '0' ; ce_s1_m1_m2 <= '0' ; ce_a1_a2 <= '0' ; ce_add3 <= '0' ; ce_mult3 <= '0' ; ce_add4 <= '0' ; ce_1ptcontrib <= '0' ; fsm_state <= calc5_C; when calc5_C => ce_mult3 <= '1' ; rst_a3l <= '0' ; rst_cdone_max_min <= '0' ; rst_cdonel <= '0' ; rst_1ptcontrib <= '0' ; set_cdone <= '0' ; set_a3l <= '0' ; set_cdonel <= '0' ; load_line <= '0' ; load_column <= '0' ; load_mline <= '0' ; load_mcolumn <= '0' ; clk_line <= '0' ; clk_column <= '0' ; clk_mline <= '0' ; clk_mcolumn <= '0' ; we_store1pt <= '0' ; ce_s1_m1_m2 <= '0' ; ce_a1_a2 <= '0' ; ce_add3 <= '0' ; ce_add4 <= '0' ; ce_1ptcontrib <= '0' ; fsm_state <= calc6_A; when calc6_A => rst_a3l <= '0' ; rst_cdone_max_min <= '0' ; rst_cdonel <= '0' ; rst_1ptcontrib <= '0' ; set_cdone <= '0' ; set_a3l <= '0' ; set_cdonel <= '0' ; load_line <= '0' ; load_column <= '0' ; load_mline <= '0' ; load_mcolumn <= '0' ; clk_line <= '0' ; clk_column <= '0' ; clk_mline <= '0' ; clk_mcolumn <= '0' ; we_store1pt <= '0' ; ce_s1_m1_m2 <= '0' ; ce_a1_a2 <= '0' ; ce_add3 <= '0' ; ce_mult3 <= '0' ; ce_add4 <= '0' ; ce_1ptcontrib <= '0' ; fsm_state <= calc6_B; when calc6_B => rst_a3l <= '0' ; rst_cdone_max_min <= '0' ; rst_cdonel <= '0' ; rst_1ptcontrib <= '0' ; set_cdone <= '0' ; set_a3l <= '0' ; set_cdonel <= '0' ; load_line <= '0' ; load_column <= '0' ; load_mline <= '0' ; load_mcolumn <= '0' ; clk_line <= '0' ; clk_column <= '0' ; clk_mline <= '0' ; clk_mcolumn <= '0' ; we_store1pt <= '0' ; ce_s1_m1_m2 <= '0' ; ce_a1_a2 <= '0' ; ce_add3 <= '0' ; ce_mult3 <= '0' ; ce_add4 <= '0' ; ce_1ptcontrib <= '0' ; fsm_state <= calc6_C; when calc6_C => ce_add4 <= '1' ; rst_a3l <= '0' ; rst_cdone_max_min <= '0' ; rst_cdonel <= '0' ; rst_1ptcontrib <= '0' ; set_cdone <= '0' ; set_a3l <= '0' ; set_cdonel <= '0' ; load_line <= '0' ; load_column <= '0' ; load_mline <= '0' ; load_mcolumn <= '0' ; clk_line <= '0' ; clk_column <= '0' ; clk_mline <= '0' ; clk_mcolumn <= '0' ; we_store1pt <= '0' ; ce_s1_m1_m2 <= '0' ; ce_a1_a2 <= '0' ; ce_add3 <= '0' ; ce_mult3 <= '0' ; ce_1ptcontrib <= '0' ; fsm_state <= calc7_A; when calc7_A => rst_a3l <= '0' ; rst_cdone_max_min <= '0' ; rst_cdonel <= '0' ; rst_1ptcontrib <= '0' ; set_cdone <= '0' ; set_a3l <= '0' ; set_cdonel <= '0' ; load_line <= '0' ; load_column <= '0' ; load_mline <= '0' ; load_mcolumn <= '0' ; clk_line <= '0' ; clk_column <= '0' ; clk_mline <= '0' ; clk_mcolumn <= '0' ; we_store1pt <= '0' ; ce_s1_m1_m2 <= '0' ; ce_a1_a2 <= '0' ; ce_add3 <= '0' ; ce_mult3 <= '0' ; ce_add4 <= '0' ; ce_1ptcontrib <= '0' ; fsm_state <= calc7_B; when calc7_B => ce_1ptcontrib <= '1' ; rst_a3l <= '0' ; rst_cdone_max_min <= '0' ; rst_cdonel <= '0' ; rst_1ptcontrib <= '0' ; set_cdone <= '0' ; set_a3l <= '0' ; set_cdonel <= '0' ; load_line <= '0' ; load_column <= '0' ; load_mline <= '0' ; load_mcolumn <= '0' ; clk_line <= '0' ; clk_column <= '0' ; clk_mline <= '0' ; clk_mcolumn <= '0' ; we_store1pt <= '0' ; ce_s1_m1_m2 <= '0' ; ce_a1_a2 <= '0' ; ce_add3 <= '0' ; ce_mult3 <= '0' ; ce_add4 <= '0' ; fsm_state <= cmp_colMask; -- ------------------------------------------- when others => null; end case; end if; end process; end fsm_arch;