بررسی عملکرد Set به جای Reset | آموزش FPGA قسمت شانزدهم

blog
۱۳۹۸-۰۶-۲۷
4 دقیقه

Reset;

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

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

قبل از اینکه راه‌کاری جایگزین برای ریست ارائه بدهیم، می‌خواهیم در مورد Set، که در مقابل Reset قرار دارد صحبت کنیم و این مورد را با استفاده از زبان VHDL در FPGA پیاده‌سازی کنیم.

Set

Set هم عملکردی تقریبا مشابه با Reset دارد، اما به جای اینکه مقدار 0 منطقی را در فلیپ‌فلاپ یا رجیستر جایگزین کند، مقدار 1 منطقی را جایگزین خواهد کرد (توجه کنید که بعضی از این تعاریف قراردادی هستند و لزومی ندارد که دقیقا یک تعریف علمی از این پارامترها وجود داشته باشد).

قبل از توضیحات مربوطه، در ابتدا Set را با استفاده از زبان VHDL توصیف خواهیم کرد سپس توضیحات اضافه را بیان خواهیم نمود.

همانطور که در کد بالا واضح و مشخص است تنها عاملی که می‌تواند باعث فعال شدن perocess شود، کلاک می‌باشد و این یعنی اینکه مدار ما سنکرون است و مشخصا Reset و Set مدار هم سنکرون است.

طبق توضیحات گذشته دوباره Set را با مقدار 1 منطقی مقایسه کردیم و اگر برابر این مقدار بود، آنگاه ارزش رجیستر هر مقداری بود به مقدار 1 تغییر پیدا خواهد کرد.

شاید از دوران دانشگاه، از درس مدارات منطقی به یاد داشته باشید که می‌گفتیم اولویت با Set است یا Reset؟ یعنی اگر به طور همزمان این دو مقدار برابر با یک باشند (طبق کد بالا) کدامین عمل Set یا Reset انجام می‌شود! اصلا آیا با استفاده از کد VHDL این قابلیت و انعطاف برای ما وجود دارد که تعیین کنیم در ابتدا کدام یک از این اعمال انجام شود و برای این اعمال اولویت تعیین کنیم؟ بله زبان VHDL این انعطاف و قابلیت را به ما می‌دهد که این موضوع را هموار کنیم.

در کد بالا اولویت با Set بود، کدی را در ادامه خواهیم نوشت که اولویت آن با Reset خواهد بود. شما در ابتدا خودتان به تفاوت کوچکی که در کد وجود دارد توجه کنید تا به صورت شهودی متوجه شوید که دلیل اولویت در این امر ناشی از چیست تا ما در ادامه پس از نوشتن کد دوم دلیل را بیان کنیم.

اما دلیل اینکه با جابه‌جایی چند خط اولویت عوض شد چیست؟

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

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

با توجه به نکته طلایی بالا، چون ما با استفاده از ساختار شرطی if این کار را انجام دادیم، حال اگر Set و Reset هر دو برابر با 1 منطقی باشند ارجاع مرتبط با شرط دوم در اولویت است و انجام خواهد شد. در کد اول اولویت با Set است و در کد دوم اولویت با Reset است.

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

اگر با FPGA آشنایی ندارید اول مقاله FPGA چیست؟ را مطالعه نمایید.

اولویت با Reset

اولویت با Set

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

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

