Forum: FPGA, VHDL & Co. Parallel In Serial Out Shift Register (PISOSR) in VHDL


von Mark W. (kram) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe mit vielen Beispielen, die ich so im Internet fand rumproboert, 
aber nix hinbekommen.
Jetzt habe ich mir ein 2-bit PISO selbst geschrieben. Und auch ein TB 
dazu.
Leider bin ich mit VHDL noch nicht soweit, dass ich das zum Simulieren 
bekomme.
Die Grundfunktion eines PISO's ist mir bekannt. Ich wollte versuchen zu 
simulieren, wieviel Ressourcen ich jeweils benoetige wenn ich die Input 
Anzahle erhoehe und fange mit einem 2 Bit PISO an. Wenn das 
funktioniert, wollte ich einfach die Input Anzahl schrittweise erhoehen.

Im Anhang sind die beiden Dateien und ich wuerde mich freuen, wenn mir 
jemand zeigen kann, was da noch fehlt um das simulieren zu koennen.

An den Eingaengen sollten jeweils irgendwelche Daten parallel anliegen 
und am Ausgang sollten sie bitzahl mal schneller rausgeschoben werden. 
Das ganze kontinuierlich.

Falls es interessiert, ich benutze Libero SoC 11.1.

Vielen Dank,
Mark

von PittyJ (Gast)


Lesenswert?

Vielleicht sollte man erst mal aussagekräftige Namen nehmen, und nicht 
nur A,B,S,Y. Und ein paar Kommentare in den Sourcecode, was da überhaupt 
passieren soll.

von Mark W. (kram) Benutzerseite


Lesenswert?

Hallo Pitty,

was passieren soll hab ich ja schon geschrieben.
Parallele Daten die bitweise syncron ankommen zu seriellen Datem 
umwandeln.

Hier nochmal die Ein- und Ausgaenge des PISO's:

port( Data     : in    std_logic_vector(1 downto 0);
          Enable   : in    std_logic;
          Shiften  : in    std_logic;
          Shiftin  : in    std_logic;
          Aclr     : in    std_logic;
          Clock    : in    std_logic;
          Shiftout : out   std_logic

Den Code hat mir die Software erzeugt, nachdem ich mit Smartdesigner ein 
PISO gebaut habe. A, B, S, Y sind vermutlich irgendwelche internen 
Signale.

Mark

von Duke Scarring (Gast)


Lesenswert?

Mark W. schrieb:
> Den Code hat mir die Software erzeugt
Aha. Und die Testbench auch?

Die passt nämlich nicht zum DUT:
1
# vsim -gui work.serializer_tb 
2
# ** Note: (vsim-3812) Design is being optimized...
3
# 
4
# ** Error: serializer_tb.vhd(88): (vopt-3473) Component instance "/serializer_tb/P2S_2bit_0 : P2S_2bit" is not bound.

Außerdem kann da auch nicht viel passieren, da die Eingänge nicht 
wirklich stimuliert werden:
1
    P2S_2bit_0 : P2S_2bit
2
        port map(
3
            -- Inputs
4
            en      => '0',
5
            shiften => '0',
6
            shiftin => '0',
7
            aclr    => '0',
8
            clk     => SYSCLK,
9
            Data    => (others => '0'),
10
            -- Outputs
11
            shiftout => open
12
            );

Duke

von Mark W. (kram) Benutzerseite


Lesenswert?

Hallo Duke,

ja die Testbench wurde auch generiert.

Da ich gereade anfange mit VHDL kann ich noch nicht vom Code aud fie 
Funktion schliessen. Deswegen hatte ich mir das Grundgeruest grafisch 
erzeugt.

ich wuerde auch gerne andere Beispiele nehmen, falls jemand da code zu 
posten kann.

Mark

von Jonas B. (jibi)


Lesenswert?

Hallo,

wenn du was an den Port-Definitionen änderst, speicher dir den Stimulus 
aus deiner aktullen Testbench und generiere diese dann neu, anschließend 
kopierst du den Stimulus wieder in die neue Testbench. Das ist 
wesentlicher schneller + fehlerunanfälliger.

Gruß Jonas

von Mark W. (kram) Benutzerseite


Lesenswert?

Hallo,

ich hab es jetzt mit einem Multiplexer geloest. Funktioniert auch.

Dank meinem neuen Buch R&S, VHDL Synthese, beginne ich es auch zu 
verstehen.

Gruss,
Mark

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.