توسط احمد ثقفی 

20 اردیبهشت, 1395

شبیه‌سازی با نرم‌افزار ISim

کدام مرحله را در فرآیند طراحی و پیاده‌سازی یک مدار دیجیتال می‌توان به عنوان حساس‌ترین نام برد؟

اگر تا به حال درگیر پیاده‌سازی یک سیستم یا مدار دیجیتال بوده‌اید، حتما بازه‌های زمانی قابل توجهی از زمان انجام پروژه را مشغول تست و عیب‌یابی آن بوده‌اید. پس از پایان کار هم،‌باید آن را به مدیر یا مشتری خود نشان دهید و ثابت کنید که به نحو مطلوب عمل می‌کند.

یکی از مهم‌ترین ابزاری که برای انجام این دو مرحله به شما کمک می‌کند، شبیه‌سازی به کمک نرم‌افزارهای شبیه‌ساز است. در این برنامه ویدئویی، شما را با شبیه‌ساز ISim که یکی از نرم‌افزارهای مجموعه ISE است آشنا می‌کنم.

More...

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

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

برای آشنایی با نحوه نصب نرم‌افزار ISE و دانلود آن، مقاله زیر را ببینید:

نحوه نصب نرم‌افزار ISE و کرک آن

ویدئو یا متن؟

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

برای دانلود نسخه با کیفیت این ویدئو، روی دکمه زیر کلیک کنید:

در این مقاله قصد دارم در مورد نحوه‌‌ی شبیه‌‌ساز‌‌ی مدار‌‌ات دیجیتال با نرم‌‌افزار ISim صحبت کنم.

نرم‌‌افزار شبیه‌ساز ISim

نرم‌‌افزار ISim، نرم‌افزار شبیه‌‌ساز شرکت XILINX است. این نرم‌افزار به صورت خودکار همراه با نصب نرم‌‌افزار ISE، رو‌‌ی کامپیوترتان‌‌ نصب می‌شود و می‌توانید برای شبیه‌‌ساز‌‌ی مدار‌‌ات از آن استفاده کنید.

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

انواع شبیه‌سازی

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

اولی، شبیه‌‌ساز‌‌ی عملکرد یا Functional Simulation است که به آن Behavioral Simulation نیز می‌گویند.

و دومی، شبیه‌‌ساز‌‌ی زمانی یا Timing Simulation است.

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

یعنی‌‌، مثلاً اگر یک جمع‌‌کنند‌‌ه طراحی کرد‌‌ه‌اید، می‌‌خواهید بدانید که آیا عمل جمع به صورت صحیح انجام می‌شود یا خیر‌‌؟

در شبیه‌‌ساز‌‌ی عملکرد‌‌، ﺗﺄخیر تمام عملگر‌‌ها و توابع‌‌، صفر در نظر گرفته می‌شود.

مثلا‌‌ً، اگر یک گیت AND در مدار‌‌تان داشته باشید، وقتی که یکی از ورود‌‌ی‌‌ها‌‌ی این گیت تغییر کند، نتیجه‌‌ی آن در صفر ثانیه به خروجی منتقل می‌شود؛ اما می‌‌دانید که در عمل این گونه نیست.

در عمل‌‌، هر قطعه‌‌ی الکترونیکی یا دیجیتالی شامل یک ﺗﺄخیر انتشار یا Propagation Delay است که باعث می‌شود اثر ورود‌‌ی بعد از مدتی ﺗﺄخیر‌‌، به خروجی منتقل شود.

مثلاً‌‌، در مورد مثال گیت AND، بعد از اینکه شما یکی از ورود‌‌ی‌‌ها را تغییر داد‌‌ید، ممکن است بعد از یک نانوثانیه خروجی تغییر کند که به این زمان، ﺗﺄخیر انتشار یا Propagation Delay می‌گوییم.

در شبیه‌‌ساز‌‌ی زمانی یا Timing Simulation این ﺗﺄخیر‌‌های انتشار هم در نظر گرفته می‌شود.

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

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

در شبیه‌‌ساز‌‌ی زمانی، این تأخیر‌‌ها‌‌ی انتشار هم در نظر گرفته می‌شود؛ مثلاً اگر یک گیت AND را در ساده‌‌ترین حالت شبیه‌‌ساز‌‌ی کنید، بعد از اینکه ورود‌‌ی آن گیت را تغییر داد‌‌ید، به اندازه‌‌ی Propagation Delay (که می‌‌تواند مقدار متغیری بسته به نوع FPGA‌‌ شما داشته باشد)، بعد از یک نانوثانیه یا مقدار دیگری، خروجی تغییر می‌کند.

