ការណែនាំអំពីការអនុវត្ត Xilinx DDR2 MIG 7
ចំណាំសំខាន់៖ PDF ដែលអាចទាញយកបាននៃកំណត់ត្រាចម្លើយត្រូវបានផ្តល់ជូនដើម្បីបង្កើនលទ្ធភាពប្រើប្រាស់ និងលទ្ធភាពអានរបស់វា។ វាជាការសំខាន់ក្នុងការកត់សម្គាល់ថាកំណត់ត្រាចម្លើយគឺ Webមាតិកាដែលមានមូលដ្ឋានដែលត្រូវបានធ្វើបច្ចុប្បន្នភាពជាញឹកញាប់នៅពេលដែលព័ត៌មានថ្មីអាចរកបាន។ អ្នកត្រូវបានរំលឹកឱ្យទៅមើលផ្នែកជំនួយបច្ចេកទេស Xilinx Webគេហទំព័រនិងឡើងវិញview (Xilinx ចម្លើយ 63234) សម្រាប់កំណែចុងក្រោយបំផុតនៃចម្លើយនេះ។
សេចក្តីផ្តើម
ដោយសារតែវិធីដែលអង្គចងចាំ DDR2 និង DDR3 ត្រូវបានស្ថាបត្យកម្ម ហើយឧបករណ៍បញ្ជាស៊េរី MIG 7 ត្រូវបានរចនា ការសម្តែងមិនត្រង់ទៅមុខទេ។
វាទាមទារការយល់ដឹងអំពីប៉ារ៉ាម៉ែត្រ Jedec Timing ផ្សេងៗ និងស្ថាបត្យកម្មឧបករណ៍បញ្ជា ហើយអ្នកនឹងត្រូវដំណើរការការក្លែងធ្វើដើម្បីទទួលបានការប៉ាន់ស្មាន។
គោលការណ៍ទូទៅសម្រាប់កំណត់ការអនុវត្តគឺដូចគ្នា ប៉ុន្តែឯកសារនេះផ្តល់នូវវិធីងាយស្រួលក្នុងការទទួលបានប្រសិទ្ធភាពដោយប្រើ MIG exampការរចនា le ដោយមានជំនួយពីការលេងជាកីឡាករបម្រុង និងការជំរុញ files ត្រូវបានភ្ជាប់នៅទីនេះ។
កម្រិតបញ្ជូនដែលមានប្រសិទ្ធភាព
ឡានក្រុងទិន្នន័យ DRAM សម្រេចបាននូវកម្រិតបញ្ជូនជិតដល់កំពូលតែក្នុងអំឡុងពេលនៃការអាន និងសរសេរ ហើយតម្លៃរបស់វាបន្ថយអត្រាទិន្នន័យដែលមានប្រសិទ្ធភាព។
អតីតពីរបីamples of overhead គឺ៖
- បញ្ចូលពេលចូលប្រើជួរដេកក្នុងធនាគារដូចគ្នា (ចូលប្រើអាសយដ្ឋានមិននៅក្នុងទំព័រជួរដេកដូចគ្នា)
- សរសេរពេលវេលាសង្គ្រោះដើម្បីប្តូរពីការសរសេរទៅជាការចូលអាន
- ពេលវេលាផ្លាស់ប្តូរឡានក្រុងដើម្បីផ្លាស់ប្តូរពីការអានទៅជាការសរសេរ
Effective Bandwidth = កម្រិតបញ្ជូនខ្ពស់បំផុត * ប្រសិទ្ធភាព
ជំនាន់រចនា MIG
សូមមើល UG586 ជំពូកទី 1 សម្រាប់ព័ត៌មានលម្អិតជាជំហាន ៗ លើ MIG IP និងឧampជំនាន់រចនា។
មុនពេលដំណើរការការក្លែងធ្វើប្រតិបត្តិការស៊េរី MIG 7 សូមធ្វើដូចខាងក្រោម ដើម្បីប្រាកដថាបរិយាកាសក្លែងធ្វើរបស់អ្នកគឺល្អ។ បើក MIG example រចនា និងគូសផែនទីបណ្ណាល័យដែលសមស្រប ដំណើរការការក្លែងធ្វើ និងធានាថាអ្នកអាចមើលឃើញសារ "សាកល្បងបានឆ្លងកាត់" នៅក្នុងប្រតិចារិក។
ដើម្បីបង្ហាញពីលំហូរ ខ្ញុំបានបង្កើត MIG IP សម្រាប់ xc7vx690tffg1761-2 ហើយបានហៅអតីតampការរចនាឡេ។
រឿងពីរដែលគួរកត់សម្គាល់គឺប៊ីតអាសយដ្ឋានអង្គចងចាំ និងការជ្រើសរើសផែនទីអាសយដ្ឋានអង្គចងចាំ។
សម្រាប់អតីតampដូច្នេះ ខ្ញុំបានជ្រើសរើស MT41J128M8XX-125 នៅក្រោមជម្រើសទម្លាក់ចុះផ្នែកអង្គចងចាំ។
សម្រាប់ផ្នែកអង្គចងចាំដែលបានជ្រើសរើសពីរូបភាពទី 1 ជួរដេក = 14 ជួរឈរ = 10 និងធនាគារ = 3 ដូច្នេះ app_addr_width = ជួរដេក + ជួរឈរ + ធនាគារ + ចំណាត់ថ្នាក់ = 28
អ្នកអាចជ្រើសរើសជួរ BANK_ROW_COLUMN ឬ ROW BANK Column។
ខ្ញុំបានចាកចេញពីជួរឈរធនាគារ ROW ដែលជាការគូសផែនទីអាសយដ្ឋានលំនាំដើម។
Example design ការក្លែងធ្វើជាមួយកៅអីសាកល្បងដែលអាចសំយោគបាន។
នៅក្រោមការកំណត់ការក្លែងធ្វើ សូមជ្រើសរើស QuestaSim/ModelSim Simulator ហើយរកមើលទីតាំងបណ្ណាល័យដែលបានចងក្រង។
សម្រាប់ព័ត៌មានលម្អិតស្តីពីការចង្អុលទៅផ្លូវដំឡើងឧបករណ៍ភាគីទីបី ការជ្រើសរើសកម្មវិធីត្រាប់តាមគោលដៅ និងការចងក្រង និងផែនទីបណ្ណាល័យ អ្នកអាចយោងទៅលើ (UG900) Vivado Design Suite User Guide Logic Simulation
ដំណើរការការក្លែងធ្វើតាមរយៈ GUI (ចុចលើផ្ទាំង Run Simulation Tab នៅក្នុងកម្មវិធីគ្រប់គ្រងគម្រោង) ហើយត្រូវប្រាកដថាអ្នកឃើញសារ "test pass" នៅក្នុងប្រតិចារិក។
ការកែប្រែការអនុវត្តការក្លែងធ្វើ RTL
- ចុចកណ្ដុរស្ដាំលើផ្ទាំងប្រភព ជ្រើសរើស “បន្ថែម ឬបង្កើតប្រភពក្លែងធ្វើ” ហើយរកមើល mig7_perfsim_traffic_generator.sv file ហើយចុចបញ្ចប់ដើម្បីបន្ថែមវា។
- ចុចកណ្ដុរស្ដាំលើផ្ទាំងប្រភព ជ្រើសរើស “បន្ថែម ឬបង្កើតប្រភពក្លែងធ្វើ” រកមើល perfsim_stimulus.txt ហើយចុចបញ្ចប់ដើម្បីបន្ថែមវា។
- បញ្ចេញយោបល់លើអតីតample_top instantiation នៅក្នុង 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;
- wire app_sr_req = 0;
- wire app_ref_req = 0;
- wire app_zq_req = 0;
- លួស c0_app_wdf_mask =0;
ឧបករណ៍បញ្ជាអង្គចងចាំ FPGA ភ្លាមៗ
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 ជ្រើសរើស "បន្ថែមប្រភព" រកមើល
/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 ទាំងអស់។ files នៅក្នុង clocking, controller, ip_top, phy និង UI folders។
- នៅពេលដែលការផ្លាស់ប្តូរ 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 កម្រិតកំពូល ហើយបានផ្ញើទៅកាន់ចំណុចប្រទាក់អ្នកប្រើ
ពាក្យបញ្ជាម្តងទៀត (Command Repeat [7:0])
ចំនួនពាក្យបញ្ជាដដែលៗគឺជាចំនួនពេលវេលាដែលពាក្យបញ្ជារៀងៗខ្លួនត្រូវបានធ្វើម្តងទៀតនៅ User Interface។ អាសយដ្ឋានសម្រាប់ពាក្យដដែលៗនីមួយៗត្រូវបានបង្កើនដោយ 8 ។ ចំនួនពាក្យដដែលៗអតិបរមាគឺ 128 ។
កៅអីសាកល្បងមិនពិនិត្យមើលព្រំដែនជួរឈរទេ ហើយវារុំជុំវិញប្រសិនបើដែនកំណត់ជួរអតិបរមាត្រូវបានឈានដល់កំឡុងពេលបង្កើន។
ពាក្យបញ្ជា 128 បំពេញទំព័រ។ សម្រាប់អាសយដ្ឋានជួរឈរណាមួយក្រៅពី 0 ចំនួនពាក្យដដែលៗនៃ 128 បញ្ចប់ដោយឆ្លងកាត់ព្រំដែនជួរឈរ ហើយរុំជុំវិញទៅដើមអាសយដ្ឋានជួរឈរ។
ការប្រើប្រាស់ឡានក្រុង
ការប្រើប្រាស់ឡានក្រុងត្រូវបានគណនានៅ User Interface ដោយយកចំនួនសរុបនៃការអាន និងសរសេរមកពិចារណា ហើយសមីការខាងក្រោមត្រូវបានប្រើ៖
- BL8 ប្រើវដ្តនៃការចងចាំចំនួនបួន
- end_of_stimulus គឺជាពេលដែលពាក្យបញ្ជាទាំងអស់ត្រូវបានធ្វើរួច។
- calib_done គឺជាពេលដែលការក្រិតតាមខ្នាតរួចរាល់។
Example លំនាំ
ទាំងនេះ អតីតamples គឺផ្អែកលើ 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 – គំរូនេះគឺជាការសរសេរតែមួយទៅជួរទី 10 ជួរទី 15 និងធនាគារទីពីរ។
00_0_2_000F_00A_1 – គំរូនេះគឺជាការអានតែមួយពីជួរទី 10 ជួរទី 15 និងធនាគារទីពីរ
សរសេរ និងអានច្រើនជាមួយអាសយដ្ឋានដូចគ្នា។
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 example ការក្លែងធ្វើការរចនា។ នេះបញ្ជាក់ថាការរៀបចំការក្លែងធ្វើរបស់អ្នករួចរាល់ហើយ អ្នកបានអនុវត្តការក្លែងធ្វើការកែប្រែ RTL ឋានានុក្រមនៃការក្លែងធ្វើថ្មីគឺត្រឹមត្រូវ ហើយអ្នកបានយល់ពីលំនាំជំរុញ។ ដំណើរការការក្លែងធ្វើម្តងទៀតជាមួយនឹងការសរសេរ និងអានចំនួន 16 នៅក្នុង perfsim_stimulus.txt ។
ដំណើរការទាំងអស់ រង់ចាំរហូតដល់សញ្ញា init_calib_complete ត្រូវបានអះអាង ហើយអ្នកនឹងអាចឃើញចំនួននៃការសរសេរ និងអានដែលបានស្នើឡើង។ បន្ទាប់មកការក្លែងធ្វើនឹងឈប់។
នៅពេលអ្នកត្រូវបានជម្រុញឱ្យឈប់ប្រើការក្លែងធ្វើ សូមជ្រើសរើស No ហើយចូលទៅកាន់បង្អួចប្រតិចារឹក ដែលអ្នកនឹងអាចឃើញស្ថិតិប្រតិបត្តិការ។
ប្រសិនបើអ្នកជ្រើសរើស "បោះបង់ការក្លែងធ្វើ" ស្ថិតិប្រតិបត្តិការនឹងត្រូវបានសរសេរទៅ ក file មានឈ្មោះ mig_band_width_output.txt ដែលមានទីតាំងនៅក្នុង sim_1/behave ថតឯកសារ។
Exampផ្លូវថត៖ -
/mig_7series_0_example_perf_sim\mig_7series_0_example.sim/sim_1/behav
អ្នកប្រហែលជាឆ្ងល់ថាហេតុអ្វីបានជាភាគរយtagការប្រើប្រាស់ឡានក្រុងគឺថ្ងៃទី 29។ ដំណើរការការក្លែងធ្វើឡើងវិញជាមួយនឹងការកំណត់ IP ដូចគ្នា ប៉ុន្តែគ្រាន់តែផ្លាស់ប្តូរការជំរុញ file ដល់ ២៥៦ សរសេរ និង ២៥៦ អាន
ff_0_0_0000_000_0
ff_0_0_0000_000_1
ឥឡូវនេះអ្នកនឹងឃើញភាគរយtage as 85 ដែលបង្កប់ន័យថា DDR3 ផ្តល់នូវការប្រើប្រាស់ឡានក្រុងប្រសើរជាងមុនសម្រាប់លំដាប់វែងនៃការសរសេរ និងអានការផ្ទុះ។
វិធីទូទៅដើម្បីកែលម្អការអនុវត្ត
កត្តាដែលមានឥទ្ធិពលលើប្រសិទ្ធភាពអាចបែងចែកជាពីរផ្នែក៖
- អង្គចងចាំជាក់លាក់
- ឧបករណ៍បញ្ជាជាក់លាក់
រូបភាពទី 9 ផ្តល់ឱ្យអ្នកនូវការបញ្ចប់view នៃពាក្យដែលមានការចងចាំជាក់លាក់។
មិនដូច SRAMs និង Block Memories DDR2 ឬ DDR3 ការសម្តែងមិនមែនគ្រាន់តែជាអត្រាទិន្នន័យអតិបរមានោះទេ។
វាអាស្រ័យលើកត្តាពេលវេលាជាច្រើន រួមមានៈ
- tRCD៖ Row Command Delay (ឬ ras to cas delay)។
- tCAS(CL)៖ ភាពយឺតយ៉ាវ strobe អាសយដ្ឋានជួរឈរ។
- tRP៖ ការពន្យាពេលនៃការបញ្ចូលថ្មជាមុន។
- ត្រាស៖ Row Active Time (ធ្វើឱ្យសកម្មដើម្បីផ្លាស់ប្តូរជាមុន)។
- tRC៖ ពេលវេលានៃវដ្តជួរដេក។ tRC = tRAS + tRP
- tRAC៖ ការពន្យាពេលចូលប្រើរ៉ាឌី។ tRAC = tRCD + tCAS
- tCWL៖ Cas សរសេរ latency ។
- tZQ៖ ពេលវេលាក្រិត ZQ ។
- tRFC៖ ពេលវេលាវដ្តនៃការធ្វើឱ្យស្រស់ជួរដេក
- tWTR៖ សរសេរដើម្បីអានពន្យារពេល។ ប្រតិបត្តិការសរសេរចុងក្រោយទៅម៉ោងបញ្ជាអាន។
- tWR៖ សរសេរពេលវេលាងើបឡើងវិញ។ ប្រតិបត្តិការសរសេរចុងក្រោយទៅម៉ោងបញ្ចូលមុន។
ពេលវេលានៃប៉ារ៉ាម៉ែត្រដែលបានរាយបញ្ជីទាំងអស់គឺអាស្រ័យលើប្រភេទនៃអង្គចងចាំដែលបានប្រើ និងចំណាត់ថ្នាក់ល្បឿនផ្នែកអង្គចងចាំ។
ព័ត៌មានលម្អិតបន្ថែមអំពីនិយមន័យ និងការកំណត់ពេលវេលាអាចរកបាននៅក្នុង DDR2 DDR3 JEDEC ឬនៅក្នុងឯកសារទិន្នន័យឧបករណ៍អង្គចងចាំណាមួយ។
ប្រសិទ្ធភាពភាគច្រើនអាស្រ័យទៅលើរបៀបដែលអង្គចងចាំត្រូវបានចូលប្រើ។ គំរូអាសយដ្ឋានផ្សេងគ្នាផ្តល់លទ្ធផលប្រសិទ្ធភាពខុសៗគ្នា។
ការកំណត់ពេលវេលានៃការចងចាំ
- ពេលវេលាធ្វើឱ្យសកម្ម និងពេលវេលាបញ្ចូលទឹកប្រាក់ជាមុន នៅពេលប្តូរទៅធនាគារ/ជួរថ្មី ឬផ្លាស់ប្តូរជួរជាមួយនៅក្នុងធនាគារតែមួយ។- ដូច្នេះប្រសិនបើអ្នកកាត់បន្ថយការផ្លាស់ប្តូរជួរដេក វាអាចដក tRCD និង tRP ចេញ។
- ផ្ញើពាក្យបញ្ជាសរសេរឬអានបន្ត - ការថែរក្សាពេលវេលា tCCD ។
- កាត់បន្ថយការសរសេរដើម្បីអាន និងអានដើម្បីសរសេរការផ្លាស់ប្តូរពាក្យបញ្ជា - សរសេរពេលវេលាសង្គ្រោះដើម្បីផ្លាស់ប្តូរការចូលអាន ពេលវេលាផ្លាស់ប្តូរឡានក្រុងដើម្បីផ្លាស់ប្តូរពីការអានទៅសរសេរ
- កំណត់ចន្លោះពេលធ្វើឱ្យស្រស់ត្រឹមត្រូវ។
- DDR3 SDRAM ទាមទារវដ្តនៃការធ្វើឱ្យស្រស់នៅចន្លោះពេលជាមធ្យមនៃ tREFI ។
- អតិបរមានៃ 8 ពាក្យបញ្ជាធ្វើឱ្យស្រស់បន្ថែមអាចត្រូវបានចេញជាមុន ("ទាញចូល") ។ នេះមិនកាត់បន្ថយចំនួននៃការធ្វើឱ្យស្រស់នោះទេ ប៉ុន្តែចន្លោះពេលអតិបរមារវាងពាក្យបញ្ជាការធ្វើឱ្យស្រស់ជុំវិញពីរត្រូវបានកំណត់ត្រឹម 9 × tREFI
- ប្រើប្រាស់ធនាគារទាំងអស់ - យន្តការអាសយដ្ឋានសមស្របគឺល្អជាង។
- ជួរធនាគារ-ជួរ៖ សម្រាប់ប្រតិបត្តិការដែលកើតឡើងលើលំហអាសយដ្ឋានបន្តបន្ទាប់គ្នា ស្នូលបើកដោយស្វ័យប្រវត្តិនូវជួរដូចគ្នានៅក្នុងធនាគារបន្ទាប់នៃឧបករណ៍ DRAM ដើម្បីបន្តប្រតិបត្តិការនៅពេលចុងបញ្ចប់នៃជួរដែលមានស្រាប់ត្រូវបានឈានដល់។ វាស័ក្តិសមល្អចំពោះកម្មវិធីដែលទាមទារការបំបែកកញ្ចប់ទិន្នន័យធំទៅកាន់ទីតាំងអាសយដ្ឋានតាមលំដាប់លំដោយ។
- ជួរធនាគារ៖ នៅពេលឆ្លងកាត់ព្រំដែនជួរដេក ជួរដេកបច្ចុប្បន្ននឹងត្រូវបានបិទ ហើយជួរផ្សេងទៀតនឹងត្រូវបានបើកនៅក្នុងធនាគារដូចគ្នា។ MSB គឺជាអាសយដ្ឋានធនាគារ ដែលអាចត្រូវបានប្រើដើម្បីប្តូរពីធនាគារផ្សេងៗ។ វាស័ក្តិសមសម្រាប់ប្រតិបត្តិការចៃដន្យខ្លីជាងទៅប្លុកនៃការចងចាំមួយក្នុងរយៈពេលមួយ ហើយបន្ទាប់មកលោតទៅប្លុកផ្សេងទៀត (ធនាគារ)
- ប្រវែងផ្ទុះ
- BL 8 ត្រូវបានគាំទ្រសម្រាប់ DDR3 នៅលើ 7 ស៊េរី។ BC4 មានប្រសិទ្ធភាពទាបបំផុតដែលមានតិចជាង 50% ។ នេះគឺដោយសារតែពេលវេលាប្រតិបត្តិនៃ BC4 គឺដូចគ្នានឹង BL8 ។ ទិន្នន័យគ្រាន់តែបិទបាំងនៅខាងក្នុងសមាសធាតុប៉ុណ្ណោះ។
- ក្នុងករណីដែលអ្នកមិនចង់សរសេរពេញលេញ ទាំងរបាំងទិន្នន័យ ឬសរសេរបន្ទាប់ពីអានអាចត្រូវបានពិចារណា។
- កំណត់ចន្លោះ ZQ ត្រឹមត្រូវ (DDR3 តែប៉ុណ្ណោះ)
ឧបករណ៍បញ្ជាបញ្ជូនទាំង ZQ Short (ZQCS) និង ZQ Long (ZQCL) ពាក្យបញ្ជា Calibration ។- ប្រកាន់ខ្ជាប់នូវស្តង់ដារ DDR3 Jedec
- ការក្រិត ZQ ត្រូវបានពិភាក្សានៅក្នុងផ្នែក 5.5 នៃស្តង់ដារ JEDEC Spec JESD79-3 DDR3 SDRAM
- ZQ Calibration calibrate On Die Termination (ODT) នៅចន្លោះពេលទៀងទាត់ ដើម្បីគណនាការប្រែប្រួលនៅទូទាំង VT
- តក្កវិជ្ជាមាននៅក្នុង bank_common.v/vhd
- ប៉ារ៉ាម៉ែត្រ Tzqcs កំណត់អត្រាដែលពាក្យបញ្ជា ZQ Calibration ត្រូវបានផ្ញើទៅអង្គចងចាំ
- t គឺអាចធ្វើទៅបានដើម្បីបិទបញ្ជរ និងផ្ញើដោយដៃដោយប្រើ app_zq_req វាស្រដៀងទៅនឹងការផ្ញើការធ្វើឱ្យស្រស់ដោយដៃ។
សូមមើល (Xilinx Answer 47924) សម្រាប់ព័ត៌មានលម្អិត។
ឧបករណ៍បញ្ជាលើស
- ការអានតាមកាលកំណត់ - យោងទៅ (Xilinx ចម្លើយ 43344) សម្រាប់ព័ត៌មានលម្អិត។
- កុំផ្លាស់ប្តូររយៈពេលនៃការអាន
- រំលងការអានតាមកាលកំណត់ កំឡុងពេលសរសេរ និងចេញចំនួននៃការអានដែលខកខានមុនពេលអានពិត
- ការបញ្ជាទិញឡើងវិញ - យោង (Xilinx ចម្លើយ 34392) សម្រាប់ព័ត៌មានលម្អិត។
សម្រាប់ការរចនាចំណុចប្រទាក់អ្នកប្រើ និង AXI វាជាការប្រសើរក្នុងការបើកដំណើរការនេះ។- តម្រៀបឡើងវិញគឺជាតក្កវិជ្ជាដែលមើលទៅមុខពាក្យបញ្ជាជាច្រើន និងផ្លាស់ប្តូរលំដាប់ពាក្យបញ្ជាអ្នកប្រើប្រាស់ដើម្បីធ្វើឱ្យពាក្យបញ្ជាដែលមិនមែនជាអង្គចងចាំមិនកាន់កាប់កម្រិតបញ្ជូនត្រឹមត្រូវ។ ការសម្តែងក៏ទាក់ទងទៅនឹងគំរូចរាចរណ៍ជាក់ស្តែងផងដែរ។
- ដោយផ្អែកលើគំរូអាសយដ្ឋាន ការបញ្ជាទិញឡើងវិញជួយឱ្យរំលងការគិតថ្លៃជាមុន និងធ្វើឱ្យពាក្យបញ្ជាសកម្ម ហើយធ្វើឱ្យ tRCD និង tRP មិនកាន់កាប់ទទឹងក្រុមទិន្នន័យ។
- ព្យាយាមបង្កើនចំនួនម៉ាស៊ីនធនាគារ។
- តក្កវិជ្ជារបស់ឧបករណ៍បញ្ជាភាគច្រើនស្ថិតនៅក្នុងម៉ាស៊ីនធនាគារ ហើយពួកវាត្រូវគ្នាទៅនឹងធនាគារ DRAM
- ម៉ាស៊ីនធនាគារដែលបានផ្តល់ឱ្យគ្រប់គ្រងធនាគារ DRAM តែមួយនៅពេលណាក៏បាន។
- ការកំណត់ម៉ាស៊ីនធនាគារមានលក្ខណៈថាមវន្ត ដូច្នេះមិនចាំបាច់មានម៉ាស៊ីនធនាគារសម្រាប់ធនាគាររូបវ័ន្តនីមួយៗនោះទេ។
- ម៉ាស៊ីនធនាគារអាចត្រូវបានកំណត់រចនាសម្ព័ន្ធ ប៉ុន្តែវាជាការដោះដូររវាងតំបន់ និងការអនុវត្ត។
- ចំនួនដែលអាចអនុញ្ញាតបាននៃម៉ាស៊ីនធនាគារមានចាប់ពី 2-8 ។
- តាមលំនាំដើម ម៉ាស៊ីនធនាគារ 4 ត្រូវបានកំណត់រចនាសម្ព័ន្ធតាមរយៈប៉ារ៉ាម៉ែត្រ RTL ។
- ដើម្បីផ្លាស់ប្តូរម៉ាស៊ីនធនាគារ សូមពិចារណាប៉ារ៉ាម៉ែត្រ nBANK_MACHS = 8 ដែលមាននៅក្នុង memc_ui_top Example សម្រាប់ម៉ាស៊ីនធនាគារចំនួន 8 – nBANK_MACHS = 8
ឥឡូវនេះ អ្នកដឹងពីកត្តាដែលជះឥទ្ធិពលដល់ការអនុវត្ត។
ពិចារណាកម្មវិធីខាងលើដែលផ្តល់ឱ្យអ្នកនូវទិន្នន័យ 512 បៃក្នុងមួយកញ្ចប់ ហើយអ្នកត្រូវរក្សាទុកពួកវាទៅទីតាំងអង្គចងចាំផ្សេងៗគ្នា។ ដោយសារ 512 បៃទិន្នន័យស្មើនឹង 64 DDR3 ទិន្នន័យផ្ទុះ សូមដំណើរការអតីតample រចនាជាមួយនឹងការជំរុញមួយ។ 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 GUI។
- 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% ។
សូមចំណាំផងដែរថាឧបករណ៍បញ្ជា ½ និង ¼ ប៉ះពាល់អវិជ្ជមានដល់ប្រសិទ្ធភាពដោយសារតែភាពយឺតរបស់វា។
សម្រាប់អតីតample ដោយសារយើងអាចផ្ញើពាក្យបញ្ជារាល់ 4 CK cycles ជួនកាលវាមានទ្រនាប់បន្ថែមទៀតនៅពេលដែលប្រកាន់ខ្ជាប់នូវការកំណត់ពេលវេលា DRAM អប្បបរមា ដែលអាចបន្ថយប្រសិទ្ធភាពពីទ្រឹស្តី។
សាកល្បងឧបករណ៍បញ្ជាផ្សេងៗ ដើម្បីស្វែងរកឧបករណ៍ដែលសាកសមនឹងតម្រូវការប្រសិទ្ធភាពរបស់អ្នក។
ឯកសារយោង
- Zynq-7000 AP SoC និង 7 ស៊េរី FPGAs MIS v2.3 [UG586]
- មជ្ឈមណ្ឌលដំណោះស្រាយ Xilinx MIG http://www.xilinx.com/support/answers/34243.html
ប្រវត្តិកែប្រែ
13/03/2015 - ការចេញផ្សាយដំបូង
ទាញយកជា PDF៖ ការណែនាំអំពីការអនុវត្ត Xilinx DDR2 MIG 7