Ich versuche, einen meiner VHDL-Blöcke mit einem von Xilinx generierten Block (einem Dual-Port-RAM) zu verbinden.
Das Problem ist, dass die Schreibfreigabe des RAMs als std_logic_vector (0 bis 0) statt als std_logic definiert ist und ich nicht weiß, wie ich sie verbinden soll.
Der RAM-Block:
component bloque_4
port(
...
wea : in std_logic_vector(0 downto 0);
...
);
end component;
Während die Komponente, die versucht, in diesen Speicher zu schreiben, Folgendes ist:
component bloque_3
port(
...
write_en_b3 : out std_logic;
...
);
end component;
In der Testbench, die ich zum Testen der Verbindung geschrieben habe, habe ich ein Signal definiert, um die Kommunikation zwischen den beiden herzustellen:
signal write_en_b34 : std_logic;
Bisher läuft alles super, das Problem tritt auf, wenn ich versuche, das write_en_b34-Signal dem Wea-Port zuzuordnen.
uut: bloque_4
port map (
...
wea => write_en_b34,
..
);
Ich verstehe, dass es einen Typenkonflikt gibt, aber ich weiß nicht, wie ich ihn lösen soll. Wie könnte man also einen std_logic_vector (0 bis 0) einer std_logic zuordnen?
Mach es so.
uut: bloque_4
port map (
...
wea(0) => write_en_b34,
..
);
Es ist völlig in Ordnung, Slices oder Port-Elemente mit einer Mischung aus Signalen und Konstanten zu verknüpfen. Die einzige Einschränkung besteht darin, dass Sie, wenn Sie eines der Portbits zuordnen, alle zuordnen müssen.
Hier ist ein Beispiel für die Entität foo mit einem 8-Bit-port_a.
signal s_1 : std_logic;
signal s_2 : std_logic_vector(3 downto 0);
...
x: foo
port map(
port_a(0) => signal_1,
port_a(4 downto 1) => signal_2,
port_a(7 downto 5) => "000"
);
Im obigen Beispiel wäre es ein Fehler, wenn nur einige der Bits in port_a nicht an ein Signal oder einen konstanten Wert angehängt würden. Es wäre kein Fehler, wenn keines der Bits in port_a angehängt wäre, solange der Port einen Standardwert in der Entity-Definition hätte.
Sie können ein anderes Signal verwenden write_en_b34_v
und ihm write_en_b34 zuweisen. Dann können Sie write_en_b34_v der Eingabe des Blocks von Xilinx zuweisen:
signal write_en_b34_v : std_logic_vector(0 downto 0);
(...)
write_en_b34_v(0) <= write_en_b34
(...)
uut: bloque_4
port map (
...
wea => write_en_b34_v,
..
);
Es gibt wahrscheinlich noch einen anderen, einfacheren Weg dafür. write_en_b34_v
Sie können versuchen, Ihren Block auf diese Weise zuzuweisen :
uut: bloque_3
port map (
...
wea => write_en_b34_v(0),
..
);
und dann wie oben verwenden. Aber ich bin mir sicher, dass es funktionieren wird.
Benutzer8352