شبیه‌‌ساز‌‌ی یک انکدر اولویت‌‌دار در نرم‌‌افزار ISim

برای اینکه شبیه‌‌ساز‌‌ی را به کمک نرم‌‌افزار ISim با هم بررسی کنیم، باید از یک مثال استفاده کنیم که من از همان مثال انکدر اولویت‌‌دار که در مقاله‌‌ی آموزش زبان VHDL - قسمت سوم، به طور مفصل درباره‌ی آن صحبت کرد‌‌م، استفاده می‌‌کنم.

یادآوری عملکرد انکدر اولویت‌‌دار

همان‌‌‌طور که احتمالاً از مقاله‌‌ی آموزش زبان VHDL - قسمت سوم، به یاد دارید، به طور کلی خروجی انکدر با توجه به اینکه کدام یک از ورود‌‌ی‌‌هایش برابر با یک است، مشخص می‌شود.

در حالت عادی و برای عملکرد عادی انکدر‌‌، حتما باید در هر لحظه از زمان یکی از ورودی‌‌ها برابر با یک باشد.

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

به همین دلیل، انکدر اولویت‌‌دار معرفی شد‌‌ه است.

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

مثلاً‌‌، در شکل زیر می‌‌بینید که ورود‌‌ی W1 و W3 همزمان یک شده‌ا‌‌ند:

شمای کلی یک انکدر اولویت‌دار

شمای کلی یک انکدر اولویت‌دار

اگر این انکدر را اولویت‌‌دار‌‌ از سمت بیت سنگین (یعنی W3) در نظر بگیریم، جدول درستی آن به صورت شکل زیر است:

جدول درستی یک انکدر اولویت‌دار

جدول درستی یک انکدر اولویت‌دار

چون ورودی W3‌‌، برابر با یک است، این ورودی به عنوان ورودی فعال در نظر گرفته می‌شود و انکدر، یک بودن W1 را در نظر نمی‌گیرد و خروجی انکدر بر اساس ورودی W3 مشخص می‌شود.

در کد زیر، کد انکدر اولویت‌‌داری که در مقاله‌‌ی قبل به طور مفصل درباره‌ی آن صحبت کرد‌‌یم را می‌‌بینید:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity Encoder is

	port (
				w	:	in	std_logic_vector(3 downto 0);
				y	:	out	std_logic_vector(1 downto 0)
			);

end Encoder;

architecture Behavioral of Encoder is

begin

		y		<=		"11"	 when	 w(3) = '1' else
						  "10"	 when w(2) = '1' else
						  "01"  when	 w(1) = '1' else
						  "00";

end Behavioral;

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

تولید کد تست‌بنچ برای انجام شبیه‌سازی مدار در نرم‌افزار ISim

برای اینکه بتوانید مدار خود‌‌تان را به کمک زبان VHDL، در نرم‌‌افزار ISim شبیه‌‌ساز‌‌ی کنید، اولین کار‌‌ی که باید انجام دهید، تولید یک فایل ویژه به نام فایل تست‌‌بنچ است.

فایل تست‌‌بنچ خود‌‌ش یک فایل VHDL‌‌ است؛ اما‌‌ یک فایل VHDL مخصوص است که در آن فقط ماجول VHDL‌ای که نوشته‌اید، فراخوانی می‌شود و می‌توانید در آن فایل به ورود‌‌ی‌‌ها‌‌ی ماجولتان مقادیر‌‌ مورد نظر‌‌تان را اعمال کنید و خروجی‌های متناظر را در شبیه‌سازی ببینید.

باید در نظر داشته باشید که فایل تست‌‌بنچ فقط برای عمل شبیه‌‌ساز‌‌ی استفاده می‌شود و قابل پیاده‌‌ساز‌‌ی نیست.

برای ساختن کد تست‌بنچ باید همانند شکل زیر، در یک نقطه از قسمت Hierarchy کلیک-راست کنید و گزینه‌‌ی New Source را انتخاب کنید:

اولین گام در ساخت فایل تست‌بنچ برای شبیه‌سازی در نرم‌افزار ISim

اولین گام در ساخت فایل تست‌بنچ برای شبیه‌سازی در نرم‌افزار ISim

