problems about Behavioral Compiler

Sep 27, 2004 0 Replies

Dear All, I have used the Behavioral Compiler to synthesize a FIR filter. I want to constrain a loop. But when I use " find " command to find the loop, it always reports error and get no results.



the command I used is "bc_shell> find cell -hierarchy *filter_loop*" and the feedback is : "Error: Can't find object '*filter_loop*'.(UID-109) {}"



How could I solve this problem?



Thanks a lot. Best Regards



Yiyin Wang My code is below:



LIBRARY ieee;



USE ieee.std_logic_1164.ALL;



USE ieee.std_logic_arith.ALL;



USE ieee.std_logic_signed.ALL;



ENTITY fir_filter2 IS



PORT (



clk : IN std_logic;



rst : IN std_logic;



load : IN std_logic;



data_in : IN signed( 11 DOWNTO 0 );



coeff_addr : IN unsigned( 3 DOWNTO 0 );



start : IN std_logic;



data_out : OUT signed( 11 DOWNTO 0 )



);



END fir_filter2;



ARCHITECTURE behavioral OF fir_filter2 IS



BEGIN


main_proc: PROCESS


SUBTYPE coeff_element IS signed( 11 DOWNTO 0 );



TYPE coeff_type IS ARRAY ( integer RANGE ) OF coeff_element;



VARIABLE coeff : coeff_type( 0 TO 14 );


SUBTYPE history_element IS signed( 11 DOWNTO 0 );



TYPE history_type IS ARRAY ( integer RANGE ) OF history_element;



VARIABLE history : history_type( 0 TO 14 );


VARIABLE sum : signed( 23 DOWNTO 0 );



ATTRIBUTE unroll_new_instance : boolean;



ATTRIBUTE unroll_new_instance OF sum : VARIABLE IS true;


BEGIN



reset_loop: LOOP


-- -- reset the data output --



data_out '0' );


WAIT UNTIL clk'EVENT AND ( clk = '1' );



EXIT reset_loop WHEN ( rst = '1' );


--



-- Initialize all coefficients to zero



--



FOR i IN 0 TO 14 LOOP



coeff( i ) := ( OTHERS => '0' );



END LOOP;


--



-- Initialize history memory to zero



--



FOR i IN 0 TO 14 LOOP



history( i ) := ( OTHERS => '0' );



END LOOP;



main_loop: LOOP


config_loop: LOOP


--



-- Wait until next clock cycle to check for



-- load or filter signals.



--



WAIT UNTIL clk'EVENT AND ( clk = '1' );



EXIT reset_loop WHEN ( rst = '1' );


IF ( start = '1' ) THEN



EXIT config_loop;



END IF;


IF ( load = '1' ) THEN



coeff( conv_integer( '0' & coeff_addr ) ) := data_in;



END IF;


END LOOP config_loop;


--



-- Main filter loop



--



filter_loop: LOOP -- pragma n_unroll 3



-- pragma pipeline_init_interval 1


WAIT UNTIL clk'EVENT AND ( clk = '1' );



EXIT reset_loop WHEN ( rst = '1' );


history( 0 ) := signed( data_in );


sum := ( ( ( history( 0 ) * coeff( 0 ) +



history( 1 ) * coeff( 1 ) ) +



( history( 2 ) * coeff( 2 ) +



history( 3 ) * coeff( 3 ) ) ) +



( ( history( 4 ) * coeff( 4 ) +



history( 5 ) * coeff( 5 ) ) +



( history( 6 ) * coeff( 6 ) +



history( 7 ) * coeff( 7 ) ) ) ) +



( ( ( history( 8 ) * coeff( 8 ) +



history( 9 ) * coeff( 9 ) ) +



( history( 10 ) * coeff( 10 ) +



history( 11 ) * coeff( 11 ) ) ) +



( ( history( 12 ) * coeff( 12 ) +



history( 13 ) * coeff( 13 ) ) +



history( 14 ) * coeff( 14 ) ) );


data_out


Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required