我有這樣的代碼如何初始化std_logic_vector?
--RAM module
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.numeric_std.all;
entity RAM is
generic(
address_length, data_length : integer);
port(
addr : in std_logic_vector(address_length-1 downto 0);
dat : inout std_logic_vector(data_length-1 downto 0);
rd, wr, en : in bit);
end entity RAM;
architecture RAM_impl of RAM is
type mem is array(2**address_length-1 downto 0) of std_logic_vector(data_length-1 downto 0);
begin
process(rd, wr, en)is
variable cont : mem;
begin
if(en = '1')then
if(wr = '1' and rd = '0')then
cont(to_integer(unsigned(addr))) := dat;
end if;
if(rd = '1' and wr = '0')then
dat <= cont(to_integer(unsigned(addr)));
end if;
end if;
end process;
end architecture RAM_impl;
--Test module
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.numeric_std.all;
entity Example4RAM is
end entity Example4RAM;
architecture Tester of Example4RAM is
signal rd, wr, en : bit;
signal str : std_logic_vector(15 downto 0);
signal ext : std_logic_vector(7 downto 0);
begin
module : entity work.RAM(RAM_impl)
generic map(
address_length => 16,
data_length => 8)
port map(str, ext, rd, wr, en);
tt : process is
begin
str <= X"0001";
ext <= "00000000";
rd <= '0'; wr <= '1';
wait for 5 ns;
en <= '1';
wait for 5 ns;
rd <= '0'; wr <= '0';
wait for 10 ns;
rd <= '1'; wr <= '0';
end process;
end architecture Tester;
當我運行該內存模塊海峽矢量模擬初始化不錯,但內線矢量保持初始化。在RAM模塊中,str是在向量中,而ext是在向量中。這是以某種方式造成問題,有誰知道解決方案? (我從昨天開始改變源代碼,但它仍然不能工作)
沒有看到RAM實體(也可能是體系結構),我們只能在黑暗中猜測。如果第二個參數(爲什麼不使用命名關聯?)是「out」或「inout」模式,答案可能就在那裏。 –
Brian暗示說,如果ext是與RAM的數據連接並且它有一個關聯的驅動程序(例如mode inout),則有兩個ext(RAM,process tt)驅動程序。分機的有效價值是兩位司機的解決方案。所有'U'和'0'都解析爲所有'U's,std_logic_vector是解析類型或子類型(-2008)。如果沒有RAM設計描述,很難預測如何取得成功,指出在讀取RAM之前不要將所有的'Z'驅動到內存中,並且在rd不正確時可能不在RAM中。 – user1155120
上面編輯的代碼,檢查RAM。我是VHDL的初學者,所以任何建議都會有幫助。 – Dejan