راهنمای تخمین عملکرد Xilinx DDR2 MIG 7
نکته مهم: این پی دی اف قابل دانلود از یک سوابق پاسخ برای افزایش قابلیت استفاده و خوانایی آن ارائه شده است. لازم به ذکر است که Answer Records هستند Webمحتوای مبتنی بر محتوایی که اغلب با در دسترس قرار گرفتن اطلاعات جدید به روز می شود. به شما یادآوری می شود که از پشتیبانی فنی Xilinx بازدید کنید Webسایت و دوبارهview (جواب Xilinx 63234) برای آخرین نسخه این پاسخ.
مقدمه
به دلیل نحوه معماری حافظه های DDR2 و DDR3 و طراحی کنترلرهای سری MIG 7، عملکرد مستقیمی نیست.
این نیاز به درک پارامترهای مختلف Jedec Timeming و معماری کنترلر دارد و برای بدست آوردن تخمین ها باید شبیه سازی ها را اجرا کنید.
اصل کلی برای تعیین عملکرد یکسان است، اما این سند یک راه آسان برای به دست آوردن کارایی با استفاده از MIG ex ارائه می دهد.ampطراحی با کمک میز آزمون و محرک files اینجا پیوست شده است.
پهنای باند موثر
گذرگاه داده DRAM تنها در طول دوره های خواندن و نوشتن به پهنای باند نزدیک به اوج می رسد و سربار آن نرخ موثر داده را کاهش می دهد.
چند نفر سابقampمقادیر سربار عبارتند از:
- زمان پیش شارژ دسترسی به ردیفها در همان بانک (آدرس دسترسی در همان صفحه ردیف نیست)
- نوشتن زمان بازیابی برای تغییر از دسترسی نوشتن به خواندن
- زمان چرخش اتوبوس برای تغییر از دسترسی خواندن به نوشتن
پهنای باند موثر = حداکثر پهنای باند * کارایی
نسل طراحی MIG
برای جزئیات گام به گام در مورد MIG IP و نمونه قبلی به UG586 فصل 1 مراجعه کنیدampنسل طراحی
قبل از اجرای شبیه سازی عملکرد سری 7 MIG، موارد زیر را انجام دهید تا مطمئن شوید که محیط شبیه سازی شما خوب است. MIG ex را باز کنیدampکتابخانه های مناسب را طراحی و نقشه برداری کنید، شبیه سازی را اجرا کنید و اطمینان حاصل کنید که می توانید پیام "آزمون قبول شد" را در رونوشت مشاهده کنید.
برای نشان دادن جریان، من یک IP MIG برای xc7vx690tffg1761-2 ایجاد کردم و از ex فراخوانی کردم.ampطراحی
دو موردی که باید به آن توجه داشت بیت های آدرس حافظه و انتخاب نقشه برداری آدرس حافظه است.
برای مثالampمن MT41J128M8XX-125 را در زیر گزینه های کشویی قسمت حافظه انتخاب کرده ام.
برای قسمت حافظه انتخاب شده از شکل-1، ردیف = 14، ستون = 10 و بانک = 3، بنابراین app_addr_width = ردیف + ستون + بانک + رتبه = 28
می توانید ستون BANK_ROW_COLUMN یا ROW BANK را انتخاب کنید.
من ستون ROW BANK را ترک کرده ام که نقشه پیش فرض آدرس است.
Exampشبیه سازی طراحی با میز تست قابل سنتز
در تنظیمات شبیهسازی، QuestaSim/ModelSim Simulator را انتخاب کنید و به مکان کتابخانههای کامپایلشده بروید.
برای جزئیات در مورد اشاره به مسیر نصب ابزارهای شخص ثالث، انتخاب شبیه ساز هدف، و کامپایل و نقشه برداری کتابخانه ها، می توانید به (UG900) Vivado Design Suite User Guide Logic Simulation مراجعه کنید.
شبیه سازی را از طریق رابط کاربری گرافیکی اجرا کنید (روی Run Simulation Tab در مدیر پروژه کلیک کنید) و مطمئن شوید که پیام "تست گذرانده شده" را در رونوشت مشاهده می کنید.
شبیه سازی عملکرد تغییرات RTL
- روی تب منابع کلیک راست کنید، «افزودن یا ایجاد منابع شبیهسازی» را انتخاب کنید و به mig7_perfsim_traffic_generator.sv بروید. file و روی finish کلیک کنید تا اضافه شود.
- روی برگه منابع کلیک راست کنید، «افزودن یا ایجاد منابع شبیهسازی» را انتخاب کنید، به perfsim_stimulus.txt بروید و برای افزودن آن روی finish کلیک کنید.
- کامنت قبلی رو بنویسampنمونه سازی le_top در sim_tb_top.v file.
- خطوط RTL زیر را به sim_tb_top,v اضافه کنید
- localparam APP_ADDR_WIDTH = 28;
- localparam APP_DATA_WIDTH = 64;
- localparam APP_MASK_WIDTH = APP_DATA_WIDTH / 8;
- localparam MEM_ADDR_ORDER = "BANK_ROW_COLUMN";
- localparam BANK_WIDTH = 3;
- localparam RANK_WIDTH = 1;
- سیم [APP_ADDR_WIDTH-1:0] c0_ddr3_app_addr;
- سیم [2:0] c0_ddr3_app_cmd;
- سیم c0_ddr3_app_en;
- سیم [APP_DATA_WIDTH-1:0] c0_ddr3_app_wdf_data;
- سیم c0_ddr3_app_wdf_end;
- سیم [APP_MASK_WIDTH-1:0] c0_ddr3_app_wdf_mask;
- سیم c0_ddr3_app_wdf_wren;
- سیم [APP_DATA_WIDTH-1:0] c0_ddr3_app_rd_data;
- سیم c0_ddr3_app_rd_data_end;
- سیم c0_ddr3_app_rd_data_valid;
- سیم c0_ddr3_app_rdy;
- سیم c0_ddr3_app_wdf_rdy;
- سیم c0_data_compare_error;
- سیم ui_clk;
- سیم ui_clk_sync_rst;
- سیم app_sr_req = 0;
- سیم app_ref_req = 0;
- سیم app_zq_req =0;
- سیم c0_app_wdf_mask =0;
نمونه سازی FPGA Memory Controller
mig_7series_0_mig u_mig_7series_0_mig (
// پورت های رابط حافظه
- .ddr3_addr (ddr3_addr_fpga)،
- .ddr3_ba (ddr3_ba_fpga)،
- .ddr3_cas_n (ddr3_cas_n_fpga)،
- .ddr3_ck_n (ddr3_ck_n_fpga)،
- .ddr3_ck_p (ddr3_ck_p_fpga)،
- .ddr3_cke (ddr3_cke_fpga)،
- .ddr3_ras_n (ddr3_ras_n_fpga)،
- .ddr3_reset_n (ddr3_reset_n)،
- .ddr3_we_n (ddr3_we_n_fpga)،
- .ddr3_dq (ddr3_dq_fpga)،
- .ddr3_dqs_n (ddr3_dqs_n_fpga)،
- .ddr3_dqs_p (ddr3_dqs_p_fpga)،
- .init_calib_complete (init_calib_complete)،
- .ddr3_cs_n (ddr3_cs_n_fpga)،
- .ddr3_dm (ddr3_dm_fpga)،
- .ddr3_odt (ddr3_odt_fpga)،
// پورت های رابط برنامه
- .app_addr (c0_ddr3_app_addr)،
- .app_cmd (c0_ddr3_app_cmd)،
- .app_en (c0_ddr3_app_en)،
- .app_wdf_data (c0_ddr3_app_wdf_data)،
- .app_wdf_end (c0_ddr3_app_wdf_end)،
- .app_wdf_wren (c0_ddr3_app_wdf_wren)،
- .app_rd_data (c0_ddr3_app_rd_data)،
- .app_rd_data_end (app_rd_data_end)،
- .app_rd_data_valid (c0_ddr3_app_rd_data_valid)،
- .app_rdy (c0_ddr3_app_rdy)،
- .app_wdf_rdy (c0_ddr3_app_wdf_rdy)،
- .app_sr_req (app_sr_req)،
- .app_ref_req (app_ref_req)،
- .app_zq_req (app_zq_req)،
- .app_sr_active (app_sr_active)،
- .app_ref_ack (app_ref_ack)،
- .app_zq_ack (app_zq_ack)،
- .ui_clk (ui_clk)،
- .ui_clk_sync_rst (ui_clk_sync_rst)،
- .app_wdf_mask (c0_ddr3_app_wdf_mask)،
// پورت های ساعت سیستم
- .sys_clk_i (sys_clk_i)،
// پورت های ساعت مرجع
- .clk_ref_i (clk_ref_i)،
- .sys_rst (sys_rst)
- );
نمونه مولد ترافیک عملکرد
mig7_perfsim_traffic_generator#
(
.APP_DATA_WIDTH (APP_DATA_WIDTH)،
.COL_WIDTH (COL_WIDTH)،
.ROW_WIDTH (ROW_WIDTH)،
.RANK_WIDTH (RANK_WIDTH)،
.BANK_WIDTH (BANK_WIDTH)،
.MEM_ADDR_ORDER (MEM_ADDR_ORDER)،
.tCK (tCK)،
ADDR_WIDTH (APP_ADDR_WIDTH)
)
u_traffic_gen
(
.clk (ui_clk)،
.rst (ui_clk_sync_rst)،
.init_calib_complete (init_calib_complete)،
.cmp_error (c0_data_compare_error)،
.app_wdf_rdy (c0_ddr3_app_wdf_rdy)،
.app_rd_data_valid (c0_ddr3_app_rd_data_valid)،
.app_rd_data (c0_ddr3_app_rd_data)،
.app_rdy (c0_ddr3_app_rdy)،
.app_cmd (c0_ddr3_app_cmd)،
.app_addr (c0_ddr3_app_addr)،
.app_en (c0_ddr3_app_en)،
.app_wdf_mask (c0_ddr3_app_wdf_mask)،
.app_wdf_data (c0_ddr3_app_wdf_data)،
.app_wdf_end (c0_ddr3_app_wdf_end)،
.app_wdf_wren (c0_ddr3_app_wdf_wren)
);
- 5. APP_ADDR_WIDTH، APP_DATA_WIDTH، RANK_WIDTH و BANK_WIDTH را مطابق با انتخاب قسمت حافظه خود تغییر دهید.
مقادیر را می توان از _mig.v file. - نام نمونه مشخص شده به رنگ زرد mig_7series_0_mig میتواند بر اساس نام مؤلفه شما در طول ایجاد IP متفاوت باشد، بررسی کنید که آیا نام دیگری انتخاب کردهاید و آن را مطابق با آن تغییر دهید.
- هنگامی که IP تولید شد، آن را باز کنید _mig.v file و هرگونه تغییر در نام سیگنال LHS را بررسی کنید و آنها را تصحیح کنید.
- app_sr_req، app_ref_req و app_zq_req باید به 0 مقداردهی اولیه شوند.
- به عنوان سابقample_top.v نظر داده شده و جدید است files اضافه شده اند، احتمالاً «؟» را خواهید دید. در کنار
mig_7series_0_mig.v file تحت منابع شبیه سازی
برای نقشه برداری درست file، روی mig_7series_0_mig.v راست کلیک کنید، "Add Sources" را انتخاب کنید، مرور به
/mig_7series_0_example.srcs/sources_1/ip/mig_7series_0/mig_7series_0/user_design/rtl
و mig_7series_0_mig_sim.v را اضافه کنید file. - اگر "؟" را می بینید برای زیربنای files، تمام RTL را اضافه کنید fileدر پوشه های clocking، controller، ip_top، phy و UI.
- پس از انجام تغییرات RTL و همه موارد مورد نیاز files به منابع شبیه سازی شما اضافه می شود، سلسله مراتب باید مشابه شکل 5 باشد.
را fileعلامتهای قرمز مشخص شده به تازگی اضافه شدهاند و “?” در ماژول های مربوط به ECC انتظار می رود زیرا پیکربندی حافظه انتخابی دارای گزینه ECC غیرفعال است.
محرک File توضیحات
هر الگوی محرک 48 بیت است و قالب در شکل های 6-1 تا 6-4 توضیح داده شده است.
رمزگذاری آدرس (آدرس [35:0])
آدرس در محرک مطابق شکل 7-1 تا شکل 7-6 کدگذاری شده است. تمام فیلدهای آدرس باید در قالب هگزادسیمال وارد شوند. تمام فیلدهای آدرس دارای عرضی هستند که بر چهار تقسیم می شوند تا در قالب هگزادسیمال وارد شوند. میز تست فقط بیت های مورد نیاز یک فیلد آدرس را به کنترل کننده حافظه ارسال می کند.
برای مثالample، در یک پیکربندی هشت بانکی، فقط بیتهای بانکی [2:0] به کنترلکننده حافظه ارسال میشوند و بیتهای باقیمانده نادیده گرفته میشوند. بیت های اضافی برای یک فیلد آدرس برای شما ارائه می شود تا آدرس را در قالب هگزادسیمال وارد کنید.
باید تأیید کنید که مقدار وارد شده مطابق با عرض یک پیکربندی معین است.
- آدرس ستون (ستون [11:0]) – آدرس ستون در محرک حداکثر تا 12 بیت ارائه می شود، اما شما باید این را بر اساس پارامتر عرض ستون تنظیم شده در طرح خود بررسی کنید.
- آدرس ردیف (ردیف[15:0]) – آدرس سطر در محرک حداکثر تا 16 بیت ارائه می شود، اما شما باید این را بر اساس پارامتر عرض ردیف تنظیم شده در طراحی خود بررسی کنید.
- آدرس بانک (بانک[3:0]) - آدرس بانک در محرک حداکثر تا چهار بیت ارائه می شود، اما شما باید این را بر اساس پارامتر پهنای بانک تنظیم شده در طراحی خود بررسی کنید.
- نشانی رتبه (رتبه [3:0]) - آدرس رتبه در محرک حداکثر به چهار بیت ارائه می شود، اما شما باید این را بر اساس پارامتر عرض رتبه تنظیم شده در طراحی خود بررسی کنید.
آدرس بر اساس پارامتر سطح بالا MEM_ADDR_ORDER مونتاژ شده و به رابط کاربری ارسال می شود.
تکرار فرمان (تکرار فرمان [7:0])
تعداد تکرار فرمان تعداد دفعاتی است که دستور مربوطه در رابط کاربری تکرار می شود. آدرس برای هر تکرار 8 افزایش می یابد. حداکثر تعداد تکرار 128 است.
میز تست مرز ستون را بررسی نمی کند و در صورت رسیدن به حداکثر حد ستون در طول افزایش، به اطراف می پیچد.
128 فرمان صفحه را پر می کند. برای هر آدرس ستونی غیر از 0، تعداد تکرار 128 به پایان می رسد که از مرز ستون عبور می کند و به ابتدای آدرس ستون می رسد.
استفاده از اتوبوس
استفاده از گذرگاه در رابط کاربری با در نظر گرفتن تعداد کل خواندن و نوشتن محاسبه می شود و از معادله زیر استفاده می شود:
- BL8 چهار چرخه ساعت حافظه دارد
- end_of_stimulus زمانی است که تمام دستورات انجام می شود.
- calib_done زمانی است که کالیبراسیون انجام می شود.
Example الگوها
این سابقampبر اساس MEM_ADDR_ORDER تنظیم شده روی BANK_ROW_COLUMN است.
الگوی خواندن تک
00_0_2_000F_00A_1 - این الگو یک خوانده شده از ستون 10، ردیف 15 و بانک دوم است.الگوی نوشتن تک
00_0_1_0040_010_0 - این الگوی یک نوشتن در ستون 32، ردیف 128، و بانک اول است.تنها به همان آدرس بنویسید و بخوانید
00_0_2_000F_00A_0 – این الگو یک نوشتن تکی در ستون دهم، ردیف پانزدهم و بانک دوم است.
00_0_2_000F_00A_1 – این الگو یک خوانده شده از ستون دهم، ردیف پانزدهم و بانک دوم است
چندین نوشتن و خواندن با یک آدرس
0A_0_0_0010_000_0 – این مربوط به 10 نوشته با آدرس شروع از 0 تا 80 است که در ستون قابل مشاهده است.
0A_0_0_0010_000_1 – این مربوط به 10 خواندن با آدرس شروع از 0 تا 80 است که در ستون قابل مشاهده است.
بسته بندی صفحه در حین نوشتن
0A_0_2_000F_3F8_0 – این مربوط به 10 نوشته با آدرس ستون پیچیده شده در ابتدای صفحه پس از یک نوشتن است.
شبیه سازی عملکرد مولد ترافیک
در این مرحله کار با MIG سابق تمام شده استampشبیه سازی طراحی این بدان معناست که راه اندازی شبیه سازی شما آماده است، شما تغییرات RTL شبیه سازی عملکرد را انجام داده اید، سلسله مراتب شبیه سازی جدید درست است و شما الگوهای محرک را درک کرده اید. شبیه سازی را یک بار دیگر با 16 نوشتن و خواندن در perfsim_stimulus.txt اجرا کنید.
همه را اجرا کنید، منتظر بمانید تا سیگنال init_calib_complete مشخص شود و میتوانید تعداد پیشنهادی نوشتن و خواندن را ببینید. سپس شبیه سازی متوقف خواهد شد.
هنگامی که از شما خواسته شد از شبیه سازی خارج شوید، No را انتخاب کنید و به پنجره رونوشت بروید که در آنجا می توانید آمار عملکرد را ببینید.
اگر انتخاب کنید "ترک شبیه سازی" آمار عملکرد به a نوشته خواهد شد file نام برد mig_band_width_output.txt واقع در sim_1/behave پوشه
Exampمسیر دایرکتوری le: -
/mig_7series_0_example_perf_sim\mig_7series_0_example.sim/sim_1/behav
ممکن است تعجب کنید که چرا این درصدtagاستفاده از گذرگاه اول 29 است. شبیه سازی را با همان تنظیمات IP اجرا کنید اما فقط محرک را تغییر دهید file به 256 می نویسد و 256 می خواند
ff_0_0_0000_000_0
ff_0_0_0000_000_1
اکنون درصد را خواهید دیدtage به عنوان 85، که نشان می دهد که DDR3 استفاده بهتر از گذرگاه را برای توالی طولانی نوشتن و خواندن پشت سر هم ارائه می دهد.
روش های کلی برای بهبود عملکرد
عوامل موثر بر کارایی را می توان به دو بخش تقسیم کرد:
- حافظه خاص
- کنترلر خاص
شکل 9 به شما نشان می دهدview از اصطلاحاتی که مخصوص حافظه هستند.
برخلاف SRAM ها و حافظه های بلوکی، عملکرد DDR2 یا DDR3 فقط حداکثر سرعت داده نیست.
این بستگی به عوامل زمان بندی زیادی دارد، از جمله:
- tRCD: تاخیر فرمان ردیف (یا تاخیر ras to cas).
- tCAS(CL): تأخیر بارق آدرس ستون.
- tRP: تاخیر پیش شارژ ردیف.
- TRAS: Row Active Time (فعال کردن برای تغییر قبلی).
- tRC: زمان چرخه ردیف tRC = tRAS + tRP
- tRAC: تاخیر دسترسی رادوم tRAC = tRCD + tCAS
- tCWL: تأخیر نوشتن Cas.
- tZQ: زمان کالیبراسیون ZQ
- tRFC: زمان چرخه بازخوانی ردیف
- tWTR: تأخیر نوشتن برای خواندن آخرین تراکنش نوشتن تا زمان فرمان خواندن.
- tWR: زمان بازیابی را بنویسید. آخرین تراکنش نوشتن به زمان پیش شارژ
زمان بندی تمام پارامترهای ذکر شده به نوع حافظه مورد استفاده و درجه سرعت قطعه حافظه بستگی دارد.
جزئیات بیشتر در مورد تعاریف و مشخصات زمانبندی را میتوانید در DDR2 DDR3 JEDEC یا در برگه اطلاعات دستگاه حافظه پیدا کنید.
کارایی عمدتا به نحوه دسترسی به حافظه بستگی دارد. الگوهای آدرس مختلف نتایج کارایی متفاوتی را ارائه می دهند.
سربار زمان بندی حافظه
- زمان فعالسازی و زمان شارژ اولیه هنگام تغییر به بانکها/ردیفهای جدید یا تغییر ردیفها در همان بانک.- بنابراین اگر تغییر ردیف را کاهش دهید، میتوانید tRCD و tRP را حذف کنید.
- ارسال مداوم دستورات نوشتن یا خواندن - حفظ زمان بندی tCCD.
- به حداقل رساندن تغییر دستور نوشتن به خواندن و خواندن به نوشتن - نوشتن زمان بازیابی برای تغییر دسترسی به خواندن، زمان چرخش اتوبوس برای تغییر از خواندن به نوشتن
- یک بازه تازه سازی مناسب تنظیم کنید.
- DDR3 SDRAM به چرخه های Refresh در یک بازه دوره ای متوسط tREFI نیاز دارد.
- حداکثر 8 فرمان Refresh اضافی را می توان از قبل صادر کرد ("کشیده شده"). این تعداد رفرش ها را کاهش نمی دهد، اما حداکثر فاصله بین دو دستور Refresh اطراف به 9 × tREFI محدود شده است.
- از همه بانک ها استفاده کنید - مکانیسم آدرس دهی مناسب ترجیح داده می شود.
- ردیف-بانک-ستون: برای تراکنشی که در یک فضای آدرس متوالی انجام می شود، هسته به طور خودکار همان ردیف را در بانک بعدی دستگاه DRAM باز می کند تا با رسیدن به انتهای ردیف موجود، تراکنش را ادامه دهد. برای برنامههایی که نیاز به انباشتن بستههای داده بزرگ در مکانهای آدرس پی در پی دارند، مناسب است.
- بانک-ردیف-ستون: هنگام عبور از مرز یک ردیف، ردیف فعلی بسته می شود و ردیف دیگری در همان کرانه باز می شود. MSB یک آدرس بانکی است که می توان از آن برای جابجایی از بانک های مختلف استفاده کرد. این برای تراکنشهای کوتاهتر و تصادفیتر به یک بلوک حافظه برای مدتی و سپس پرش به بلوک دیگر (بانک) مناسب است.
- طول انفجار
- BL 8 برای DDR3 در سری 7 پشتیبانی می شود. BC4 بازده بسیار پایینی دارد که کمتر از 50 درصد است. زیرا زمان اجرای BC4 با BL8 یکسان است. داده ها فقط در داخل کامپوننت پوشانده می شوند.
- در مواردی که نمیخواهید کامل بنویسید، ماسک داده یا نوشتن پس از خواندن را میتوان در نظر گرفت.
- یک بازه ZQ مناسب تنظیم کنید (فقط DDR3)
کنترلر هر دو دستور کالیبراسیون ZQ Short (ZQCS) و ZQ Long (ZQCL) را ارسال می کند.- استاندارد DDR3 Jedec را رعایت کنید
- کالیبراسیون ZQ در بخش 5.5 استاندارد JEDEC Spec JESD79-3 DDR3 SDRAM مورد بحث قرار گرفته است.
- کالیبراسیون ZQ در فواصل زمانی معینی در حالت پایانی قالب (ODT) کالیبره میکند تا تغییرات بین VT را در نظر بگیرد.
- منطق در bank_common.v/vhd موجود است
- پارامتر Tzqcs میزان ارسال دستور ZQ Calibration به حافظه را تعیین می کند
- t امکان غیرفعال کردن شمارنده و ارسال دستی با استفاده از app_zq_req وجود دارد، مانند ارسال دستی Refresh.
برای جزئیات به (جواب Xilinx 47924) مراجعه کنید.
سربار کنترلر
- خواندن های دوره ای - رجوع کنید به (جواب Xilinx 43344) برای جزئیات
- دوره خواندن را تغییر ندهید
- از خواندن های دوره ای در طول نوشتن صرفنظر کنید و تعداد خوانده های از دست رفته را قبل از خواندن واقعی تعیین کنید
- سفارش مجدد - مراجعه کنید (جواب Xilinx 34392) برای جزئیات
برای طراحی های رابط کاربری و AXI ترجیح داده می شود که این مورد فعال باشد.- ترتیب مجدد منطقی است که چندین دستور را به جلو می بیند و ترتیب دستورات کاربر را تغییر می دهد تا دستورات غیرحافظه پهنای باند معتبر را اشغال نکنند. عملکرد همچنین با الگوی ترافیک واقعی مرتبط است.
- بر اساس الگوی آدرس، ترتیب مجدد به حذف پیش شارژ و فعال کردن دستورات کمک می کند و باعث می شود tRCD و tRP پهنای باند داده را اشغال نکنند.
- سعی کنید تعداد ماشین های بانکی را افزایش دهید.
- بیشتر منطق کنترل کننده در ماشین های بانکی قرار دارد و آنها با بانک های DRAM مطابقت دارند
- یک ماشین بانکی معین یک بانک DRAM را در هر زمان معین مدیریت می کند.
- واگذاری ماشین های بانکی پویا است بنابراین نیازی به داشتن ماشین بانک برای هر بانک فیزیکی نیست.
- ماشینهای بانکی را میتوان پیکربندی کرد، اما این یک مبادله بین منطقه و عملکرد است.
- تعداد مجاز دستگاه های بانکی بین 2 تا 8 دستگاه است.
- به طور پیش فرض، 4 ماشین بانک از طریق پارامترهای RTL پیکربندی می شوند.
- برای تغییر ماشین های بانک، پارامتر nBANK_MACHS = 8 موجود در memc_ui_top Ex را در نظر بگیرید.ample برای 8 ماشین بانک - nBANK_MACHS = 8
اکنون از عواملی که بر عملکرد تأثیر می گذارند آگاه هستید.
یک برنامه بالادستی را در نظر بگیرید که به ازای هر بسته 512 بایت داده به شما می دهد و باید آنها را در مکان های مختلف حافظه ذخیره کنید. از آنجایی که 512 بایت داده برابر با 64 انفجار داده DDR3 است، نسخه قبلی را دوباره اجرا کنید.ampطراحی با یک محرک file حاوی 512 نوشتن، 512 خواندن و تعویض ردیف برای هر 64 نوشتن یا خواندن:
- 3f_0_0_0000_000_0
- 3f_0_0_0001_000_0
- 3f_0_0_0002_000_0
- 3f_0_0_0003_000_0
- 3f_0_0_0004_000_0
- 3f_0_0_0005_000_0
- 3f_0_0_0006_000_0
- 3f_0_0_0007_000_0
- 3f_0_0_0000_000_1
- 3f_0_0_0001_000_1
- 3f_0_0_0002_000_1
- 3f_0_0_0003_000_1
- 3f_0_0_0004_000_1
- 3f_0_0_0005_000_1
- 3f_0_0_0006_000_1
- 3f_0_0_0007_000_1
در پایان شبیه سازی خواهید دید که استفاده از اتوبوس 77 درصد است.
شکل 11: آمار عملکرد برای 512 نوشتن و 512 خواندن - تغییر ردیف برای 64 نوشتن یا خواندن.
اکنون می توانید دانش آموخته شده در بخش قبلی را برای بهبود کارایی به کار ببرید. با یک view برای استفاده از همه بانک ها به جای تغییر ردیف، الگوی آدرس را برای تغییر بانک مطابق شکل زیر تغییر دهید.
این معادل تنظیم ROW_BANK_Column در تنظیمات نگاشت آدرس حافظه در رابط کاربری گرافیکی MIG است.
- 3f_0_0_0000_000_0
- 3f_0_1_0000_000_0
- 3f_0_2_0000_000_0
- 3f_0_3_0000_000_0
- 3f_0_4_0000_000_0
- 3f_0_5_0000_000_0
- 3f_0_6_0000_000_0
- 3f_0_7_0000_000_0
- 3f_0_0_0000_000_1
- 3f_0_1_0000_000_1
- 3f_0_2_0000_000_1
- 3f_0_3_0000_000_1
- 3f_0_4_0000_000_1
- 3f_0_5_0000_000_1
- 3f_0_6_0000_000_1
- 3f_0_7_0000_000_1
در پایان شبیه سازی خواهید دید که 77 درصد استفاده قبلی از اتوبوس اکنون 87 است!
اگر همچنان به کارایی بالاتری نیاز دارید، میتوانید به اندازه بستههای بزرگ 1024 یا 2048 بایتی بروید یا بهروزرسانی دستی را در نظر بگیرید.
توجه: Xilinx دور زدن بهروزرسانی کنترلر را تشویق نمیکند، زیرا مطمئن نیستیم که آیا میتوانید زمانبندی بهروزرسانی خودکار Jedec را که بر قابلیت اطمینان دادهها تأثیر میگذارد، برآورده کنید.
از سمت کنترلر می توانید nBANk_MACH را تغییر دهید و بهبود عملکرد را مشاهده کنید.
با این حال، این ممکن است بر زمانبندی طراحی شما تأثیر بگذارد، لطفاً به آن مراجعه کنید (جواب Xilinx 36505) برای جزئیات در nBANk_MACH
core_name_mig_sim.v را باز کنید file و پارامترهای nBANK_MACHS را از 4 به 8 تغییر دهید و شبیه سازی را دوباره اجرا کنید. برای اعمال مقدار پارامتر در سخت افزار، باید core_name_mig.v را به روز کنید file.
من از همان الگوی استفاده کردم که در آن 87 درصد استفاده از اتوبوس به دست آوردیم (شکل -12).
با تنظیم nBANK_MACHS روی 8، راندمان اکنون 90٪ است.
همچنین توجه داشته باشید که کنترلکنندههای ½ و ¼ به دلیل تأخیرشان بر کارایی تأثیر منفی میگذارند.
برای مثالampاز آنجایی که ما فقط میتوانیم هر 4 چرخه CK دستور ارسال کنیم، گاهی اوقات هنگام رعایت حداقل مشخصات زمانبندی DRAM، بالشتک اضافی وجود دارد که میتواند کارایی را از نظر تئوری کاهش دهد.
کنترلکنندههای مختلف را امتحان کنید تا کنترلکنندهای را پیدا کنید که با نیاز کارایی شما مطابقت دارد.
مراجع
- Zynq-7000 AP SoC و سری 7 FPGA MIS نسخه 2.3 [UG586]
- مرکز حل Xilinx MIG http://www.xilinx.com/support/answers/34243.html
تاریخچه تجدید نظر
13/03/2015 - انتشار اولیه
بارگیری PDF: راهنمای تخمین عملکرد Xilinx DDR2 MIG 7