اطلاعیه

Collapse
No announcement yet.

کد هافمن با وریلاگ

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

    کد هافمن با وریلاگ

    سلام
    اگه امکان داره در مورد یه برنامه کمکم کنید:

    می خوام کد هافمن را به زبان وریلاگ روی fpga
    پیاده سازی کنم،اما کد هافمن یه درخت دودویی است ونمی دونم چطوری این کارو انجام بدم!
    در حد بلوک دیاگرامی هم کمک کنید ممنون میشم
    یعنی اینکه چه ماژول هایی نیاز است؟

    #2
    پاسخ : کد هافمن با وریلاگ

    کسی نیست کمکم کنه!!!؟
    اینم الگوریتم کد هافمن:
    http://fa.wikipedia.org/wiki/%DA%A9%D8%AF%E2%80%8C%DA%AF%D8%B0%D8%A7%D8%B1%DB%8 C_%D9%87%D8%A7%D9%81%D9%85%D9%86

    دیدگاه


      #3
      پاسخ : کد هافمن با وریلاگ

      کد هافمن کاملا بستگی به متنی داره که می خواهید کد کنید و این که کدوم نگاشت ها توی اون متن بیشتر استفاده شده. پیاده سازی اون بی اهمیه و به وسیله یک look-up table خیلی ساده انجام می شه و اصلا نیازی به درخت و اینا نداره. ( توی Verilog اینو با یک حافظه RAM ) می سازند. ولی مقادیری که توی این حافظه می گذارید رو باید با کاغذ و مداد به دست بیارید.
      لذا گذاشتن یک کد هافمن که برای جای دیگری طراحی شده براتون اصلا فایده ای نداره.

      دیدگاه


        #4
        پاسخ : کد هافمن با وریلاگ

        من نمی خوام متن رو کد کنم بلکه می خوام یه سری داده که از طریق سنسور(مثلا دما)وارد fpga میشود را کد کنم حالا چه بکنم؟
        در مورد look_up table هم که اینجا استفاده می شه توضیح بدید!

        دیدگاه


          #5
          پاسخ : کد هافمن با وریلاگ

          فرقی نمی کنه. شما باید داده های سریال ورودی خودتون ( همون سنسوره ) رو بلاک بلاک کنید ( مثلا هر 8 بیت ) و ببینید که چه داده ای بیشتر از همه تکرار می شه و همون الگوریتم های هافمن که زده شد رو روش بزنید. این 8 بیت، میشه مثلا ورودی ROM شما، خروجی ROM هم کد هافمن حاصل هست. برای مثلا سنسور دما شما می تونید بسته به محیط کار فرض کنید مثلا دماهای مثل 25 یا 26 یا ... بیشتر تکرار می شوند تا دمای مثلا 180درجه و ال اخ!!

          درباره ROM خوب من نمی دونم چه توضیحی بدم. رام رامه خوب! این یک نمونه پیاده سازی برای fpgaهای خانواده Xilinx ( البته الان بهتره به جای این از استفاده کنید. )

          کد:
          module ROM16X1 (o, a3,a2,a1,a0) /* synthesis black_box */;
          input a3,a2,a1,a0;
          output o;
          endmodule
          
          module rom_16x8 (o,a);
          input [3:0] a;
          output [7:0] o;
          ROM16X1 u0 (o[0],a[3],a[2],a[1],a[0]) /* synthesis xc_props="INIT=FFFF" */;
          ROM16X1 u1 (o[1],a[3],a[2],a[1],a[0]) /* synthesis xc_props="INIT=ABCD" */;
          ROM16X1 u2 (o[2],a[3],a[2],a[1],a[0]) /* synthesis xc_props="INIT=BCDE" */;
          ROM16X1 u3 (o[3],a[3],a[2],a[1],a[0]) /* synthesis xc_props="INIT=CDEF" */;
          ROM16X1 u4 (o[4],a[3],a[2],a[1],a[0]) /* synthesis xc_props="INIT=CCDD" */;
          ROM16X1 u5 (o[5],a[3],a[2],a[1],a[0]) /* synthesis xc_props="INIT=0000" */;
          ROM16X1 u6 (o[6],a[3],a[2],a[1],a[0]) /* synthesis xc_props="INIT=0010" */;
          ROM16X1 u7 (o[7],a[3],a[2],a[1],a[0]) /* synthesis xc_props="INIT=1100" */;
          endmodule
          به عنوان مثال، یک جدول کد هافمن برای الگوریتم فشرده سازی JPEG که یک بار می خواستم به صورت بود:
          00110000000000001010
          00010000000000000000
          00010000000000000001
          00100000000000000100
          00110000000000001011
          01000000000000011010
          01100000000001111000
          01110000000011111000
          10010000001111110110
          11111111111110000010
          11111111111110000011
          این جدول تا 352 خط ادامه پیدا می کنه...


          ولی همون طور که گفتم این کد ها کارتو راه نمی ندازن. جدولی که می خوای بنویسی کاملا وابسته به صورت مسئله خودتونه.
          اگر همچنان سوالی داشتین خوشحال میشم بتونم کمکی کنم.

          دیدگاه


            #6
            پاسخ : کد هافمن با وریلاگ

            ممنون از توجه تان
            اما یعنی نمی شه برنامه ایی نوشت که برای همه ی ورودی ها این کد را تولید کند یعنی انقدر جامع باشه که خودش بتونه تشخیص بده که دیگه look_up table لازم نباشه؟

            دیدگاه

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