سلام
دوستان من تازه دارم شروع ميكنم به VHDLنويسي.من برنامه خيلي ساده زير رو نوشتم.ولي موقع كمپايل errorميده.
کد:
entity S is
port (a,b,s :in bit;
o :out bit);
end;
--------------------
architecture D of S is
signal g,h :bit;
begin
g<=not(s) and a;
h<=s AND b;
o<=g or h;
end D;
در كامپايل كردن اين اطلاعات و خطاها رو ميده:
نقل قول: Info: *******************************************************************
Info: Running Quartus II Analysis & Synthesis
Info: Version 4.0 Build 214 3/25/2004 Service Pack 1 SJ Web Edition
Info: Processing started: Fri Sep 07 15:44:58 2007
Info: Command: quartus_map --import_settings_files=on --export_settings_files=off Vhdl1 -c Vhdl1
Info: Found 2 design units and 1 entities in source file Vhdl1.vhd
Info: Found design unit 1: S-D
Info: Found entity 1: S
Error: Node instance instantiates undefined entity Vhdl1
Error: Quartus II Analysis & Synthesis was unsuccessful. 1 error, 0 warnings
Error: Processing ended: Fri Sep 07 15:45:08 2007
Error: Elapsed time: 00:00:09
Error: Quartus II Full Compilation was unsuccessful. 1 error, 0 warnings
من كه تازه كارم و چيزي حاليم نيست.اگر كه كسي مشكلم رو بگه ممنون ميشم.
با كمال سپاس
S.Mahdizadeh
سلام
خیلی خوب که برای قرار دادن برنامه در سایت از کلید code استفاده کنید.
کد شما هیچ مشکلی ندارد.
لازم نام entity با نام پروژه و نام فایل VHDL با هم برابر باشند
از خطایی که داده است پیدا است شما نام پروژه را Vhdl1 انتخاب کردید.
برای رفع عیب, نام entity S is را به entity Vhdl1 is تغییر دهید.
همچنین نام فایل VHDL را Vhdl1 قرار دهید.
سلام
بله حق با شما است.ديروز راه افتاد.خيلي خيلي هم ممنون.
با كمال سپاس
S.Mahdizadeh
سلام هیچ کسی نیست منو راهنمایی کنه؟؟؟؟؟؟؟
من برای سوال اول ی برنامه نوشتم اما به هنگام اجرا در نرم افزار مادل سیم ارور میده میگه package که استفاده کردم را نمیشناسه چرا؟؟؟؟؟؟؟
خواهش میکنم منو راهنمایی کنید
کد:
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_bit_unsigned.all;
entity Dual_Port_Ram is
port (wr_ck : in bit;
rd_ck : in bit ;
wr_addr : in bit_vector(3 downto 0);
rd_addr : in bit_vector (3 downto 0);
d_out : out bit_vector(7 downto 0);
d_in : in bit_vector(7 downto 0);
wr_en,rd_en :in bit);
end entity Dual_Port_Ram ;
architecture behavior of Dual_Port_Ram is
type memory_type is array (15 downto 0) of bit_vector (7 downto 0) ;
signal ram :memory_type ;
begin
write: process(wr_ck) is
begin
if wr_ck'event and wr_ck ='1' then
if wr_en='1' then
if wr_addr /=rd_addr then
ram(to_integer(wr_addr)) <= d_in;
end if;
end if;
end if ;
end process write ;
read: process (rd_ck) is
begin
if rd_ck'event and rd_ck='1' then
if rd_en='1' then
if wr_addr /= rd_addr then
d_out <= ram(to_integer(rd_addr));
end if;
end if;
end if;
end process read ;
end architecture behavior ;
کسی نمیتونه منو راهنمایی کنه؟؟
این برنامه ایی هست که برای سوال دوم نوشتم اما این همه کلی ارور میده که نمیفهمم چرا
کد:
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,ad_addr: in bit_vector( 0 to 3);
wr_en1:in bit;
wr_en2:in bit;
rd_en1: in bit;
rd_en2:in bit;
wr_clk : in bit;
rd_clk : in bit);
end entity ;
architecture struct of DualBuffer is
signal empty,full :bit;
signal counter1,counter2 : integer :=0;
signal flag : bit:='1';
component Ram is
port( d_in :in bit_vector (0 to 7);
d_out :out bit_vector(0 to 7);
wr_clk,rd_clk : in bit ;
wr_en,rd_en:in bit;
wr_addr:in bit_vector(0 to 3);
rd_addr :in 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 (rd_clk) 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_in<=Ram1(to_integer(rd_addr));
counter1<= counter1 -1;
flag <='0';
else --Ram1 is empty
wr_en1 <='1';
rd_en1<= '0';
wr_en2 <='0';
rd_en2<='1';
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_in<=Ram2(to_integer(rd_addr));
counter2<= counter2 -1;
else --Ram2 is empty
rd_en2<= '0';
wr_en2<= '1';
wr_en1<= '0';
rd_en1<= '1';
counter2 <=0;
end if;
end if;
end if;
end if;
end process ;
write:process (wr_clk) is
begin
if(wr_clk'event and wr_clk='1')then
if(wr_en1='1')then
if(rd_en='0')then
Ram1(to_integer(wr_addr))<=d_out;
counter1<=counter1+1;
else --Ram1 is full
wr_en1 <='0';
rd_en1<='1';
wr_en2<='1';
rd_en<='0';
counter1<=16;
end if;
end if;
elsif(wr_en2='1')then
if(rd_en2='0')then
if(counter2 /=16)then
Ram2(to_integer(wr_addr))<=d_out;
counter2<=counter2+1;
else --Ram2 is full
wr_en2 <='0';
rd_en2 <='1';
wr_en1 <='1'
rd_en1 <='0';
counter2<=16;
end if;
end if;
end if;
end if;
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;
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 ;
این هم ارور های مربوط به مسله دوم منو راهنمایی کنه چرا این ارور ها رو میده
http://uploadkon.ir/?file=erorr buffer_1.png
نمیفهمم چرا خطهای 47-50 و61-64و80-82و90-95 ارور میده من که این متغرهارا به صورت پورت ورودی تعریف کردم
کسی نمیتونه منو راهنمایی کنه؟؟؟؟؟؟؟؟؟؟
بچه ها سلام
می خواستم از یکی از صاحبنظران این عرصه! بپرسم که این error هاب الکی که (نه حتی در حین کامپایل) بلکه در حین شبیه سازی میاد چه دلیلی می تونه داشته باشه؟!
بعد از زدن run برای تعدادی از خطوط که در زیر اوردمشون این خطا رو میده:(و البته برخلاف خروجی تک بیتی که به درستی تغییر می کند هیچ یک از بیتهای خروجی دیگر که برداری از نوع std_logic است از حالت u به مقدار خاصی تغییر نمی کنند )
error: vsim(3036)instantiation DEPT OF '/test_bench/T1/L1/L1/L1/.../L1/L1'is 79. assuming recurrensive instantiation.
و اینم تمام خطوطی که error ها مربوط به اونهاست-با شروع از خط 79-:(توضیح اینکه ابن کدها وسط یه برنامه ست اگه لازم بود بگید کد رو هم بزارم )
code (1 downto 0) <= temp (7 downto 6) when "11",
temp (5 downto 4) when "10",
temp (3 downto 2) when "01",
temp (1 downto 0) when others;
L1 : priority16to4 port map (r , code , active );
end tree_arch16to2_comb2to1 ;
library ieee;
use ieee.std_logic_1164.all;
entity minPrioEnc is
port(r4: in std_logic_vector(1 downto 0); code2: out std_logic; act21: out std_logic );
end minPrioEnc ;
architecture algorithm of minPrioEnc is
واقعا ممنون می شم کمکم کنین
سلام.
من كار نكردم، اما طبق error ظاهرا مشكل از test bench اي هست كه نوشتيد نه كد خود برنامه.
test bench رو يه بار ديگه كنترل كنيد ،( شايد هم مشكل از جاي ديگه اي باشه! )اميدوارم حل بشه ...
موفق باشيد.
(۲۷-بهمن-۱۳۹۱, ۰۲:۵۲:۱۴)sharin نوشته است: [ -> ]سلام.
من كار نكردم، اما طبق error ظاهرا مشكل از test bench اي هست كه نوشتيد نه كد خود برنامه.
test bench رو يه بار ديگه كنترل كنيد ،( شايد هم مشكل از جاي ديگه اي باشه! )اميدوارم حل بشه ...
موفق باشيد.
ممنونم
اما منم چون همین فکر رو کردم کلا اومدم بی خیال تست بنچ شدم و رفتم دستی به پورت ورودی م counter دادم ولی همچنان همون errorها و ...
من تیکه به تیکه سیگنالها رو چک کردم و همه چی درسته
فقط اونجایی که سیگنال نهایی رو با انتساب سیگنال به پورت خروجی entityم می دم انتساب انجام نمی شه و پورتم هم چنان unknown می مونه!
نمی دونم چرا!
واقعا دیگه چیزی به عقلم نمی رسه
ینی فک کنم یه جای این کد انجام نمی شه یا ... :
code (1 downto 0) <= temp (7 downto 6) when "11",
temp (5 downto 4) when "10",
temp (3 downto 2) when "01",
temp (1 downto 0) when others;
L1 : priority16to4 port map (r , code , active );