من فقط بصورت گذرا برنامه اولی رو دیدم
بنظرم یک سری اشتباهات داره :
مثلا هدر برنامه بجای ieee.numeric_bit_unsigned از USE ieee.numeric_std.ALL; استفاده کنید (در نرم افزار ISE )
قسمت تبدیل to_integer هم خطا syntax دارید بدین معنا که شما از یک طرف آرایه ram رو از جنس bit_vector گذاشتید تو این خط :
type memory_type is array (15 downto 0) of bit_vector (7 downto 0) ;
signal ram :memory_type ;
اما از طرف دیگه وقتی فراخوانی میکنید برای ریختن داده به خروجی باس رم...اون رو به صورت integer مقدار میدید مثل این خط:
d_out <= ram(to_integer(rd_addr));
یک نمونه کد ساده برای تبدیل از به اینتیجر اینجا هست که شاید بتونه کمک کنه :
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;
entity conv_test is
Port ( a : in STD_LOGIC_VECTOR (7 downto 0);
b : out integer);
end conv_test;
architecture Behavioral of conv_test is
begin
b <= to_integer(signed(a));
end Behavioral;
برنامه رو هم اگر لطف میکردید توضیح میدادید ...منظورم الگوریتم ویا فلوچارتی ساده ازش قرار میدادید....و هر قسمت برنامه هم جدا بالاش توضیحاتشو میذاشتید.. هم برای شما دیباگ کردنش راحتر میشه و هم برای ما قابل استفاده بشه...
مثلا میگفتید دوتا پروسس داره یکی برای read کردن یکی برای write و هرکدوم رو توضیح میدادید و...