توسط احمد ثقفی 

10 بهمن, 1396

مولد موج سینوسی در FPGA

آیا تا به حال به تولید یک موج سینوسی دیجیتال درون FPGA نیاز داشته‌اید؟

واقعیت این است که در بسیاری از کابردها، از جمله پیاده‌سازی الگوریتم‌های پردازش سیگنال، شما نیاز به پیاده‌سازی مولد موج سینوسی در FPGA دارید.

برای انجام این کار، روش‌های متنوعی وجود دارد؛ روش‌های غیر اصولی و ناکارآمد و روش‌های بهینه و حرفه‌ای!

در این برنامه ویدئویی، شما را با روش‌های مختلف پیاده‌سازی مولد موج سینوسی در FPGA آشنا می‌کنم و سپس مراحل پیاده‌سازی یکی از این روش‌ها را به طور کامل به شما نشان می‌دهم.

More...

انواع روش‌های پیاده‌سازی مولد موج سینوسی در FPGA

در این برنامه، با سه روش برای پیاده‌سازی توابع خاص در FPGA و از جمله موج سینوسی آشنا می‌شوید.

این روش‌ها، استفاده از بسط تیلور، الگوریتم CORDIC و روش DDS است.

از میان این روش‌ها، من روش DDS را برای پیاده‌سازی مولد موج سینوسی در FPGA انتخاب می‌کنم و پس از بیان مفاهیم مرتبط با آن، به کمک DDS IP Core موجود در نرم‌افزار ISE مراحل پیاده‌سازی آن را به طور کامل به شما نشان می‌دهم.

برای آشنایی با نحوه استفاده از IPها در نرم‌افزار ISE برنامه ویدئویی زیر را ببینید…

روش DDS برای پیاده‌سازی مولد موج سینوسی در FPGA

روش DDS، یکی از روش‌های اصولی و بهینه برای پیاده‌سازی مولد موج سینوسی در FPGA است.

ایده اصلی این روش، ذخیره‌سازی نمونه‌های مربوط به یک دوره تناوب از یک موج سینوسی در یک حافظه موقت و خواندن هوشمندانه مقادیر از جدول برای تولید موج سینوسی با فرکانس‌های مختلف است.

اینکه چطور به کمک این روش می‌توان موج‌های سینوسی با فرکانس‌های مختلف درون FPGA تولید کرد، موضوعی است که آن را به طور کامل در این برنامه توضیح می‌دهم.

برای دانلود نسخه با کیفیت این ویدئو، روی دکمه زیر کلیک کنید:

آیا برنامه ویدئویی چطور یک مولد موج سینوسی در FPGA پیاده‌سازی کنیم برای شما مفید بود؟

لطفا نظرتان را در مورد این برنامه در پایین همین پست با دیگران به اشتراک بگذارید. همچنین با کلیک روی هر کدام از دکمه‌های اشتراک گذاری ابتدای این مطلب و به اشتراک‌گذاری آن در شبکه‌های اجتماعی می‌توانید افراد بیشتری را در یادگیری این مطالب سهیم کنید.

کانال تلگرام آموزش FPGA از صفر

برای عضویت در کانال تلگرام و دسترسی به آموزش‌های بیشتر و اطلاع سریع از زمان انتشار آموزش‌ها و تخفیف‌های ویژه، روی دکمه زیر کلیک کنید:

درباره نویسنده:

احمد ثقفی

شاید به این موضوعات نیز علاقه داشته باشید:

  • برای تغییر یا منترل سرعت موج سینوسی ه تولید شده، گفتین که مثلا اگر ما ۱۰ نمونه گرفتیم و در بلاک رم ذخیره کردیم، برای خواندن از بلاک رم، به جای اینکه یکی یکی بخونیم، مثلا یکی در میون میخونیم که میشه ۵ نمونه و سرعت میشه ۲۰ مگ. خب هرچقدر تعداد نمونه ها بیشتر باشه، موج دقیق تری خواهیم داشت. خب چه کاری ه که اول ۱۰ نمونه برداریم و بعد از بلاک رم ۵ تاش رو بخونیم. از همون اول ۵ تا نمونه میگیریم.
    آیا اگر این کار رو بکنیم تفاوتی داره ؟
    یا اینکه من درست متوجه نشده ام!

    • در مثال ۱۰ نمونه، این موضوع قابل لمس نیست. اما مساله به طور کلی به این صورت است:

      دقت زمانی و در نتیجه دامنه‌ای سیگنال سینوسی با ۵ نمونه بسیار کمتر از سیگنال سینوسی مثلا با ۱۰۰ نمونه است که ۵ نمونه از آن را جدا کردیم.

      • سلام جناب ثقفی.

        بسیار ممنون از آموزش های روان، ساده و پر محتوایی که ارایه میدید.
        خب خواندن چند در میان نمونه ها از LUT ، باعث خارج شدن از حالت سیگنال تن میشه( هارمونیک دار میشه).
        در DDS IP که اشاره کردید نمونه ها در بازه ی یک دوره تناوب یا ۲*pi ذخیره شدند. به عبارت دیگه مثلا اگر تعداد نمونه ها ۲۵۶ باشه، دقت هر استپ ۳۶۰/۲۵۶=۱٫۴ درجه میشه.
        از طرفی میدونیم قدر مطلق اندازه در بازه ۰ تا pi/2 در بازه pi/2 تا ۲*pi تکرار میشه. برای یک زاویه دلخواه، فقط کافیه مقدار متناطر در بازه ۰ تا pi/2 خونده بشه و علامت منفی یا مثبت، با توجه به فاز، درش ضرب بشه.
        بر همین اساس، اگر این ۲۵۶ نمونه رو به ۰ تا pi/2 اختصاص بدیم دقت میشه ۹۰/۲۵۶=۰٫۳۵۱ درجه.
        انگار که یک LUT با ۱۰۲۴ داریم. ولی فقط با اشغال ۲۵۶ خانه.
        البته برای این پیدا کردن نمونه در بازه ۰ تا ۹۰ درجه، کلاک اضافه مصرف میشه. در عوض با مصرف حافظه کمتر، و سیگنال با فرکانس اولین هارمونیک چهار برابر بزرگتر و البته دامنه هارمونیک کوچکتر خواهیم داشت و این میتونه در جایی که سیگنال صاف تری نیاز هست، کاربرد خودش رو داشته باشه.

        و باز هم ممنون از وقتی که برای تهیه این آموزش ها اختصاص میدید.

  • سلام بر شما استاد محترم
    ممنون از آموزشهاتون
    یک سوال برای من ایجاد شده برای ایجاد یک سینوسی مقدار نمونه های آن با چه پارامتری رابطه دارند؟
    به بیان دیگر اگر ما ۱۶=N باشد با اینکه ۳۲=N باشد چه تفاوتی دارد؟
    به طور کلی چه پارامتری مشخص کننده این پارامتر است؟

    • سلام،

      تعیین این پارامتر بستگی به دقت مورد نیاز شما برای ساخت موج سینوسی دارد که معمولا از سمت طراح سیستم به شما ارائه می‌شود.

      موفق باشید

  • ضمن عرض سلام و وقت بخیر
    من زمانی که IP رو Generate میکنم Generate نمیشه و با خطای زیر مواجه میشم میشه راهنماییم کنید ممنونم.
    ERROR:sim – “._cg_dbgDDS_IP.prj” line 39: Source file
    ./xbip_dsp48_addsub_v2_0/xbip_dsp48_addsub_v2_0_xst_comp.vhd does not exist
    ERROR:sim – Failed executing Tcl generator.
    ERROR:sim – Failed to generate ‘DDS_IP’. Failed executing Tcl generator.

    • سلام،

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

      موفق باشید.

  • {"email":"Email address invalid","url":"Website address invalid","required":"Required field missing"}

    ۷ تکنیک پیشرفته کدنویسی برای FPGA

    >