Forum: FPGA, VHDL & Co. VHDL Code zu Register mit delay (Teillösung zu gelöschten Beitrag)


von nfet (Gast)


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;

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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.

: Bearbeitet durch Moderator
von Jürgen (Gast)


Lesenswert?

Auch ich werde aus den oben beschriebenen Gründen hier keine Lösung 
Posten. Dennoch ein kleiner Tipp, mit dem du mit Hilfe von Google dein 
Problem lösen können solltest:
Transport Delay Model

von nfet (Gast)


Lesenswert?

Danke für den Tip mit dem Transport Delay Model
1
q<=r nor nq after 1ns;
2
nq<=s nor q after 1ns;

Aber ist so etwas denn synthetisierbar?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

nfet schrieb:
> Aber ist so etwas denn synthetisierbar?
Nein. Das "after" wird mit einer Warnung ignoriert.

: Bearbeitet durch Moderator
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.