در پنجره‌ی مطابق با شکل زیر، از مجموعه‌‌ی فایل‌‌ها‌‌یی که می‌توانید بسازید، فایل VHDL Test Bench را انتخاب کنید و نامی برای آن انتخاب کنید:

انتخاب نام برای فایل تست‌بنچ

انتخاب نام برای فایل تست‌بنچ

من شخصاً برای اینکه فایل‌‌ها‌‌یی که درست می‌‌کنم، منظم باشند و بعداً دسترسی به آن‌ها ساده‌‌تر شود، برای خود‌‌م قرارداد کرده‌ا‌‌م که نام فایل‌‌ها‌‌ی تست‌‌بنچ را همان نام ماجولی که می‌‌خواهم آن را شبیه‌‌ساز‌‌ی کنم به علاوه‌ی عبارت "tb_" در انتهای نام آن، قرار دهم.

مثلاً‌‌، ماجولی که اکنون می‌‌خواهم شبیه‌‌ساز‌‌ی کنم، ماجول انکدر است‌‌؛ بنا‌‌بر‌‌این، اسم فایل تست‌‌بنچ را Encoder_tb قرار می‌دهم که در آن، tb مخفف تست‌‌بنچ است.

دکمه‌‌ی Next را کلیک می‌‌کنیم‌‌ و مطابق شکل زیر، به صفحه‌ی بعد هدایت می‌شویم:

انتخاب ماجولی از پروژه که قصد ساخت تست‌بنچ برای آن را داریم

انتخاب ماجولی از پروژه که قصد ساخت تست‌بنچ برای آن را داریم

در این صفحه، نرم‌افزار از شما سوال می‌‌پرسد که می‌خواهید این فایل تست‌‌بنچ را برای کدام یک از ماجول‌‌ها‌‌ی پروژه‌تان درست کنید‌‌؟ ما در این پروژه تنها یک فایل در قسمت Hierarchy داریم. اما اگر چند ماجول داشتیم، باید از بین آن‌ها، ماجول موردنظر (در اینجا ماجول Encoder) را انتخاب می‌کردیم.

 سپس، دکمه‌‌ی Next و پس از آن دکمه‌‌ی Finish را فشار می‌‌دهیم:
پایان مراحل ساخت تست‌بنچ برای شبیه‌سازی در نرم‌افزار ISE

پایان مراحل ساخت تست‌بنچ برای شبیه‌سازی در نرم‌افزار ISE

اکنون مانند کد زیر، یک فایل تست‌‌بنچ ساخته می‌شود:

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
 
-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
--USE ieee.numeric_std.ALL;
 
ENTITY Encoder_tb IS
END Encoder_tb;
 
ARCHITECTURE behavior OF Encoder_tb IS 
 
  -- Component Declaration for the Unit Under Test (UUT)
 
  COMPONENT Encoder
  PORT(
     w : IN std_logic_vector(3 downto 0);
     y : OUT std_logic_vector(1 downto 0)
    );
  END COMPONENT;
  

  --Inputs
  signal w : std_logic_vector(3 downto 0) := (others => '0');

 	--Outputs
  signal y : std_logic_vector(1 downto 0);
  -- No clocks detected in port list. Replace <clock> below with 
  -- appropriate port name 
 
  constant <clock>_period : time := 10 ns;
 
BEGIN
 
	-- Instantiate the Unit Under Test (UUT)
  uut: Encoder PORT MAP (
     w => w,
     y => y
    );

  -- Clock process definitions
  <clock>_process :process
  begin
		<clock> <= '0';
		wait for <clock>_period/2;
		<clock> <= '1';
		wait for <clock>_period/2;
  end process;
 

  -- Stimulus process
  stim_proc: process
  begin		
   -- hold reset state for 100 ns.
   wait for 100 ns;	

   wait for <clock>_period*10;

   -- insert stimulus here 

   wait;
  end process;

END;

حذف عبارات مربوط به کلاک از کد تست‌بنچ برای شبیه‌سازی مدارات ترکیبی

من وارد جزئیات این کد تست‌بنچ نمی‌شوم، اما در اینجا این نکته را در نظر داشته باشید که نرم‌‌افزار ISE فایل تست‌‌بنچ را با این فرض که شما قصد شبیه‌سازی یک مدار ترتیبی دارای کلاک را دارید، می‌سازد.