در تمام FPGA های شرکت زایلینکس واحدی به اسم (GSR (Global Set/Reset وجود دارد که هنگام روشن شدن FPGA تمامی مقادیر اولیه را به صورت آسنکرون به فلیپ‌فلاپ‌ها اعمال می‌کند. شما می‌توانید سیگنال‌هایتان را با مقادیر اولیه تعریف کنید و از این تکنیک استفاده کنید.

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

حال که به خوبی با اصول و توصیف فلیپ‌فلاپ‌ها و جزئیات آن‌ها آشنا شدیم در قسمت هفدهم با رجیسترها که خود متشکل از چندین فلیپ‌فلاپ در کنار هم هستند آشنا خواهیم شد.

اطلاعات
22
0
لینک و اشتراک
profile

سپهر

متخصص الکترونیک

مقالات بیشتر
slide

پالت | بازار خرید و فروش قطعات الکترونیک

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

آیسی | موتور جستجوی قطعات الکترونیک

سامانه آی سی سیسوگ (Isee) قابلیتی جدید و کاربردی از سیسوگ است. در این سامانه سعی شده است که جستجو، انتخاب و خرید مناسب تر قطعات برای کاربران تسهیل شود. وقتی شما در این سامانه، قطعه الکترونیکی را جستجو می‌کنید؛ آی سی به سرعت نتایج جستجوی شما در اکثر فروشگاه‌های آنلاین در حوزه قطعات الکترونیک را نمایش می‌دهد. جستجو در آیسی
family

فروشگاه سیسوگ

فروشگاه سیسوگ مجموعه ای متمرکز بر تکنولوژی های مبتنی بر IOT و ماژول های M2M نظیر GSM، GPS، LTE، NB-IOT، WiFi، BT و ... جایی که با تعامل فنی و سازنده، بهترین راهکارها انتخاب می شوند. برو به فروشگاه سیسوگ
family

سیسوگ فروم | محلی برای پاسخ پرسش‌های شما

دغدغه همیشگی فعالان تخصصی هر حوزه وجود بستری برای گفتگو و پرسش و پاسخ است. سیسوگ فروم یک انجمن آنلاین است که بصورت تخصصی امکان بحث، گفتگو و پرسش و پاسخ در حوزه الکترونیک را فراهم می‌کند. پرسش در سیسوگ فرم
become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
خانواده سیسوگ

پالت | بازار خرید و فروش قطعات الکترونیک

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

آیسی | موتور جستجوی قطعات الکترونیک

سامانه آی سی سیسوگ (Isee) قابلیتی جدید و کاربردی از سیسوگ است. در این سامانه سعی شده است که جستجو، انتخاب و خرید مناسب تر قطعات برای کاربران تسهیل شود. وقتی شما در این سامانه، قطعه الکترونیکی را جستجو می‌کنید؛ آی سی به سرعت نتایج جستجوی شما در اکثر فروشگاه‌های آنلاین در حوزه قطعات الکترونیک را نمایش می‌دهد.
family

فروشگاه سیسوگ

فروشگاه سیسوگ مجموعه ای متمرکز بر تکنولوژی های مبتنی بر IOT و ماژول های M2M نظیر GSM، GPS، LTE، NB-IOT، WiFi، BT و ... جایی که با تعامل فنی و سازنده، بهترین راهکارها انتخاب می شوند.
family

سیسوگ فروم | محلی برای پاسخ پرسش‌های شما

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

دیدگاه ها

profile
Ali Nickeghbal گفت :
۱۳۹۸-۱۲-۱۳ ۱۳:۵۳

مشکلی که من در اینجا دارم این است که vhdl یک زبان توصیف سخت افزار است و وقتی بخواهیم کدی را توصیف کنیم مثلا کد زیر باید نگاه مان یک نگاه سخت افزاری باشد نه برنامه نویسی. برای مثال اگر بخواهیم کد زیر را به صورت سخت افزاری تحلیل کنیم موقعی که Clock Enable ( سیگنال Enable در کد زیر ) برابر با 0 می شود قاعدتا نباید تغییرات set یا reset در خروجی FF اثر گذار باشد اما اگر نگاه مان به کد زیر یک نگاه برنامه نویسی باشد موقعی که Enable برابر با 0 می شود تغییرات set یا reset روی خروجی اثر می گذارد. نکته ای که برای من در اینجا نامفهوم این است که موقعی که کد زیر را شبیه سازی می کنیم ( با برنامه modelsim ) لحظه ای که Enable برابر با 0 می شود تغییرات set یا reset روی خروجی اثر می گذارد در صورتیکه نباید اینگونه باشد ؟؟

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity FLIP_FLAP is
Port (
ClOCK : in STD_LOGIC;
Reset : in STD_LOGIC;
SET : in STD_LOGIC;
B : in std_logic;
G1 : in std_logic;
En : in std_logic;
A : out std_logic
);
end FLIP_FLAP;

architecture Behavioral of FLIP_FLAP is
signal Enable : STD_LOGIC;
begin
Enable <= G1 AND En ;
process(CLOCK)
begin
if rising_edge(ClOCK) then
if (SET = '1') then
A <= '1';
elsif(RESET = '1') then
A <= '0';
elsif (Enable = '1') then
A <= B;
end if;
end if;
end process;
end Behavioral;

قسمتی از تست بنچ :

wait for 100 ns;
B <='1';
RESET <='0';
SET <='0';
En <='0';
G1 <='1';
wait for 20 ns;
B <='1';
RESET <='1';
SET <='1';
En <='1';
G1 <='1';
wait for 20 ns;
B <='0';
RESET <='1';
SET <='1';
En <='1';
G1 <='1';
wait for 20 ns;
B <='0';
RESET <='0';
SET <='1';
En <='1';
G1 <='1';
wait for 20 ns;
B <='1';
RESET <='0';
SET <='0';
En <='1';
G1 <='1';
wait for 20 ns;
B <='0';
RESET <='0';
SET <='0';
En <='1';
G1 <='1';
wait for 20 ns;
B <='0';
RESET <='0';
SET <='1';
En <='0';
G1 <='1';
wait for 20 ns;
B <='1';
RESET <='1';
SET <='0';
En <='0';
G1 <='1';
wait for 20 ns;
B <='0';
RESET <='0';
SET <='1';
En <='0';
G1 <='1';

profile
Phoenix گفت :
۱۳۹۸-۱۲-۱۴ ۰۹:۲۳

دوست عزیز من مشکل شما را بررسی کردم. کدی که شما نوشته بودید اشتباه بود و در واقع Enable آن کلاک مدار را قطع و وصل نمی‌کرد.

شما با این پیش فرض که کدتان درست است یک سری نتایج درست را استنتاج می‌کردید. خب به هر حال …

کد درست به شکل زیر است و من این کد را در isim تست کردم و همان تحلیل‌هایی که مدنظر است را مشاهده کردم:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity FLIP_FLAP is
Port (
ClOCK : in STD_LOGIC;
Reset : in STD_LOGIC;
SET : in STD_LOGIC;
B : in std_logic;
G1 : in std_logic;
En : in std_logic;
A : out std_logic
);
end FLIP_FLAP;

architecture Behavioral of FLIP_FLAP is
signal Enable : STD_LOGIC;
begin
Enable <= G1 AND En ; process(CLOCK) begin if rising_edge(ClOCK) thenif (Enable = '1') then A <= B;if (SET = '1') then A <= '1'; elsif(RESET = '1') then A ClOCK,
Reset => Reset,
SET => SET,
B => B,
G1 => G1,
En => En,
A => A
);

— 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 hereReset <= '1'; SET <= '0'; B <= '1'; G1 <= '1'; En <= '1';wait; end process;END;شما می‌توانید ورودی‌هایی که من نوشتم را تغییر بدهید و ورودی‌های متفاوتی اعمال کنید و نتایج را ببینید.

profile
Ali Nickeghbal گفت :
۱۳۹۸-۱۲-۰۹ ۱۲:۳۵

با سلام . در عمل بین سه پین ورودی فلیپ فلاپ یعنی reset, set و clock enable اولویت به ترتیب با کدام یک از آنهاست ؟

profile
Phoenix گفت :
۱۳۹۸-۱۲-۱۰ ۱۰:۳۱

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

profile
Ali Nickeghbal گفت :
۱۳۹۸-۱۲-۱۰ ۱۱:۵۵

با عرض سلام . ببخشید سوالم را بد مطرح کردم و این سوالی که پرسیدم فراتر از بحث این جلسه است . فرض کنیم فلیپ فلاپی که توصیف می کنیم دارای CLOCK ENABLE است . اگر کلاک اینیبل غیر فعال باشد( یعنی 0 باشد) انتظار داریم سیگنال کلاک به فلیپ فلاپ اعمال نشود حال اگر در این زمان پایه reset هم برابر با 1 شود آیا با وجود اینکه کلاکی به فلیپ فلاپمان اعمال نمی شود باید خروجیمان هم 0 شود؟؟ ( انتظار داریم موقعی که clock enable برابر با 0 شود به فلیپ فلاپ کلاکی اعمال نشود در نتیجه شرط (if rising_edge(clock هم برقرار نباشد .اما هنگام شبیه سازی کد مثلا با modelsim موقعی که clock enable =0 می شود به طبع نباید کلاکی هم به FF اعمال شود یا یکجورایی فلیپ فلاپمان خاموش است اما موقعی که یکی از پایه های SET یا RESET فعال بشود خروجی فلیپ فلاپ هم تغییر می کند. در صورتیکه نباید همچین اتفاقی بیافتد )

profile
محسن گفت :
۱۳۹۹-۰۱-۰۲ ۰۲:۳۲

سلام بر شما
اجازه بدید یک توضیح دقیق در مورد set و reset در فلیپ ها به شما بدهم.
فلیپ فلاپ ها در FPGA در حالت کلی دو ورودی set و reset دارند که فقط یکی از آنها می تونه استفاده بشه. اگر شما تمایل داشته باشید مثل کدی که نوشتید هم set و reset تو مدارتون داشته باشید عملا از دو فلیپ فلاپ پشت سرهم استفاده میشه.
اولویت اجرا هم به این صورت هست که
۱- ریست
۲- ست
۳- کلاک اینیبل

پیشنهاد ویژه من به شما اینکه سند شماره wp275 رو مطالعه کنید. خیلی ساده این موضوع را به شما توضیح داده. از لینک زیر می تونید برای دانلودش استفاده کنید.
https://www.xilinx.com/support/documentation/white_papers/wp275.pdf

profile
Phoenix گفت :
۱۳۹۹-۰۱-۰۲ ۲۲:۲۹

درود بر آقا محسن دوست نازنیم. تشکر می‌کنم بابت اینکه دانش بسیار تخصصی‌تان را در اختیار ما و سایر خوانندگان سیسوگ قرار می‌دهید.

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

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

profile
Phoenix گفت :
۱۳۹۸-۱۲-۱۰ ۱۲:۴۷

سلام نازنینم. خب الان دو تا سوال ایجاد می‌شه:

سوال اول اینکه آیا ریست شما سنکرون می‌باشد؟ اگر ریست شما سنکرون باشد، منطقا با قطع کلاک هر تغییری بر روی ریست عملا بی تاثیر است.

سوال دوم اینکه آیا ریست شما آسنکرون می‌باشد؟ اما اگر ریست شما آسنکرون باشد، بدون توجه به اینکه کلاک فعال باشد یا غیر فعال، هر نغییری بر روی ریست، به مدار اعمال خواهد شد.

profile
Ali Nickeghbal گفت :
۱۳۹۸-۱۲-۱۲ ۱۷:۱۴

پس در این کد اگر سیگنال Enable ( همان کلاک اینیبل ) برابر با 0 شود آیا تغییرات Reset یا SET روی خروجی فلیپ فلاپ باید اثر داشته باشد یا نه ؟؟

profile
MORPHO110 گفت :
۱۳۹۸-۱۲-۰۸ ۱۹:۳۶

با سلام . اگر بخواهیم علاوه بر پایه های set و reset از پایه clock enable هم استفاده کنیم کدمان را باید به چه نحوی بنویسیم ؟؟

profile
Phoenix گفت :
۱۳۹۸-۱۲-۱۰ ۱۰:۲۸

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

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

روی لینک زیر کلیک کنید:

https://hexalinx.com/

profile
Mehr4b گفت :
۱۳۹۸-۰۶-۳۱ ۰۰:۰۷

سلام و عرض ادب. از جنابعالی بابت آموزش های کامل و ارزشمندتان کمال تشکر را دارم. استاد در مورد GSR نیاز به مثال نبود ؟ حقیقتش درست درک نکردیم چی شد آخرش!

profile
محسن گفت :
۱۳۹۹-۰۱-۰۲ ۰۲:۴۳

سلام خدمت شما دوست عزیز
توضیحی که در مورد GSR داده شده کاملاً کافی است. اصلاً نیازی نیست زیاد روی این بلوک تمرکز کنید. فقط کافیه بدونید بلافاصله بعد از پیکره بندی یا برنامه ریزی FPGA کل سیستم به صورت یکباره ریست میشه و اصطلاحاR یک ریست سرتاسری به مدار شما اعمال میشه.

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

حالا فرض کنیم وسط کار تصمیم دارید دقیقاً همه این شرایط رو از نو ایجاد کنید. و یکجوری سیستم رو ریست کنید که همه چیز به حالت اول روشن شدن سیستم برگرده. حالا دوتا راه دارید.
۱- یک سیگنال ریست یا ست سرتاسری تعریف کنید و تو همه پروسس ها ازش برای مقدار دهی مجدد به سیگنال ها استفاده کنید. که در این صورت فاتحه مدار خونده میشه و عملا fanout سیگنال ریست سر به آسمون میزاره.
۲- از بلوک GSR استفاده کنید و یک گلوبال ریست یا ریست سرتاسری به مدار اعمال کنید.

امیدورام این توضیحات تکمیلی کمکتون بکنه.

profile
Phoenix گفت :
۱۳۹۹-۰۱-۰۵ ۱۴:۰۵

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

وسط کار هم چندین راه وجود داره بهتر اینه که به هر صورت کنترل ما بیشتر باشه رو این موضوع و سنکرون بودن ریست بسیار بهتر از آسنکرون بودنشه.

دو مورد آخر را خواستم خودم بیشتر باز کنم و توضیح بدم ولی خب حالا که خودتون اشاره کردید و یحتمل باهاش برخورد هم داشتید ترجیح میدم شما توضیح بدید.

اگه لازم میدونید یک تکه کد هم برا به کارگیریشون هم بنویسید و دست آخر یکی از آن‌ها را به عنوان کد پیشنهادی انتخاب کنید.

profile
Phoenix گفت :
۱۳۹۸-۰۶-۳۱ ۱۲:۴۹

سلام سروش نازنین. خوشحالم از اینکه این آموزش توانسته تا این حد برای شما مفید بوده باشه. همانطور که می‌دانید مبحث FPGA بسیار تخصصی می‌باشد و به دنبال آن تولید محتوا نیز برای آن بسیار سخت و زمان‌بر است و من هم متاسفانه به دلیل ضیق وقت نتوانستم مثالش را براتون ارائه بدم.

صبور باشید در قسمتی سعی خواهم کرد به این موضوع بپردازم.

profile
َAmir گفت :
۱۳۹۸-۰۶-۲۸ ۱۶:۵۴

سلام
مثل همیشه مطلب مفیدی بود.
متشکریم

profile
Phoenix گفت :
۱۳۹۸-۰۶-۳۰ ۰۸:۴۳

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

become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله