
    Nic                         d Z ddlmZ dZdZdZdededefd	Zdededefd
Z	 ed       G d d             Z
 G d d      Zd Zd Zedk(  r e        yy)zGenerate hardcoded testbench vectors for problem 051.

This helper is kept in the problem folder for auditability. The emitted
`run_step(...)` lines are intended to be copied directly into `testbench.v`.
    )	dataclass     ivaluebitsreturnc                 F    d|z  dz
  }| |z  } | d|dz
  z  z  r| d|z  z  } | S )N    )r   r   masks      s/home/bubshait/Desktop/FYP/evaluationPipeline/benchmarks/problems/051_runtime_reconfigurable_fir/generate_golden.py	to_signedr      s;    I?D	TMEdQh dL    c                 4    |dz   dz  }| d|z  dz
  z  d| dS )N      r
   0xr   )r   r   widths      r   to_hexr      s/    AX!OET	Q'%z23r   T)frozenc                   T    e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   eed<   y)	Steptagrst
data_validdata_incoeff_wr_en
coeff_addr
coeff_dataN)__name__
__module____qualname__str__annotations__intr   r   r   r   r      s&    	H	HOLOOr   r   c                   $    e Zd Zd Zd ZdefdZy)Modelc                 $    | j                          y )N)resetselfs    r   __init__zModel.__init__)   s    

r   c                 ~    dgdz  | _         dgdz  | _        dgdz  | _        d| _        d| _        d| _        d| _        y )Nr         F)activestagedhistorypending_validpending_datapending_dirty	frame_posr+   s    r   r*   zModel.reset,   sH    cAgcAgsQw"r   sc                    |j                   r| j                          y| j                  }| j                  }t	        |j
                        }| j                  }|xr | j                  dk(  }|r|r| j                  n| j                  }d}d}	|rUt        |j                  d      g| j                  d d  z   }
d}t        d      D ]  }|||   |
|   z  z  } d}t        |d      }	|r!|r| j                  j                         | _	        |j                  r-t        |j                   d      | j                  |j"                  <   |j                  rd| _        n|r	|rd| _        |rQt        |j                  d      g| j                  d d	 z   | _        | j                  d
k(  rdn| j                  dz   | _        || _        |	| _        ||fS )Nr   r   r   r/   r
         TF   r0   )r   r*   r4   r5   boolr   r6   r7   r2   r1   r   r   r3   rangecopyr   r    r   )r,   r8   expected_validexpected_datasample_accept	old_dirtyframe_startcoeffsnext_pending_validnext_pending_datasamplesaccidxs                r   stepz
Model.step5   s   55JJL++))Q\\*&&	#;!(;!, A./$,,q/AGCQx 2vc{WS\112!" )#r 29++**,DK==(1!,,(CDKK%==!%DY!&D%aii34t||BQ7GGDL"&..A"5Q4>>A;MDN/-},,r   N)r!   r"   r#   r-   r*   r   rL   r   r   r   r(   r(   (   s    *-d *-r   r(   c            
         g t        ddddddd      t        ddddddd      t        ddddddd      t        d	dddddd
      t        ddddddd      t        ddddddd      t        ddddddd      t        ddddddd      t        dddd
ddd      t        ddddddd      t        ddddddd      t        ddddddd      t        ddddddd      t        ddddddd      t        ddddddd      t        ddddddd      t        dddd ddd      t        d!ddd"ddd      t        d#dddddd      t        d$dddddd      t        d%ddd&ddd'      t        d(dddddd
      t        d)dddddd      t        d*dddddd      t        d+ddd,ddd      t        d-dddddd      t        d.ddd
