1 دی, 1400

کاهش منابع مصرفی فیلتر FIR به روش تقارن

در پیاده‌سازی مدارات دیجیتال با FPGA، دو پارامتر سرعت و منابع مصرفی، از مهم‌ترین پارامترهایی هستند که باید به آن‌ها توجه ویژه کرد.

این دو پارامتر به قدری مهم هستند، که اکثر استراتژی‌های بهینه‌سازی نرم‌افزارهای پیاده‌ساز، بر اساس همین دو پارامتر استوار هستند.

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

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

More...

تکنیک‌های افزایش سرعت و کاهش منابع مصرفی

توجه کنید تکنیک‌هایی که برای افزایش سرعت و کاهش منابع مصرفی به کار می‌روند، غالبا بر پایه‌ی دو اصل زیر استوار هستند:

  • شناخت منابع درونی FPGAای که در حال استفاده از آن هستیم
  • شناخت و تسلط کافی نسبت به الگوریتم، یا مداری که می‌خواهیم آن را پیاده‌سازی کنیم

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

اکنون اگر ما شناختی نسبت به منابع درونی FPGA، و مشخصا این منبع اختصاصی نداشته باشیم، احتمالا عملیات ریاضی مورد نظر را با منابع عمومی، مثل گیت‌ها، پیاده‌سازی خواهیم کرد.

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

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

یا فرض کنید می‌خواهیم یک الگوریتم را در FPGA پیاده‌سازی کنیم.

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

کاری که قرار است ما در این مقاله انجام بدهیم، شامل هر دو اصلی است که در بالا ذکر کردیم.

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

ما در ادامه، منابع مصرفی یک فیلتر FIR را با روشی که ذکر خواهیم کرد، کاهش می‌دهیم.

اگر با فیلترهای FIR آشنایی ندارید توصیه می‌شود ابتدا مقاله "انواع ساختارهای فیلترهای دیجیتال: معرفی دو ساختار محبوب و پرکاربرد FIR و IIR" را مطالعه کنید، چون ما در این مقاله از مفاهیمی استفاده خواهیم کرد که در مقاله ارجاع داده شده به خوبی توضیح داده شده‌اند.

خاصیت فاز خطی فیلترهای FIR

در ارتباط با ویژگی فاز این فیلترها، باید گفت که فیلترهای FIR دارای فاز خطی هستند. اما خطی یا غیرخطی بودن فاز فیلتر چه تاثیری در پیاده‌سازی آن دارد؟

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

اگر مانند شکل زیر، میزان اختلاف فاز سیگنال ورودی و خروجی نسبت به فرکانس سیگنال ورودی، به‌صورت خطی تغییر کند، فاز فیلتر ما خطی است؛ در غیراین‌صورت، فاز فیلتر غیرخطی خواهد بود.

نمودار میزان اختلاف فاز ورودی و خروجی بر حسب فرکانس در یک فیلتر خطی

نمودار میزان اختلاف فاز ورودی و خروجی بر حسب فرکانس ورودی در یک فیلتر خطی

اکنون می‌خواهیم با استفاده از خاصیت خطی بودن فیلترهای FIR، و روشی به اسم روش تقارن، منابع مصرفی فیلتر FIR را کاهش دهیم.

کاهش منابع مصرفی فیلتر FIR به روش تقارن

خاصیت تقارن یا symmetry در واقع نشأت گرفته از خاصیت خطی فیلترهای FIR است.

اگر فیلتری دارای فاز خطی باشد، ضرایب آن فیلتر تکراری و به صورت متقارن هستند.

به تصویر زیر دقت کنید:

فیلتر FIR با مرتبه ۳

فیلتر FIR با مرتبه ۳

تصویر بالا، یک فیلتر FIR با مرتبه‌ی ۳ را نشان می‌دهد.

در این فیلتر چهار ضریب داریم، اما این چهار ضریب، دوبه‌دو به صورت متقارن، با هم برابرند.

یعنی در واقع دو ضریب متفاوت از هم داریم که دو بار دیگر تکرار شده‌اند.

از همین ضرایبی که به صورت متقارن تکرار شده‌اند، می‌توانیم برای کاهش منابع مصرفی فیلتر بهره ببریم.

منظور از تقارن این است که اگر از وسط تصویر بالا یک خط به صورت عمودی رسم کنیم، ضرایب تکراری به صورت متقارن، نسبت به همدیگر قرار دارند.

فاکتورگیری از ضرایب تکراری

اکنون می‌خواهیم از ضرایب تکراری فاکتور بگیریم. ابتدا به تصویر زیر دقت کنید:

فرمول‌های خروجی فیلتر FIR از دو دیدگاه متفاوت

فاکتورگیری از فرمول‌های خروجی فیلتر FIR

ابتدا فرمول خروجی فیلتر را با استفاده از ورودی و تاخیرهای آن محاسبه کردیم (فرمول اول)، و سپس از ضرایب تکراری فاکتور گرفتیم تا به فرمول دوم رسیدیم.

فرمول اول و دوم چه تفاوت‌هایی دارند؟

در فرمول اول، چهار عمل ضرب وجود دارد؛ اما در فرمول دوم، تنها دو عمل ضرب داریم.

همچنین در فرمول اول، ابتدا ضرب‌ها و سپس جمع‌ها را انجام می‌دهیم، اما در فرمول دوم، ابتدا جمع‌ها و سپس ضرب‌ها را انجام می‌دهیم.

اکنون اگر بخواهیم بر مبنای فرمول دوم، signal flow graph فیلتر را رسم کنیم، به شکل زیر خواهیم رسید:

رسم Signal flow graph فیلتر FIR با استفاده از روش تقارن

رسم signal flow graph فیلتر FIR با استفاده از روش تقارن

همانطور که در تصویر می‌بینید، به جای چهار ضرب‌کننده، این بار دو ضرب‌کننده داریم.

دقت کنید که 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

بلوک DSP48، در واقع یک ضرب‌کننده است، که قبل و بعد از این ضرب‌کننده، یک جمع‌کننده نیز وجود دارد.

پس بلوک DSP48، دارای یک ضرب کننده، و دو جمع‌کننده است.

در signal flow graph دوم فیلتر FIR، دقیقا دو بار از بلوک DSP48 استفاده شده است.

مانند تصویر زیر، در signal flow graph دوم فیلتر FIR، یک بار دقیقا از هر سه جز بلوک DSP48، و یک بار دیگر از یک ضرب‌کننده و یک جمع‌کننده از بلوک DSP48 استفاده شده است. پس در مجموع از دو بلوک DSP48، استفاده شده است.

تطابق Signal flow graph فیلتر FIR با بلوک DSP48

تطابق signal flow graph فیلتر FIR با بلوک 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ها نبوده است.

      موفق باشید.

  • {"email":"Email address invalid","url":"Website address invalid","required":"Required field missing"}

    ۷ تکنیک پیشرفته کدنویسی برای FPGA

    >