MIG連載-----7系列MIG介紹(2)

Spartan6 DDR佔用MCB資源(硬核資源),7系列佔用MIG資源;

1.添加IP

博文較多,此處至重點介紹其中關鍵信息;
在這裏插入圖片描述
Clock Period : 指的是IP核給DDR3的時鐘,和速度等級有關,-n,其中n越大則最高頻率越大。
PHY to Controler Clock Ratio :MIG內部datapath的時鐘與DDR3的工作時鐘之間的比例。ui_clk是MIG內部輸出給用戶端的時鐘,同輸入給datapath的時鐘,也即ui_clk :ddr3_clkp,n = 1:4
在這裏插入圖片描述
Memory Part :若用的DDR選項裏沒有,可以先點擊Creat Custom Part 進行創新建。

在這裏插入圖片描述
Input Clock Period :用戶給IP核的時鐘。
在這裏插入圖片描述
Systerm Clock :系統時鐘,進過PLL後傳輸給DDD3;單端且來自本模塊,推薦選擇No Buffer
Reference Clock :參考時鐘,用於生成往datapath(IP核裏面邏輯)裏面寫的時鐘和IP核輸出給用戶的時鐘;在Systerm Clock=200M的時候,參考時鐘可以用系統時鐘。
在這裏插入圖片描述
Global :編譯這個IP和工程
Out of context per IP :單獨編譯IP

2.IP和初始化仿真

Add source --> Creat File 在這裏插入圖片描述
添加例化MIG文件
在這裏插入圖片描述

  mig_7series_0_mig u_mig_7series_0_mig (

    // Memory interface ports
    .ddr3_addr                      (ddr3_addr),
    .ddr3_ba                        (ddr3_ba),
    .ddr3_cas_n                     (ddr3_cas_n),
    .ddr3_ck_n                      (ddr3_ck_n),
    .ddr3_ck_p                      (ddr3_ck_p),
    .ddr3_cke                       (ddr3_cke),
    .ddr3_ras_n                     (ddr3_ras_n),
    .ddr3_reset_n                   (ddr3_reset_n),
    .ddr3_we_n                      (ddr3_we_n),
    .ddr3_dq                        (ddr3_dq),
    .ddr3_dqs_n                     (ddr3_dqs_n),
    .ddr3_dqs_p                     (ddr3_dqs_p),
    .init_calib_complete            (init_calib_complete),
      
    .ddr3_cs_n                      (ddr3_cs_n),
    .ddr3_dm                        (ddr3_dm),
    .ddr3_odt                       (ddr3_odt),
    // Application interface ports
    .app_addr                       (app_addr),
    .app_cmd                        (app_cmd),  //命令控制信號
    .app_en                         (app_en),      //命令,地址使能信號
    .app_wdf_data                   (app_wdf_data),
    .app_wdf_end                    (app_wdf_end),  //寫數據的最後一個數,類似於突發指示的功能,因爲用戶接口沒有突發長度指示;每一次傳輸只能傳輸128bit的數據,可以根據app_end來判斷哪些有效。7系列以上MIG只有8突發一種形式。
    .app_wdf_wren                   (app_wdf_wren),
    .app_rd_data                    (app_rd_data),
    .app_rd_data_end                (app_rd_data_end),
    .app_rd_data_valid              (app_rd_data_valid),
    .app_rdy                        (app_rdy),  //該信號表示IP核是否準備好接受數據,當它與app_en同時有效時寫數據有效,針對於命令
    .app_wdf_rdy                    (app_wdf_rdy), //寫數據準備好信號指示,針對於數據
    .app_sr_req                     (app_sr_req),
    .app_ref_req                    (app_ref_req),  //refresh 的request,刷新的請求;一般用不上填0即可,因爲刷新MIG可以自動完成,如果人爲需要刷新,1個週期的1即可
    .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),            //ip核輸出給用戶的時鐘
    .ui_clk_sync_rst                (ui_clk_sync_rst),    //IP核輸出的同步復位
    .app_wdf_mask                   (app_wdf_mask),
    // System Clock Ports
    .sys_clk_p                       (sys_clk_p),
    .sys_clk_n                       (sys_clk_n),
    // Reference Clock Ports
    .clk_ref_p                      (clk_ref_p),
    .clk_ref_n                      (clk_ref_n),
    .sys_rst                        (sys_rst)
    );

在這裏插入圖片描述

地址映射關係

在這裏插入圖片描述
可以看到app_addr有28根地址線全部用上,cow address有10bit,row address有15bit和DDR3對應。所以第一個128bit數據傳輸完成之後嗎,下一次連續傳輸地址+8;MIG內部會自行將輸入進來的128bit的數據轉化爲8個16bit的數據寫入DDR3中,地址也是MIG內部自動走動分配的,只需要給出8個首地址即可。
在這裏插入圖片描述

寫時序圖

在這裏插入圖片描述
有地址和數據關三種寫入方式,1對應數據和命令同時給出,2對應數據先於數據給出,3對應數據在命令給出之後給出,第三種方式數據最晚不能晚於命令給出的兩個週期後給出。這樣會發現每次寫一個128bit的數據時,由於MIG的突發長度固定位8,因此對於位寬16bit的DDR3來說,第一個128bit裏面也包含了該次寫入的最後一個數據,因此app_end信號始終有效;
下面以1. app_data64 位,DDR3位寬爲8位,PHY to controller clock ratio = 4:1介紹詳細app_end的不同情況(from UG586):
在這裏插入圖片描述
這種情況下由於時鐘比例是4:1,因此每個64bit數據既是本次突發的第一個數據也是本次突發的最後一個數據,因此aa_end始終有效。
2. app_data32 位,DDR3位寬爲8位,PHY to controller clock ratio = 2:1
在這裏插入圖片描述
總線位寬爲32bit,因此在傳輸第二個32bit數據時纔會有app_end有效,注意MIG中突發長度固定位8,當DDR3位寬爲8時,每一次傳輸會傳輸M8*8(BL)=64bit數據。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章