Combinational feedback loops

J

john

Hello, I am getting 47 cominational feedback loops for the section of
my code that I am attaching with this message. I am using QuartusII.
Would anyone advice me that how to get rid of these combinational feed
back loops. I have Else for every IF/Else construct. Please advice!

Thanks
John

Process (DPR_CLK, sel_14bit_mux )
Begin

If (DPR_CLK 'event And DPR_CLK='1') Then

If (sel_14bit_mux = "11") Then
-- Frame Counter --
Address_bus( 5 ) <= Frame_cntr(0);
Address_bus( 6 ) <= Frame_cntr(1);
Address_bus( 7 ) <= Frame_cntr(2);
Address_bus( 8 ) <= Frame_cntr(3);
Address_bus( 9 ) <= Frame_cntr(4);
Address_bus( 10 ) <= Frame_cntr(5);
Address_bus( 11 ) <= Frame_cntr(6);
Address_bus( 12 ) <= Frame_cntr(7);
Address_bus( 13 ) <= Frame_cntr(8);
Address_bus( 14 ) <= Frame_cntr(9); Address_bus( 15
) <= Frame_cntr(10);
Address_bus( 16 ) <= Frame_cntr(11);
Address_bus( 17 ) <= Frame_cntr(12);
Address_bus( 18 ) <= Frame_cntr(13);

-- Channel Counter --
Address_bus( 4 downto 0 ) <= countb_mux_datain;

Else If ( sel_14bit_mux="00")Then
Address_bus( 18 downto 5 ) <= TEMP;

-- Sample Counter --
Address_bus( 4 downto 0 ) <= countc_mux_datain;

Else If ( sel_14bit_mux = "01") Then

Address_bus( 5 ) <= '1';
Address_bus( 6 ) <= '0';
Address_bus( 7 ) <= '0';
Address_bus( 8 ) <= '0';
Address_bus( 9 ) <= '0';
Address_bus( 10 ) <= '0';
Address_bus( 11 ) <= '0';
Address_bus( 12 ) <= '0';
Address_bus( 13 ) <= '0';
Address_bus( 14 ) <= '0';
Address_bus( 15 ) <= '0';
Address_bus( 16 ) <= '0';
Address_bus( 17 ) <= '0';
Address_bus( 18 ) <= '0';
Address_bus( 4 downto 0 ) <= countb_mux_datain;


End If;
End If;
End If;
End If;
If (DPR_CLK 'event And DPR_CLK='1')Then

If( latch_enable ='1') Then

TEMP <= Data_Bus;
Else
End If;
End If;

If (DPR_CLK 'event And DPR_CLK='1')Then

If( latch_CPLD ='1') Then

Final_Temp <= Data_Bus;
Else

End If;

End If;

If (DPR_CLK 'event And DPR_CLK='1')Then

If( P2S_load ='1') Then

Ser_buff(18) <= Final_Temp(0);
Ser_buff(17) <= Final_Temp(1);
Ser_buff(16) <= Final_Temp(2);
Ser_buff(15) <= Final_Temp(3);
Ser_buff(14) <= Final_Temp(4);
Ser_buff(13) <= Final_Temp(5);
Ser_buff(12) <= Final_Temp(6);
Ser_buff(11) <= Final_Temp(7);
Ser_buff(10) <= Final_Temp(8);
Ser_buff(9) <= Final_Temp(9);
Ser_buff(8) <= Final_Temp(10);
Ser_buff(7) <= Final_Temp(11);
Ser_buff(6) <= Final_Temp(12);
Ser_buff(5) <= Final_Temp(13);
Ser_buff(4) <= countb_mux_datain(0) ;
--(LSB....MSB)
Ser_buff(3) <= countb_mux_datain(1) ;
Ser_buff(2) <= countb_mux_datain(2) ;
Ser_buff(1) <= countb_mux_datain(3) ;
Ser_buff(0) <= countb_mux_datain(4) ;
Else
End If;

End If;
-- Reading the counter number (New Addition) --

If (DPR_CLK 'event And DPR_CLK='1') Then
If (Addr_active='1') Then
Address_bus <= "0000000000000000001";
Else
End If;
End If;
 
M

Mike Treseler

john said:
Hello, I am getting 47 cominational feedback loops for the section of
my code that I am attaching with this message.
Process (DPR_CLK, sel_14bit_mux )
xxxxxxxxxxxxx delete this
If (DPR_CLK 'event And DPR_CLK='1') Then
If (DPR_CLK 'event And DPR_CLK='1')Then
If (DPR_CLK 'event And DPR_CLK='1')Then
If (DPR_CLK 'event And DPR_CLK='1')Then
If (DPR_CLK 'event And DPR_CLK='1') Then

You only get one of these per process.

-- Mike Treseler
 
A

Arnaud

The process you're using is a synchronous one. There should then only
be the clk (and an asynchronous reset if it were existing) in the
sensitivity list. Remove the signal sel_14bit_mux from the sensitivity
list :

Process (DPR_CLK)
Begin
....
end process;

I also advise you to use case statement instead of the if, elsif in the
first if. That would be easier to read :

If (DPR_CLK 'event And DPR_CLK='1') Then

case sel_14bit_mux is
when "11" =>
-- Frame Counter --
...
when "00" =>
...
when "01" =>
..
when others =>

end case;

end if;

Regards,

Arnaud
 
J

john

Hi ,

I did change it that there will be one per process. and I am also
keeping the DPR_CLK and Reset in the sensitivity list but the compiler
is giving me the same combinational feedback warnings. If for example,
I change

If( latch_CPLD ='1') Then
Final_Temp <= Data_Bus;
Else
Final_Temp <= others ( => '0' );
End If;
End If;

Then I can get rid of 10 combinational loops out of 42. But I do not
want the Final_Temp assign it to zero because of my design. The code I
mentioned previously is controlled by a state machine.
Please advice!
John
 
M

Mike Treseler

john said:
I did change it that there will be one per process. and I am also
keeping the DPR_CLK and Reset in the sensitivity list but the compiler
is giving me the same combinational feedback warnings.

If you are getting combinational feedback, some
assignments have slipped outside of the
"elsif rising_edge(clk)" clause.
Please advice!

Please run a sim.

-- Mike Treseler
 
J

john

The other thing is that my vhdl program is not exactly doing what I
want it to do. For example its not working at 20MHz but working ok for
frequencies less than 15 MHZ. I was wondering that can combinational
loops and ripple clock can effect the functionality of the VHDL code.
Thanks
john
 
J

john

The other thing is that my vhdl program is not exactly doing what I
want it to do. For example its not working at 20MHz but working ok for
frequencies less than 15 MHZ. I was wondering that can combinational
loops and ripple clock can effect the functionality of the VHDL code.
Thanks
john
 
J

john

The other thing is that my vhdl program is not exactly doing what I
want it to do. For example its not working at 20MHz but working ok for
frequencies less than 15 MHZ. I was wondering that can combinational
loops and ripple clock can effect the functionality of the VHDL code.
Thanks
john
 
J

john

Hello,

I am running sim but i need the solution. what should I do to remove
the problem. can combinational feedback loops introduced the problem
like forexample my VHDL code works for clock frequencies less than
15Mhz but does not work for frequencies greater that 15MHz,. Please
advice!

John
 
D

Dave Pollum

john said:
Hello,

I am running sim but i need the solution. what should I do to remove
the problem. can combinational feedback loops introduced the problem
like forexample my VHDL code works for clock frequencies less than
15Mhz but does not work for frequencies greater that 15MHz,. Please
advice!

John

I don't know what the "solution" is. You may want to simplify the code
as much as possible, to try to find your "loops". I've also noticed
that you have more "end if" statements that "if" statements. I don't
know if that has anything to do with your problem or not. I find that
good formatting of the source code helps me avoid mistakes like that.
I also like schematics. Sometimes I'll do something really dumb, and a
look at the RTL schematic will quickly show me what I've done wrong,
especially if running a simulation leaves me confused.
HTH
-Dave Pollum
 
J

john

Hi Mike,

I did not understand completely. Did you mean that there will be only
one

"If (DPR_CLK 'event And DPR_CLK='1') Then" for the whole process?

Thanks
Regards
John
 
M

Mike Treseler

john said:
I did not understand completely. Did you mean that there will be only
one

"If (DPR_CLK 'event And DPR_CLK='1') Then" for the whole process?


For synthesis, yes.

-- Mike Treseler
 
M

Mike Treseler

john said:
What about the final code for the CPLD?

That sounds like synthesis to me.

You can use as many processes as you like,
but each should look something like this:
--
begin
if reset = '1' then
init_regs;
elsif rising_edge(clock) then
update_regs;
end if;
update_ports;
end process sync_template;

-- Mike Treseler
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads

Writing Test Bench 1
P2S 4
ISE 10.1 and Timing Simulation Errors 10
Binary to BCD code understanding 0
Sequential Circuits power up Reset 7
Intialization 0
combinational loops 54
clocked signals 3

Members online

Forum statistics

Threads
473,982
Messages
2,570,186
Members
46,743
Latest member
WoodrowMea

Latest Threads

Top