Forum: FPGA, VHDL & Co. Multidimensionales Record als Port?


von BoLlman (Gast)


Lesenswert?

Hallo in die Runde,


ich bin auf der Suche nach einer eleganten Lösung an eine Entity mehrere 
Busse anzuschließen. Dabei soll, wenn möglich, die Anzahl der Busse über 
die (vector-)Breite definiert werden. Ähnlich einem 
standard_logic_vector. Den Bus selbst würde ich gerne als Record 
definieren.

Also im Grunde suche ich sowas in der Art:
1
package ... is
2
   type bus_type is record
3
        Leitung1 : std_vector;
4
        Leitung2 : std_logic;
5
        ...
6
        ...
7
    end record;
8
package end;
9
10
entity ... is
11
    port (
12
        clk : in std_logic;
13
        bus_in : in  bus_type(5 downto 0)
14
    );
15
end entity;

Falls es andere elegante Lösungsvorschläge gibt, nehm ich diese auch. :)

Viele Grüße
BoLLe

von Charles G. (Firma: Ingenieurbuero Gardiner) (cfgardiner)


Lesenswert?

Was siehst Du an Deiner Lösung als nicht elegant? Ich denke besser geht 
es nicht.

Früher hatten manche Synthesetools Probleme mit Record als Ports aber 
ich glaube inzwischen können es ziemlich alle. Da musste man entweder 
ein Entity für jeden Variant schreiben oder ein Entity für den maximal 
Ausbau und entsprechend die Busse als 'open' bezeichnen.

Du brauchst natürlich noch ein Array of bus_type, sonst denke ich, 
muesste es gehen.

von Markus F. (Gast)


Lesenswert?

Von Records habe ich mich schon lange verabschiedet. Die sind n.m.E. 
eher eine Behinderung, als ein Vorteil, weil sie die Signale 
verschleiern und das Verwenden unflexibal machen.

von BoLlman (Gast)


Lesenswert?

@Markus

und was nutzt du dann stattdessen?


Grüße BoLLe

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

Ich habe so etwas in meiner Softcpu um die Peripherie anzuschließen und 
dann noch flexibel zu sein.
http://www.dossmatik.de/mais-cpu.html

Schau dir das File MAIS_soc.vhd an.


Jeder Slave hat den selben Record als Input. Aber jeder Slave bekommt 
aber in der generic BSEL einen anderen Wert. BSEL ist die Slave select 
Leitung.

Und der Output wird über einen Multiplexer zurückgeführt, der ebenfalls 
das BSEL Signal nutzt.
1
---BUS multiplexer  
2
    BBUS_out <= slave(0) when BSEL(0)='1' else  --DRAM
3
    slave(1)             when BSEL(2)='1' else  --UART
4
    slave(2);   --Bus Dummy

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.