VHDL Code zu Register mit delay (Teillösung zu gelöschten Beitrag)

Gast #4173346
Lesenswert?

Hallo, hier hatte ja vor kurzen jemand eine Hausaufgabe geposted.
Dieser Thread wurde aber leider gelöscht (eventuell weil er Geld dafür 
wollte?)
Da ich schon länger nichts mehr in VHDL gemacht hatte und mal wieder 
Lust drauf hatte hab ich mal angefangen das zu bearbeiten.
Ich habe zu dieser Aufgabe 1 mal eine Teillösung geschrieben. Leider 
habe ich jetzt die Aufgabe nicht mehr.
Aber Sie besagte ungefähr, dass man ein "FlipFlop" mit delay schreiben 
sollte.

Vielleicht erinnert sich noch jemand daran. Oder der Poster liest hier 
noch und könnte wenigstens die Aufgabe nochmal posten.

Mich hätte interessiert, wie ihr die seltsamen Delay Wünsche umgesetzt 
hättet.

Man sollte ein Delay von 80 ps und eine clockrate von 336? ps machen.
Wenn man die clockrate nicht künstlich runtersetzt, sondern nur das 
delay beachtet hätte meine Lösung bis jetzt so ausgesehen:
1
library ieee;
2
use ieee.std_logic_1164.all;
3
use ieee.numeric_std.all;
4

5
entity aufgabe1 is
6
    generic(
7
        TCO : integer := 8;
8
        N : integer := 32
9
    );
10
    port(
11
        clk : in  std_logic;
12

13
        ld : in  std_logic;
14
        clr : in std_logic;
15
        din : in std_logic_vector(N-1 downto 0);
16

17
        dout : out std_logic_vector(N-1 downto 0)
18
    );
19
end aufgabe1;
20

21
architecture behavior of aufgabe1 is
22

23
    type DIN_TYPE is array (0 to TCO-1) of std_logic_vector(N-1 downto 0);
24

25
    type register_file is record
26
        din : DIN_TYPE;
27
        counter : integer range 0 to TCO;
28
    end record;
29

30
    signal r : register_file; 
31
    signal rin : register_file := ((others => (others => '0')), 0);
32

33
begin
34

35
    comb: process(r, ld, clr, din)
36
        variable v : register_file;
37
    begin
38
        v := r;
39

40
        -- increase counter
41
        if (v.counter < TCO-1) then
42
            v.counter := v.counter + 1;
43
        else 
44
            v.counter := 0;
45
        end if;
46

47
        -- read in
48
        if (clr = '0') then
49
            if (ld = '1') then
50
                v.din(v.counter) := din;
51
            else 
52
                v.din(v.counter) := (others => '0');
53
            end if;
54
        else 
55
            dout <= (others => '0');
56
        end if;
57

58
        -- output
59
        if (v.counter >= TCO-1) then
60
            dout <= v.din(0);
61
        else 
62
            dout <= v.din(v.counter + 1);
63
        end if;
64

65
        rin <= v;
66
       
67
    end process;
68

69
    regs : process(clk)
70
    begin
71
        if rising_edge(clk) then
72
            r <= rin;
73
        end if;
74
    end process;
75

76
end architecture;
Moderator (Firma: Titel) Persönliche Seite #4173461
Lesenswert?

nfet schrieb:
> Hallo, hier hatte ja vor kurzen jemand eine Hausaufgabe geposted.
> Dieser Thread wurde aber leider gelöscht (eventuell weil er Geld
> dafür wollte?)
Grundlegend funktioniert dieses Forum so, dass jemand eine Frage hat, 
einen Lösungsansatz bietet und dieser dann diskutiert wird. Siehe den 
Beitrag "Einheitlicher Umgang mit faulen Schülern etc.?"

Es gibt hier keine "Stellenvermittlung durch die Hintertür". Wenn einer 
ein Stellenangebot (auch Teilzeit) hat, dann soll er sich doch einfach 
bei Andreas melden...
https://www.mikrocontroller.net/jobs/info

> Vielleicht erinnert sich noch jemand daran. Oder der Poster liest hier
> noch und könnte wenigstens die Aufgabe nochmal posten.
Dann sollte er selber wenigstens versuchen, irgendwas dazu zu 
schreiben. Wenigstens einen Frame mit einer Entity und irgendeiner 
Architecture.


Und zum Schluss meine persönliche Einstellung:
Ich werde es nicht unterstützen, wenn einer versucht, sich mit Geld 
seine fürs Studium nötigen "Scheine" zu erkaufen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren