محاسبات علامتدار

پیاده‌سازی محاسبات علامتدار در FPGA

برای نمایش اعداد علامتدار و پیاده‌سازی محاسبات علامتدار در FPGA و به کمک زبان VHDL روش‌های مختلفی وجود دارد. در این برنامه ویدئویی، یک روش امتحان شده را که سال‌ها است در پروژه‌های بزرگ از آن استفاده کرده‌ام و البته توصیه مهندسان شرکت Xilinx هم است به شما آموزش می‌دهم.

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

برای آشنایی با زبان VHDL این برنامه ویدئویی را ببینید…

در این برنامه ویدئویی، ابتدا سه روش مرسوم برای نمایش اعداد علامتدار را مرور می‌کنم و سپس در مورد روش مناسب برای پیاده‌سازی که روش نمایش مکمل دو یا two’s complement است شرح می‌دهم.

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

در ادامه این برنامه، روش استاندارد و امتحان شده‌ای را برای پیاده‌سازی محاسبات علامتدار در FPGA به شما آموزش خواهم داد و یک نمونه کد VHDL را هم به عنوان مثال بررسی خواهم کرد.

لینک دانلود (زمان: ۱۴ دقیقه — ۲۵ مگابایت)

 

آیا برنامه ویدئویی پیاده‌سازی محاسبات علامتدار در FPGA برای شما مفید بود؟

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

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

  • MONTGOMERY گفت:

    سلام و عرض خسته نباشید دارم خدمت استاد عزیزم جناب آقای ثقفی عزیز …
    استاد یک سوال میخواهیم ۱۸ عدد مختلف رو جمع کنیم و میدانیم جواب نهایی ۵ بیتی است .
    حال نکته اینجاست اعداد ما همگی ۷ بیتی هستند ، برای اینکار هر دوعدد ۷ بیتی را که جمع میکنیم حاصل را باید بریزیم در یک سیگنال ۸ بیتی و در ادامه هر دوسیگنال ۸ بیتی را که با هم جمع میکنیم باید بریزیم در یک سیگنال ۹ بیتی و به همین ترتیب که ادامه بدهیم جواب نهایی را باید بریزیم در یک سیگنال ۱۰ – ۱۱ بیتی درحالی که میدانیم جواب نهایی به ۵ بیت بیشتر نیاز ندارد . خوب حال سوال اینجاست کجا باید از درنظر گرفتن بیت اضافی صرفه جویی کنیم و اصلا تکنیکی که شما بیان کردید در ویدئو کجای کار مارا و چطور ساده میکند؟؟؟
    پیشاپیش از شما متشکرم

    • سلام، ممنون از شما.

      اگر می دانید که جواب نهایی در ۷بیت یا کمتر می‌گنجد، می‌توانید از همان ابتدا تمام حاصل جمع‌ها را درون رجیسترهای ۷بیتی قرار دهید و وقوع سرریزهای میانی هم هیچ مشکلی در نتیجه نهایی پیش نخواهد آورد.

      موفق باشید.

  • مهدی گفت:

    با سلام و عرض تشکر از زحمت های شما
    مطالب جالبی میزارید و مخصوصا من از مقاله ۷ تکنیک پیشرفته کدنویسی خیلی لذت بردم. به نظر من مقاله ها خیلی آموزنده تره و مطالب سریعتر منتقل میشه
    یه سوال هم درباره پیاده سازی دارم: این که به نظر شما برای پیاده سازی پردازش سیگنال دیجیتال چه دلیلی داره که ما از کد VHDL استفاده کنیم؟ در حالی که با استفاده از System Generator خیلی گویا تر و بهینه تر میشه این سیستم ها رو پیاده کرد و به نظر من دیدن مسیر سیگنال، تاخیرها و خطاها خیلی راحت تره و دیباگ کردنش هم راحت تر انجام میشه

    • سلام، خوشحالم که این مطالب مورد توجه شما قرار گرفتن.

      در مورد پیاده‌سازی الگوریتم‌های پردازش سیگنال با System Generator باید بگم که مساله “بهینه بودن” که اشاره کردید در عمل کاملا برعکسه. یعنی مداری که حاصل از کدنویسی یک پیاده‌ساز حرفه‌ای است بسیار بهینه‌تر از خروجی System Generator هست، هم از نظر سرعت و هم از نظر مقدار منابع مصرف شده در FPGA یا همان area.

      استفاده از ابزار System Generator فقط برای مدارات پردازشی کوچک، آن هم در صورتی که راه مناسبی برای پیاده‌سازی به کمک زبان توصیف سخت‌افزاری پیدا نکردید پیشنهاد می‌شود و در انجام پروژه‌های حرفه‌ای استفاده از آن بسیار محدود است.

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

      موفق باشید.

  • امین گفت:

    سلام استاد
    با تشکر از اموزش محاسبات علامت دار
    لطفا آموزش بعدی رو درمورد استفاده از اعداد اعشاری در vhdl و fixed point و float point قرار بدید.
    و اینکه چه موقع بهتر است از کدوم استفاده بشه
    به نظرم یکی از مباحث مهم و ابتدایی در پیاده سازی الگوریتم های پردازشی باشه

    مرسی

    • سلام، ممنون از شما.

      همانطور که شما هم اشاره کردید، این موضوع احتمالا مهمترین مساله در فرآیند پیاده‌سازی الگوریتم‌های پردازش سیگنال به کمک FPGA است و به همین دلیل هم در دوره “پردازش سیگنال با FPGA” به طور مفصل به آن پرداخته‌ام و حتما در برنامه‌های بعدی سایت هم مطالبی در این زمینه منتشر خواهم کرد.

      موفق باشید.

    • سلام مجدد،

      برنامه‌ای را که در مورد نحوه پیاده‌سازی محاسبات اعشاری وعده داده بودم در سایت منتشر کردم و می‌توانید از طریق لینک زیر آن را مشاهده کنید:

      پیاده‌سازی محاسبات اعشاری در FPGA
      موفق باشید.

  • علی گفت:

    سلام
    از اینکه فیلم های آموزشی و مقالات با ارزشتون رو گذاشتید واقعا سپاسگذارم.
    من زبان VHDL رو یاد گرفتم. اما بنا به یک سری مشکلات که پیش آمده، دارم به verilog کوچ می کنم. از آنجایی که کارم پردازشی هست و تایمینگ برام مهمه، آیا ممکنه به مشکلات تایمینگ برخورد کنم یا اصلا ربطی نداره؟
    با تشکر

    • سلام،

      همانطور که خودتان هم اشاره کردید، این موضوع ربطی به اینکه از کدام زبان توضیف سخت‌افزاری استفاده می‌کنید ندارد. از نظر قابلیت‌های پیاده‌سازی، این دو زبان یکسان هستند.

      موفق باشید.

  • […] برنامه ویدئویی قبلی که در سایت منتشر کردم، شما را با نحوه پیاده‌سازی محاسبات علامتدار در FPGA آشنا کردم و در مورد نمایش اعداد علامتدار به روش مکمل دو […]

  • hossein گفت:

    با تشکر عالی بود

  • hadi گفت:

    با سلام و سپاس از زحماتتون. این برنامه ای که نوشتین ابا قابلیت سنتز دارد؟

    • سلام،

      تمام کدهایی که در این سایت ارائه می‌شوند قابل سنتز هستند.

      موفق باشید.

  • مهران گفت:

    سلام جناب مهندس ثقفی

    من برای نجام پرژه ام نیاز به نمونه برداری از دو ورودی انالوگ با سرعت ۲۰۰ تا ۲۵۰ مگ همزمان نیاز دارم
    و باید این نمونه ها سیگنال پردازش و فیلتر و حذف نویز بشن و تعداد پالس های شمارش و همچنین مقدار پیک اندازه گیری شود(realtime).
    این کار یا dsp بهتره انجام میشه یا با fpga.
    و هچنین در دوره پردازش سیگنال به این توانایی پیاده سازی الگوریتم پردازش میرسم؟

    با تشکر

    • سلام،

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

      پیشنهاد می‌کنم برای درک بهتر این موضوع، برنامه ویدئویی زیر را ببینید:

      چطور تکنولوژی مناسب برای پیاده‌سازی یک پروژه را انتخاب کنیم؟

      در دوره پردازش سیگنال با FPGA موضوعات مورد نظر شما آموزش داده می‌شود.

      موفق باشید.

  • علی گفت:

    سلام .امن میخوام ضرب و جمع علامت دار بدم منتها به زبان verilog .ایا باید سینتکس خاصی را رعایت کنم ؟