La logica di controllo viene generata in modo errato a causa di un problema nelle versioni 4.1 e 4.1 SP1 del software Quartus II se sono soddisfatte le seguenti condizioni:
- Si crea un'istanza di una megafunzione lpm_counter o la megafunzione lpm_counter viene dedotta dal codice HDL durante la sintesi
- Il contatore nella progettazione utilizza sia segnali sincroni preimpostati che sincroni
- Si compilano i dispositivi di Stratix®, Stratix GX, Cyclone®, MAX® II o hardcopy Stratix
Il comportamento errato è dovuto a un problema con l'implementazione di clear box della lpm_counter megafunzione. Per evitare il problema se si dispone di un contatore nella progettazione che utilizza sia i segnali asincroni preimpostati che i segnali di cancellazione sincroni, copiare il file lpm_counter.tdf dalla directory di installazione >\libraries\megafunctions nella directory del progetto.
Questo problema è risolto a partire dal software Quartus II versione 4.2.
Di seguito è riportato un esempio di codice implementato in modo errato nelle versioni 4.1 e 4.1 SP1 del software Quartus II. In questo esempio, il clr
segnale viene rimosso nell'implementazione finale.
process (clk, clr, preset) is
begin
if (preset = '0') then
counter <= (others => '1');
elsif rising_edge(clk) then
if (clr = '1') then
counter <= (others => '0');
else
counter <= counter 1;
end if;
end if;
end process;