Moin,
ich mache grad meine ersten Versuche mit VHDL. Meine Aufgabe ist jetzt
ein variabel einstellbares Rechtecksignal zu erzeugen. Und nun komme ich
nicht mehr weiter.
Ich nutze hierfür das Spartan 3e-Board und ISE Projekt Navigator. Der
Syntax Check ist in jedem Modul und jeder Testbench erfolgreich.
1. Problem
Ich habe das Projekt in mehrere Module Aufgeteilt:
counter: zählt bis zu einem Wert M (in einer Generic Vorbelegt mit 5)
und gibt dann ein tick raus, zählt dann weiter bis er dann resetet wird.
Braucht ein Reset um zu Starten. q Zähl dabei binär hoch.
RS_FF: Ein RS-Flip-Flop, der undefinierter Zustand sollte nie
eintreffen. Setzt bzw Resetet bei den Ticks den Ausgang (wave)
testbench: zum testen der einzelnen Module
Hier liegt das Problem:
square_wave: Hinein kommt ein belibiges Clock Signal mit (0101010...); N
und M sind in der Generic mit 5 vorbelegt; Heraus sollte also ein Signal
(wave) kommen, welches 5 Takte auf 1 gelegt ist, dann wieder 5 takte auf
Null... .
Ist denn mein grund Gedanke grundsätzlich falsch? Wo könnte mein Fehler
liegen? Ich weiß auch nicht wie es zu dieser testbench kommen kann
(siehe Bild).
2. Problem
Modul: Block Clock
Nutze das Modul "counter" von oben, um für das Modul "sqare_wave" die
Clock herunter zu teilen. Dafür wird der Ausgang der auf den Reset des
counters gelegt.
counter: zählt bis zu einem Wert M (in einer Generic Vorbelegt mit 5)
und gibt dann ein tick raus, zählt dann weiter bis er dann resetet wird.
Braucht ein Reset um zu Starten. q Zähl dabei binär hoch.
Damit mit der Tick als erstes dem Signal "raus" übergeben wird, bevor
der Counter resetet wird, habe ich das in einem Prozess geschrieben.
Trotdem der binär Counter richtig zählt (siehe q), wird der Tick
offensichtlich nicht weitergegeben.
1 | library IEEE;
|
2 | use IEEE.STD_LOGIC_1164.ALL;
|
3 | use IEEE.NUMERIC_STD.ALL;
|
4 |
|
5 | entity block_clock is
|
6 | port(
|
7 | clk: in std_logic;
|
8 | reset_in: in std_logic;
|
9 | clk_neu: out std_logic;
|
10 | q_temp: out std_logic_vector(3 downto 0)
|
11 | );
|
12 | end block_clock;
|
13 |
|
14 | architecture Behavioral of block_clock is
|
15 | signal raus: std_logic;
|
16 | signal reset_temp: std_logic;
|
17 |
|
18 | begin
|
19 | -- instantiate the circuit under test
|
20 | uut: entity work.counter(arch) -- uut: unit under test
|
21 | port map(
|
22 | clk=>clk,
|
23 | max_tick=>raus,
|
24 | reset=>reset_temp,
|
25 | q=>q_temp
|
26 | );
|
27 | process(raus,reset_in)
|
28 | begin
|
29 | clk_neu <= raus;
|
30 | reset_temp <= reset_in or raus;
|
31 | end process;
|
32 | end Behavioral;
|
Ich wäre für jede Hilfe Dankbar!
Also schonmal vielen Dank im Voraus.
Gruß Marten