بنا‌‌بر‌‌این، یک سری از خطوط این کد تست‌بنچ، مربوط به کلاک است.

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

در آن خطوط، کلمه‌‌ی کلاک وجود دار‌‌د؛ بنا‌‌بر‌‌این‌‌، کار شما برای پیدا کردن آن‌ها راحت است.

مثلاً در خط ۳۱اُم از کد، کلمه Clock وجود دارد که من این خط را پاک می‌کنم.

از خط ۴۱اُم تا خط ۴۸اُم، مجموعه‌‌ای شامل Clock وجود دارد که کلاک سیستم را برای شبیه‌‌ساز‌‌ی تولید می‌کند؛ چون سیستم ما کلاک ندارد این مجموعه خط را پاک می‌‌کنیم.

خط ۵۷اُم نیز، آخر‌‌ین خطی است که شامل کلاک است که آن را پاک می‌کنیم.

کد تست‌بنچ را ذخیره می‌‌کنم؛ کد تست‌بنچ، بدون عبارات مربوط به Clock، به صورت زیر است:

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
 
-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
--USE ieee.numeric_std.ALL;
 
ENTITY Encoder_tb IS
END Encoder_tb;
 
ARCHITECTURE behavior OF Encoder_tb IS 
 
  -- Component Declaration for the Unit Under Test (UUT)
 
  COMPONENT Encoder
  PORT(
     w : IN std_logic_vector(3 downto 0);
     y : OUT std_logic_vector(1 downto 0)
    );
  END COMPONENT;
  

  --Inputs
  signal w : std_logic_vector(3 downto 0) := (others => '0');

 	--Outputs
  signal y : std_logic_vector(1 downto 0);
  -- No clocks detected in port list. Replace <clock> below with 
  -- appropriate port name 
 
BEGIN
 
	-- Instantiate the Unit Under Test (UUT)
  uut: Encoder PORT MAP (
     w => w,
     y => y
    );

  -- Stimulus process
  stim_proc: process
  begin		
   -- hold reset state for 100 ns.
   wait for 100 ns;	

   -- insert stimulus here 

   wait;
  end process;

END;

اعمال ورودی به ماجول در کد تست‌بنچ برای شبیه‌سازی

همان‌‌طور که گفتم، فایل تست‌‌بنچ، فایلی است که ماجول ما را در خود‌‌ش فراخوانی می‌کند و ما می‌‌توانیم ورودی‌‌ها‌‌ی مورد نظر‌‌مان را به این ماجول اعمال کنیم.

تنها ورود‌‌ی ماجول ما، ورود‌‌ی W است که از چهار بیت تشکیل شد‌‌ه است.

در کدام قسمت از کد تست‌بنچ باید ورودی‌ها را اعمال کنیم؟

در کد بالا و در خط ۴۵اُم از کد، عبارت "insert stimulus here" را می‌‌بینیم؛ شما باید ورود‌‌ی‌‌ها‌‌یتان را در این قسمت به تست‌بنچ معرفی کنید.

تنها ورود‌‌ی ما‌‌، ورود‌‌ی W بود که من کد زیر را برای اعمال ورودی در زیر خط ۴۵اُم از کد بالا وارد می‌کنم:

w <= "0110";

یعنی،‌‌ به W0‌‌ و W3، مقدار صفر و به W1‌‌ و W2، مقدار یک را اعمال کرده‌ام.

با توجه به اینکه این انکدر اولویت‌‌دار از طرف بیت سنگین بود، حتماً می‌‌دانید که در خروجی باید چه عدد‌‌ی ظاهر شود‌‌؟

با توجه به اینکه سنگین‌‌ترین بیتی که مقدار یک دارد، بیت با اندیس 2 است‌‌، پس انتظار دار‌‌یم که عدد باینری 2 را در خروجی مشاهده کنیم.

اجازه دهید، شبیه‌‌ساز‌‌ی را انجام دهیم و ببینیم که آیا در خروجی عدد باینری 2 را مشاهده می‌کنیم؟

 بعد از اینکه فایل تست‌‌بنچ را ساختید و آن را ذخیره کرد‌‌ید برای انجام شبیه‌‌ساز‌‌ی، مطابق شکل زیر، در قسمت Design، گزینه‌ی Simulation را انتخاب کنید؛ در این قسمت، تست‌‌بنچ‌‌ها را به شما نشان می‌دهد:
بخش Simulation و نمایش تست‌بنچ‌های پروژه

