-
من فقط بصورت گذرا برنامه اولی رو دیدم
بنظرم یک سری اشتباهات داره :
مثلا هدر برنامه بجای 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 و هرکدوم رو توضیح میدادید و...
-
خیلی ممنون از راهنمایی هاتون:n01:
من از نرم افزار مادل سیم استفاده میکنم
در خط تعریف ارایه
من گفتم که تعداد خانه های اریه من 16 خانه باشه و این اندیس ها از جنس اینتریجر باشه و چیزی که درون این خانه ها قرار میگره بیت وکتور باشه
برای دسترسی به یک از خانه های این ارایه اسم اریاه +اندیس اون خونه مورد استفاده قرار میگیره
ram(andis)
من در برنامه اندیس را یک بیت وگتور 4 بیتی در نظر گرفتم حالا واسه درسترسی به یک خونه از اون ارایه احتیاج دارم اون ادرس لازم را تبدیل به اینتجر کنم که وقتی توی پکیچ ها گشتم دیدم این پکیج یک تابع داره که بیت ئکتور را تبدیل به انتجر میکنه
من سوالهایی که باید براشون برنامه بنویسم را در پست اول اپلود کردم
میشه ازتون خواهش کنم که برای سوال های دوم و سوم هم منو راهنمایی کنید؟؟
مخصوصا سوال سوم :n28:
من میدونم این سوال توی امتحان میاد و من بلد نیستم اصلا باید چه کارش کنم
ایا نیازی به for generator داره؟؟؟؟؟؟؟؟؟؟
منو راهنمایی کنید لطفا
-
خوب مشکل برنامه اول را با نوشتن یک تابع که تبدیل بیت وکتور به اینتجر را انجام میده حل کردم
منو برای سوال دو و سه راهنمایی کنید
-
کسی نیست منو راهنمایی کنه؟
-
سلام
من برنامه شماره 2 رو کمی تغییر دادم اما باز ارور های نا مفهوم زیاد میده
این کد برنامه
کد:
library ieee;
use ieee.std_logic_1164.all;
entity DualBuffer is
port (d_in : in bit_vector(0 to 7);
d_out: out bit_vector(0 to 7);
wr_addr:inout bit_vector( 0 to 3);
rd_addr:inout bit_vector( 0 to 3);
wr_en1:inout bit;
wr_en2:inout bit;
rd_en1:inout bit;
rd_en2:inout bit;
wr_clk :inout bit;
rd_clk :inout bit);
end entity ;
architecture struct of DualBuffer is
signal empty,full :bit;
signal counter1,counter2 : integer;
signal flag : bit:='1';
function bv_to_natural (bv: in bit_vector) return natural is
variable result : natural :=0;
begin
for index in bv'range loop
result :=result*2 +bit'pos(bv(index));
end loop;
return result;
end function bv_to_natural;
component Ram is
port( d_in :in bit_vector (0 to 7);
d_out :out bit_vector(0 to 7);
wr_clk,rd_clk :inout bit ;
wr_en,rd_en:inout bit;
wr_addr:inout bit_vector(0 to 3);
rd_addr :inout bit_vector (0 to 3));
end component Ram;
begin
Ram1 : component Ram
port map (d_in =>d_in,d_out=>d_out,wr_en=>wr_en1,rd_en=>rd_en1,wr_addr=>wr_addr,rd_addr=>rd_addr,wr_clk=>wr_clk,rd_clk=>rd_clk);
Ram2 :component Ram
port map (d_in =>d_in ,d_out=>d_out,wr_en=>wr_en2,rd_en=>rd_en2,wr_addr=>wr_addr,rd_addr=>rd_addr,wr_clk=>wr_clk,rd_clk=>rd_clk);
read : process is
begin
if (rd_clk'event and rd_clk='1') then
if (rd_en1='1') then
if (wr_en1='0') then
if (counter1 /=0) then
d_out<=Ram1(bv_to_natural(rd_addr));
counter1<= counter1 -1;
flag <='0';
else --Ram1 is empty
wr_en1 <='1';
wait for 10 ns;
rd_en1<= '0';
wait for 10 ns;
wr_en2 <='0';
wait for 10 ns;
rd_en2<='1';
wait for 10 ns;
counter1 <=0;
end if;
end if;
elsif (rd_en2='1') then
if(wr_en2='0') then
if(counter2 /=0)then
if (flag /='1')then
d_out<=Ram2(bv_to_natural(rd_addr));
counter2<= counter2 -1;
else --Ram2 is empty
rd_en2<= '0';
wait for 10 ns;
wr_en2<= '1';
wait for 10 ns;
wr_en1<= '0';
wait for 10 ns;
rd_en1<= '1';
wait for 10 ns;
counter2 <=0;
end if;
end if;
end if;
end if;
end if;
wait on rd_clk,rd_en1,wr_en1,counter1,rd_en2,wr_en2,counter2;
end process ;
write:process is
begin
if(wr_clk'event and wr_clk='1')then
if(wr_en1='1')then
if(rd_en1='0')then
if(counter1 /=16) then
Ram1(bv_to_natural(wr_addr))<= d_in;
counter1<=counter1+1;
else --Ram1 is full
wr_en1 <='0';
wait for 10 ns;
rd_en1<='1';
wait for 10 ns;
wr_en2<='1';
wait for 10 ns;
rd_en2<='0';
wait for 10 ns;
counter1<=16;
wait for 10 ns;
end if;
end if;
elsif(wr_en2='1')then
if(rd_en2='0')then
if(counter2 /=16)then
Ram2(bv_to_natural(wr_addr))<=d_in;
counter2<=counter2+1;
else --Ram2 is full
wr_en2 <='0';
wait for 10 ns;
rd_en2 <='1';
wait for 10 ns;
wr_en1 <='1';
wait for 10 ns;
rd_en1 <='0';
wait for 10 ns;
counter2<=16;
wait for 10 ns;
end if;
end if;
end if;
end if;
wait on wr_clk,wr_en1,rd_en1,counter1,wr_en2,rd_en2,counter2;
end process ;
fullempty:process is
begin
if(rd_en2='1' and wr_en1='1')then
if(counter1=16 and counter2 /=0) then
full<='1';
end if;
elsif(rd_en1='1' and wr_en2='1')then
if(counter1 /=0 and counter2=16)then
full<='1';
end if;
elsif (rd_en2='1' and wr_en1='1' )then
if( counter1 /=16 and counter2=0) then
empty<= '1';
end if;
elsif(rd_en1='1' and wr_en2 ='1') then
if(counter1=0 and counter2 /=16) then
empty <='1';
end if;
end if;
wait ;
end process fullempty;
end architecture;
configuration conection of DualBuffer is
for struct
for Ram1,Ram2:Ram
use entity work.Dual_Port_Ram(behavior);
end for;
end for ;
end configuration conection ;
اینم عکس ارور هاش
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
من نمیدونم چرا برای خط 53-72 ارور میده من که از یک تابع برای تبدیل بیت وکتور به نچرال استفاده کردم
چرا به خطوط 7-8-9-10 و...... ارور های nonresolved میده؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
یکی منو راهنمایی کنه لطفا
-
سلام
کسی نبود منو راهنمایی کنه؟؟؟؟؟؟؟؟؟؟؟؟؟