problems about Behavioral Compiler

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

Reply to
YiYin Wang
Loading thread data ...

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.