"Serialisieren" VHDL-Rekord

Angenommen ich habe die folgende definition basiert auf Konstanten, die angeben, Vektor Länge des Datensatzes Mitglieder:

type point_t is record
    x: std_logic_vector(X_WIDTH-1 downto 0);
    y: std_logic_vector(Y_WIDTH-1 downto 0); 
end record;

Ich würde gerne konvertieren diese Art von Aufzeichnungen in std_logic_vectors, um in, sagen wir, ein FIFO. Momentan benutze ich den folgenden code:

PROCEDURE encodepoint(signal pnt: in point_t;
                      signal d: out std_logic_vector(POINT_ENC_WIDTH-1 downto 0)) is
    variable top: integer := 0;
begin
    top := X_WIDTH-1;
    d(top downto 0) <= pnt.x;

    top := top + Y_WIDTH;
    d(top downto top-X_WIDTH+1) <= sl.y;

    d(d'left downto top+1) <= (others => '0');
end;

Dieser code ist suboptimal in vielerlei Hinsicht. Zum Beispiel verlangt von mir immer richtig eingestellt POINT_ENC_WIDTH auf einen Wert, der groß genug ist, um zu ermöglichen d zu halten die ganze serialisierten Datensatz. Es stützt sich auf die Programmierer zu tun, sehr mechanische Arbeit. Zum Beispiel für jedes Mitglied der Datensatz, sagen x, X_WIDTH erscheint zweimal in den code, einmal in direktem Zusammenhang mit x und einmal in Verbindung mit dem nächsten Mitglied y. Dies schnell langweilig. Wenn ich die definition ändern des Datensatzes durch das hinzufügen zusätzlicher Felder, ich habe zu aktualisieren, sowohl die Serialisierung und die (sehr ähnliche) Deserialisieren von code, und ich kann nur vergessen diese. Wenn ich die Felder entfernen, zumindest der compiler meckert.

So das führt mich zu meiner Frage: gibt es eine einfache, automatisierte oder zumindest quasi-automatisierten Weg, um zu konvertieren VHDL-records in std_logic_vectors ohne Rückgriff auf manuell geschrieben serialisieren/Deserialisieren von code? Es ist nicht wichtig für mich zu wissen, die spezifische Codierung, wie ich bin über die Datensätze intern und die endgültige Ausgabe-format ist spezifiziert und implementiert werden manuell.

InformationsquelleAutor distributed | 2010-10-21
Schreibe einen Kommentar