شمارنده BCD با FPGA

شمارنده BCD با FPGA

شمارنده BCD با FPGA
شمارنده BCD با FPGA

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

شمارنده‌ها انواع متفاوتی دارند، اما عملکرد کلی آن‌ها به یک صورت است و شما با تغییرات کوچکی در هر یک از آن‌ها می‌توانید آن را به نوع دیگری تبدیل کنید.

ما در ادامه قصد داریم که با استفاده از زبان VHDL یک شمارنده BCD را توصیف کنیم. شمایی که در حال خواندن این مقاله هستید به احتمال زیاد با BCD و همینطور شمارنده BCD به خوبی آشنا هستید. اما به صورت مختصر در ادامه به شرح این موضوع خواهیم پرداخت.

BCD یا همان Binary Coded Decimal، نوعی کد برای تبدیل اعداد دهدهی به دودویی می‌باشد. اعداد در دنیای دیجیتال به صورت دودویی یا همان باینری می‌باشند. اما اعدادی که ما روزانه با آن‌ها سر و کار داریم و در دنیای واقعی به صورت دهدهی یا دسیمال می‌باشند. پس لازم است که ما این تبدیل اعداد را انجام بدهیم.

برای اعداد در مبنای 10، ما ده عدد متفاوت داریم یعنی از 0 تا 9. حال اگر بخواهیم این اعداد را در مبنای 2 نشان بدهیم نیاز به چند بیت داریم؟

برای این کار نیاز به چهار بیت داریم. با چهار بیت می‌توان شانزده حالت مختلف را نشان داد. ما از ده حالت آن استفاده می‌کنیم و بقیه‌ی حالات آن عملا بدون استفاده باقی می‌مانند.

پس متوجه شدیم که در BCD هر عدد دسیمال با چهار بیت به صورت باینری نمایش داده می‌شود.

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

به طور کلی شمارنده توصیف شده‌ی ما همانند تصویر زیر است:

ساخت شمارنده BCD با استفاده از زبان VHDL

با توجه به تصویر بالا شمارنده BCD از عدد 0 تا 9 می‌شمارد، و هنگامی که به عدد 9 رسید دوباره به مقدار 0 برمی‌گردد. تعریف BCD هم چیزی غیر از این نیست.

کدی که ما برای شمارنده BCD در زیر توصیف کردیم، دارای یک ریست آسنکرون است، یعنی هر زمان که ریست شد بدون توجه به کلاک مقدار شمارنده 0 می‌شود.

سپس اگر ریست فعال نبود و همچنین ماژول فعال بود، با هر لبه بالارونده کلاک یک واحد به شمارنده اضافه می‌شود. با یک شرط چک می‌شود که اگر بیشتر از 9 شد دوباره به مقدار 0 ریست شود.

شما در پروژه‌هایتان می‌توانید با الگوبرداری از کد بالا هر شمارنده دیگر و حتی تایمر را پیاده‌سازی کنید.

ما کد دیگری را نیز برای اینکه شمارنده BCD را بر روی سون سگمنت نشان دهیم نوشتیم.

کد زیر همان عملکرد کد بالا است با این تفاوت که در هر State معادل سون سگمنت آن نیز نوشته شده است و در نهایت آن را به صورت عملی بر روی برد نمایش خواهیم داد.

توجه کنید که چون سون سگمت‌هایی که بر روی برد ALINX قرار  دارند، آند مشترک هستند، هر سگمت با 0 منطقی روشن می‌شود. شما متناسب با بردتان می‌توانید این مقادیر را تغییر دهید.

 

ویدئوی زیر  تست این کد را بر روی FPGA نشان می‌دهد:

برچسب ها

0 نفر

پــــســنــدیـده انـد

توجه

دیدگاه ها

0 دیدگاه

پر بحث ترین ها

مسابقه دوم : چالش برنامه نویسی به زبان C

مسابقه دوم : چالش برنامه نویسی به زبان C

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

Zeus ‌ Zeus ‌
  • 3 سال پیش
راه اندازی LCD گرافیکی Nokia 1661

راه اندازی LCD گرافیکی Nokia 1661

LCD گرافیکی یکی از مهم ترین پارامترهای موجود در طراحی انواع مدارات الکترونیکی پیچیده و حتی ساده است ، نمایش وضعیت و...

Zeus ‌ Zeus ‌
  • 4 سال پیش
ریموت کدلرن و چکونگی دکد کردن آن به همراه سورس برنامه

ریموت کدلرن و چکونگی دکد کردن آن به همراه سورس برنامه

ریموت کنترل امروزه کاربرد زیادی پیدا کرده است؛ از ریموت‌های درب بازکن تا ریموت‌های دزدگیر و کنترل روشنایی همه از یک اصول اولیه پیروی می‌کنند و آن‌هم ارسال اطلاعات به‌صورت بی‌سیم است....

Zeus ‌ Zeus ‌
  • 5 سال پیش
همه چیز درباره ریموت کنترل‌های هاپینگ

همه چیز درباره ریموت کنترل‌های هاپینگ

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

Zeus ‌ Zeus ‌
  • 5 سال پیش
مسابقه سوم: استخراج داده از رشته ها در زبان C

مسابقه سوم: استخراج داده از رشته ها در زبان C

نزدیک به 5 ماه از مسابقه دوم سیسوگ می‌گذره و فکر کردم که بد نیست یک چالش جدید داشته باشیم! البته چالش‌ها...

Zeus ‌ Zeus ‌
  • 2 سال پیش
مسابقه ششم: بزن میکروکنترلر را بسوزون!

مسابقه ششم: بزن میکروکنترلر را بسوزون!

بزنم میکروکنترلر را بسوزونم اونم تو  این شرایط!، طراحی مسابقه از اون چیزی که به نظر می‌رسه سخت‌تر است، باید حواست باشه...

Zeus ‌ Zeus ‌
  • 12 ماه پیش
آموزش قدم به قدم راه اندازی NRF24L01

آموزش قدم به قدم راه اندازی NRF24L01

آموزش قدم به قدم راه اندازی +NRF24L01  با کتابخانه سازگار با انواع میکروکنترلرها و کامپایلرها قبل از اینکه قسمت بشه با ماژول...

رسول خواجوی بجستانی رسول خواجوی بجستانی
  • 3 سال پیش
ساخت ماینر با FPGA و ARM

ساخت ماینر با FPGA و ARM

چند ماهی هست که تب بیت کوین و ارزهای دیجیتال خیلی بالا رفته! چه شد که این پست را نوشتم همانطور که...

Zeus ‌ Zeus ‌
  • 3 سال پیش
کار با ماژول تمام عیار mc60 – قسمت دوم – راه اندازی OpenCPU

کار با ماژول تمام عیار mc60 – قسمت دوم – راه اندازی OpenCPU

در قسمت اول به یکسری اطلاعات کلی ماژول mc60 پرداختیم، با نرم افزار QNavigator کار کردیم و یک هدربرد هم برای کار...

Mahdi.h   Mahdi.h  
  • 3 سال پیش
مسابقه چهارم: کدام حلقه سریع‌تر است؟

مسابقه چهارم: کدام حلقه سریع‌تر است؟

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

Zeus ‌ Zeus ‌
  • 2 سال پیش
سیـــســـوگ

مرجع متن باز آموزش الکترونیک