Ein mögliches Verfahren besteht darin, einen rückwertszählenden Zähler
zu realisieren, dessen Zählerstand mit der Teilerzahl geladen werden
kann. Man zählt rückwerts bis der Zählerstand 1 dezimal erreicht ist.
Dieser Zustand setzt die eigentliche Zählfunktion außer betrieb. Der
nächstfolgende Taktimpuls bewirkt, dass der Zähler mit der an den
Eingängen anstehenden Teilerzahl geladen wird. Der Zähler zählt nun
rückwerts und der Vorgang beginnt von neuem. Doch wie erhält man aus
dieser Vorgehensweise das gewünschte Ausgangssignal des Frequenzteilers?
Zu diesem Zweck bildet man ein Signal, das nur bei Zählerstand 1 dezimal
High-Pegel aufweist. Für alle anderen Zählerzustände soll es Low
bleiben.
Versuch mal folgendes Beispiel anzupassen:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity freqteil is
Port ( E : in std_logic_vector(3 downto 0);
Q : out std_logic_vector(3 downto 0);
RESET : in std_logic;
FAUS : out std_logic;
CLK : in std_logic);
end freqteil;
architecture Behavioral of freqteil is
signal qtemp : std_logic_vector(3 downto 0);
signal outtemp : std_logic;
begin
process (CLK,RESET)
begin
if RESET = '1' then
qtemp <= E;
outtemp <= '0';
elsif CLK='1' and CLK'event then
if qtemp = "0001" then
outtemp <= '1';
qtemp <= E;
else
outtemp <= '0';
qtemp <= qtemp - 1;
end if;
end if;
end process;
Q <= qtemp;
FAUS <= outtemp;
end Behavioral;