Het aantal ontwerpen dat je ooit zal maken dat minder dan 2 registers heeft, zal eerder beperkt zijn. Het beschrijven van registers neemt nogal wat regels HDL code in beslag. Stel dat er 2 registers in een design zijn: regA en regB. Een VHDL beschrijving van dit design zal ergens onderstaande twee stukken code bevatten.
PREGA: process(clock_i)
begin
if rising_edge(clock_i) then
if reset_i = '1' then
regA <= (others => '0');
else
if load_A = '1' then
regA <= regA_in;
end if;
end if;
end if;
end process;
PREGB: process(clock_i)
begin
if rising_edge(clock_i) then
if reset_i = '1' then
regB <= (others => '0');
else
if load_B = '1' then
regB <= regB_in;
end if;
end if;
end if;
end process;
Beide registers hebben een synchrone, actief hoge reset. Als, op een rising edge, de respectievelijke load signalen hoog zijn, zullen de register de inkomende data samplen..
Merk op dat labels niet dubbel gebruikt mogen worden. De 2 labels in bovenstaand voorbeeld zijn PREGA en PREGB.
Een compactere manier om deze twee registers te beschrijven is hier weergegeven. Aangezien de 2 beschrijvingen van register A en register B veel op elkaar lijken, kunnen deze beschrijvingen gemakkelijk samengenomen worden.
Extra aandacht moet besteed worden aan de if-then(-else) structuur. Wees jezelf er bewust van dat (in dit voorbeeld) het load_A signaal totaal geen effect heeft op register B. Er mag dus géén else gebruikt worden.
Dit zou echter geen syntax-fouten geven.
Met een else-beschrijving zou er immers beschreven worden dat register B enkel mag laden als load_A laag is EN load_B hoog is. Dit is een perfect plausible gedrag, maar niet gedrag dat in dit voorbeeld beoogd is.
PREGAB: process(clock_i)
begin
if rising_edge(clock_i) then
if reset_i = '1' then
regA <= (others => '0');
regB <= (others => '0');
else
if load_A = '1' then
regA <= regA_in;
end if;
if load_B = '1' then
regB <= regB_in;
end if;
end if;
end if;
end process;