VHDL-kieli FPGA-suunnittelussa/4-bittinen BCD-laskuri
Wikikirjasto
[muokkaa] Binary-coded Decimal
Binary-coded Decimal tai BCD on tapa esittää desimaaliluku bittijonona elektronisissa laitteissa. Sen sijaan, että muutettaisiin koko luku binääriksi, BCD jakaa luvun numeroihin ja muuntaa jokaisen numeron 4-bittiseksi binäärikoodiksi.
Täten, esimerkiksi, luku 345 on BCD-koodina
0011 0100 0101
Tämä on 3 numeroa pidempi kuin oikea vastaava binääri, 101011001, mutta sillä on useita etuja:
- Sitä voidaan helposti käyttää näyttöjen ohjaukseen, koska jokainen numero on koodattu erikseen.
- Se sallii jokaisen muutoksen desimaaliluvuksi; todellinen binääristä desimaaliksi muunnos on vaikeaa ja vaikeutuu aina enemmän mitä pidempi luku on.
- Skaalautuu helposti 10 tekijöillä.
BCD-koodilla on myös haittapuolensa:
- On vaikeaa toteuttaa aritmeettisia operaatioita BCD-koodilla.
- Se on hieman pidempi kuin todellinen binaari, joten se vaatii enemmän tallennustilaa.
[muokkaa] 4-bittinen BCD-laskuri
Laskee sisääntulo pulsseja nollasta yhdeksään, jonka jälkeen laskuri nollautuu ja aloittaa laskennan alusta.
Linkki videoon, joka esittää erittäin hyvin 4-bittisen BCD-laskurin toiminnan: BCD-laskuri
[muokkaa] VHDL-toteutus, 4-Bit BCD Up Counter with Clock enable
library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity Counter2_VHDL is port( Clock: in std_logic; Clock_enable: in std_logic; Reset: in std_logic; Output: out std_logic_vector(0 to 3)); end Counter2_VHDL; architecture Behavioral of Counter2_VHDL is signal temp: std_logic_vector(0 to 3); begin process(Clock,Reset) begin if Reset='1' then temp <= "0000"; elsif(Clock'event and Clock='1') then if Clock_enable='0' then if temp="1001" then temp<="0000"; else temp <= temp + 1; end if; else temp <= temp; end if; end if; end process; Output <= temp; end Behavioral;
