FPGA, SoC, And CPLD Boards And Kits
FPGA Evaluation and Development Kits
Announcements
Intel Support hours are Monday-Fridays, 8am-5pm PST, except Holidays. Thanks to our community members who provide support during our down time or before we get to your questions. We appreciate you!

Need Forum Guidance? Click here
Search our FPGA Knowledge Articles here.
5159 Discussions

How am I inferring latch in this code?

AIbra11
Beginner
417 Views

I'm getting warning 10631 in Quartus II (inferring latches)

Warning (10631): VHDL Process Statement warning at U6D2CPUSeq.vhd(947): inferring latch(es) for signal or variable "RST_RSMRST_N_200MS_DELAY", which holds its previous value in one or more paths through the process

Warning (10631): VHDL Process Statement warning at U6D2CPUSeq.vhd(947): inferring latch(es) for signal or variable "RST_RSMRST_N_200MS_CNT", which holds its previous value in one or more paths through the process

 

here is my code:

process(LED_500HZ_CLK, RST_RSMRST_PLD_R_N_T, RST_DEDI_BUSY_PLD_N) begin if RST_RSMRST_PLD_R_N_T = '0' or RST_DEDI_BUSY_PLD_N ='0' then RST_RSMRST_N_200MS_DELAY <= '0'; RST_RSMRST_N_200MS_CNT <= (others =>'0'); elsif rising_edge(LED_500HZ_CLK) then RST_RSMRST_N_200MS_CNT <= RST_RSMRST_N_200MS_CNT + '1'; if RST_RSMRST_N_200MS_CNT = "1100100" then RST_RSMRST_N_200MS_DELAY <='1'; end if; end if; end process;

 

0 Kudos
3 Replies
sstrell
Honored Contributor III
214 Views

I think you want to be doing this under rising_edge:

if RST_RSMRST_N_200MS_CNT = "1100100" then RST_RSMRST_N_200MS_DELAY <='1'; else RST_RSMRST_N_200MS_CNT <= RST_RSMRST_N_200MS_CNT + '1'; end if;

Doing the count before checking the count value implies that there must already be a value in RST_RSMRST_N_200MS_CNT already to increment, causing the latch.

 

Or you could use a variable to temporarily store the count.

 

#iwork4intel

AIbra11
Beginner
214 Views

Thanks, I tried this and no difference, same warning...

MEIYAN_L_Intel
Employee
214 Views

Hi,

The warning is due to you had assigned statement RST_RSMRST_N_200MS_DELAY <='1' when RST_RSMRST_N_200MS_CNT = "1100100" but you do not assign new value for RST_RSMRST_N_200MS_DELAY if RST_RSMRST_N_200MS_CNT is not equal to "1100100".

You may refer to the information as below:

https://www.intel.com/content/www/us/en/programmable/quartushelp/current/index.htm#msgs/msgs/wvrfx_l...

Thanks

Reply