ITERATIVE MODELING














ITERATIVE MODELING - TEST BENCH GENERATION





1. Test Bench Generation :













Test Bench Generation (Arbiter Testing)


    ENTITY arbtest IS END arbtest; -- ARCHITECTURE io OF arbtest IS USE WORK.waiting.ALL; CONSTANT source_delays : wait_array := (12, 10, 9, 14); SIGNAL clk : BIT; SIGNAL r, g : BIT_VECTOR (3 DOWNTO 0); CONSTANT t : TIME := 1 US; BEGIN arb : ENTITY WORK.arbitrator (behavioral) GENERIC MAP (wait_states => (3 => 0, 2 => 1, 1 => 2, 0 => 3), clock_period => t) PORT MAP (r, g, clk); clk <= NOT clk AFTER t / 2 WHEN NOW < 40 US ELSE clk; sources : FOR i IN r'RANGE GENERATE PROCESS BEGIN WAIT FOR source_delays (i) * 1 US; r(i) <= '1'; WAIT UNTIL g(i) = '1'; WAIT UNTIL clk = '0'; r(i) <= '0'; END PROCESS; END GENERATE; --r <= (r1, r2, r3, r4); --(g1, g2, g3, g4) <= g; END io;












ITERATIVE MODELING - GENERIC STATE MACHINE MODELING





2. Generic State Machine Modeling :



    ENTITY detector_m IS PORT (x,clk : IN BIT; z : OUT BIT); END detector_m; -- ARCHITECTURE multiple_moore_machine_1 OF detector_m IS FUNCTION oring( drivers : BIT_VECTOR) RETURN BIT IS VARIABLE accumulate : BIT := '0'; BEGIN FOR i IN drivers'RANGE LOOP accumulate := accumulate OR drivers(i); END LOOP; RETURN accumulate; END oring; SUBTYPE ored_bit IS oring BIT; TYPE ored_bit_vector IS ARRAY (NATURAL RANGE <>) OF ored_bit; TYPE next_table IS ARRAY (1 TO 6, BIT) OF INTEGER; TYPE out_table IS ARRAY (1 TO 6, BIT) OF BIT; -- Fill in next_val, out_val, and s arrays SIGNAL o : ored_bit REGISTER; BEGIN clocking : BLOCK (clk = '1' AND (NOT clk'STABLE)) BEGIN g: FOR i IN s'RANGE GENERATE si: BLOCK (s(i) = '1' AND GUARD) BEGIN s(next_val(i,'0')) <= GUARDED '1' WHEN x='0' ELSE '0'; s(next_val(i,'1')) <= GUARDED '1' WHEN x='1' ELSE '0'; o <= GUARDED out_val(i, x); END BLOCK si; s (i) <= GUARDED '0'; END GENERATE; END BLOCK clocking; z <= o; END multiple_moore_machine_1;










Generic State Machine Modeling

    --------------------------------------------------------------------- --The folowing tables program the general purpose Moore description-- --------------------------------------------------------------------- -- -- Next States: ----- x=0, x=1 -- CONSTANT next_val : next_table := ( (1 , 2), --S1: -> S1, S2 -- (1 , 3), --S2: -> S1, S3 -- (1 , 4), --S3: -> S1, S4 -- (1 , 1), --S4: -> S1, S1 -- (5 , 6), --S5: -> S5, S6 -- (5 , 6) ); --S6: -> S5, S6 -- -- -- -- -- Output Values: ----- x=0, x=1 -- CONSTANT out_val : out_table := ( ('0' , '0'), --S1: == z=0, 0 -- ('0' , '0'), --S2: == z=0, 0 -- ('0' , '0'), --S3: == z=0, 0 -- ('0' , '0'), --S4: == z=1, 1 -- ('0' , '0'), --S5: == z=0, 0 -- ('1' , '1') );--S6: == z=1, 1 -- -- -- -- Initial Active States: -- SIGNAL s : ored_bit_vector (1 TO 6) REGISTER := "100010"; -- --------------------------------------------------------------------- ---------------------------------------------------------------------



  • The next_val constant holds next state values
  • The out_val constant holds the output values on the z output
  • Initial starting states are set to '1' in the s vector