Multidimensionales Record als Port?

Gast #4585250
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
(Firma: Ingenieurbuero Gardiner) #4587742
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.
(Firma: www.dossmatik.de) #4592113
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

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