اطلاعیه

Collapse
No announcement yet.

چگونه تعداد گیت های مصرفی را بهینه کنم؟

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

    چگونه تعداد گیت های مصرفی را بهینه کنم؟

    سلام
    برای پیاده سازی سخت افزاری الگوریتم اینکدرم من تازه vhdl یاد گرفتم و پیاده سازی کردم اما مشکلم این است که تعداد ALUT ها و register های بکار رفته بسیار زیادتر از حد انتظار است. فکر می کنم مشکلم این است که دستورات ترتیبی زیاد به کار می برم.
    مثلا برای جمع کردن تعداد بیت های 1 موجود در یک بایت (برای مثال تعداد 1 ها در 00011010 سه عدد می باشد) یک function تعریف کردم بصورت زیر که احتمالا زیاد گیت مصرف می کند.
    از طرف دیگر مشکل اینجاست که سرعت ماکس کلاک هم خیلی کم است زیر 100 مگاهرتز و از اینکدرهای رقیب کندتر است.

    چگونه می توانم به این اهداف برسم؟ ( 1- تعداد گیت کمتر 2- سرعت عملکرد بیشتر )



    برای مثال قسمتی از کد که تعداد یک ها در یک بیت ( هشت بیت) را جمع می زند:
    function Ones(input:std_logic_vector) return int
    eger is
    variable sum:integer range 0 to 5;
    begin
    sum:=0;
    for i in 0 to 4 loop
    if input(i)='1' then
    sum:=sum+1;
    end if;
    end loop;
    return sum;
    end O
    nes;

    #2
    پاسخ : چگونه تعداد گیت های مصرفی را بهینه کنم؟

    نوشته اصلی توسط linecode8b9b
    سلام
    برای پیاده سازی سخت افزاری الگوریتم اینکدرم من تازه vhdl یاد گرفتم و پیاده سازی کردم اما مشکلم این است که تعداد ALUT ها و register های بکار رفته بسیار زیادتر از حد انتظار است. فکر می کنم مشکلم این است که دستورات ترتیبی زیاد به کار می برم.
    مثلا برای جمع کردن تعداد بیت های 1 موجود در یک بایت (برای مثال تعداد 1 ها در 00011010 سه عدد می باشد) یک function تعریف کردم بصورت زیر که احتمالا زیاد گیت مصرف می کند.
    از طرف دیگر مشکل اینجاست که سرعت ماکس کلاک هم خیلی کم است زیر 100 مگاهرتز و از اینکدرهای رقیب کندتر است.
    چگونه می توانم به این اهداف برسم؟ ( 1- تعداد گیت کمتر 2- سرعت عملکرد بیشتر )
    برای مثال قسمتی از کد که تعداد یک ها در یک بیت ( هشت بیت) را جمع می زند:
    function Ones(input:std_logic_vector) return int
    eger is
    variable sum:integer range 0 to 5;
    begin
    sum:=0;
    for i in 0 to 4 loop
    if input(i)='1' then
    sum:=sum+1;
    end if;
    end loop;
    return sum;
    end O
    nes;
    با سلام
    امکان داره بیشتر توضیح بفرمایید ؟
    شماتیک معادل این مدار موجوده ؟
    با کدام خانواده از cpld ها کار میکنید ؟ altera ? یا xilinx ?

    دیدگاه


      #3
      پاسخ : چگونه تعداد گیت های مصرفی را بهینه کنم؟

      سلام و تشکر از پاسخ سریعتون
      من برد spartan 2 یعنی 2s200 رو دارم
      مشکلم اینه که شماتیک ندارم بلکه یک الگوریتم است که باید پیاده سازی بشه ( البته این الگوریتم رو تو متلب هم پیاده کردم و همچنین کد VHDL رو هم واسش نوشتم) در واقع برنامه vhdl فعلی از تعدادی if حلقه for و شرط و ... تشکیل شده. در حالی که برنامه های حرفه ای رو که نگاه می کنم با and , or , not , ... برنامه vhdl شون رو نوشتن.
      و مشکلم دقیقا همین جاست. می خوام بجای مثلا یک حلقه for یا تعداد زیادی if , elsif ,else ,end if و ... از توابع و گیت های منتطقی استفاده کنم و الگوریتمم رو پیاده کنم! تا هم تعداد گیت های مصرفی بیاد پایین و هم سرعت کلاک بره بالا
      چکار کنم؟
      برای مثال یک از قسمت های الگوریتم اینه که تعداد 1 های داخل یک بایت رو بشمارم مثلا توی 00101111 تعداد 5 عدد 1 هست.

      دیدگاه


        #4
        پاسخ : چگونه تعداد گیت های مصرفی را بهینه کنم؟

        با سلام
        منظور شما از کلاک چیست؟ شما این کدی را که گفتید به صورت sequential و یا combinational پیادهآ‌ کردهآ‌اید؟ اگر به صورت ترتیبی باشد که ۸ کلاک برای ۸ بیت نیاز دارید علاوه بر این پهنای کلاک نیز کاملا وابسته به سرعت جمع کننده ۴ بیتی داخل این انکودر است(البته اگر این ماژول انکودر مسیر بهرانی critical path طراحی شما باشد) . در حالت ترکیبی نیز فکر کنم در بهترین حالت بتوان یه تابع ۲ یا ۳ سطحی درست کرد البته در این حالت نیاز به گیتآ‌های با ۸ ورودی هست به علت ممکن است سطوح در پیادهآ‌سازی واقعی بیشتر شود. حالا شما از کدام روش دارید استفاده میآ‌کنید چون من VHDL بلد نیستم از کد شما متوجه نمیآ‌شوم که ابزار ستنز در نهایت چگونه مدار شما پیاده خواهد کرد.
        من دوست دارم آزاد فکر کنم، نرمآ‌افزارآ‌ و سختآ‌افزارهای آزاد را به کار ببرم و اگر توانستم نرمآ‌افزار، سختآ‌افزار و محتوای آزاد درست کنم!

        دیدگاه


          #5
          پاسخ : چگونه تعداد گیت های مصرفی را بهینه کنم؟

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

          دیدگاه


            #6
            پاسخ : چگونه تعداد گیت های مصرفی را بهینه کنم؟

            سلام . شما باید در کد نویسی دید سخت افزاری داشته باشید . جون تازه کار هستید بهتر که از func استفاده نکنیید . بطور مثال می تونید برای شمارش تعدا د 1 ها بایت دریافتی رو اگر بصورت 8بیتی در اختیار دارید از یک SHIFTREG و یک شمارنده استفاده کنید . که داده رو شیفت میدهید خروجی رو در یک شرط بررسی میکنید اگر یک بود یک واحد به کانتر اضافه میکنید . اگر هم داده رو سریال دارید دریافت میکنید می تونید داده رو به EN یک شمارنده متصل کنید و شمارنده با کالکی که داده تحویل شما داده میشود کلاک بخورد در پایان شماره کانتر همان تعداد یک های شما خواهد شد . منظورم از این دو مثال این بود که سعی کن به سیستم اینجوری نگاه کن به دید برنامه نویسی C,.. نگاه نکن . در ضمن یکی از تنظیمات خود نرم افزار سنتز اینکه طرح را برای سرعت یا سطح مصرف بهینه کنه. باز اگر مشکلتون حل نشد می تونید خواسته مورد نظرتون با جزییات بگین تا کد نوشته شده با توضیحاتش را براتون انجام بدم.

            دیدگاه


              #7
              پاسخ : چگونه تعداد گیت های مصرفی را بهینه کنم؟

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

              در ضمن شما میتونین از برنامه Mentor Graphics Leonardo Spectrum جهت بهینه کردن و ساخت لایوت و مشاهده شماتیک مداری رو که نوشتین استفاده کنین.
              تو این برنامه بعد از سنتز ، شماتیک سخت افزار شما در سه سطح قابل مشاهده هست که کاملا به وضوح میشه دید که چگونه یک کد کوچک ولی ضعیف به یک مدار تو در تو با
              تعداد زیادی لچ و گیت بدرد نخور تبدیل شده و لی یک کد قوی و طولانیه 200 خطی به یک مدار بسیار مرتب و زیبا سنتز میشود .


              موفق باشید.

              دیدگاه

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