انجمن گفتگوی فراد اندیش

به اشتراک بگذارید:
آگاه‌سازی‌ها
پاک‌کردن همه

استفاده از integer به عنوان شمارنده جنریک

یوسف مهدیان
(@josephx86)
عضو جدید Customer

درود
با توجه به اینکه هنگام تعریف integer میتوان رنج آن را پارامتریک تعریف کرد و این خود عرض بیت اون سیگنال رو هم تعیین میکنه، به نظر میاد که راه آسونتریه برای پیاده سازی شمارنده.
من کد زیر را برای تولید کلاک I2C در ویوادو برای تست روی بورد artys7 نوشته  م. و در گزارش Utilization بعد از Implementaion هم عرض بیت کانتر رو چک کرده م که با رنج تعیین شده همخوانی داره.
1. با توجه این موضوع، چرا در بیشتر آموزشها و مراجع توصیه میکنند که از integer استفاده نشه؟
2. در صورت عدم استفاده از integer به چه طریق همین کد را با نوع دیگری مثلا unsigned یا std_logic_vector میشه نوشت؟

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

entity scl_clock_generator is
	Generic(
		F_CLK	: integer	:= 100000000;
		F_SCL	: integer	:= 100000
	);
	
	Port (
		clk			:in		std_logic;
		scl_clk		:out	std_logic;
		data_clk	:out	std_logic
	);
end scl_clock_generator;

architecture Behavioral of scl_clock_generator is
signal		counter				:integer range 0 to F_CLK/F_SCL-1 := 0;
signal		sScl_clk, sData_clk	:std_logic	:= '0';
begin

scl_clk		<=	sScl_clk;
data_clk	<=  sData_clk;
process (clk)
begin
	if clk'event and clk='1' then
		counter		<=		counter+1;
		if(counter = F_CLK/F_SCL-1) then
			counter		<= 0;
		end if;

		case counter is
		when 0 to F_CLK/F_SCL/4-1 =>
			sScl_clk		<=	'0';
			sData_clk		<=	'0';
		when F_CLK/F_SCL/4 to F_CLK/F_SCL/4*2-1	=>
			sScl_clk		<=	'0';
			sData_clk		<=	'1';
		when F_CLK/F_SCL/4*2 to F_CLK/F_SCL/4*3-1 =>
			sScl_clk		<=	'1';
			sData_clk		<=	'1';
		when F_CLK/F_SCL/4*3 to F_CLK/F_SCL-1	=>
			sScl_clk		<=	'1';
			sData_clk		<=	'0';
		end case;
	end if;		-- rising edge of Clock


end process;

end Behavioral;
نقل‌قول
شروع کننده موضوع ارسال‌شده : 22 مهر، 1400 10:24 ق.ظ
برچسب‌های موضوع
احمد ثقفی
(@ahmadsaghafi)
عضو Admin

سلام،

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

موفق باشید.

پاسخنقل‌قول
ارسال‌شده : 25 مهر، 1400 2:18 ب.ظ
به اشتراک بگذارید:
>