اطلاعیه

Collapse
No announcement yet.

کمک در مورد یادگیری FPGA

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

    کمک در مورد یادگیری FPGA

    با عرض سلام و خسته نباشید خدمت دوستان عزیر
    من الان چند وقتیه که زده به سرم میخوام FPGA رو یاد بگیرم ولی متاسفانه هرچی مقاله و کتاب میخرم هیچکدومش مفت نمی ارزه
    لامذهب همه چیش هم با میکرو کنترلر ها فرق میکنه
    یه کتاب VHDL هم گرفتم انگار زیست شناسی هست (نمیدونم! مدل رفتاری و سنتز و ... . خلاصه از این دری بریها)
    یه کتابه FPGA هم گرفتم همچین توضیح داده که اگه یه آدم حرفه ای بخونه خودش میتونه یه FPGA بسازه
    خلاصه بگم یه منبع خوب با زبون VHDL پیدا نمیکنم .......... :angry: oo:
    از دوستان خواهش میکنم یه منبع خوب معرفی کنن یا اصلا خودشون یه کم راهنماییم کنن تا بتونم استارت بزنم
    میخوام از صفر صفر صفر شروع کنم ، فرض بر این میزاریم من اصلا هیچی از FPGA نمیدونم .
    از اینجا میخوام شروع کنم :
    1- درباره FPGA
    2-نحوه پروگرام کردن
    3- چرا Prom میزاریم
    4-FPGA چند مدل داره
    5-هرکدوم به چه درد میخوره
    6- توضیح یک یک فرمان های VHDL
    و....
    .................................................. ........ یه وقت فکر نکنید خنگم ، منبع هایی که گرفتم هیچ کدومش دو زار نمی ارزید
    TANX
    دلا خو کن به تنهایی که از تنها بلا خیزد

    #2
    پاسخ : کمک در مورد یادگیری FPGA

    یه وقت فکر نکنید خنگم
    اینجا الحمدلله من از همه خنگ ترم. ولی طبق یک مثل آمریکایی که میگه:
    even an idiot can do it!
    همیشه راهی برای انجام کارها هست.

    طبق چیزایی که من حدودی میدونم (یا خیال میکنم میدونم)
    FPGA با میکرو فرق میکنه. اون سخت افزاره این نرم افزار. حتی اگر مسئله قیمت هم وسط نباشه یک سری کارها رو نمیشه و نباید با fpga انجام داد.
    شما باید اول یک مدار طرح کنی (میبینی! میگم مدار. نه برنامه) بعدش مدارات داخلی یک fpga رو جوری config کنی که رفتار اون fpga معادل مداری بشه که میخوای.
    برای اینکار برنامه هایی هستن که بهش synthesis tool میگن. مثلا ISE برای قطعات شرکت xilinx و Quartus برای قطعات شرکت Altera. ممکنه بخوای یه سیمولیشن هم بکنی که میتونی سراغ یک سری برنامه عمومی مثل ModelSim بری.
    حالا باید اون مدل رو تحویل fpga بدی تا کار کنه. این آی سی ها دو مدل هستن. یک سری بر اساس رم کار میکنن بنا براین باید کانفیگ اونها رو در یک prom خارجی بهشون تحویل بدی. اصطلاحا به این prom میگن: configuration memory. بعضی ها هم (مشابه یک میکرو AVR) داخل ایپرامشون بریزی مثل XC95144XL.
    من چون آدم خنگی هستم VHDL بلد نیستم. با verilog کار خودمو راه میندازم. پروگرام کردن مدلهای eeprom ی مثل XC95144 هم با یه مدار خیلی ساده مشابه (و نه عین) STK200 پروگرامر معروف AVR انجام میشه. (این با پروگرامر AVR فرق فوکوله. شبیهشه. عین اون نیست). البته اگه شما دوست داشتی میتونی با شماتیک و اینا هم کارتو راه بندازی.

    تمام اینا هم قبلا توی همین فروم راجع بهش بحث شده. اگه بسرچی پیدا میکنی.
    ضمنا!
    خنگ بودن مهم نیست. پشتکار و نترسیدن از کار مهمه.

    دیدگاه


      #3
      پاسخ : کمک در مورد یادگیری FPGA

      دوست عزیز
      من پیشنهاد میکنم که کتاب " دایتل و دایتل " ترجمه صاحب زمانی رو تهیه کنی و بخونی . لامذهب از صفر شروع کرده و تا ته رفته ، من که خوندم مفید بود .

      بهترین نرم افزار برای این کار هم MAX Plus 2 هست . خیلی باهاله . ماژولاتو توش تعریف میکنی و هی فراخوانی میکنی . :biggrin:
      چه دعايي کنمت بهتر از آن که خدا پنجره باز اتاقت باشد ...

      دیدگاه


        #4
        پاسخ : کمک در مورد یادگیری FPGA

        اقایون واقعا از همتون ممنونم ، بهم امید دادید ، مـــــــــــــــــــــــــــــــــــــــــــــــــ ــــــــــــــــــــــرســــــــــــــــــــــــــ ـــــــــــــــــــــــــــــــــــــی :wow: :nerd:
        دلا خو کن به تنهایی که از تنها بلا خیزد

        دیدگاه


          #5
          پاسخ : کمک در مورد یادگیری FPGA

          به نظر من شما ابتدا با CPLD شروع به کار کنید و چند برنامه کوچیک و ساده روش بنویسید، هم کمتر خرج میکنید هم زودتر به جواب میرسید و تستش میکنید، بعد با کسب تجربه برنامه نویسی VHDL اون FPGA که به درد کارتون میخوره رو انتخاب کنید و روی اون شروع به کار کنید.
          اسمایل، تومورو ویل بی وُرس

          دیدگاه


            #6
            پاسخ : کمک در مورد یادگیری FPGA

            برا شروع تو شبیه سازهایی مثل model sim و quartus پروژه های ساده ای تعریف کنید و تو محیط شبیه سازی جواب بگیرید و بعد برید سراغ کار عملی .
            به نظرم از مباحث ساده مدارات منطقی مثل ساخت گیت ها شروع کنید تا به مباحث معماری کامپیوتر مثل cpu و ... برسید.
            دوستان زیادی مثل افرادی که در پست های بالا بهتون جواب دادند اینجا هستند که تجارب ارزشمند عملی دارند و میتونند بهتون کمک کنند!

            اگه یه کتاب جامع می خواید کتاب دکتر نوابی هم خوبه ولی خوب تئوری محض و زبان انگلیسی کتاب ممکنه شما رو اذیت کنه!
            It's nice to be important but it's important to be nice!

            از اینکه نمی رسم جواب دوستان را بدم معذرت می خوام.

            دیدگاه


              #7
              پاسخ : کمک در مورد یادگیری FPGA

              انتظار نداشته باش که برنامه نویسی Fpga ها با میکرو کنترلر ها یکی باشه چون اساسا نحوه عملکرد و ساختارشون متفاوته
              برای fpga ها کامپایلرهایی به زبان C نیز وجود داره اما با توجه به تفاوت فایل های هیدر و مشکلات متعدد دیگر توصیه میکنم دنبالش نرید.
              در مورد ای سی هم توصیه میکنم از ای سی های xilinx استفاده کنی . چون تو ایران انواع مختلف اون و وسایل جانبی مثل حافظه flash به راحتی گیر میاد و ازونتر از fpga شرکت های دیگر است . ( می تونی به سایت www.javanelec.com بری و قیمت بگیری )
              کتاب هم به نظر من کتاب زولینسکی ترجمه علیرضا فتاح کتاب خوبی است چون فقط به نحوه برنامه نویسی با زبان vhdl پرداخته برای یادگیری نرم افزار و پروگرمر میتونی به سایت اصلی xilinx مراجعه کنی یه فایل تصویری اموزش نرم افزار ise را داره :nice:

              دیدگاه


                #8
                پاسخ : کمک در مورد یادگیری FPGA

                نوشته اصلی توسط mohamad37
                انتظار نداشته باش که برنامه نویسی Fpga ها با میکرو کنترلر ها یکی باشه چون اساسا نحوه عملکرد و ساختارشون متفاوته
                برای fpga ها کامپایلرهایی به زبان C نیز وجود داره اما با توجه به تفاوت فایل های هیدر و مشکلات متعدد دیگر توصیه میکنم دنبالش نرید.
                در مورد ای سی هم توصیه میکنم از ای سی های xilinx استفاده کنی . چون تو ایران انواع مختلف اون و وسایل جانبی مثل حافظه flash به راحتی گیر میاد و ازونتر از fpga شرکت های دیگر است . ( می تونی به سایت www.javanelec.com بری و قیمت بگیری )
                کتاب هم به نظر من کتاب زولینسکی ترجمه علیرضا فتاح کتاب خوبی است چون فقط به نحوه برنامه نویسی با زبان vhdl پرداخته برای یادگیری نرم افزار و پروگرمر میتونی به سایت اصلی xilinx مراجعه کنی یه فایل تصویری اموزش نرم افزار ise را داره :nice:
                میشه لینکش رو بدارید؟ کجاس؟
                ممنون

                دیدگاه


                  #9
                  پاسخ : کمک در مورد یادگیری FPGA

                  یعنی واقعا توی این انجمن هیچ کس نیست که یک fpga رو که به prom وصل شده و یک پروژه اجرایی شده رو با شماتیک بزاره؟؟؟؟!!!!!!
                  من هنوز نتونستم بفهمم چطور میشه یک fpga رو(خواهشا بدون توضیح نرم افزار و vhdl) سخت افزاری از اول تا آخر راه اندازی کرد

                  دیدگاه


                    #10
                    پاسخ : کمک در مورد یادگیری FPGA

                    یعنی کسی بلد نیست یا نمی خواد توضیح بده؟؟؟؟!!!!!

                    دیدگاه


                      #11
                      پاسخ : کمک در مورد یادگیری FPGA

                      http://www.googoolia.com
                      این مدعیان در طلبش بی خبرانند
                      آن را كه خبر شد خبری باز نیامد

                      دیدگاه


                        #12
                        پاسخ : کمک در مورد یادگیری FPGA

                        نه مرجان خانوم هیچکس بلد نیست ، منم خودمو کشتم 200 تا هم کتاب خریدم و هیچی از این FPGA نفهمیدم ، اگر دوستان بلد بودن کمک میکردن و تو سایت آموزشش رو میزاشتن
                        دلا خو کن به تنهایی که از تنها بلا خیزد

                        دیدگاه


                          #13
                          پاسخ : کمک در مورد یادگیری FPGA

                          راجع به FPGA ماشالله نه مطلب کم هست و نه افرادی که کار کرده باشن.
                          من خودم بر اساس اطلاعات کلاسیک کار نکردم. ولی فکر میکنم یه همچین چیزایی که الان عرض میکنم بدردتون بخوره. اما هم مسئولیت استفاده از این موارد به عهده خودتونه و هم مسئولیت آموزش درست و حسابی و بر اساس اصول! بنا براین این خزعبلاتی که میخوام بگم بیشتر برای یک آشنایی و بقولی خرد کردن تابوی FPGA بدرد میخوره. نه چیز دیگه.

                          - شما با PC و میکرو کنترلر فقط نرم افزار مینویسین. دستورالعملها پشت سر هم اجرا میشن تا منطق مورد نیاز شما رو انجام بدن. و این بنا بر نیازی انجام میشه. این نیاز هم بستگی تام به پاسخ زمانی منطق شما داره. وقتی نیاز زمانی شما از یک حد خاصی جلوتر میره دیگه با محدودیت تکنولوژی برخورد میکنین. و خودبخود میرین سمت قطعه ای که بتونه این محدودیت رو از جلوتون برداره. معمولا عرف بر این هست که همه سراغ سخت افزار میرن و با استفاده از آی سی های موجود این محدودیت رو برطرف میکنن. ولی اگر آی سی مورد نیاز شما برای ایجاد منطق مورد نیازتون گیر نیومد چی؟ مسلما با استفاده از چند آی سی متفاوت و ترکیب اونها این منطق رو ایجاد میکنین. اما این روش چند ایراد اساسی داره. اولا هزینه بالایی داره. ثانیا طراحی و عیب یابی اش کلی دردسر جلوی پاتون میذاره. ثالثا هیچ حفاظتی در برابر مهندسی معکوس ندارین. رابعا مدارتون برای یک منطق پیچیده و بزرگ خیلی عجق وجق میشه. والی آخر.
                          حالا راه حل چیه؟
                          فرض کنیم قطعه ای داریم که تعدادی ورودی و خروجی داره. و روابط عملیاتی بین این پایه ها رو میشه توسط ابزاری توصیف کرد. به نوعی میخواییم آی سی بسازیم. ساخت یک آی سی از عهده من و شما به عنوان یک شخص حقیقی عملا خارجه. پس چی؟ میتونیم بجای این کار از یک سری قطعه استفاده میکنیم که طبق اون چیزی که گفتم بتونیم منطق مورد نیاز خودمون رو درش جا بدیم. این قطعه رو اصطلاحا بهش میگیم ASIC یا آی سی مخصوص یک پروژه بخصوص. حسن این کار اینه که با استفاده از این قطعه میشه تعداد محدودی (حتی یک عدد) از آی سی مورد نیاز رو با هزینه ای مینیمم تولید کرد.
                          یکی از این تیپ آی سی ها بنام FPGA معروفه که مخفف عبارت زیر هست:
                          Field Programmable Gate Array.

                          یعنی چی؟
                          یعنی (اصطلاحا) مجموعه ای از گیت ها در این آی سی موجوده که روابط بینشون رو میشه مثل پروگرام کردن یک میکرو؛ توصیف و اصطلاحا پروگرام کرد.

                          اما برای درک بهتر این آی سی یه کمی باید ساختارهای پایه اش رو بشناسیم.
                          ....ادامه دارد...

                          دیدگاه


                            #14
                            پاسخ : کمک در مورد یادگیری FPGA

                            ....
                            برای شروع فرض کنیم یک FPGA داریم که در یک پک QFP قرار داره. یک چیپ چهار گوش که کلی پایه از توش بیرون اومده. این پایه ها مشتمل بر پایه های تغذیه و زمین و ورودی-خروجی و چند فرم دیگه هستن.
                            داخل این آی سی یک آرایه دو بعدی از یک سری مدار پایه داریم که هر کدوم داراس ساختار خاص و نسبتا مشترکی هستن. یک سری از این مدارات پایه یا بلوک های منطقی مستقیما به پایه های ورودی-خروجی وصل شدن و یک سری دیگه فقط به بلوک های دیگه وصل هستن. برای شروع به کار با این آی سی ها باید بتونیم اولا منطق مورد نظر خودمون رو به منطق های پایه ای که هر بلوک میتونه در خودش انجام بده تفکیک کنیم و ثانیا این منطق رو به خورد آی سی بدیم یا اصطلاحا پروگرامش کنیم.
                            چون این مسئله تفکیک منطق مد نظر ما به منطق های پایه و قرار دادنشون داخل این آی سی به نوع منطق های پایه؛ ساختار بلوک های منطقی و نحوه ارتباط با اینها برمیگرده و هر آی سی هم ممکنه از فرم خاصی از ارتباطات استفاده کنه از ابزاری برای این کار استفاده میکنیم که چون منطق ما رو به نحوی برای کار با این آی سی میسازه بهش میگیم Synthesis Tool. نمونه این ابزار برای آی سی های تولیدی شرکت Xilinx برنامه ای بنام ISE-Web Pack هست و برای آی سی های شرکت Altera برنامه ای بنام Quartus.
                            حالا میمونه ایجاد خود منطق.
                            در اصل میتونیم اینطوری در نظر بگیریم که یک آی سی در اصل یک تابع با چند وروردی و خروجی هست. در هنگام نوشتن یک تابع به زبانی مثل C مثلا برای AND کردن 2 مقدار تک بیتی میاییم منطق مورد نظرمون رو اینطوری پیاده میکنیم (دید نرم افزاری):


                            bit and_2(bit a, bit b)
                            {
                            return a & b;
                            }


                            یا مثلا برای شمردن تعداد دفعات صدا زده شدن یک تابع اینجوری مینویسیم:

                            int call_count(void)
                            {
                            static int count = 0;
                            count++;
                            return count;
                            }


                            حالا وقتی میخواییم یک همچین منطق هایی رو به صورت سخت افزاری (دید کار با FPGA) پیاده کنیم چکار کنیم؟
                            روض های متفاوتی هست. میتونیم از زبانهایی مثل verilog یا VHDL استفاده کنیم یا یک شماتیک بکشیم.

                            مثلا برای منطق اول:
                            روش شماتیک:
                            عکس ضمیمه رو نگاه کنید.

                            روش کد نویسی با VERILOG:

                            `timescale 1ns / 1ps
                            module and_module(a, b, q);
                            input a;
                            input b;
                            output q;

                            assign a = a & b;

                            endmodule


                            در هر دوی این روش ها ماجول (ونه تابع) یی تعریف کردیم که دو ورودی و یک خروجی داره.
                            و حاصل عمل این ماجول اینه که دو مقدار تک بیتی رو با هم AND میکنه و در یک مقداری بنام Q تحویل میده.
                            ....ادامه دارد...
                            فایل های پیوست شده

                            دیدگاه


                              #15
                              پاسخ : کمک در مورد یادگیری FPGA

                              اگر بخواییم از دید نرم افزاری محض به موضوع نگاه کنیم باید بتونیم هر کاری که در نرم افزار انجام میدیم رو در اینجا مشابه سازی کنیم. این مورد در اغلب موارد کار سختی نیست. مثلا برای ایجاد یک متغیر میاییم و نگهداری یک مقدار فارغ از زمان از رجیستر ها استفاده میکنیم. دستورالعملی مثل سوئیچ رو میاییم با یک de-multiplexer شبیه سازی میکنیم و الی آخر. (حواستون باشه به حلقه ها مثل for و while کاری ندارم. اینها موضوعش فرق میکنه).

                              خلاصه اینکه با این روش ها و یا روش های مشابه دیگه میاییم منطق مورد نیاز خودمون رو ایجاد میکنیم.
                              حالا وقتشه که بریم سر وقت سنتز مدل (برای نرم افزار میگیم کامپایل). این عمل رو توسط همون ابزاری که بهش اشاره شد انجام میدیم. تا فایل نهایی که جاوی اطلاعات مدل (نرم افزار: برنامه) هست ایجاد بشه. اما حالا برای پروگرام کردن چه خاکی به سر بریزیم؟

                              در اینجا مشکلی که پیش میاد اینه که ما اینجا یک سخت افزار داریم و بایستی بتونیم به روش باهاش ارتباط برقرار کنیم که با حداقل هزینه و دردسر ماکزیمم کارآیی رو داشته باشه (اینا رو همینجوری نوشتم که یه کمی شلوغ پلوغ بشه متوجه نشین که خودمم چیزی نمیدونم! :mrgreen برای این کار IEEE استانداردی معرفی کرده بنام JTAG که با استفاده از همون ابزار سنتز میشه با استفاده از پایه های ارتباطی این استاندارد FPGA مربوطه رو پروگرام کرد. (لااقل اینایی که من دیدم از این فرم استفاده میکنن.) ولی برای ارتباط با بردی که این FPGA روش نشسته از چه پروگرامری استفاده کنیم؟ برای آی سی های Xilinx سری XC9500XL میتونین از این شماتیک استفاده کنین:

                              فایل پیوست رو ببینین:
                              فایل های پیوست شده

                              دیدگاه

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