بخش Simulation و نمایش تست‌بنچ‌های پروژه

تست‌‌بنچ مورد نظر ما Encoder_tb است؛ آن را در شکل بالا می‌بینید. رو‌‌ی آن یک کلیک می‌‌کنم؛ به این ترتیب،‌ مطابق شکل زیر، در پنجره‌‌ی پایین صفحه، امکان فراخوانی نرم‌‌افزار ISim برای ما فراهم می‌شود:

فراهم شدن امکان فراخوانی نرم‌‌افزار ISim

گزینه‌ی فراخوانی نرم‌افزار ISim از دل نرم‌افزار ISE

همان‌‌طور که گفتم نرم‌‌افزار ISim، نرم‌‌افزار شبیه‌‌ساز شرکت XILINX است که اگر شما نرم‌‌افزار ISE را نصب کنید، این نرم افزار هم بر رو‌‌ی کامپیوتر شما نصب می‌شود.

چک کردن کد تست‌بنچ از نظر سینتکس

قبل از اینکه شبیه‌‌ساز‌‌ی را انجام دهید، می‌توانید مطابق شکل زیر، رو‌‌ی گزینه‌‌ی Behavioral Check Syntax یک دبل-کلیک انجام دهید تا اگر ایراد‌‌ی از نظر سینتکس در کد تست‌‌بنچ شما وجود داشته باشد، نرم‌افزار آن را گوشزد کند.

بررسی ایرادات ‌ مربوط به سینتکس در کد تست‌‌بنچ

بررسی ایرادات ‌مربوط به سینتکس در کد تست‌‌بنچ

خوشبختانه در این کد ایراد‌‌ی وجود نداشت و عبارت "Process Behavioral Check Syntax completed successfully" توسط نرم‌افزار گزارش شد:

انجام موفقیت‌آمیز چک کردن سینتکس کد تست‌بنچ

باز کردن نرم‌‌افزار ISim از دل نرم‌‌افزار ISE

اکنون می‌توانید مطابق شکل زیر، رو‌‌ی گزینه‌‌ی Simulate Behavioral Model دبل-کلیک کنید تا نرم‌‌افزار ISim از دل نرم‌‌افزار ISE باز شود:

باز کردن نرم‌‌افزار ISim از دل نرم‌‌افزار ISE

باز کردن نرم‌‌افزار ISim از دل نرم‌‌افزار ISE

صفحه‌ای که در شکل زیر می‌‌بینید، محیط نرم‌‌افزار ISim است:

محیط نرم‌‌افزار شبیه‌ساز ISim از مجموعه‌ی نرم‌افزاری ISE

محیط نرم‌‌افزار شبیه‌ساز ISim از مجموعه‌ی نرم‌افزاری ISE

در قسمتی که با کادر قرمز مشخص شده، سیگنال‌‌ها نشان داده شده‌اند.

با توجه به اینکه در حال شبیه‌‌ساز‌‌ی یک انکدر اولویت‌‌دار چهار به یک هستیم، یک ورود‌‌ی چهار بیتی به نام W‌‌ و یک خروجی دو بیتی به نام Y‌‌ داریم.

مطابق شکل زیر، ورود‌‌ی "01110" که در تست‌‌بنچ به مدار اعمال کردیم، در این شبیه‌سازی دیده می‌شود؛ همان‌‌طور که انتظار داشتیم، خروجی برابر با عدد باینری دو، یعنی "10" شده است.

مقادیر ورودی‌ها و خروجی‌ها در نرم‌‌افزار شبیه‌ساز ISim

مقادیر ورودی‌ها و خروجی‌ها در نرم‌‌افزار شبیه‌ساز ISim

هر بار که شما نرم‌‌افزار ISim را فراخوانی کنید‌‌، به طور پیش فرض شبیه‌‌ساز‌‌ی را به مدت یک میکروثانیه انجام می‌دهد.

در شکل زیر، می‌‌بینید که در انتها‌‌ی شبیه‌‌ساز‌‌ی، زمان برابر با یک میکروثانیه است:

مدت زمان پیش‌فرض شبیه‌سازی در نرم‌افزار ISim یک میکرو‌ثانیه است

مدت زمان پیش‌فرض شبیه‌سازی در نرم‌افزار ISim یک میکرو‌ثانیه است

