اطلاعیه

Collapse
No announcement yet.

معرفی و آموزش نرم افزار System Generator

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

    معرفی و آموزش نرم افزار System Generator

    با سلام. به درخواست یکی از دوستان و بنا به قول قبلی قصد دارم در این تاپیک نرم افزار System Generator را معرفی کنم. میتونید سوالات رو در همین تاپیک بپرسین و تا جایی که بلد باشم جواب میدم. چون خودم ورژن 14.7 نصب کردم. توضیحات بر اساس این ورژن خواهد بود.

    System Generator یکی از برنامه های نرم افزار Xilinx ISE هست که با نصب نسخه های System Edition یا DSP Edition به همراه Project Navigator (همون محیط کدنویسی معمولی) و بقیه ابزارها (مثل ChipScope، ISim، PlanAhead و ...) نصب میشه.

    System Generator یا به اختصار SysGen در محیط ******** نرم افزار Matlab اجرا میشه و به همون صورت که در سیمولینک به صورت بلوک دیاگرامی هست، میشه از این برنامه استفاده کرد و بلوک ها رو کنار هم چید و به هم وصل کرد تا به خواسته مورد نظر رسید. بنابراین لازمه کار با SysGen اینه که با متلب و مخصوصاً محیط سیمولینک آشنایی داشته باشید.

    در این پست بیشتر در مورد کلیات صحبت میشه و در آینده در پست های بعدی که به تدریج اضافه میشه در مورد نحوه کار و نکات بحث میشه.

    در ضمن سایت Xilinx هم منابع خوبی داره که در صورتی که با انگلیسی مشکلی ندارید توصیه میکنم از این منابع حتماً استفاده کنید.

    یک مثال از محیط SysGen: (برای تصویر بزرگ روی عکس کلیک کنید)



    هر چند میشه در هر زمینه در طراحی بر اساس FPGA از SysGen استفاده کرد ولی مهم ترین استفاده SysGen در کارهای پردازشی (DSP) است. SysGen با ساده کردن استفاده از بلوک های پردازشی و انواع داده Fixed Point و Floating Point و ساده شدن شبیه سازی با کمک گرفتن از امکانات سیمولینک گزینه ایده آل برای کارهای پردازشیه، طوری که کاری که با کدنویسی با سختی های زیادی از جمله کار با انواع داده و دردسر تبدیل نوع، سختی شبیه سازی و طولانی بودن کار کدنویسی همراهه در محیط SysGen به راحتی امکان پذیره.

    تعدادی از مثالهایی که پیاده سازی اونها با استفاده از SysGen توصیه میشه:
    - محاسبه فرمول که پیچیده تر از چند عمل اصلیه و مخصوصاً ضرب و تقسیم توی فرمول داره.
    - محاسبات دارای مقادیر اعشاری مخصوصاً وقتی که دقت محاسبه مهمه یا تعداد بیت مورد نیاز در خروجی هر مرحله برای قسمت صحیح و اعشار نسبت به ورودی عوض میشه.
    - محاسبات دارای اعداد مختلط
    - FFT و معکوس FFT
    - فیلترهای FIR
    - محاسبات Multi-Rate که نیاز به Downsample یا Upsample دارند
    - حافظه ای که نیاز به مقدار اولیه داره و محاسبه مقدار اولیه و تشکیل فایل ضرایب با استفاده از روش های معمول کدنویسی سخت و زمان گیره.
    - وقتی ساختن کد تست (Test bench) سخت و زمان گیره مثلاً سیگنال ورودی میتونه شکل های مختلف داشته باشه که درست کردنش با کدنویسی مشکله ولی میشه به راحتی در متلب با یک کد ساده یا چند بلوک در سیمولینک ساخت.
    - شبیه سازی های بزرگ و وقت گیر، شبیه سازی در SysGen خیلی سریع تر و راحت تره.

    همین طور که در مثال های بالا میبینید استفاده از SysGen به چند صورت ممکنه:
    1- کل برنامه در SysGen پیاده سازی بشه از جمله تخصیص پین ها و ساختن فایل bit.
    2- قسمتی از برنامه در SysGen و قسمت دیگه با استفاده از کدنویسی انجام بشه و فایل SysGen به عنوان یک Component به صورت Black Box به کد اضافه بشه.
    3- کل برنامه با استفاده از کدنویسی پیاده بشه ولی شبیه سازی با استفاده از SysGen انجام بشه.

    تذکر: تا جایی که من با این نرم افزار کار کردم، بدون باگ نیست و بعضی مواقع در کامپایل با مشکل مواجه میشه، یا هنگ میکنه یا ارور میده و متلب بسته میشه که معمولاً پشت سر هم اتفاق میفته و باعث اعصاب خردی میشه ولی باعث نمیشه که برنامه درست کار نکنه. در این موارد خونسردی خودتون رو حفظ کنید و به راه حل هایی که در آینده میگم مراجعه کنید.

    ================================================== ========================================
    پ. ن:
    چون احتمالاً بعضی از دوستان قصد نصب برنامه رو دارن چند نکته لازم رو توی همین پست میگم:
    برای اجرای SysGen لازمه هر دو نرم افزار ISE (نسخه هایی که ذکر شد) و Matlab روی سیستم نصب شده باشن. در این پست میتونید ببینید که چه ورژن هایی از این دو نرم افزار با هم سازگار هستند.
    در هنگام نصب ISE اگه قبلاً متلب با ورژن سازگار نصب شده باشه پنجره ای به شکل زیر باز میشه که برای لینک کردن SysGen با Matlab هست، در صورتی که متلب بعد از ISE نصب بشه، در اولین اجرای SysGen، این پنجره ظاهر میشه که با انتخاب Matlab سازگار با ISE، ارتباط نرم افزارها برقرار میشه و در تولباکس سیمولینک چند کتابخانه مربوط به Xilinx اضافه میشه که بلوک های قابل پیاده سازی در FPGA با پس زمینه آیکن Xilinx مشخص شدن.



    مهم: در صورتی که Vivado هم نصب شده لازمه که در اینجا گزینه IDS انتخاب بشه چون گزینه دیگه مربوط به Vivado هست و در صورتی که انتخاب بشه چاره ای جز حذف نرم افزار برای اصلاح اشتباه نیست (از این مورد کاملاً مطمئن نیستم).
    لطفاً برای انجام پروژه های دانشجویی پیام خصوصی نفرستید.
    لطفاً سؤالاتی که در انجمن قابل طرح شدن هستند پیام خصوصی نکنید.
    با تمام وجود گناه کرديم اما نه نعمتش را از ما گرفت نه گناهان ما را فاش کرد اطاعتش کنيم چه مي کند؟"دکتر شريعتي"
    اگر جايي که ايستاده ايد را نمي پسنديد، عوضش کنيد شما درخت نيستيد!! "پاسكال"
    يا به اندازه ي آرزوهايت تلاش کن يا به اندازه تلاشت آرزو کن. "شکسپير"

    #2
    پاسخ : معرفی و آموزش نرم افزار System Generator

    سلام
    دوست عزیز چرا ادامه نمیدین؟

    دیدگاه


      #3
      پاسخ : معرفی و آموزش نرم افزار System Generator

      سلام. انشاالله وقت آزاد بیشتری پیدا کنم به زودی ادامه میدم. در صورتی که پیشنهادی برای مباحث آینده دارین میتونید مطرح کنید تا در نظر بگیرم.
      لطفاً برای انجام پروژه های دانشجویی پیام خصوصی نفرستید.
      لطفاً سؤالاتی که در انجمن قابل طرح شدن هستند پیام خصوصی نکنید.
      با تمام وجود گناه کرديم اما نه نعمتش را از ما گرفت نه گناهان ما را فاش کرد اطاعتش کنيم چه مي کند؟"دکتر شريعتي"
      اگر جايي که ايستاده ايد را نمي پسنديد، عوضش کنيد شما درخت نيستيد!! "پاسكال"
      يا به اندازه ي آرزوهايت تلاش کن يا به اندازه تلاشت آرزو کن. "شکسپير"

      دیدگاه


        #4
        پاسخ : معرفی و آموزش نرم افزار System Generator

        خیلی ممنون از لطفتون
        با توجه به اینکه فرصتتون کمه اگر جسارت نباشه پیشنهادم اینه که یک پروژه ساده (به انتخاب خودتون با توجه به زمانتون) انتخاب بشه و کل برنامه در SysGen پیاده سازی بشه از جمله مراحل طراحی، شبیه سازی، تخصیص پین ها و ساختن فایل bit و نهایتا انتقال به FPGA. شاید اینجوری بشه به آموزش سرعت داد و از حاشیه دور شد.البته استاد شمایین و صاحب اختیار ولی مطمئنا یادگیری این موضوع به درد خلییا خواهد خورد از جمله خود بنده.

        دیدگاه


          #5
          پاسخ : معرفی و آموزش نرم افزار System Generator

          واقعا عالی
          همانطور دوستان گفتند اگر یه پروژه کوچیک هم اجرا کنید نورالنور می شه :wow:

          دیدگاه


            #6
            پاسخ : معرفی و آموزش نرم افزار System Generator

            فکر می کنم بهتره اول تعدادی از بلوک های مهم SysGen معرفی بشن بعد به تدریج از کارهای ساده به سمت کارهای پیچیده تر بریم.
            ---------------------------------------------------------------------------------------------------------------------------------------------------------------------
            1- بلوک System Generator:
            قرار دادن این بلوک در طرح برای معرفی دیگر بلوک های SysGen به سیمولینک الزامی است.
            با دبل کلیک کردن روی این بلوک، صفحه Properties باز می شود.
            گزینه های این بلوک به صورت زیر است:
            1- Compilation:
            گزینه های مختلفی برای این قسمت هست که ما از NGC Netlist برای درست کردن یک کامپوننت برای استفاده در کد HDL در ISE و از BitStream برای ساختن مستقیم فایل bit برای پروگرم کردن FPGA استفاده می کنیم.
            2- Part:
            در این قسمت پارت FPGA رو مشخص می کنید.
            3- Synthesis Tool:
            ابزار سنتز به صورت پیشفرض XST هست، در صورتی که ابزار Synplify هم دارید میتونید انتخاب کنید.
            4- Hardware Description Language:
            زبانی که فایل های کامپایل شده نهایی به اون زبان ترجمه میشن. (پیشفرض من VHDL هست).
            5- Target Directory:
            پوشه ای که بعد از Generate کردن، فایلهای کامپایل شده و تولید شده در اون پوشه قرار میگیره. در صورتی که قراره فایل SysGen به عنوان بلوک در کد HDL استفاده بشه، بهتره پوشه حاوی پروژه ISE رو انتخاب کنید.
            6- Project Type:
            بذارید روی Project Navigator باشه.
            7- (FPGA Clock Period (ns در تب Clocking:
            در این قسمت کلاک کامپوننت SysGen رو مشخص کنید (بر حسب نانوثانیه). این قسمت برای تنظیمات استفاده از DCM ها استفاده میشه.
            8- Symulink System Period:
            در حالت پیشفرض روی یک ثانیه است که معمولاً نیازی به تغییر نیست و فقط برای شبیه سازی استفاده میشه.

            2- بلوک WaveScope:
            این بلوک که در زیرشاخه Tools از Xilinx Blockset قرار گرفته، برای مشاهده نتیجه شبیه سازی به صورت شکل موج مشابه Isim استفاده میشه. زمان شبیه سازی (بر حسب ثانیه) در کادر مشخص شده در تصویر زیر وارد میشه و با زدن کلید Run که به رنگ سبز مشخصه، شبیه سازی شروع میشه.
            توجه: زمان شبیه سازی بر اساس پارامتر Symulink System Period (قسمت 8 بلوک System Generator) هست و در صورتی که در اونجا یک ثانیه وارد شده باشه، هر کلاک در پنجره WaveScope یک ثانیه هست و به کلاک وارد شده در قسمت FPGA Clock Period (قسمت 7 بلوک System Generator) ربطی نداره.
            WaveScope تنظیمات خاصی نداره و با دبل کلیک کردن روی این بلوک، پنجره شبیه سازی باز میشه که با زدن کلید + (Add Selected Nets)، سیگنالهای انتخاب شده در طرح به پنجره اضافه میشه. در صورت نیاز بعداً در قسمت شبیه سازی، توضیحات لازم درباره بلوک میاد.

            3- بلوک های پورت های ورودی و خروجی:
            برای اضافه کردن پورت های ورودی و خروجی، از این بلوک ها که در زیرشاخه Basic قرار داره استفاده میشه.
            بلوک Gateway in: با دبل کلیک کردن روی این بلوک صفحه مشخصات به صورت زیر باز میشه:
            با توجه به این که بیشتر بلوک ها در تب Output، پارامترهای مشابه دارند، این قسمت به صورت کامل توضیح داده میشه و برای بقیه بلوک ها تکرار نمیشه.
            در قسمت Output Type مشخص می کنید که نوع ورودی چی باشه:
            1- Boolean: معادل std_logic در VHDL. برای ورودی یک بیتی استفاده میشه.
            2- Fixed Point: مقدار ممیز ثابت.
            3- Floating Point: مقدار ممیز شناور.
            دو نوع ممیز ثابت و ممیز شناور در ادامه به تفصیل بحث میشه.
            در قسمت Quantization:
            1- Truncate: در صورتی که در ورودی بلوک مقداری اعشاری تولید بشه که با نوع خروجی بلوک، تعداد بیت کمتری داشته باشه، بیت های اضافی دور انداخته میشه.
            2- Round: مقدار کم ارزش ترین بیت خروجی بلوک، با توجه به بیت بعد در ورودی مشخص میشه. در صورت گرد کردن مقدار خروجی، منابع مصرف میشه در حالتی که با Truncate هیچ منبع اضافه ای مصرف نمیشه.
            در قسمت Overflow:
            1- Wrap: در صورتی که مقدار ورودی بلوک از حداکثر مقدار خروجی بیشتر باشه، بیت های پرارزش ورودی حذف میشن. این گزینه هیچ منبع اضافه ای مصرف نمیکنه.
            2- Saturate: در صورت overflow، مقدار خروجی به بالاترین مقدار تنظیم میشه. این گزینه از منابع FPGA استفاده میکنه.
            3- Flag as error: در صورت overflow خطا رخ میده، در این صورت باید نوع خروجی بلوک یا خروجی بلوک های قبلی طوری اصلاح بشه که باعث overflow نشه.
            قسمت Sample Period:
            زمان نمونه برداری از خروجی بلوک رو تعیین میکنه که نمیتونه از مقدار Symulink System Period (در قسمت 8 بلوک System Generator) کمتر باشه. مثلاً اگه مقدار Symulink System Period یک ثانیه و مقدار Sample Period بلوک 2 ثانیه باشه، مقدار خروجی بلوک هر دو کلاک یک بار تغییر میکنه و تغییرات سریع تر دیده نمیشه.
            ---------------------------------------------------------------------------------------------------------------------------------------------------------------------
            انواع ممیز ثابت و ممیز شناور:
            ممیز ثابت: با نمایش اعداد صحیح نامنفی به صورت دیجیتال آشنایی دارید، مثلاً عدد 10 در سیستم دهدهی در سیستم باینری به صورت 1010 نشون داده میشه، همچنین برای نمایش اعداد منفی از مکمل 2 اون عدد استفاده میشه به علاوه یک بیت علامت مثلاً مقدار 10- به صورت 10110 نشون داده میشه، که از نات کردن بیت های 10 و سپس جمع کردن با 1 و در نهایت اضافه کردن بیت علامت در سمت چپ بیت پرارزش به دست آمده به این ترتیب برای بیان اعداد به صورت علامت دار (Signed) به یک بیت اضافی نسبت به عدد بدون علامت (Unsigned) نیاز داریم. برای نمایش اعداد اعشاری هم کافیه که سمت راست بیت کم ارزش که ارزش 2 داره، علامت ممیز رو بذاریم و بیت های اعشار رو قرار بدیم به این صورت که اولین بیت سمت راست ممیز ارزش 0.5 یا 2 داره، دومی ارزش 0.25 یا 2 و به همین ترتیب. مثلاً برای نمایش مقدار 10.32 به صورت بدون علامت حداقل به 4 بیت برای قسمت صحیح نیاز داریم و برای نمایش مقدار اعشاری در صورتی که از یک بیت استفاده کنیم مجبوریم به مقدار 10.5 گرد کنیم و در صورتی که از دو بیت استفاده کنیم میتونیم به مقدار 10.25 گرد کنیم و به همین ترتیب با تعداد بیت بیشتر، دقت رو بیشتر کنیم مثلاً با 7 بیت اعشار به مقدار 10.3203125 میرسه که بسته به این که بخوایم چقدر دقت داشته باشیم و چقدر بیت مصرف کنیم، تعداد بیت های اعشار رو انتخاب می کنیم به این نوع عدد (4 بیت صحیح و 7 بیت اعشار و بدون علامت) fixed-point unsigned 11.7 میگیم چون کلاً 11 بیت هست که 7 تاش اعشاره، برای نمایش همین عدد به صورت علامت دار یک بیت به کل تعداد بیت ها اضافه میشه یعنی نیاز به نوع signed 12.7 داریم.
            ممیز شناور: وقتی روی سیگنال ها عملیات مختلف و پیچیده ای انجام میشه و رنج مقادیر خیلی باز هست طوری که ممکنه مقادیر اعشاری کوچک تا مقادیر صحیح بزرگ با علامت مثبت یا منفی داشته باشیم، استفاده از نوع ممیز ثابت سخت میشه، در این مواقع بهتره از نوع ممیز شناور استفاده کنیم. نوع ممیز شناور یک نوع داده علامت داره که همون طور که از اسمش پیداست محل ممیز متغیره که باعث میشه Dynamic Range خیلی خوبی داشته باشه. دو نوع متداول Single (تعداد بیت = 32) و Double (تعداد بیت = 64) در Xilinx پشتیبانی میشه. برای کار با این نوع داده نیازی به آشنایی با نحوه کار اون نیست، در صورت تمایل به آشنایی با این نوع داده میتونید به لینک ویکی پدیا مراجعه کنید.
            ---------------------------------------------------------------------------------------------------------------------------------------------------------------------
            بلوک Gateway out::
            برای اضافه کردن پورت خروجی از این بلوک استفاده میشه. این بلوک تنظیمات خاصی نداره و تعداد بیت های خروجی هم با توجه به سیگنالی که بهش وصل شده به صورت خودکار تعیین میشه.
            ---------------------------------------------------------------------------------------------------------------------------------------------------------------------
            در پست های آینده بلوک های Constant، BitBlasher، Concat، Convert، Counter، Delay، Inverter، Logical، Mux، Register، Relational و Slice در قالب مثال های ساده معرفی میشن.
            لطفاً برای انجام پروژه های دانشجویی پیام خصوصی نفرستید.
            لطفاً سؤالاتی که در انجمن قابل طرح شدن هستند پیام خصوصی نکنید.
            با تمام وجود گناه کرديم اما نه نعمتش را از ما گرفت نه گناهان ما را فاش کرد اطاعتش کنيم چه مي کند؟"دکتر شريعتي"
            اگر جايي که ايستاده ايد را نمي پسنديد، عوضش کنيد شما درخت نيستيد!! "پاسكال"
            يا به اندازه ي آرزوهايت تلاش کن يا به اندازه تلاشت آرزو کن. "شکسپير"

            دیدگاه


              #7
              پاسخ : معرفی و آموزش نرم افزار System Generator - مثال 1

              در این مثال ساده دو سیگنال ساده از طریق بلوک های سیمولینک میسازیم و به ورودی ها میدیم و در WaveScope مشاهده می کنیم.
              یکی از مزایای SysGen نسبت به HDL ساده و سریع بودن شبیه سازی هست. در این جا سه بلوک پرکاربرد سیمولینک که در شبیه سازی استفاده میشن معرفی می کنم.
              1- Constant: این بلوک در زیرشاخه Sources کتابخانه ******** قرار داره. پارامتر این بلوک یک مقدار اسکالره که میتونه به صورت فرمول هم نوشته بشه مثلاً
              [code=matlab]1/sqrt(2)[/code]
              2- Pulse Generator: این بلوک هم در زیرشاخه Sources کتابخانه ******** قرار داره. با استفاده از این بلوک میشه پالس ساخت. پارامترهای این بلوک شامل دامنه، دوره تناوب پالس (به ثانیه) و duty cycle (به درصد) و فاز اولیه است.
              3- Signal from Workspace: این بلوک در زیرشاخه Sources کتابخانه DSP System Toolbox بهترین بلوک برای ورودی که نمیشه با مقدار ثابت و پالس ساخت هست.
              در پارامتر Signal میشه برداری که به عنوان ورودی قصد داریم برای شبیه سازی استفاده کنیم می نویسیم، همچنین میشه سیگنال رو در متلب در یک script یا در command window ساخت و فقط اسم اون رو در این قسمت وارد کرد.
              پارامتر ...Form output: این پارامتر مشخص می کنه بعد از تموم شدن نمونه های بردار مشخص شده در قسمت Signal، مقدار صفر وارد بشه، آخرین مقدار نگه داشته بشه یا کل بردار از اول تکرار بشه.

              پارامترهای مربوط به نرخ نمونه برداری در کل بلوک ها رو فعلاً میذاریم روی 1، فقط در جاهای خاصی نیاز میشه که این مقدار عوض بشه مثلاً جایی که از بلوک downsample استفاده بشه که بعداً بهش میرسیم. مقدار 1 ثانیه در اینجا به این معنی هست که در WaveScope هر کلاک معادل یک ثانیه است، برای تبدیل زمان به مقدار واقعی یک محاسبه ساده لازمه در حالی که با دست بردن در مقدار نمونه برداری، پیچیدگی های بیشتری به وجود میاد پس تا نیاز نشده به مقدار نمونه برداری دست نزنید.

              در مثال زیر خروجی بلوک های Signal from Workspace و Pulse Generator با استفاده از WaveScope نمایش داده شدن.


              برای اتصال بلوک های سیمولینک کافیه از محل پورت بلوک اول به سمت پورت بلوک دوم درگ کنید و یا روی بلوک اول کلیک کنید، کلید Ctrl رو پایین نگه دارین و روی بلوک دوم کلیک کنید.
              برای انتخاب همزمان چند بلوک یا چند سیگنال (خط ارتباطی بین بلوک ها) از کلید Shift استفاده میشه و در صورتی که بلوکها/سیگنالها به هم نزدیک هستند میتونید با استفاده از درگ کردن با شروع از یک نقطه خالی روی بلوک/سیگنال ها اون ها رو انتخاب کنید.
              برای باز کردن پنجره WaveScope روی بلوک اون دبل کلیک کنید.
              برای اضافه کردن سیگنالها به پنجره شبیه سازی، ابتدا سیگنال ها رو انتخاب کنید و بعد در پنجره WaveScope روی علامت + (Add Selected Nets) کلیک کنید.
              برای عوض کردن محل نمایش سیگنالها روی قسمت اسم سیگنال مورد نظر کلیک کنید و به محل مورد نظر درگ کنید.
              برای حذف یک سیگنال از WaveScope روی سیگنال کلیک کنید و کلید Del روی صفحه کلید رو بزنید.
              برای اسم دادن به یک سیگنال روی خط ارتباطی بین بلوک ها دبل کلیک کنید و اسم مورد نظر رو تایپ کنید، همچنین با دبل کلیک روی اسم سیگنال در پنجره WaveScope میتونید اسم سیگنال رو عوض کنید. همیشه سیگنالی که در سیمولینک انتخاب شده هست در WaveScope به صورت هایلایت شده نشون داده میشه (در حالت انتخاب هست) و برعکس.
              برای انتخاب نوع سیگنال و رنگ روی سیگنال دبل کلیک کنید تا پنجره زیر باز بشه:


              در این پنجره میتونید نوع نمایش رو به صورت باینری، هگزادسیمال یا دسیمال تعیین کنید. با انتخاب analog به جای نمایش مقدار عددی، نمودار سیگنال نشون داده میشه و برای سیگنالهای بدون علامت هم لازمه که تیک گزینه Sign-Magnitude برداشته بشه.

              در این مثال، پارامترهای بلوک های Signal from Workspace و Pulse Generator در تصویر مشخصه، ورودی i_trig به صورت boolean و ورودی i_data به صورت Fixed-Point علامت دار 16 بیتی با 14 بیت اعشار هست که به اختصار از این به بعد به صورت fix 16.14 نشون میدیم. (برای بدون علامت ufix)

              تفسیر پارامترهای بلوک Pulse Generator:
              دوره تناوب = 10 ثانیه . این پالس هر ده ثانیه (معادل 10 کلاک) تکرار میشه.
              duty cycle= 10%. در 10% کل دوره تناوب مقدار پالس 1 هست (=1ثانیه =1کلاک)
              Phase Delay = 0 (شروع پالس از اولین کلاک است و هیچ تأخیری ندارد).

              تفسیر پارامترهای بلوک Signal from Workspace:
              [code=matlab] Signal = sin(2*pi*0.005*[0:1000])[/code]
              یک سیگنال سینوسی با فرکانس 0.005 معادل با دوره تناوب 200 ثانیه.
              مقدار خروجی بعد از پایان سیگنال ورودی (1001 نمونه) روی Setting to Zero تنظیم شده که در نتیجه صفر میشه. در صورتی که روی cyclic repetition گذاشته بشه، سیگنال سینوسی تکرار میشه.

              در مثال بعد بلوک های Relational، Constant و Gateway out به طرح اضافه میشن.
              لطفاً برای انجام پروژه های دانشجویی پیام خصوصی نفرستید.
              لطفاً سؤالاتی که در انجمن قابل طرح شدن هستند پیام خصوصی نکنید.
              با تمام وجود گناه کرديم اما نه نعمتش را از ما گرفت نه گناهان ما را فاش کرد اطاعتش کنيم چه مي کند؟"دکتر شريعتي"
              اگر جايي که ايستاده ايد را نمي پسنديد، عوضش کنيد شما درخت نيستيد!! "پاسكال"
              يا به اندازه ي آرزوهايت تلاش کن يا به اندازه تلاشت آرزو کن. "شکسپير"

              دیدگاه


                #8
                پاسخ : معرفی و آموزش نرم افزار System Generator - مثال 2

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

                و اما مثال دوم:


                در اینجا بلوک های Relational و Constant و Gateway out به طرح اضافه شدن.
                همون طور که در تصویر دیده میشه نوع داده i_data و Constant هر دو از نوع fix 16.14 هست، مقدار Constant یک تقسیم بر رادیکال 2 هست که با فرمت 14 بیت اعشار با این دقت نمایش داده شده.
                بلوک Relational به صورت =< استفاده شده یعنی هر وقت ورودی a بزرگتر یا مساوی ورودی b باشه، خروجی اون 1 و در غیر این صورت صفره.
                ورودی enable این بلوک فعال شده، با فعال شدن enable، خروجی باید حداقل یک تأخیر نسبت به ورودی داشته باشه (در بقیه بلوک هایی که enable دارن هم همینطوره) در نظر گرفتن این تأخیر در طراحی مهمه چون لازمه که خروجی های مختلف با هم همزمان باشن یا فاصله زمانی خاصی بین اونها رعایت بشه که در مثال های آینده خواهید دید.
                ورودی enable به i_trig وصل شده به این معنا که هر وقت مقدار i_trig باشه مقایسه انجام میشه در غیر این صورت بلوک Relational آخرین مقدار خروجی خودش رو نگه میداره.
                با اجرای این برنامه و تغییر محل کرسر، میتونید مقدار سیگنال i_data رو در قسمت های مختلف با مقدار constant مقایسه کنید و اثر ورودی enable رو ببینید. (برای انتخاب کرسر پایین پنجره در قسمتی که زمان نوشته شده کلیک کنید یا کلید c روی صفحه کلید رو بزنید و بعد کرسر رو به هر جا که میخواین درگ کنید).
                برای زوم مثبت و منفی در پنجره سیمولینک از کلید وسط موس استفاده کنید. برای جابجا شدن در صفحه سیمولینک، کلید وسط موس رو نگه دارید و درگ کنید. برای مشاهده کامل طرح کلید Space روی صفحه کلید رو بزنید.

                خروجی Relational به یک پورت خروجی متصل شده، SysGen تشخیص میده که در اینجا این خروجی باید Boolean باشه و نیازی به هیچ تنظیماتی توسط کاربر نیست. در صورتی که قصد دارین از برنامه bit file بگیرید میتونید شماره پایه FPGA مورد نظرتون رو در قسمت تنظیمات پورت های ورودی و خروجی وارد کنید.

                این برنامه یک برنامه کامل هست که میتونید برای تست، با دبل کلیک روی بلوک System Generator اون رو Generate کنید.
                لطفاً برای انجام پروژه های دانشجویی پیام خصوصی نفرستید.
                لطفاً سؤالاتی که در انجمن قابل طرح شدن هستند پیام خصوصی نکنید.
                با تمام وجود گناه کرديم اما نه نعمتش را از ما گرفت نه گناهان ما را فاش کرد اطاعتش کنيم چه مي کند؟"دکتر شريعتي"
                اگر جايي که ايستاده ايد را نمي پسنديد، عوضش کنيد شما درخت نيستيد!! "پاسكال"
                يا به اندازه ي آرزوهايت تلاش کن يا به اندازه تلاشت آرزو کن. "شکسپير"

                دیدگاه


                  #9
                  پاسخ : معرفی و آموزش نرم افزار System Generator

                  هادی خان دستتون درد نکنه عالی بود ممنون

                  دیدگاه


                    #10
                    پاسخ : معرفی و آموزش نرم افزار System Generator - نحوه خروجی گرفتن از SysGen

                    در مثال پست قبلی، یک طرح کامل ایجاد شد که قابلیت ایجاد یک کامپوننت برای استفاده در کد HDL رو داره و یا با تخصیص پورت ها میشه مستقیماً فایل bit برای پروگرم کردن FPGA ساخته بشه. در این پست نحوه این کار توضیح داده میشه.
                    1- اختصاص پایه FPGA به پورت های ورودی و خروجی:
                    برای اختصاص پایه به پورت های ورودی و خروجی در پنجره Properties این بلوک ها در تب Implementation تیک گزینه Specify IOB location constraint را بزنید و شماره پایه را در داخل کروشه بنویسید. شماره پایه باید داخل کوتیشن باشد مثلاً 'P34' یا 'AB12'، برای ورودی/خروجی های بیشتر از یک بیت، از سمت چپ، محل بیت پرارزش رو بذارین و از کاما , به عنوان جدا کننده استفاده کنید مثلاً {'P34','P35','P36' } که P34 مربوط به بیت پرارزشه.


                    2- اختصاص پایه کلاک:
                    محل پایه کلاک در بلوک System Generator در تب Clocking و در فیلد Clock pin location باید وارد بشه.


                    برای ساختن فایل bitstream در پنجره بلوک System Generator گزینه Compilation را روی Bitstream بذارین. پارت FPGA مورد نظر رو در قسمت Part انتخاب کنید. در قسمت Target Directory پوشه ای که فایل bit داخلش ایجاد میشه رو مشخص کنید و روی Generate کلیک کنید.


                    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------
                    مشکل Fatal Internal Error:
                    در صورتی که در مرحله Generate کردن با خطای زیر روبرو شدید:


                    طبق راه حل های این لینک (مخصوصاً راه حل آخر) عمل کنید.
                    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------
                    در صورت نیاز به تغییر در فایل ucf، یک کپی از فایل ucf تولید شده توسط SysGen بگیرید و تغییرات را روی آن اعمال کنید. برای جایگزین کردن فایل ucf تغییر داده شده با اصلی طبق توضیحات این لینک عمل کنید (آخر خطی که اضافه می کنید سمیکالن لازم دارد).
                    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------
                    نحوه استفاده از فایل SysGen به عنوان کامپوننت در ISE:
                    در این صورت نیازی به اختصاص شماره پایه نیست و باید Compilation را روی گزینه NGC Netlist تنظیم کنید و روی Generate کلیک کنید. فایلی با پسوند sgp تولید میشه که در ISE به عنوان ماژول جدید به برنامه Add میکنید. در ادامه شبیه اضافه کردن بقیه core های معمولی، کامپوننت ساخته شده رو به کدتون اضافه می کنید.
                    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------
                    بعد از پایان Generate با کلیک روی Show Reports در کادری که بعد از پایان Generate ظاهر میشه، میتونید گزارش وضعیت شامل خطاها، هشدارها، میزان استفاده از منابع و بقیه اطلاعاتی که در ISE در قسمت Design Summary قابل دسترسی هست ببینید.
                    لطفاً برای انجام پروژه های دانشجویی پیام خصوصی نفرستید.
                    لطفاً سؤالاتی که در انجمن قابل طرح شدن هستند پیام خصوصی نکنید.
                    با تمام وجود گناه کرديم اما نه نعمتش را از ما گرفت نه گناهان ما را فاش کرد اطاعتش کنيم چه مي کند؟"دکتر شريعتي"
                    اگر جايي که ايستاده ايد را نمي پسنديد، عوضش کنيد شما درخت نيستيد!! "پاسكال"
                    يا به اندازه ي آرزوهايت تلاش کن يا به اندازه تلاشت آرزو کن. "شکسپير"

                    دیدگاه


                      #11
                      پاسخ : معرفی و آموزش نرم افزار System Generator

                      سلام
                      دوست عزیز مطلب بسیار جالبی رو شروع کردید و انشالله هم ادامه پیدا کنه
                      من یه صحبتی میکنم ببین چقد درسته؟
                      این ورژنی که شما نصب کردید منظورم ise هستش گفتید 14 هست نه؟
                      و ایا سورستون کامل هست ؟
                      بعد اینکه په کرکی رو استفاده کردید؟(اگه از جایی دانلود شده بگید که از کجاس و چه سایتی؟ ) و اینکه اسمه کرک یا لایسنس و یا تیمی که کرک کرده رو بگید چون خیلی مهمه
                      بعدش الان شما توی مطلب کامل نصب کردید؟
                      مطلبتون چه ورژنیه؟ دقیق؟ چون اینا به شدت نا همخونی دارن تو نصب برای مطلب
                      من که ise 13 رو دارم با مطلب 2013 نصب نشد و موقع بالا اومدن مطلب و سیمولینک erorهای ناجور میده
                      خلاصش که دوستان بدونید که داستانیه نصبش
                      تشکر از راهنماییتون

                      دیدگاه


                        #12
                        پاسخ : معرفی و آموزش نرم افزار System Generator

                        سلام. ورژن نرم افزارها در پست اول مشخصه. ISE 14.7 و Matlab R2013a. نرم افزارها از اینترنت دانلود شدن (فکر می کنم سایت soft98.ir)
                        در مورد ورژن های سازگار هم در انتهای پست اول توضیح داده شده، چک کنید که ورژن دو نرم افزار با هم سازگار باشه.
                        مشکل فایل لایسنس که منجر به خطای Fatal Internal Error هم میشه در پست قبلی توضیح داده شده.
                        لطفاً برای انجام پروژه های دانشجویی پیام خصوصی نفرستید.
                        لطفاً سؤالاتی که در انجمن قابل طرح شدن هستند پیام خصوصی نکنید.
                        با تمام وجود گناه کرديم اما نه نعمتش را از ما گرفت نه گناهان ما را فاش کرد اطاعتش کنيم چه مي کند؟"دکتر شريعتي"
                        اگر جايي که ايستاده ايد را نمي پسنديد، عوضش کنيد شما درخت نيستيد!! "پاسكال"
                        يا به اندازه ي آرزوهايت تلاش کن يا به اندازه تلاشت آرزو کن. "شکسپير"

                        دیدگاه


                          #13
                          پاسخ : معرفی و آموزش نرم افزار System Generator

                          سلام.
                          متأسفانه مدتی فرصت نشد سر بزنم و مطلب جدید بذارم به همین خاطر تصمیم گرفتم یک مثال پیچیده تر و کامل تر بذارم، هر کی علاقه منده میتونه فایل رو دانلود کنه و خودش باهاش کار کنه تا با مهندسی معکوس متوجه نحوه کار برنامه بشه. هر سوالی هم داشتید همین جا جواب میدم.
                          این مثال یک پیاده سازی از الگوریتم Histogram Equalization (تعدیل هیستوگرام) هست که یکی از مباحث کاربردی پردازش تصویره. هدف از این مثال پیاده سازی آموزشی بوده و دنبال بهینه سازی از نظر منابع یا زمان نبودم و صرفاً عملکرد درست برنامه مدنظر بوده.


                          الگوریتم Histogram Equalization تصویر ورودی که زیادی تاریک یا زیادی روشن هست و یا کنتراست پایینی داره (هیستوگرام تصویر در قسمت کوچکی جمع شده) رو تبدیل به یک تصویر با کنتراست بالا میکنه. نحوه کار این الگوریتم در فایل اسکریپت متلب همراه پروژه مشخصه (دستور متلب مربوط به این الگوریتم = histeq) و به این صورت هست که اول هیستوگرام تصویر به دست میاد. منظور از هیستوگرام، نموداری هست که تعداد سطوح روشنایی مختلف در کل تصویر رو به صورت نرمالیزه نشون میده. در مرحله بعد هیستوگرام تجمعی به دست میاد که مقدار هر سطح روشنایی معادل مجموع مقدار هیستوگرام غیر تجمعی خود اون سطح روشنایی و همه سطوح پایین تر از خودشه. در مرحله آخر هر سطح روشنایی در تصویر اصلی، با مقدار معادل در هیستوگرام تجمعی جایگزین میشه که به دلیل استفاده از هیستوگرام تجمعی، نتیجه دلخواه مطابق شکل زیر حاصل میشه:


                          این برنامه یک تصویر Grayscale با اندازه 256*256 رو به عنوان ورودی میگیره و بعد از محاسبات، تصویر پردازش شده رو به عنوان خروجی میده. نحوه دریافت ورودی به این صورته که تصویر به صورت یک بردار در میاد و اندیس و مقدار در پورت های ورودی قرار میگیرن و با هر بار یک شدن wr ورودی، مقدار پیکسل در حافظه RAM ذخیره میشه. بعد از اتمام دریافت تصویر، برنامه شروع به محاسبه هیستوگرام تصویر میکنه و در یک حافظه RAM دیگه ذخیره میکنه، بعد از تمام شدن محاسبه هستوگرام، هیستوگرام تجمعی محاسبه و در حافظه RAM سوم ذخیره میشه و بعد از اتمام این مرحله، پیکسل های تصویر به ترتیب خونده میشه و مقدار معادل هر کدوم با همون فرمتی که دریافت شدن در خروجی قرار میگیره.

                          برای اجرای برنامه، اول قسمت input در فایل sg_imhist_ex رو اجرا کنید تا ورودی شبیه سازی، آماده بشه، بعد از اجرای شبیه سازی، برای دیدن خروجی برنامه قسمت output از sg_imhist_ex رو اجرا کنید. با اجرای فایل HistogramEqualization میتونید خروجی متلب رو ببینید و با خروجی System Generator مقایسه کنید.
                          دانلود فایل مثال
                          لطفاً برای انجام پروژه های دانشجویی پیام خصوصی نفرستید.
                          لطفاً سؤالاتی که در انجمن قابل طرح شدن هستند پیام خصوصی نکنید.
                          با تمام وجود گناه کرديم اما نه نعمتش را از ما گرفت نه گناهان ما را فاش کرد اطاعتش کنيم چه مي کند؟"دکتر شريعتي"
                          اگر جايي که ايستاده ايد را نمي پسنديد، عوضش کنيد شما درخت نيستيد!! "پاسكال"
                          يا به اندازه ي آرزوهايت تلاش کن يا به اندازه تلاشت آرزو کن. "شکسپير"

                          دیدگاه


                            #14
                            پاسخ : معرفی و آموزش نرم افزار System Generator

                            سلام هادی جان
                            خیلی مطالب مفیدی ارائه دادی و امیدوارم آموزش هات ادامه داشته باشه.
                            تعدادی از مسائلی که در کار با System generator یکم مبهمه مطرح میکنم امیدوارم دانش شما راه گشا باشه.
                            1- آیا امکان پروگرم کردن مستقیم یا تولید فایل خروجی برنامه ریزی FPGA در محیط متلب وجود داره؟
                            2- چه FPGA هایی رو ساپورت میکنه؟
                            3- میشه بدون داشتن دانش VHDl و Verilog صرفا از System generator استفاده کرد؟
                            4- آیا اگه برای نوشتن برنامه های ساده تر مثلا کنترلی (غیر پردازش سیگنال) از system generator استفاده کنیم مشکلی وجود نخواهد داشت و برنامه بهینه است؟
                            5- میشه با تهیه برد های آماده مثل Mojo3 که Spartan6 داره در محیط System generator شروع به کار کرد؟

                            من از یکی از دوستان شنیدم که در برخی شرکت ها بردهای آماده خریداری میشه و در محیط system generator برنامه نویسی انجام میشه و با ise پروگرم میکنن و خبری از vhdl و verilog نیست و پروژه ها هم خیلی حرفه ای هستند. نظر شما چیه؟ اگه این راه وجود داشته باشه خیلی ها شاید تمایل پیدا کنن پروژه ها شون رو با FPGA پیاده سازی کنن چون از یک طرف دیگه خبری از رجیستری های پیچیده نیست و از طرف دیگه محیط متلب خیلی جذاب و پایدار هست. یعنی هر روز یک ورژن کاملا متفاوت تولید نمیشه و بیس همونه که بوده.

                            هادی جان خیلی مشتاق جوابتون هستم. دوست دارم بیشتر بحث کنیم چون مشکل کار با system generator در قدم اول بیشتر عدم شناخت قابلیت هاست و قدم دوم نکات فنی که شما استادید. :job:
                            با تشکر

                            دیدگاه


                              #15
                              پاسخ : معرفی و آموزش نرم افزار System Generator

                              1- بله، در پست های قبل نحوه اختصاص ورودی/خروجی ها و کلاک توضیح داده شد.
                              2- همه FPGA های متداول Xilinx (اسپارتان3 و بالاتر) رو پشتیبانی میکنه. در بلوک System Generator در قسمت Part لیست همه قطعات پشتیبانی شده هست.
                              3- بله.
                              4- در استفاده از SysGen هم مثل HDL نکاتی هست که اگه رعایت بشه طرح بهینه میشه و بیشتر به نحوه طراحی بستگی داره. در بلوک System Generator با کلیک روی Performance Tips میتونید این نکات رو ببینید. من شخصاً استفاده از HDL رو برای کار کنترلی ترجیج میدم.
                              5- بله، برد مهم نیست، همین که FPGA پشتیبانی بشه کافیه. با وجود محیط Symulink و ابزار شبیه سازی، بدون برد آموزشی هم میشه شروع کرد.
                              کارهای نسبتاً بزرگ و پیچیده پردازشی فقط با SysGen قابل پیاده سازی هستند. قسمتی از یک پروژه رو با SysGen پیاده سازی کرده بودم که قسمت کوچکی از کار کنترلی اون در پیاده سازی با تست عملی (با ChipScope) متفاوت با شبیه سازی بود که اتفاقاً خیلی هم مهم بود و احتمال آسیب به یک قطعه مهم و گرون قیمت رو داشت که در نهایت مجبور شدم اون قسمت کنترلی کوچک رو با HDL کار کنم.
                              لطفاً برای انجام پروژه های دانشجویی پیام خصوصی نفرستید.
                              لطفاً سؤالاتی که در انجمن قابل طرح شدن هستند پیام خصوصی نکنید.
                              با تمام وجود گناه کرديم اما نه نعمتش را از ما گرفت نه گناهان ما را فاش کرد اطاعتش کنيم چه مي کند؟"دکتر شريعتي"
                              اگر جايي که ايستاده ايد را نمي پسنديد، عوضش کنيد شما درخت نيستيد!! "پاسكال"
                              يا به اندازه ي آرزوهايت تلاش کن يا به اندازه تلاشت آرزو کن. "شکسپير"

                              دیدگاه

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