اطلاعیه

Collapse
No announcement yet.

حلقه در vhdl

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    حلقه در vhdl

    سلام و خسته نباشید
    یه سوال داشتم ممنون میشم اگه لطف کنید جواب بدید
    حلقه ها در vhdl چند نوع هستن ؟ سینتکسشون چه جوریه ؟ کجا کاربرد دارن ؟
    کلا میخاستم یه توضیح در مورد حلقه ها در vhdl بدید و اینکه چه جوری ازشون استفاده باید کنیم
    اگه لطف کنید نمونه کد ساده بزارید خیلی خیلی میتونه کمکم کنه

    خیلی ممنون از پاسخ گو
    *****براي آدمي بهتر است که اصلا به دنيا نيايد تا اينکه بيايدو هيچ تاثيري نگذارد *****
    ناپلئون بناپارت

    #2
    پاسخ : حلقه در vhdl

    سلام.
    حلقه ها در vhdl تا جایی که من اطلاع دارم 2 تا هستن.while loop,for loop.
    البته for loop قبلا قابل سنتز بود و فقط در test bench و شبیه سازی کار برد داشت.دلیلشو پایین گفتم.
    از اسم جفتشونم معلومه دیگه اولی یک loop سادست و دومی شرطیه(یعنی اگه شرط برقرار بشه از حلقه میپره بیرون)
    یدونه کد تبدیل bit به decimal با for loop واست میذارم.
    [code=vhdl]entity test_loop1 is
    port(data_in: std_logic_vector(7 downto 0):=X”00”;
    data_out: integer range 0 to 255:=0);
    end test_loop1;
    architecture test1 of test_loop1 is
    begin
    process (data_in)
    variable temp: integer range 0 to 255:=0;
    begin
    Temp:=0;
    for i in 0 to 7 loop
    if data_in(i) = ‘1’ then Temp:=temp+(2**i);
    end if; end loop;
    data_out<= temp; end process;
    end test1;[/code]
    While loop هم مثل همینه ولی جلوش باید شرطتو بذاری..!
    از لحاظ کاربرد هم که معلومه دیگه.جاهایی که تو بخوای یک تیکه از سخت افزارت به تعداد مشخصی تکرار شه باید ازین دستور ها استفاده کنی.
    البته هنگامی که ما مثلا یه loop صدتایی بنویسیم سنتز میاد سخت افزار داخل loop رو صد بار تکرار میکنه که جای بسیار زیادی رو میگیره برای همین این کد قبلا قابل سنتز نبوده.
    توصیه میکنم در عمل اگه مجبور نیستی ازین دستور استفاده نکنی و بجاش از for generate استفاده کنی که اگه خواستی بهت میگم.
    نمیدونم کامل توضیح دادم یا نه...

    دیدگاه


      #3
      پاسخ : حلقه در vhdl

      آره خیلی هم خوب بود و کامل
      اگه میشه لطف کن سینتکس while رو هم بگو
      راستی گفتی اگه حلقه 100 بار تکرار بشه یعنی سخت افزار 100 بار تکرار شده ؟ !!!!!!! :eek:
      در این باره کمی بیشتر توضیح میدی ؟ مگه مثله حلقه در زبان c نیست ؟
      بعد یه سوال دیگه این حلقه ها رو باید داخل process استفاده کنیم یا خارج از process ؟
      و به عنوان آخرین حرف for generate چیه ؟ یه نوع حلقس ؟ سینتکسش چه طوریه ؟ تویه اینم سخت افزار به تعداد تعداد تکرار حلقه کپی میشه ؟

      خیلی ممنون دوست عزیز
      خیلی کمک کردی بهم :nerd:
      *****براي آدمي بهتر است که اصلا به دنيا نيايد تا اينکه بيايدو هيچ تاثيري نگذارد *****
      ناپلئون بناپارت

      دیدگاه


        #4
        پاسخ : حلقه در vhdl

        سلام. Vhdl با زبان c خیلی فرق داره.شما اینجا داری خود سخت افزار رو طراحی میکنی در حالی که اونجا(Avr,picو...) سخت افزار میکروی شما آماده هستش و فقط دستورات رو به ترتیب اجرا میکنه.این نکته ی خیلی مهمیه ها یعنی تو باس خودتو جای سخت افزاری که میخوای طراحی کنی بذاری!!
        در for loop همون طور که گفتم ابزار سنتز میاد سخت افزاری که داخل For loop طراحی کردی رو به تعداد حلقه پیاده ساری میکنه برای همین مثلا اگه یه for loop هزار تایی بنویسی ممکنه طرفیت قطعه پر بشه یا حتی جا نشه!!!
        برای همین هم گفتم که این دستور فقط برای شبیه سازی مناسب هستش و توی عمل به درد نمیخوره.قبلنا اصن قبل سنتز هم نبود!(سنتز یعنی پیاده سازی به سخت افزار) البته بعضی وقتا ممکنه مجبئر باشیم ازش استفاده کنیم..
        ولی While loop اینجوری نیس(فک کنم!! :agree.میتونی ازش استفاده کنی....
        syntax شم اینجوریه:[code=vhdl]
        while <condition> loop
        <seq-statement>;
        end loop;[/code]
        توی شرط هر چی خواستی میتونی بنویسی دیگه!! lمثلا a=0 شه یا هرچی!
        متاسفانه کد ازش نداشتم که بذارم... :sad:
        در مورد for generate میتونم بگم که بعله یه نوع حلقه هستش.
        که برای توضیحش شما باید قبلش یکم structral Vhdl بلد باشی.
        حالا یعنی چی؟یعنی این که ما بیایم یک یا چنتا قطعه بصورت چنتا پک بسازیم اینارو همیشه داشته باشیمشون بعد هر موقع خواستیم ازشون استفاده کنیم
        فقط بیایم توی کدمون با یک دستور فراخونیشون کنیم بعد استفاده کنیم.
        حالا شما میتونی به جای For loop از for generate بجاش استفاده کنی که یعنی قطعتو (که مثلا میشه سخت افزار ساخته شده توی for loop) اینبار هر نعداد خواستی اسفاده کنی.(یکم سخته!)
        در آینده یه کد با استفاده از For generate واسط میذارم و for loop که ببینی قشنگ.
        البته یک نکته رو باید مد نظر قرار بدی که استفاده از واحد سخت افزاری کمتر سرعت رو هم پایین میاره یعنی شما در یک صرب کننده که بیای با for loop بنویسی و n تا قطعه استفاده کنی بیای با for generate بنویسی و تعدادشو کمتر کنی قاعدتا سرعتتو میاری پایین چون توی قبلی مثلا 100 تا واحد با هم 100 تا کارو انجام میدن اینجا مثلا دو تا واحد باید 100 تا کارو انجام بدن پس سرعت یک پنجاهم میشه :agree:
        که شما به عنوان طراح باید بین سرعت و استفاده از منابع سخت افزاری یه مصالحه ای انجام بدی...
        در مورد حلقه ها هم باس بگم که بعله توی process اجرا میشن چون ترتیبین دیگه....
        البته for generate اینجوری نیس.که اگه منظورمو فهمیده باشی میفهمی چرا نیست.
        بازم نمیدونم منظرومو درست رسوندم یا نه :angry:

        دیدگاه


          #5
          پاسخ : حلقه در vhdl

          آقا خیلی ممنون یه چیز هایی دستگیرم شد ولی فرق for loop رو با for generate متوجه نشدم راستیت !!!
          اگه بتونی در غالب مثال توضیح بدی خیلی میتونه کمکم کنه
          فقط لطفا مثالش ساده باشه که متوجه بشم
          بعد یه ابهامی وجود داره اینجا ! گفتید سخت افزار به اندازه ی تکرار حلقه کپی میشه درسته ؟ این مختص for loop هست یا while loop هم اینطوریه ؟
          آخه تویه for ما میدونیم دقیقا چند بار تکرار میشه . درسته ؟ ولی while رو که نمیدونیم . در نتیجه موقع سنتز کردن کد لز کجا میفهمه که چنتا از این سخت افزار باید کپی کنه ؟

          ممنون امین جان :bye
          *****براي آدمي بهتر است که اصلا به دنيا نيايد تا اينکه بيايدو هيچ تاثيري نگذارد *****
          ناپلئون بناپارت

          دیدگاه


            #6
            پاسخ : حلقه در vhdl

            این مختص for loop هستش.گفتم دیگه while loop اینجوری نیس فک کنم.چجوریه حالا؟بعدا بهت میگم بذار مطمئن شم.
            در مورد مثال هم بذار دارم دنبال یه مثال مناسب میگردم که بذارم عجله که نداری حالا.تا هفته بعد میذارم :biggrin:

            دیدگاه


              #7
              پاسخ : حلقه در vhdl

              باشه ممنون
              *****براي آدمي بهتر است که اصلا به دنيا نيايد تا اينکه بيايدو هيچ تاثيري نگذارد *****
              ناپلئون بناپارت

              دیدگاه

              لطفا صبر کنید...
              X