در شکل بالا، مقادیر ورودی‌ها و خروجی‌ها، در ابتدای زمان شبیه‌‌ساز‌‌ی مشخص نیست؛ شما می‌توانید مطابق شکل زیر، آیکون zoom to full view را فشار دهید تا کل شبیه‌‌ساز‌‌ی، از زمان صفر تا زمان یک میکروثانیه را در یک قاب ببینید:

گزینه‌ی zoom to full view، برای دیدن کل زمان شبیه‌سازی در یک قاب

گزینه‌ی zoom to full view، برای دیدن کل زمان شبیه‌سازی در یک قاب

تغییر زمان انجام شبیه‌سازی در نرم‌افزار ISim

اگر بخواهید شبیه‌‌ساز‌‌ی را برای زمان بیشتری انجام دهید، می‌توانید در قسمتی که در شکل زیر نشان داده شده، مقدار زمان موردنظر برای شبیه‌‌ساز‌‌ی را وارد کنید.

نمایش نحوه‌ی انجام شبیه‌سازی برای مدت زمان بیشتر از یک میکرو‌ثانیه

انجام شبیه‌سازی برای مدت زمان بیشتر از یک میکرو‌ثانیه

مثلا‌‌ً، من می‌‌خواهم شبیه‌‌ساز‌‌ی را برای دو میکروثانیه‌ی دیگر انجام دهم؛ ابتدا زمان را وارد می‌کنم و سپس آیکون Run for the time specify on the toolbar را فشار می‌دهم تا شبیه‌‌ساز‌‌ی به مدت دو میکروثانیه‌ی دیگر انجام شود.

همان‌طور که می‌‌بینید، شبیه‌‌ساز‌‌ی تا زمان سه میکروثانیه ادامه پیدا کرد:

انجام شبیه‌سازی تا زمان سه میکرو‌ثانیه

انجام شبیه‌سازی تا زمان سه میکرو‌ثانیه

اکنون اگر بخواهیم کل شبیه‌‌ساز‌‌ی را در یک قاب ببینیم، می‌توانیم دوباره دکمه‌‌ی zoom to full view را فشار دهیم.

اگر بخواهید بخشی از شبیه‌‌ساز‌‌ی را بزرگ کنید، می‌توانید رو‌‌ی آن قسمت کلیک کنید‌‌ تا یک نشانگر مانند شکل زیر، ظاهر شود‌‌:

بزرگ‌نمایی بخش‌های دلخواه از شبیه‌سازی در نرم‌افزار ISim

بزرگ‌نمایی بخش‌های دلخواه از شبیه‌سازی در نرم‌افزار ISim

حالا می‌توانید دکمه‌ی zoom in را انتخاب کنید؛ با هر بار فشار داد‌‌ن این دکمه، قسمت دلخواه بزرگ‌‌تر می‌شود:

گزینه‌ی zoom in برای بزرگ‌نمایی بخش‌های دلخواه از شبیه‌سازی

گزینه‌ی zoom in برای بزرگ‌نمایی بخش‌های دلخواه از شبیه‌سازی

تغییر ورودی‌ها در فرایند شبیه‌سازی در نرم‌افزار ISim

حالا شاید این سوال مطرح شود که اگر بخواهیم ورود‌‌ی را تغییر دهیم، باید چه کار کنیم‌‌؟

یکی از راه‌‌ها این است که به نرم‌‌افزار ISE برگرد‌‌یم و در تست‌‌بنچ‌‌ ورود‌‌ی دیگری به سیستم بدهیم؛ مثلاً‌‌، مانند کد زیر، مقدار "1001" را به W اعمال کنیم:

-- Stimulus process
  stim_proc: process
  begin		
   -- hold reset state for 100 ns.
   wait for 100 ns;	

   -- insert stimulus here 
			W <= "0110";
			wait for 50 ns;
			W <= "1001";
   wait;
  end process; 

یعنی ابتدا ارجاع اول انجام شود، سپس به اندازه‌ی 50 نانوثانیه صبر کند و پس از آن، ارجاع دوم انجام شود.

همان‌‌طور که در خط پنجم از کد بالا می‌‌بینید، یک ﺗﺄخیر ۱۰۰ نانوثانیه‌ای در ابتدا‌‌ی شبیه‌‌ساز‌‌ی ایجاد شده است؛ به همین دلیل، در ۱۰۰ نانو‌ثانیه‌ی اول شبیه‌سازی، ورود‌‌ی صفر است. سپس، ورود‌‌ی به "0110" تبدیل می‌شود و بعد از مدت 50 نانوثانیه، ورود‌‌ی به مقدار "1001" تغییر پیدا می‌کند.

