2. Beispiel: 4-Bit-Binärzähler
(EN google-translate)
(PL google-translate)
Statt einer einzelnen LED soll nun ein 4-Bit-Binärzähler realisiert werden.
Die physikalische Zuordnung der 4 Bits soll sein:
Bit 3: IO20 P126 (msb most significant bit 2 hoch 3) Bit 2: IO30 P130 Bit 1: IO31 P131 Bit 0: IO32 P132 (lsb least significant bit 2 hoch 0)
Code 0-1: Pinzuordnung
Projekt-Download
binaerzaehler.zip - Download des Beispiels als ISE-Projekt.Beschaltung
Bild 0-1: Beschaltung des DLP-FPGA-Boards.
Das Programm wird aus dem vorangegangenen heraus weiter entwickelt.
Grundidee für die Realisierung:
|
Quelltext
library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity binaerzaehler is Port ( MEINECLOCK : in STD_LOGIC; VIERBIT : out STD_LOGIC_VECTOR (3 downto 0)); end binaerzaehler; architecture Behavioral of binaerzaehler is signal zaehler : integer range 0 to 2999999 := 0; signal VIERBITZAEHLER : integer range 0 to 15 := 0; begin process begin wait until rising_edge(MEINECLOCK); if (zaehler<2999999) then zaehler <= zaehler+1; else zaehler <= 0; if(VIERBITZAEHLER<15) then VIERBITZAEHLER <= VIERBITZAEHLER+1; else VIERBITZAEHLER <= 0; end if; end if; end process; -- Typumwandlung erforderlich, da Mapping zwischen unterschiedlichen Datentypen: VIERBIT <= conv_std_logic_vector(VIERBITZAEHLER,VIERBIT'length); end Behavioral;
Code 0-2: VHDL-Quelltext in Datei binaerzaehler.vhd
## GCLK6 ist auf FPGA-Chip Pin 56 NET "MEINECLOCK" LOC = "P56"; ## Mapping muss bitweise erfolgen: NET "VIERBIT<3>" LOC = "P126"; NET "VIERBIT<2>" LOC = "P130"; NET "VIERBIT<1>" LOC = "P131"; NET "VIERBIT<0>" LOC = "P132"; NET "MEINECLOCK" IOSTANDARD = LVCMOS25; NET "VIERBIT<3>" IOSTANDARD = LVCMOS33; NET "VIERBIT<2>" IOSTANDARD = LVCMOS33; NET "VIERBIT<1>" IOSTANDARD = LVCMOS33; NET "VIERBIT<0>" IOSTANDARD = LVCMOS33;
Code 0-3: Festlegung der Pinzuordnung und Pinkonfiguration in der Konfigurationsdatei binaerzaehler.ucf