اطلاعیه

Collapse
No announcement yet.

مراحل طراحی fpga

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

    مراحل طراحی fpga

    با سلام خدمت دوستان

    سوال بنده در مورد مراحل طراحی با fpga هست.

    من برنامه نویسی vhdl رو تا حدودی که نیاز دارم بلدم

    می خوام یک برنامه مثلاً گرفتن خروجی 1 روی پایه fpga p106 را پیاده سازی کنم.

    برد آموزشی FPGA رو با fpga sapartan-3 xc3s400 در اختیار دارم که با پورت پارالل به کامپیوتر وصل شده

    نرم افزاری هم که روی سیستم نصب هست ise 7.1 می باشد (altium 10.3 رو هم دارم)

    حالا من از دوستانی که وارد هستن تقاضا دارم تا مراحل طراحی تا پیاده سازی رو برای بنده بگن. البته به صورت مختصر هم با شه ممنونم

    مثلاً اول تعریف پروژ 2- اضافه کردن سورس فایل vhdl و ...(بعدشو نمی دونم) تا مرحله ilmpliment

    بسیار ممنونم


    حضرت محمد (ص):بدانید،کسی که نمی داند نباید از آموختن شرم کند،که قیمت هر کس به قدر معلو مات اوست.

    #2
    پاسخ : مراحل طراحی fpga

    من هم دقیقا این مشکل رو دارم
    vhdl رو خوب یاد گرفتم -اما نمی دونم چطوری باید یک برد رو پیاده سازی کنم.یعنی با چی و چجوری یک fpga رو پروگرام کنم-میدونم که باید یک حافظه خارجی بهش متصل بشه-اما کجا و چجوری اصلا نمی دونم-یا cpld ها که خودشون حافظه دارن

    هر جا دنبال آموزش میگردم فقط زبان های توصیف رو میگن-حتی همین جا هیچ آموزشی نیست

    لطفا راهنمایی کنید-مطمئنا مشکل خیلی ها است

    دیدگاه


      #3
      پاسخ : مراحل طراحی fpga

      سلام
      من از لحاظ تئوری می دونم ولی خودم پروگرام نکردم.. یه فایل دارم.. چه جوری براتون پ لود کنم؟؟!! بلد نیستم!!!
      مفیده ها!!

      دیدگاه


        #4
        پاسخ : مراحل طراحی fpga

        توی سایت آموزش قرار دادن اطلاعات و لینک هست.
        حضرت محمد (ص):بدانید،کسی که نمی داند نباید از آموختن شرم کند،که قیمت هر کس به قدر معلو مات اوست.

        دیدگاه


          #5
          پاسخ : مراحل طراحی fpga

          لطفا اینجا قرار بدید:
          http://www.4shared.com/

          [img width=477 height=100]http://www.eca.ir/pic/upload/agazade.png[/img]

          دیدگاه


            #6
            پاسخ : مراحل طراحی fpga

            نوشته اصلی توسط مرجان کهندل
            من هم دقیقا این مشکل رو دارم
            vhdl رو خوب یاد گرفتم -اما نمی دونم چطوری باید یک برد رو پیاده سازی کنم.یعنی با چی و چجوری یک fpga رو پروگرام کنم-میدونم که باید یک حافظه خارجی بهش متصل بشه-اما کجا و چجوری اصلا نمی دونم-یا cpld ها که خودشون حافظه دارن

            هر جا دنبال آموزش میگردم فقط زبان های توصیف رو میگن-حتی همین جا هیچ آموزشی نیست

            لطفا راهنمایی کنید-مطمئنا مشکل خیلی ها است
            من هم :redface:
            این مدعیان در طلبش بی خبرانند
            آن را كه خبر شد خبری باز نیامد

            دیدگاه


              #7
              پاسخ : مراحل طراحی fpga

              من هفت هشت ده سال پیش برای اولین بار یک کار کوچولو روی 95144 انجام دادم به ترتیب زیر:
              1- اون موقع دقیقا مثل حالا هیچ اطلاعاتی از الکترونیک نداشتم. یعنی هنوز هم نمیدونم ترانزیستور رو میشه با سس خردل خورد یا باهاش شنا کرد!
              2- سورس رو به زبون verilog نوشتم.
              3- با ISE 5.1 کامپایل کردم. بعد از چند بار سعی و فیت شدن مدل توسط pinlock جایگذاری پین ها رو انجام دادم و اتصالات رو روی cpld نهایی کردم.
              4- با پروگرامر xilinx پروگرام کردم.

              تنها موردی که وسط هست اینه که میدونم برای استفاده از FPGA باید از config memory استفاده کرد و نکته مهم دیگه هم اینه که نمیدونم چرا اون مدل هنوز که هنوزه داره کار میکنه!

              فقط چند تا نکته:
              -برنامه مدل سازی بر اساس دلخواه خودش (من بهش میگم الابختکی!) هر ورودی یا خروجی رو روی یکی از پین ها map میکنه. اگر میخوایین روی پین خاصی مپ بشه باید از pin lock استفاده کنین.
              -اگر مدل شما در device مورد استفاده fit بشه بعد از pin lock الزامی وجود نداره که همون مدل در آی سی مد نظرتون fit بشه. پس سعی کنین از فایل listing اطلاعاتی رو استخراج کنین که متوجه بشین کدوم منطق ها باعث میشه که یک قسمت از logic روی پین هایی که میخوایین fit نشه. اینطوری میتونین با حداقل تغییرات در pin lock ها دوباره مدل رو fit کنین.
              -ضمنا بخاطر اینکه ممکنه در آینده به تغییراتی در مدلتون احتیاج داشته باشین؛ سعی نکنین از آی سی استفاده کنین که بالای 80 درصد از کلیه منابعش مصرف بشه.
              -در هنگام pin lock سعی کنین ترجیحا پین های مپ شده در حالت اولیه رو تقریبا در حول و حوش همون جاهایی که مپ شده نگهداری کنین. اینجوری نرم افزار کمتر قاط میزنه.
              -استفاده از منطق های ترتیبی ممکنه کار راحتی باشه اما مسلما با یک کمی صرف وقت و استفاده از منطق های ترکیبی تعداد بسیار کمتری ram-bit مصرف میکنین و آی سی کوچکتری احتیاج خواهید داشت.
              -برای بعضی از انواع آی سی ها مثل CPLD های سری 9500 شرکت Xilinx یا سری FLEX10K شرکت Altra برنامه هایی نوشته شده که میتونین در یک سیستم میکروکنترلری با استفاده از اونها FPGA مورد نظرتون رو پروگرام کنین. این مورد هم باعث حفاظت بیشتر میشه و هم قابلیت ارتقاء سیستم نهایی رو راحتتر میکنه.

              برای بهینه سازی مدلتون میتونین از برنامه هایی مثل Leonardo و برای تست از Modelsim استفاده کنین تا زمان تست نهایی روی سخت افزار رو مینیمم کنه.
              - یادتون باشه چون میتونین یک منطق رو در FPGA قرار بدین دلیلی بر انجام این کار نیست. ضمنا خیلی وقتها اگر بر اساس منطق کذایی Bigger is Better کار کنین ممکنه در سیستمهای مبتنی بر FPGA و میکرو کار بسیار بیشتری در نرم افزار لازم باشه انجام بدین که در این صورت هم منابع FPGA رو حروم کردین و هم نرم افزار و نتیجتا سیستم نهایی کند تری خواهید داشت.
              - همیشه یادتون باشه که الزاما مدلی که نوشتین همواره اون کاری رو که شما میخوایین نمیکنه. پس تست کلیه منطق ها ولو خیلی کوچیک مطلقا فراموش نشه.

              دیدگاه


                #8
                پاسخ : مراحل طراحی fpga

                میشه در مورد نحوه تخصیص پینها بیشتر توضیح بدید؟

                یعنی همون pin asignment

                بسیار ممنونم
                حضرت محمد (ص):بدانید،کسی که نمی داند نباید از آموختن شرم کند،که قیمت هر کس به قدر معلو مات اوست.

                دیدگاه


                  #9
                  پاسخ : مراحل طراحی fpga

                  بازم میگم من اینا رو جایی نخوندم. بلکه از خودم درآوردم بنابراین مسئولیت عدم کارکردش به عهده خودتونه.!! :mrgreen: :mrgreen: (چه ربطی داشت؟؟)

                  شما میدونین (یا بهتره بگم: امیدوارم که بدونین) که FPGA یا CPLD از مجموعه ای از مدارات پایه بنام logic cell یا logic block تشکیل شده که بعضی از اینها با پین های ورودی - خروجی آی سی ارتباط دارن. و بعضی دیگه فقط با مدارات پایه دیگه. درست مثل خونه های شطرنج که بعضی از این خونه ها به حاشیه صفحه شطرنج منتهی میشن و بعضی دیگه دور و اطرافشون پر از خونه های دیگه هست. وقتی یک مدل رو سنتز میکنیم؛ این مدل به نوعی بین این مدارات پایه شکسته میشه تا جمع کلی این قطعات شکسته شده بتونه مدل مد نظر مارو پیاده سازی کنه. در حالت عادی اینکه کدوم یکی از این بلوک ها چه قسمتی از منطق مارو دارا باشن توسط برنامه سنتز کننده انتخاب میشه و نتیجتا انتخاب اینکه مثلا سیگنالی بنام D0 روی چه پایه ای بیفته (البته از نظر ما) کاملا اتفاقیه. اما معمولا شرایطی پیش میاد که بخواییم این اتصالات رو خودمون تعریف کنیم و بخواییم مثلا خطوط D0 تا D7 رو برای ارتباط با آی سی رم مورد استفاده مون جوری مرتب کنیم که طول ترک ها روی PCB نهایی مینیمم در بیاد. برای این منظور در برنامه سنتز کننده مدل امکاناتی بصورت visual یا غیر اون (توسط نوشتن دستی یک متن) وجود داره که اصطلاحا بهش pin lock میگیم. در طی این پروسه؛ میاییم و به عنوان پیش فرض سنتز به برنامه سنتز کننده اطلاع میدیم که مثلا سیگنال های فوق روی پین های شماره 1 تا 8 مپ بشه. اینطوری در هنگام سنتز؛ برنامه سنتز کننده جوری منطق ما رو بین مدارات پایه میشکنه که این اتصالات رعایت بشه. اما مسلما این قواعدی که ما تعریف میکنیم یک محدودیت برای برنامه سنتز کننده در نحوه شکست منطق کلی ایجاد میکنه که ممکنه باعث شکست کلی در تولید منطق های شکسته شده و فیت شدن اونها در بلوک های منطقی آی سی بشه.
                  مثلا در برنامه ISE WebPack شرکت Xilinx نسخه 7.1 در پانل Process View قسمت User Constraints آیتمی بنام Assign Package Pins وجود داره که با انتخاب اون صفحه ای میاد که شامل بر دو قسمت کلی هست. اولا لیست سیگنالهای ورودی خروجی نهایی مدل وجود داره و ثانیا یک نقشه از آی سی مورد استفاده ما هست. که میتونیم سیگنال به سیگنال یا بطور گروهی چند سیگنال رو روی پین های ورودی خروجی آی سی drag کنیم.
                  مسلما در مواقعی که در هنگام سنتز از برنامه سنتز کننده انتظار داریم که خودش نوع آی سی رو هم انتخاب کنه این تابع رو نمیتونیم استفاده کنیم چون هر آی سی با دیگری در تعداد و جایگذاری پین ها متفاوت هست.
                  از طرفی این مورد مهم رو هم همیشه باید یادمون باشه که بعضی پین ها مثل GSR یا GTS یا GCK وجود دارن که نحوه ارتباطشون با منطق های شکسته شده نسبت به ارتباطشون با بقیه پین ها با این منطق ها متفاوت هست. و ضمنا تعداد این پین ها هم محدوده. و باید از این پینها در جای خودش استفاده کرد. نکته اساسی در استفاده از این سیگنالها اینه که خیلی وقتها در یک مدل؛ مواردی پیش میاد که میخواییم یک سیگنال با حداقل تاخیر انتشار به تمامی بلوکهایی که این سیگنال در اونها استفاده شده وصل بشه. مثلا فرض کنین در مدل زیر:


                  module main(
                  micro_ALE, micro_ADBus, micro_RD, micro_WR,
                  shf_Dir, shf_Pulse, shf_IRQ,
                  _CS);

                  input micro_ALE;
                  input micro_RD;
                  input micro_WR;
                  inout[7:0] micro_ADBus;
                  input _CS;

                  input shf_Dir;
                  input shf_Pulse;
                  output shf_IRQ;

                  reg Reset;

                  reg [2:0] micro_Addr;
                  reg [23:0] encoder_Pos;
                  reg [23:0] irq_Pos;
                  reg irq_Enable;
                  reg [7:0] micro_QData;

                  wire read_Permission = micro_RD | _CS;
                  wire write_Permission = micro_WR | _CS;

                  bufif0( micro_ADBus[0], micro_QData[0], read_Permission);
                  bufif0( micro_ADBus[1], micro_QData[1], read_Permission);
                  bufif0( micro_ADBus[2], micro_QData[2], read_Permission);
                  bufif0( micro_ADBus[3], micro_QData[3], read_Permission);
                  bufif0( micro_ADBus[4], micro_QData[4], read_Permission);
                  bufif0( micro_ADBus[5], micro_QData[5], read_Permission);
                  bufif0( micro_ADBus[6], micro_QData[6], read_Permission);
                  bufif0( micro_ADBus[7], micro_QData[7], read_Permission);

                  always @(negedge micro_ALE)
                  micro_Addr <= micro_ADBus[2:0];

                  assign shf_IRQ = !(irq_Enable && (encoder_Pos == irq_Pos));

                  always @(posedge shf_Pulse)
                  begin
                  if( Reset )
                  begin
                  encoder_Pos <= 0;
                  end
                  else
                  begin
                  if( shf_Dir )
                  encoder_Pos <= encoder_Pos + 1;
                  else
                  encoder_Pos <= encoder_Pos - 1;
                  end
                  end

                  always @(negedge read_Permission)
                  begin
                  case (micro_Addr)
                  0: micro_QData <= encoder_Pos[ 7: 0];
                  1: micro_QData <= encoder_Pos[15: 8];
                  2: micro_QData <= encoder_Pos[23:16];
                  3: micro_QData <= irq_Pos[ 7: 0];
                  4: micro_QData <= irq_Pos[15: 8];
                  5: micro_QData <= irq_Pos[23:16];
                  6: micro_QData <= irq_Enable;
                  7: micro_QData <= Reset;
                  endcase
                  end

                  always @(negedge write_Permission)
                  begin
                  case (micro_Addr)
                  3: irq_Pos[ 7: 0] <= micro_ADBus;
                  4: irq_Pos[15: 8] <= micro_ADBus;
                  5: irq_Pos[23:16] <= micro_ADBus;
                  6: irq_Enable <= micro_ADBus[0];
                  7: Reset <= micro_ADBus[0];
                  endcase
                  end

                  endmodule

                  .....ادامه داره....

                  دیدگاه


                    #10
                    پاسخ : مراحل طراحی fpga

                    ....ادامه قبلی....

                    این مدل یک مدل ساده اتصال یک شافت انکودر به یک میکرو هست. روی 9572 هم پیاده سازی شده. به رفتارهای سیگنال read_Permission توجه کنین. این سیگنال بایستی برای درایو کردن 8 بافر سه وضعیتی و یک بلوک برای تحریک یک demultiplexer استفاده بشه. مسلما در هنگام خوندن اطلاعات از این مدل بایستی زمان سوئیچ هر 8 بافر سه وضعیتی همزمان باشه. اما یادمون هست که اولا بلوکهای پایه دارای محدودیت در نگهداری قسمتی از مدل هستن بنا براین ممکنه یک بلوک منطقی نتونه همه هشت بافر رو در خودش جا بده و از طرفی فقط بعضی از بلوکها مستقیما به سیگنالهای ورودی خروجی وصل هستن و مسلما برای انتقال وضعیت یک سیگنال از پین ورودی به یک بلوک این سیگنال باید بین چند بلوک مجاور هم دست به دست بشه که این باعث ایجاد تاخیر انتشار زیادی میشه.
                    برای رفع این مشکل هر آی سی دارای سیگنالهایی (از لحاظ تعداد بشدت محدود) هست که مستقیما به تمامی بلوک های پایه وصله که بهشون General Clock میگیم. معمولا برنامه سنتز کننده پر کاربرد ترین سیگنالها رو روی این پایه ها مپ میکنه. تا میزان تاخیر انتشار این سیگنالها بین قسمت های متفاوت یک منطق شکسته شده مینیمم باشه.
                    حالا اگر ما بیاییم این سیگنال رو روی یک پایه عمومی مپ کنیم باعث ایجاد تاخیر انتشار میشیم که خودش ممکنه پاسخ زمانی آی سی ما رو خیلی بالا و پایین کنه.

                    بنا براین؛ بایستی در هنگام مپ کردن این سیگنالها به این خصوصیت پایه ها و سیگنال مربوطه در مدل خودمون هم توجه کافی داشته باشیم. و این یک محدودیت مهم برای مپ کردن سیگنالها هست.

                    دیدگاه


                      #11
                      پاسخ : مراحل طراحی fpga

                      نوشته اصلی توسط رضا آقازاده
                      ....ادامه قبلی....

                      این مدل یک مدل ساده اتصال یک شافت انکودر به یک میکرو هست. روی 9572 هم پیاده سازی شده. به رفتارهای سیگنال read_Permission توجه کنین. این سیگنال بایستی برای درایو کردن 8 بافر سه وضعیتی و یک بلوک برای تحریک یک demultiplexer استفاده بشه. مسلما در هنگام خوندن اطلاعات از این مدل بایستی زمان سوئیچ هر 8 بافر سه وضعیتی همزمان باشه. اما یادمون هست که اولا بلوکهای پایه دارای محدودیت در نگهداری قسمتی از مدل هستن بنا براین ممکنه یک بلوک منطقی نتونه همه هشت بافر رو در خودش جا بده و از طرفی فقط بعضی از بلوکها مستقیما به سیگنالهای ورودی خروجی وصل هستن و مسلما برای انتقال وضعیت یک سیگنال از پین ورودی به یک بلوک این سیگنال باید بین چند بلوک مجاور هم دست به دست بشه که این باعث ایجاد تاخیر انتشار زیادی میشه.
                      برای رفع این مشکل هر آی سی دارای سیگنالهایی (از لحاظ تعداد بشدت محدود) هست که مستقیما به تمامی بلوک های پایه وصله که بهشون General Clock میگیم. معمولا برنامه سنتز کننده پر کاربرد ترین سیگنالها رو روی این پایه ها مپ میکنه. تا میزان تاخیر انتشار این سیگنالها بین قسمت های متفاوت یک منطق شکسته شده مینیمم باشه.
                      حالا اگر ما بیاییم این سیگنال رو روی یک پایه عمومی مپ کنیم باعث ایجاد تاخیر انتشار میشیم که خودش ممکنه پاسخ زمانی آی سی ما رو خیلی بالا و پایین کنه.

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

                      دیدگاه


                        #12
                        پاسخ : مراحل طراحی fpga

                        چه قشنگ توضیح دادید. قابل فهم بود
                        چه جالب! خودم نفهمیدم چی گفتم! :mrgreen:

                        دیدگاه


                          #13
                          پاسخ : مراحل طراحی fpga

                          با سلام
                          شما ابتدا کدنویسی می کنین
                          بعد از چک کدها و درست بودن آنرا سنتز می کنین
                          اگه خطا نداشته باشه کدنویسی تون
                          یه فایل با پسوند .bit براتون ایجاد میکنه
                          این فایل همون فایلی هست که باید رو fpga پروگرام کنید
                          درصورتی که بخواین فایل رو روی حافظه جانبی بریزید با استفاده از نروم افزار ise فایل .bit را به فرمتهای مخصوص حافظه مثل .mcs تبدبل می کنید و روی حافضه پروگرام می کنید
                          تمام این کاره با نرم افزار ise انجام میشه
                          یه فایل آموزشی مربوط به یه برد واسه شرکت رهپویان علم و صنعت آوا هست که تمام مراحل را نوشته و نمونه کد کذاشته
                          من از بردهاشو ن تو دانشگاه امیرکبیر استفاده کردم
                          حتما یه سر بزنید
                          www.dspcore.ir
                          http://dspcore.ir
                          http://dspcore.ir/sites/default/files/upload_files/manual/HMZF3S400UserManualV1.1.pdf
                          التماس دعا داریم

                          دیدگاه

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