اکنون تست‌‌بنچ جدید را ذخیره می‌‌کنیم‌‌ و به Simulator بر می‌‌گردیم.

مطابق شکل زیر، دکمه‌‌ی Re-lunch را انتخاب کنید تا بر مبنا‌‌ی تغییراتی که در تست‌‌بنچ اعمال کردید دوباره شبیه‌‌ساز‌‌ی انجام شود:

انتخاب دکمه‌‌ی Re-lunch برای انجام شبیه‌سازی بر اساس تست‌بنچ تغییریافته

انتخاب دکمه‌‌ی Re-lunch برای انجام شبیه‌سازی بر اساس تست‌بنچ تغییریافته

همان‌طور که می‌بینید، شبیه‌‌ساز‌‌ی به مدت یک میکروثانیه انجام شد و می‌توانید با فشردن دکمه‌ی Zoom to Full View، تغییرات را در یک قاب ببینید:

انجام شبیه‌سازی بر اساس تست‌بنچ تغییریافته

انجام شبیه‌سازی بر اساس تست‌بنچ تغییریافته

در شکل بالا نتایج شبیه‌سازی را می‌بینید؛ از زمان صفر تا زمان ۱۰۰ نانوثانیه ورود‌‌ی صفر است و در نتیجه، خروجی صفر خواهد بود.

سپس، ورود‌‌ی را به "0110" تغییر داده‌ا‌‌یم، که خروجی متناظر با آن برابر با "10" می‌‌شود.

آنگاه، بعد از 50 نانوثانیه‌ی دیگر، یعنی‌‌ در ثانیه‌‌ی 150 نانوثانیه، ورود‌‌ی را به "1001" تغییر داد‌‌ه‌ایم که انتظار داشتیم خروجی برابر با "11" شود که همان‌طور که در قسمت خروجی شکل بالا می‌بینید، بعد از زمان ۱۵۰ نانو‌ثانیه، خروجی برابر با "11" است.

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

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

امیدوارم این مقاله نیز برای شما مفید بود‌‌ه باشد و بتوانید برای شبیه‌‌ساز‌‌ی مدار‌‌اتتان از آن استفاده کنید.

آیا برنامه ویدئویی شبیه‌سازی مدارات دیجیتال با نرم‌افزار ISim برای شما مفید بود؟

لطفا نظرتان را در مورد این برنامه در پایین همین پست با دیگران به اشتراک بگذارید. همچنین با کلیک روی هر کدام از دکمه‌های اشتراک گذاری ابتدای این مطلب و به اشتراک‌گذاری آن در شبکه‌های اجتماعی می‌توانید افراد بیشتری را در یادگیری این مطالب سهیم کنید.

کانال تلگرام آموزش FPGA از صفر

برای عضویت در کانال تلگرام و دسترسی به آموزش‌های بیشتر و اطلاع سریع از زمان انتشار آموزش‌ها و تخفیف‌های ویژه، روی دکمه زیر کلیک کنید:

درباره نویسنده:

احمد ثقفی