ddd      t        d/dddddd      t        d0dddddd"      t        d1ddd2ddd      t        d3dddddd      t        d4dddddd      t        d5dddddd      t        d6dddddd      t        d7dddddd      t        d8ddd"ddd      t        d9dddddd:      t        d;ddd<ddd=      t        d>dddddd      t        d?ddd@ddd      t        dAdddddd      t        dBdddddd      t        dCddddddD      t        dEddddddF      t        dGddddddH      t        dIddddddJ      t        dKddddddL      t        dMddddd
dN      t        dOddddd"d      t        dPdddddd'      t        dQdddRddd      t        dSdddTddd      t        dUdddRddd      t        dVdddTddd      t        dWdddXddd      t        dYdddZddd      t        d[dddddd      t        d\dddddd      t        d]dddddd      S )^N
rst_boot_0r
   r   rst_ignore_bothU      i4  post_reset_idlepre_a0_temp   pre_a0_finalpre_a1_temp   pre_a1_finalpre_frame0_idlef0_s0f0_s1_wr_b0   f0_idle_wr_b1_temp	   f0_s2_wr_b1_finalr0   r   f0_s3f0_s4_wr_b2r   r   f0_idle_midf0_s5r   f0_s6   f0_s7r=   f1_s0_wr_c2f1_s1f1_s2_wr_c0   i  f1_idle_wr_c1_tempf1_s3_wr_c1_finalf1_s4f1_s5   f1_idle_midf1_s6f1_s7f2_s0_wr_d0f2_s1   f2_s2_wr_d1f2_s3f2_s4f2_s5f2_s6f2_s7pre_frame3_wr_d2i  rst_discard_d3   i""  post_reset_idle_0flush_candidate   flush_resetpost_flush_idlepre_e0i  pre_e1i   pre_e2i @  pre_e3i   pre_e4i   pre_e5i   pre_e6pre_e7ext_s0   ext_s1   ext_s2ext_s3ext_s4@   ext_s5   ext_s6ext_s7final_drain)r   r   r   r   build_stepsr   b   s   <\1aq!V4<1dAq&9< 	1dAq&9< 	]Aq$1f5	<
 	^Q4Av6< 	]Aq$1f5< 	^Q4Av6< 	1dAq&9< 	WaD!Q/< 	]Aq$1f5< 	!1aq!V<< 	 !QaF;< 	WaD!Q/< 	]Aq$1f5< 	]Aq$1f5<  	WaD!Q/!<" 	WaD!Q/#<$ 	WaD!Q/%<& 	]Aq$1f5'<( 	WaD!Q/)<* 	]Aq$1f5+<, 	!1aq!V<-<. 	 !QaF;/<0 	WaD!Q/1<2 	WaD!Q/3<4 	]Aq$1f55<6 	WaD!Q/7<8 	WaD!Q/9<: 	]Aq$1f5;<< 	WaD!Q/=<> 	]Aq$1f5?<@ 	WaD!Q/A<B 	WaD!Q/C<D 	WaD!Q/E<F 	WaD!Q/G<H 	WaD!Q/I<J 	AtQ6:K<L 	_aD!Q7M<N 	 !QaF;O<P 	1dAq&9Q<R 	]Aq$1f5S<T 	1dAq&9U<V 	Xq!T1a0W<X 	Xq!T1a0Y<Z 	Xq!T1a0[<\ 	Xq!T1a0]<^ 	Xq!T1a0_<` 	Xq!T1a0a<b 	Xq!T1a0c<d 	Xq!T1a0e<f 	Xq!T1a0g<h 	Xq!T1a0i<j 	Xq!T1a0k<l 	Xq!T1a0m<n 	Xq!T1a0o<p 	Xq!T1a0q<r 	Xq!T1a0s<t 	Xq!T1a0u<v 	]Aq$1f5w< <r   c                     t               } t               }g }i }|D ]  }| j                  |      \  }}||f||j                  <   |j	                  d|j                   d|j
                   d|j                   d|j                  t        z  dd|j                   d|j                   d|j                  t        z  dd| d	t        |d
       d        |d   dk(  sJ |d   dk(  sJ |d   dk(  sJ |d   dk(  sJ |d   dk(  sJ |d   dk(  sJ |d   dk(  sJ |d   dk(  sJ |d   dk(  sJ t        dj                  |             y )Nz        run_step("z", 1'bz, 1'bz, 8'h02xz, 3'dz, 16'h04xz, 27'hr;   z);r[   )r
   rT   r_   r:   rg   )r
   r=   rh   )r
      rs   )r
      rt   )r
   ir}   r   r   )r
   i 
)r(   r   rL   r   appendr   r   r   MASK_8r   r   r    MASK_16r   printjoin)modelstepslinesresultsrL   	exp_validexp_datas          r   mainr      s   GEMEEG 

#jj.	8&1
 (( //"%v(=c'B C""#5(9RY@YZ]?^ _F6(B#7"8<	


 =!V+++&'6111=!V+++7w&&&=!W,,,7x'''?#v---=!V+++=!\111	$))E
r   __main__N)__doc__dataclassesr   r   r   MASK_27r&   r   r$   r   r   r(   r   r   r!   r   r   r   <module>r      s    " 


S   4# 4S 4S 4
 $  7- 7-t=@@ zF r   