در پیادهسازی مدارات دیجیتال با FPGA، دو پارامتر سرعت و منابع مصرفی، از مهمترین پارامترهایی هستند که باید به آنها توجه ویژه کرد.
این دو پارامتر به قدری مهم هستند، که اکثر استراتژیهای بهینهسازی نرمافزارهای پیادهساز، بر اساس همین دو پارامتر استوار هستند.
در مقالات گذشته با تکنیکهایی مثل پایپلاین کردن مدار، توانستیم سرعت مدارات را تا حد بسیار خوبی افزایش دهیم.
در این مقاله میخواهیم یکی از تکنیکهای موجود برای کاهش منابع مصرفی مداری، که متشکل از یک فیلتر FIR است را به شما معرفی کنیم.
More...
تکنیکهای افزایش سرعت و کاهش منابع مصرفی
توجه کنید تکنیکهایی که برای افزایش سرعت و کاهش منابع مصرفی به کار میروند، غالبا بر پایهی دو اصل زیر استوار هستند:
- شناخت منابع درونی FPGAای که در حال استفاده از آن هستیم
- شناخت و تسلط کافی نسبت به الگوریتم، یا مداری که میخواهیم آن را پیادهسازی کنیم
فرض کنید میخواهیم یک عملیات ریاضی را در FPGA پیادهسازی کنیم، و برای این عملیات ریاضی، یک منبع اختصاصی از قبل آماده شده، وجود دارد.
اکنون اگر ما شناختی نسبت به منابع درونی FPGA، و مشخصا این منبع اختصاصی نداشته باشیم، احتمالا عملیات ریاضی مورد نظر را با منابع عمومی، مثل گیتها، پیادهسازی خواهیم کرد.
اگر برای پیادهسازی یک عملیات، منبعی اختصاصی درون FPGA وجود داشته باشد، ولی ما برای پیادهسازی این عملیات از منابع عمومی استفاده کنیم، نه تنها منابع مصرفی افزایش پیدا میکند، بلکه ممکن است سرعت مدار نیز کاهش یابد.
البته در اکثر مواقع، اگر برای عملیاتی، منبعی اختصاصی درون FPGA وجود داشته باشد، نرمافزار از ابتدا این موضوع را میداند و به صورت ضمنی از همین منابع اختصاصی برای پیادهسازی استفاده میکند.
یا فرض کنید میخواهیم یک الگوریتم را در FPGA پیادهسازی کنیم.
اکنون اگر علاوه بر نحوهی پیادهسازی الگوریتم، شناختی هم نسبت به تئوری خود الگوریتم داشته باشیم، ممکن است بتوانیم هم سرعت و هم منابع مصرفی را بهبود دهیم.
کاری که قرار است ما در این مقاله انجام بدهیم، شامل هر دو اصلی است که در بالا ذکر کردیم.
یعنی هم شناخت منابع درونی FPGA و هم شناخت و تسلط کافی نسبت به الگوریتمی که میخواهیم پیادهسازی کنیم، به ما کمک میکند تا منابع مصرفی را کاهش دهیم.
ما در ادامه، منابع مصرفی یک فیلتر FIR را با روشی که ذکر خواهیم کرد، کاهش میدهیم.
اگر با فیلترهای FIR آشنایی ندارید توصیه میشود ابتدا مقاله "انواع ساختارهای فیلترهای دیجیتال: معرفی دو ساختار محبوب و پرکاربرد FIR و IIR" را مطالعه کنید، چون ما در این مقاله از مفاهیمی استفاده خواهیم کرد که در مقاله ارجاع داده شده به خوبی توضیح داده شدهاند.
خاصیت فاز خطی فیلترهای FIR
در ارتباط با ویژگی فاز این فیلترها، باید گفت که فیلترهای FIR دارای فاز خطی هستند. اما خطی یا غیرخطی بودن فاز فیلتر چه تاثیری در پیادهسازی آن دارد؟
اگر فاز فیلتری خطی باشد، میتوانیم در پیادهسازی، بهگونهای عمل کنیم که حجم منابع مصرفی کاهش یابد.
اگر مانند شکل زیر، میزان اختلاف فاز سیگنال ورودی و خروجی نسبت به فرکانس سیگنال ورودی، بهصورت خطی تغییر کند، فاز فیلتر ما خطی است؛ در غیراینصورت، فاز فیلتر غیرخطی خواهد بود.
اکنون میخواهیم با استفاده از خاصیت خطی بودن فیلترهای FIR، و روشی به اسم روش تقارن، منابع مصرفی فیلتر FIR را کاهش دهیم.
کاهش منابع مصرفی فیلتر FIR به روش تقارن
خاصیت تقارن یا symmetry در واقع نشأت گرفته از خاصیت خطی فیلترهای FIR است.
اگر فیلتری دارای فاز خطی باشد، ضرایب آن فیلتر تکراری و به صورت متقارن هستند.
به تصویر زیر دقت کنید:
تصویر بالا، یک فیلتر FIR با مرتبهی ۳ را نشان میدهد.
در این فیلتر چهار ضریب داریم، اما این چهار ضریب، دوبهدو به صورت متقارن، با هم برابرند.
یعنی در واقع دو ضریب متفاوت از هم داریم که دو بار دیگر تکرار شدهاند.
از همین ضرایبی که به صورت متقارن تکرار شدهاند، میتوانیم برای کاهش منابع مصرفی فیلتر بهره ببریم.
منظور از تقارن این است که اگر از وسط تصویر بالا یک خط به صورت عمودی رسم کنیم، ضرایب تکراری به صورت متقارن، نسبت به همدیگر قرار دارند.
فاکتورگیری از ضرایب تکراری
اکنون میخواهیم از ضرایب تکراری فاکتور بگیریم. ابتدا به تصویر زیر دقت کنید:
ابتدا فرمول خروجی فیلتر را با استفاده از ورودی و تاخیرهای آن محاسبه کردیم (فرمول اول)، و سپس از ضرایب تکراری فاکتور گرفتیم تا به فرمول دوم رسیدیم.
فرمول اول و دوم چه تفاوتهایی دارند؟
در فرمول اول، چهار عمل ضرب وجود دارد؛ اما در فرمول دوم، تنها دو عمل ضرب داریم.
همچنین در فرمول اول، ابتدا ضربها و سپس جمعها را انجام میدهیم، اما در فرمول دوم، ابتدا جمعها و سپس ضربها را انجام میدهیم.
اکنون اگر بخواهیم بر مبنای فرمول دوم، signal flow graph فیلتر را رسم کنیم، به شکل زیر خواهیم رسید:
همانطور که در تصویر میبینید، به جای چهار ضربکننده، این بار دو ضربکننده داریم.
دقت کنید که delay line یا خط تاخیر این مدار، دقیقا همان delay line مدار قبلی است، فقط برای اینکه بتوانیم signal flow graph مدار را به صورت مرتبتر رسم کنیم، delay line را به صورتی که در تصویر بالا میبینید، رسم کردیم.
هر دو signal flow graph از نظر عملکرد دقیقا یکسان هستند، اما از نظر مصرف منابع، signal flow graph دوم، منابع کمتری مصرف میکند.
تا اینجا ما از اصل دوم، یعنی "شناخت و تسلط کافی نسبت به الگوریتم" استفاده کردیم و توانستیم منابع مصرفی را کاهش دهیم.
اما یک اتفاق جالبی که در اینجا افتاده است، از اصل اول، یعنی "شناخت منابع درونی FPGA" نیز استفاده شده است.
تطابق Signal Flow Graph فیلتر FIR با بلوک DSP48
اگر با دقت به signal flow graph دوم توجه کنید، احتمالا تصویر یک بلوک DSP48 را خواهید دید.
اجازه دهید ابتدا مروری به بلوک DSP48 داشته باشیم.
تصویر زیر اجزای مختلف یک بلوک DSP48 را نشان میدهد:
بلوک DSP48، در واقع یک ضربکننده است، که قبل و بعد از این ضربکننده، یک جمعکننده نیز وجود دارد.
پس بلوک DSP48، دارای یک ضرب کننده، و دو جمعکننده است.
در signal flow graph دوم فیلتر FIR، دقیقا دو بار از بلوک DSP48 استفاده شده است.
مانند تصویر زیر، در signal flow graph دوم فیلتر FIR، یک بار دقیقا از هر سه جز بلوک DSP48، و یک بار دیگر از یک ضربکننده و یک جمعکننده از بلوک DSP48 استفاده شده است. پس در مجموع از دو بلوک DSP48، استفاده شده است.
البته در استفاده از اصل اول ما دخیل نبودیم، و از اول قصدمان این نبود که بخواهیم با شناخت منابع درونی FPGA، مدار را بهینه کنیم.
اما در حین پیشرفت مراحل مختلف، دیدیم که یک اتفاق بسیار جالب رخ داده است و تمام فیلتر ما با استفاده از دو بلوک DSP48 قابل پیادهسازی است.
آیا وجود چنین رخدادی، به صورت اتفاقی بوده است؟
خیر، واقعیت این است که دلیل وجود اولین جمعکننده در بلوک DSP48، این است که بتوان فیلترهای FIR را به نحو بهینهای پیادهسازی کرد.
البته وقتی ما کد فیلتر FIR را مینویسیم، نیاز به انجام عمل خاصی نیست، و خود نرمافزار متوجه میشود و برای پیادهسازی فیلتر از DSP48 استفاده میکند.
برای پیادهسازی فیلتر FIR با روش تقارن، ابتدا با توجه به مقاله "چگونه یک مدل Fixed Point را کوانتیزه کنیم؟"، signal flow graph فیلتر را کوانتیزه کنید، و سپس از روی مدل کوانتیزه شده، کد VHDL آن را بنویسید.
به دلیل اینکه نحوهی کوانتیزه کردن مدل Fixed Point را قبلا در مقالات توضیح دادیم، و همچنین برای جلوگیری از طولانی شدن مقاله، کوانتیزه کردن مدل Fixed Point فیلتر را به عهده خودتان میگذاریم، و فقط به نوشتن کد VHDL آن بسنده میکنیم.
کد VHDL فیلتر FIR به روش متقارن
library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; entity FIR_DF_Top is Port ( Clock : in STD_LOGIC; Input_Signal : in signed (13 downto 0); Output_Signal : out signed (13 downto 0) ); end FIR_DF_Top; architecture Behavioral of FIR_DF_Top is ------ Internal signal for buffering the input and output ports. signal Input_Signal_Int : signed (13 downto 0) := (others=>'0'); signal Output_Signal_Int : signed (13 downto 0) := (others=>'0'); ------ Delay line registers. signal Input_Signal_D1 : signed (13 downto 0) := (others=>'0'); signal Input_Signal_D2 : signed (13 downto 0) := (others=>'0'); signal Input_Signal_D3 : signed (13 downto 0) := (others=>'0'); signal Product_Reg0 : signed (23 downto 0) := (others=>'0'); signal Product_Reg1 : signed (23 downto 0) := (others=>'0'); ------ Coefficient constants. Constant Coeff_b0 : signed (8 downto 0) := to_signed(31,9); Constant Coeff_b1 : signed (8 downto 0) := to_signed(87,9); Constant Coeff_b2 : signed (8 downto 0) := to_signed(87,9); Constant Coeff_b3 : signed (8 downto 0) := to_signed(31,9); signal FIR_Accumulator : signed (23 downto 0) := (others=>'0'); begin Output_Signal <= Output_Signal_Int; process(Clock) begin if rising_edge(Clock) then -- Input signal buffering Input_Signal_Int <= Input_Signal; -- FIR delay line Input_Signal_D1 <= Input_Signal_Int; Input_Signal_D2 <= Input_Signal_D1; Input_Signal_D3 <= Input_Signal_D2; Product_Reg0 <= Coeff_b0 * (resize(Input_Signal_Int,15) + Input_Signal_D3); Product_Reg1 <= Coeff_b1 * (resize(Input_Signal_D1,15) + Input_Signal_D2); -- FIR multiply and accumulate FIR_Accumulator <= Product_Reg0 + Product_Reg1; Output_Signal_Int <= FIR_Accumulator(21 downto 8); end if; end process; end Behavioral;
روش تقارن، یک روش بسیار مفید برای کاهش منابع مصرفی در فیلترهای FIR است که پیشنهاد میشود شما هم از این روش بسیار مفید در پروژههایتان استفاده کنید.
سلام و خسته نباشید . بنظرم نحوه کار با آپشن های ای پی هارو بگید خیلی مفید تر باشه . مثلاً در همین مورد از گزینه متقارن کردن آی پی استفاده کنیم خ بهتره فکر کنم .
سلام،
در این مقاله یک بحث مفهومی در مورد کاهش منابع مصرفی فیلتر IIR مطرح شده است و هدف، توضیح آپشنها و قابلیتهای IPها نبوده است.
موفق باشید.