شاید به این موضوعات نیز علاقه داشته باشید:

  • با سلام
    سئوالم این بود که در طراحی پروژه ها با توجه به حجم عملیات تکنولوژی مناسب را انتخاب خواهیم نمود در صورتیکه حجم عملیات خیلی بالا باشد از FPGA خانواده Xilinx یا مثلا از Altera استفاده کردیم حال اگر حجم عملیات خیلی نباشد و مناسب باشد که از DSP ها استفاده کنیم آنوقت از المان های کدام شرکت تولید کننده استفاده کنیم بهتر است ( المان های کدام شرکت در بازار ایران موجود هستند) .
    از راهنمایی شما متشکرم

    • سلام،

      پردازنده‌های دو شرکت Texas Instrument یا TI و Analog Devices یا AD هر دو در ایران یافت می‌شوند و به کار می‌روند. اما شرکت TI در این زمینه محصولات قوی‌تری دارد و انواع DSPهای مناسب برای الگوریتم‌های مختلف پردازش سیگنال را ارائه می‌کند.

  • سلام
    خیلی عالی بود
    اگه امکانش هست فایل تیت بنچ rs232که قبلا توضیح داده بودید بگذارید منتو شبیه سازیش مشکل دارم

      • سلام
        ممنون از لطفتون واقعا خیلی دوست دارم تو کلاسها تون حضور داشته باشم ولی شهرستانم وفعلا امکانش نیست
        خواهشن فایل تست بنج rs232 نیازش دارم بذارید
        یا یه اموزشی فایل تست بنجی که مدار ترتیبی باشد ونیاز به کلاک باشد رو اموزش بدید

        • سلام،

          در حال حاضر این امکان فراهم شده است و شما می‌توانید از تمام دوره‌ها به صورت آنلاین استفاده کنید.

          برای اطلاع بیشتر در مورد دوره آنلاین طراحی دیجیتال با FPGA روی لینک زیر کلیک کنید:
          جزئیات دوره آنلاین طراحی دیجیتال با FPGA

          موفق باشید.

          • ممنون ار راهنمایی خوب واموزش بسیار واضح و مفید
            خواهشن فایل تست بنج rs232 نیازش دارم بذارید
            یا یه اموزشی فایل تست بنجی که مدار ترتیبی باشد ونیاز به کلاک باشد رو اموزش بدید.
            بخش ip core اگه توضیح بدید ممنون میشم

  • با سلام.ببخشید استاد من تو انکودر اولویت دار توی قسمت تست بنچ در قسمت simulate bihavioral modelبه ارور برخورد کردم به اسم های :
    ERROR:HDLCompiler:410
    ERROR:Simulator:777
    با وجود این ارور ها نمیتونم جلو برم ممنون میشم راهنماییم کنید
    مرسی

  • با تشکر از سایت بسیار خوبتان . واقعا کار من گیر کرده بود ولی ویدیو های شما خیلی موثر بود و توانستم کامل برنامه ی ise را یاد بگیرم . خیلی خیلی ممنون .

  • سلام باعرض خسته نباشید یک سوالی درمورد نحوه نوشتن کدتست بنچ alu باکدنوشته شده زیر داشتم کدtest benchاین کدچجوری میشه؟
    module ALU_4(
    input [4:0] a,
    input [4:0] b,
    input [2:0] f,
    output reg [7:0] w
    );

    always@(a or b or f )
    case(f)
    2’b00 : w = a+b;
    2’b01 : w = a-b;
    2’b10 : w = a*b;
    2’b11 : w = a/b;
    default : w =8’h00;
    endcase

    endmodule

    • سلام،

      کد شما به زبان وریلاگ است. در تنظیمات نرم‌افزار ISE، در قسمت Preferred Language گزینه Verilog را انتخاب کنید. باقی مراحل مشابه ویدئو است.

      موفق باشید.

  • سلام
    در ابتدا ،از آموزشهای بسیار خوب شما بسیار تشکر میکنم.آنچه که آموزش می دهید، کاملا کاربردی است.
    من یک کانتر را به صورت سیگنال داخلی تعریف کرده ام ، چگونه می توانم این سیگنال را در شبیه سازی در کنار سیگنالهای ورودی و خروجی مشاهده کنم؟

    • سلام،

      در پنجره Instance and process names روی نام تست‌بنچ کلیک کنید و سپس روی عبارت UUT کلیک کنید. در این حالت در پنجره Objects تمام سیگنال‌های داخلی هم ظاهر می‌شوند. سپس سیگنال‌های داخلی مورد نظرتان به داخل پنجره شبیه‌سازی بکشید و شبیه‌سازی را انجام دهید.

      موفق باشید.

  • سلام روز بخیر. راهی پیدا کنید که ISIM نتایج شبیه سازی را به جای خطوط سبزرنگ در پس سیاه، با خطوط سیاه
    زمینه رنگ روی پس زمینه سفید نشان بدهد که برای چاپ مناسب تر است
    میشه لطفا این سوالو جواب بدید خیلی ممنونم.

    • سلام،

      بعد از اجرای نرم‌افزار ISim، از منوی Edit گزینه Preferences رو انتخاب کنید. سپس در بخش Color می‌توانید رنگ تمام بخش‌ها را تغییر دهید.

      موفق باشید.

  • درود
    یک شورتکات مفید در نوشتن برنامه ها وجود داره که یادآوری اون ممکنه برای دوستان مفید واقع بشه و اون این هست که اگر در انتهای هر خط برنامه CONTOROL+D را بگیریم آن خط بطور کامل تکرار میشود.

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

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

    >