ايران ويج

نسخه‌ی کامل: مشكل در VHDL
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2
سلام

دوستان من تازه دارم شروع ميكنم به 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
سلام
کسی میتونه بهم کمک کنه بگه من چطوری باید این تمریناتو حل بکنم؟؟؟بخصوص اخری که اصلا هیچ ایده ای واسش ندارم خواهش یکی برام توضیح بده بگه باید چه کار کنم من زیاد برنامه نویسی vhdl بلد نیستم و جواب اینها رو هم باید برای استادم بفرستم
یکی کمکم کنه لطفا
http://uploadkon.ir/?file=Doc1_4.pdf
http://uploadkon.ir/?file=Doc1_1.doc
سلام هیچ کسی نیست منو راهنمایی کنه؟؟؟؟؟؟؟
من برای سوال اول ی برنامه نوشتم اما به هنگام اجرا در نرم افزار مادل سیم ارور میده میگه 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 می مونه!Sad
نمی دونم چرا!
واقعا دیگه چیزی به عقلم نمی رسهConfused

ینی فک کنم یه جای این کد انجام نمی شه یا ... :

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 );
صفحه‌ها: 1 2