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