ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.






جهت تبلیغ در وب سایت ECA کلیک کنید.

کاربران برچسب زده شده

صفحه 1 از 3 123 آخرین
نمایش نتایج: از 1 به 10 از 29
  1. #1
    2012/02/27
    24
    0

    راهنمایی برای رفع مشکلا برنامه های vhdl

    سلام
    من3 تا سوال برنامه نویسی vhdl برای یکی از درسهام دارم برنامه 2 تا از سوالهارو نوشتم ولی ارور میده میشه منو راهنمایی کنید بگید باید چه کار کنم و اشکالات کجاست لطفا
    سوالات
    http://uploadkon.ir/?file=Doc1_4.pdf
    http://uploadkon.ir/?file=Doc1_1.doc

    در برنامه اول من از یک fanction استفاده کردم به نام to_integer واسه تبدیل bit_vector به natural این تابع در پکیج ieee.numeric_bit_unsigned است ولی برنامه نمیتونه این پکیج را پیداکنه و ارور میده چرا؟؟؟
    کد برنامه اول
    کد:
    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 ;
    این هم عکس ارورش
    http://uploadkon.ir/?file=Untitled_213.png
    لطفا منو راهنمایی کنید بگید اشکال کار کجاست من حتما بادی جواب بگیرم و بتونم برنامه را کامپیال کنم و برای استادم بفرستم
  2. #2
    2012/02/27
    24
    0

    پاسخ : راهنمایی برای رفع مشکلا برنامه های vhdl

    حالا برنامه سوال دوم
    این جا هم علاوه بر داشتم مشکل قبلی کلی ارور دیگه دارم که اصلا نمیفهمم چرا

    کد برنامه سوال دوم

    کد:
    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 ارور میده من که این متغرهارا به صورت پورت ورودی تعریف کردم
  3. #3
    2012/02/27
    24
    0

    پاسخ : راهنمایی برای رفع مشکلا برنامه های vhdl

    و در مورد سوال سوم
    من اصلا نمیدونم واسه این باید چه کار کنم
    یکی یکم منو راهنمایی کنه :sad:
    :cry:
  4. #4
    2012/02/27
    24
    0

    پاسخ : راهنمایی برای رفع مشکلا برنامه های vhdl

    هیچ کسی نیست منو راهنمایی کنه؟؟؟
    یعنی این سوالات اینقدر سخته :sad:
    لطفا منو واسه سوالهای 2-3 راهنمایی کنید :cry:
  5. #5
    2012/02/27
    24
    0

    پاسخ : راهنمایی برای رفع مشکلا برنامه های vhdl


    هیچ کسی نیست منو راهنمایی کنه؟؟؟
    یعنی این سوالات اینقدر سخته :sad:
    لطفا منو واسه سوالهای 2-3 راهنمایی کنید :cry:
  6. #6
    2012/02/27
    24
    0

    پاسخ : راهنمایی برای رفع مشکلا برنامه های vhdl

    یعنی هیچ کس نیست منو راهنمایی کنه؟؟؟؟؟؟؟؟؟؟؟؟؟/ :cry:


    کمی تغییر دادم اما باز ارور های نا مفهوم زیاد میده
    این کد برنامه

    کد:
     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 ;
    اینم عکس ارور هاش
    http://uploadkon.ir/?file=IMAG0004.jpg
    من نمیدونم چرا برای خط 53-72 ارور میده من که از یک تابع برای تبدیل بیت وکتور به نچرال استفاده کردم
    چرا به خطوط 7-8-9-10 و...... ارور های nonresolved میده؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
    یکی منو راهنمایی کنه لطفا
  7. #7
    2010/11/14
    31
    0

    پاسخ : راهنمايي براي رفع مشکلا برنامه هاي vhdl

    سلام
    ارور اول که به تبديل bv_to_natural ميگيره واسه اينه که تو کتابخونه use ieee.std_logic_1164.all چنين تبديلي وجود نداره(من اين تبديل رو اولين باره که مي بينم، نمي دونم اصلا" چنين تبديلي وجود داره يا نه!)
    به نظر من اين برنامه اي که نوشتي اصلا" اصول برنامه نويسي VHDL رو رعايت نمي کنه! اينو بايد بدوني که اين کد رو فقط مي توني simulation کني و قابل پياده سازي روي سخت افزار نيست(چون از time استفاده کردي!)
    اگه فقط هدفت شبيه سازيه که اصلا" بهتر بود از همون اول از integer استفاده مي کردي، نه bit_vector!
    اگه مي خواي کدي بنويسي که قابل پياده سازي رو FPGA باشه بهتر بود از std_logic_vector و std_logic استفاده مي کردي و واسه تبديل از تبديل هايي که تو کتابخونه هاي IEEE.numeric_std يا IEEE.STD_LOGIC_ARITH.ALL به اضافه IEEE.std_logic_unsigned واسه مثبت شدن اعداد استفاده مي کردي.

    خلاصه بخوام بگم! برنامه نويسي به زبان VHDL يه استايلي داره که تو کد تو اصلا" رعايت نشده. واسه همين نميشه فقط با رفع ايراداتش به نتيجه رسيد.
    من باشم پاک مي کنم از اول مي نويسم.
  8. #8
    2012/02/27
    24
    0

    پاسخ : راهنمایی برای رفع مشکلا برنامه های vhdl

    سلام
    من یک تابع نوشتم که بیت وکتور را تبدیل به نچرال میکنه
    این تابع که نوشتم درست کار میکنه چون توی چند برنامه دیگه ازش استفاده کردم
    لطفا اگه میشه منو برای ارور هایی بی منطقی که میده راهنمایی کنید چون این تمرین درسیه منه و فقط برای شبیه سازی هست نه پیاده سازی روی سخت افزار
    شما در مورد سوال سوم که در پست اول سوال را قرار دادم میتونید منو راهنمایی کنید؟
  9. #9
    2012/02/27
    24
    0

    پاسخ : راهنمایی برای رفع مشکلا برنامه های vhdl

    من همانطور که در پست شماره اول گفتم در برنامه اول من از یک fanction استفاده کردم به نام to_integer واسه تبدیل bit_vector به natural این تابع در پکیج ieee.numeric_bit_unsigned است ولی برنامه نمیتونه این پکیج را پیداکنه و ارور میده در نیتجه مجبور شدم خودم این تابع را بنویسم و این تابع در برنامه اول جواب داد اما در برنامه شماره 2 ارور میده + کلی ارور بی منطق دیگه در مورد nonresolved
    اگه شما اطلاعاتی دارید ممنون میشم منو راهنمایی کنید که چطوری ارور هاشو رفع کنم

  10. #10
    2010/11/14
    31
    0

    پاسخ : راهنمايي براي رفع مشکلا برنامه هاي vhdl

    در مورد ارروهاي مربوط به کتابخونه ها ، احتمال ميدم اگه طبق عکسي که گذاشتم عمل کني مشکلت حل بشه(فقط دقت کن که اون بالا رو simulation هستا!)
صفحه 1 از 3 123 آخرین
نمایش نتایج: از 1 به 10 از 29

موضوعات مشابه

  1. راهنمایی برای یک برنامه
    توسط loverdead در انجمن میکروکنترلرهای AVR
    پاسخ: 11
    آخرين نوشته: 2016/01/26, 21:04
  2. برنامه VHDL برای LCD کاراکتری
    توسط sepehr63 در انجمن PLD , SPLD , GAL , CPLD , FPGA
    پاسخ: 5
    آخرين نوشته: 2013/12/15, 00:14
  3. راهنمایی برای برنامه نویسی بیسیک
    توسط purealone در انجمن میکروکنترلرهای AVR
    پاسخ: 3
    آخرين نوشته: 2012/02/08, 01:13
  4. این برنامه ی VHDl برای فلیپ فلاپ T ایرادش چیه ؟
    توسط milad_kavoosi در انجمن PLD , SPLD , GAL , CPLD , FPGA
    پاسخ: 4
    آخرين نوشته: 2010/06/17, 00:10
  5. راهنمایی برای VHDL
    توسط jh_topgraph در انجمن PLD , SPLD , GAL , CPLD , FPGA
    پاسخ: 1
    آخرين نوشته: 2010/03/04, 18:01

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •