PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : تبدیل کد c به HDL



amator
17-03-2016, 13:49
با سلام

من یک کد به زبان C دارم که می خوام اونو به HDL تبدیل کنم
به خاطر پیچیده بودن کد نمی تونم نسخه HDL بنویسم براش

چند تا نرم افزار پیدا کردم

impulse
legup
vivado

کسی می دونه کدوم کد بهتری رو از نظر زمان اجرا و توان مصرفی و سطح تراشه ارائه می کنه؟

درضمن impulse رو نصب کردم ولی وقتی new project می زنم و کد رو بهش می دم اجرا نمی کنه

چرا؟؟

hossein1387
18-03-2016, 05:47
سلام

چیزی که شما دنبالش هستید بهش میگن HLS یا High Level Synthesis و چند وقتی هست که یکی از داغ ترین موضوع های طراحی سخت افزار هست. Legup که کلا تز دکتری یکی از دانشجو های دانشگاه تورنتو کانادا هست و به همین دلیل اصلا قابل مقایسه با HLS های تجاری مثل Vivado نیست. حتی اگر داکیومنت Legup رو بخونین, اکثر test bench ها با HLS های تحقیقاتی مقایسه شده. و اداعای سازندش هم این هست که بهترین HLS تحقیقاتی opensource هست که به نظر من واقعا هم همینطوره. در مورد Vivado HLS هم باید بگم که Vivado خودش یک خانواده از نرم افزار های جدید شرکت Xilinx هست که مخصوصا برای FPGA های سری ۷ تولید شده. فکر کنم برای کار های کوچیک به لایسنس احتیاج نداره.
شما نگفتید چقدر با طراحی سخت افزار آشنا هستید برای همین من فرض رو بر این میگیرم که آشنایی مقدماتی دارین. تبدیل کد C به کد قابل سنتز خیلی دید سخت افزاری میخواد تا نرم افزاری. من با legup و Vivado HLS کار کردم و اگر داکیومنت هاشون رو بخونین (که شدیدا توصیه میکنم قبل از هرگونه برداشتی حتما حتما این کار رو بکنید) هر دو محدودیت هایی دارن. هر کد C قابل سنتز شدن نیست دلیلش هم فضای متفاوت سخت افزار و نرم افزار هست. مثلا با این HLS هایی که ذکر کردم شما نمیتونید توی کد C تون از dynamic memory استفاده کنید (free و alloc) یا مثلا نمیتونید از recursive functions استفاده کنید دلیل هر دو هم بخاطر محدودیت های resource در fpga هست. یکی از چیزهایی که HLS رو اینقدر جذاب میکنه اجازه دادن به طراح برای پیاده سازی بخشی از نرم افزار (که پردازش زیادی میگره) به صورت سخت افزاری روی FPGA هست. برای مثال Legup یک مود داره به اسم Hybrid Design که به شما اجازه میده هرتابعی رو که داخل کدتون خواستین به صورت سخت افزاری پیاده کنید و بقیه کد رو به صورت نرم افزاری داشته باشین. کد های نرم افزاری برای target های soft core MIPS یا ARM قابل کامپایل هست. در نهایت خود نرم افزار به صورت اتوماتیک اون قسمت از کد که روی سخت افزار پیاده شده رو با باس Avalon به Soft core یا هسته ARM وصل میکنه. تشخیص اینکه جداسازی کدوم قسمت از نرم افزار و پیاده کردن اون روی سخت افزار باعث افزایش perfomance میشه به تجربه احتیاج داره البته خیلی هم کار سختی نیست (معمولا از الگو های خاصی پیروی میکنن. مثلا اکثر توابع پردازش تصویر عملگر روی پیکسل دارن که باعث میشه روی همه پیکسل ها for-loop زده بشه. این نوع عملگر ها بهترین گزینه برای پیاده سازی سخت افزاری هستن) ولی قطعا باید اطلاعات کافی داشته باشید. بهتون توصیه میکنم اگر طراحی سخت افزارتون خوبه از داکیومنت های این نرم افزار ها شروع کنید.