亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        一種自動識別信息并計算ECC值的DDR后門訪問驗證方法

        2021-07-09 08:15:46周文強雷淑嵐孫維東
        電子與封裝 2021年6期
        關(guān)鍵詞:方法

        周文強,雷淑嵐,孫維東

        (中科芯集成電路有限公司,江蘇無錫 214072)

        1 引言

        目前,在服務(wù)器、嵌入式片上系統(tǒng)(SoC)芯片中,雙倍速率內(nèi)存(DDR)得到了廣泛應(yīng)用,其標準協(xié)議也已經(jīng)發(fā)展到了現(xiàn)在的DDR5[1-2]。DDR系統(tǒng)包含DDR控制器、端口物理層(PHY)、DDR同步動態(tài)隨機存取內(nèi)存(SDRAM)3部分[3-4],具有大容量、高速低功耗、低電壓、良好的散熱性等特點[5-6]。因此,在SoC系統(tǒng)芯片中DDR系統(tǒng)起著至關(guān)重要的作用。在開啟錯誤檢查與糾正(ECC)功能的DDR系統(tǒng)里,總線上其他各個IP核在讀寫DDR之前,通常需要DDR控制器對DDR SDRAM初始化數(shù)據(jù),即需要預(yù)先寫入帶有ECC數(shù)值的初始數(shù)據(jù)[7],否則DDR SDRAM中的數(shù)據(jù)是隨機值,其ECC數(shù)值是錯誤的(仿真時是x態(tài)),當(dāng)寫入數(shù)據(jù)寬度小于DDR memory總寬度時,DDR控制器會做讀-改-寫(RMW)操作[7],先從DDR memory中讀取數(shù)據(jù),然后與新寫入的數(shù)據(jù)合并,接著通過控制器內(nèi)的ECC算法計算出該數(shù)據(jù)的ECC值,最后寫入DDR memory。如果不預(yù)先初始化數(shù)據(jù),在讀取數(shù)據(jù)的階段,由于DDR memory中初始數(shù)據(jù)和ECC均為隨機值,當(dāng)被讀進DDR控制器后,ECC校驗時出現(xiàn)2 bit以上錯誤,實際應(yīng)用中會使系統(tǒng)不能正常工作,而仿真時則由于出現(xiàn)x態(tài)等情況造成仿真進入死循環(huán)。而在不支持ECC功能的DDR系統(tǒng)中,則不需要初始化數(shù)據(jù),只要先寫后讀即可。

        當(dāng)開啟ECC功能后,在仿真驗證時通常的辦法是通過DDR控制器里的ECC算法計算出對應(yīng)數(shù)據(jù)的ECC值,然后將ECC值連同數(shù)據(jù)一起寫到DDR SDRAM中,這是常用的前門訪問方式。前門訪問方式需要通過控制器發(fā)出指令,經(jīng)過DDR PHY,最后變成DDR SDRAM指令,才能將帶有ECC值的數(shù)據(jù)寫入DDR SDRAM,對其進行初始化數(shù)據(jù)操作[7],這消耗了大量的仿真時間。本文針對這個問題,提出了一種自動識別信息并自動計算ECC數(shù)值且靈活可配置的后門訪問方法。該方法通過System Verilog語言建立了處理文件,實現(xiàn)了自動讀取配置文件和數(shù)據(jù)文件的功能,并采用System Verilog語言模擬了與DDR控制器內(nèi)功能相同的ECC算法(Verilog語言實現(xiàn)),然后處理程序根據(jù)讀取的配置信息和數(shù)據(jù)自動計算出對應(yīng)數(shù)據(jù)的ECC值,最后調(diào)用DDR SDRAM內(nèi)的task以后門訪問方式將數(shù)據(jù)連同ECC值在仿真開始時提前加載到SDRAM中。仿真結(jié)果表明,在初始化SDRAM初始數(shù)據(jù)階段幾乎不需要仿真時間,因而極大地縮短了仿真時間,同時又能達到驗證各IP核讀寫DDR的目的。

        2 SoC系統(tǒng)和DDR子系統(tǒng)結(jié)構(gòu)

        常用的SoC系統(tǒng)結(jié)構(gòu)包含中央處理器(CPU)、高速外設(shè)、低速外設(shè)、總線、DDR子系統(tǒng)等,如圖1所示。其中DDR memory由多個SDRAM顆粒[8-9]構(gòu)成。CPU發(fā)送/接受數(shù)據(jù)需要經(jīng)過先進可擴展接口(AXI)總線,然后經(jīng)過DDR控制器的AXI端口處理后,數(shù)據(jù)由DDR控制器控制,接著通過DDR PHY接口,傳輸?shù)紻DR memory或從DDR memory中讀取數(shù)據(jù)。

        圖1 常用SoC系統(tǒng)芯片結(jié)構(gòu)

        本文實驗中采用的DDR系統(tǒng)[7]如圖2所示,該系統(tǒng)包括DDR控制器、DFI標準接口[10]、PHY、DDR SDRAM顆粒,并支持ECC功能。DDR memory由9個DDR3[11]SDRAM顆粒構(gòu)成,每個SDRAM顆粒數(shù)據(jù)寬度為8 bit,因此數(shù)據(jù)總寬度為72 bit,即64 bit數(shù)據(jù)加8 bit ECC值。

        圖2 DDR子系統(tǒng)結(jié)構(gòu)[7]

        在AXI總線[12]上其他IP核讀寫DDR之前,必須先對DDR控制器、DDR PHY、SDRAM進行初始化,當(dāng)開啟ECC功能后,在初始化階段需要預(yù)先向SDRAM寫入帶有ECC值的初始數(shù)據(jù)。如果不初始化數(shù)據(jù),則在寫入數(shù)據(jù)寬度(如32 bit)小于DDR memory總寬度(如64 bit)的情況下,DDR控制器會做RMW操作,即先從DDR memory中讀取數(shù)據(jù),然后與新寫入的數(shù)據(jù)合并(如合并成64 bit),接著通過控制器內(nèi)的ECC算法計算出合并數(shù)據(jù)的ECC值,最后將合并數(shù)據(jù)及ECC值寫入DDR memory,在RMW的讀取階段,由于DDR memory中初始時數(shù)據(jù)為隨機值,對應(yīng)的ECC值也是隨機值,這些值被讀進DDR控制器后,ECC校驗時出現(xiàn)2 bit以上錯誤,實際應(yīng)用中會使系統(tǒng)不能正常工作,而仿真時則由于出現(xiàn)x態(tài)等情況造成仿真進入死循環(huán)。但是對于不支持ECC功能的DDR子系統(tǒng),則不需要預(yù)先寫入初始數(shù)據(jù),只要先寫后讀即可。

        3 本文提出的后門驗證方法

        本文提出的方法需要建立多個數(shù)據(jù)文件(load X.dat,X=0,1,2,...)、一個配置文件load.info、一個仿真處理文件ddr_load.sv,用于實現(xiàn)數(shù)據(jù)處理及ECC計算等功能。

        3.1 數(shù)據(jù)文件load X.dat

        建立的數(shù)據(jù)文件load X.dat(X=0,1,2,...),格式如下(十六進制):

        該文件中的數(shù)據(jù)就是需要通過后門方式加載到DDR memory中的數(shù)據(jù),ECC數(shù)值不用手動計算,在處理文件ddr_load.sv中采用System Verilog語言模擬了與控制器功能相同的ECC算法(Verilog語言),當(dāng)加載數(shù)據(jù)時算法自動計算對應(yīng)數(shù)據(jù)的EC字節(jié)數(shù)值,最后將數(shù)據(jù)連同ECC數(shù)值一起加載到DDR memory。數(shù)據(jù)文件的產(chǎn)生方式有2種:1)可以通過編寫腳本,運行后自動產(chǎn)生上述格式的隨機數(shù)據(jù)或特定數(shù)據(jù)到load X.dat數(shù)據(jù)文件中,同時產(chǎn)生配置文件load.info;2)手動建立load X.dat數(shù)據(jù)文件和load.info配置文件。

        本文實驗中用到的是一個load0.dat數(shù)據(jù)文件,如表1所示。

        表1 load0.dat中的數(shù)據(jù)(十六進制)

        3.2 配置文件load.info

        驗證中經(jīng)常有激勵需要訪問多個不同的DDR memory地址段,為提高驗證靈活性,本文提出的方法允許配置多個數(shù)據(jù)文件(load X.dat,X=0,1,2,...),在配置文件load.info中可配置多個數(shù)據(jù)文件的信息。配置文件load.info的配置格式為:

        load_file_no為數(shù)據(jù)文件的編號,從0開始編號,第一個文件編號為0(load0.dat),第二個編號為1(load1.dat),依此類推。load_addr為加載的起始地址。load_len為加載的數(shù)據(jù)長度,以8 bit十六進制數(shù)據(jù)為一組數(shù)據(jù),在數(shù)據(jù)文件load X.dat總的組數(shù)即為數(shù)據(jù)長度(等同于數(shù)據(jù)文件load X.dat中的總行數(shù))。

        驗證中,根據(jù)實際需求,可以靈活配置該文件。本文實驗中用到的配置信息為:

        3.3 仿真處理文件

        通過System Verilog語言編寫一個ddr_load.sv處理文件,用于初始時以后門方式訪問DDR SDRAM。在該文件中實現(xiàn)自動提取load.info配置文件信息和讀取數(shù)據(jù)文件load X.dat的功能;同時模擬了設(shè)計中的ECC算法,以便在讀取數(shù)據(jù)文件load X.dat后自動計算出對應(yīng)數(shù)據(jù)的ECC數(shù)值。步驟如下。

        第1步,自動提取配置文件load.info信息。處理流程如圖3所示。

        圖3 自動提取配置文件load.info信息

        第2步,自動提取數(shù)據(jù)文件load X.dat信息。部分示例代碼如下。

        根據(jù)上述代碼規(guī)則,表1的數(shù)據(jù)被暫存到變量load_data中,其格式如圖4所示。

        圖4中的DDR memory由9個DDR3 SDRAM顆粒拼接而成,每個SDRAM數(shù)據(jù)寬度為8 bit,因此總寬度為72 bit(64 bit數(shù)據(jù)加8 bit ECC值),按照圖4的數(shù)據(jù)格式,每一行正好為64 bit數(shù)據(jù),其中顆粒8的1 Byte數(shù)據(jù)為每一行64 bit數(shù)據(jù)對應(yīng)的ECC數(shù)值,這1 Byte數(shù)據(jù)不需要預(yù)先計算,而是由處理文件中的ECC算法根據(jù)64 bit數(shù)據(jù)自動計算得到,最后將64 bit數(shù)據(jù)連同8 bit ECC數(shù)值一起加載到DDR memory中。

        第3步,在處理文件中采用System Verilog語言模擬和DDR控制器相同的ECC算法,根據(jù)提取的數(shù)據(jù),自動計算出對應(yīng)64 bit數(shù)據(jù)的ECC數(shù)值。部分實例代碼如下:

        第4步,調(diào)用DDR SDRAM的memory_write()task,將每個64 bit數(shù)據(jù)及8 bit ECC數(shù)值一起以后門方式預(yù)先加載到DDR SDRAM顆粒中,如圖5所示。

        圖5 通過后門方式自動加載數(shù)據(jù)和ECC數(shù)值

        4 仿真驗證

        采用C語言編寫一個仿真激勵,該激勵中CPU對DDR3 memory的一小段地址范圍讀寫10次,先寫后讀,讀寫地址范圍為0x10000000~0x10000024,讀寫地址依次遞增(0x1000_0000+4i,i=0,1,2,...,9)。每次讀寫數(shù)據(jù)位寬為32 bit(0x12345678×i,i=0,1,2,...,9)。本文采用的仿真工具是Synopsys VCS。為了對比結(jié)果,在同一臺服務(wù)器上,采用相同的激勵在DDR系統(tǒng)開啟ECC功能的條件下,針對以下3種情況,即對DDR3 memory未初始化數(shù)據(jù)、通過前門訪問初始化數(shù)據(jù)、通過本文提出的可靈活配置、自動提取信息并計算ECC值的后門訪問方法初始化數(shù)據(jù)及ECC值分別進行仿真。

        4.1 未初始化數(shù)據(jù)時的仿真結(jié)果

        當(dāng)DDR系統(tǒng)開啟ECC功能后,未對DDR3 memory進行初始化數(shù)據(jù)的仿真結(jié)果如圖6和圖7所示。圖6中根據(jù)ddr_we_n信號可知,在寫操作之前進行了RWM,控制器先讀取了DDR中的數(shù)據(jù),因為未初始化數(shù)據(jù),所以為x態(tài),相應(yīng)DFI接口上讀到的數(shù)據(jù)也為x態(tài),最后數(shù)據(jù)被讀進控制器進行RMW的修改和寫操作。

        圖6 RMW時DDR3 memory中讀階段

        圖7中l(wèi)ane_in為DDR控制器內(nèi)ECC算法模塊的輸入數(shù)據(jù),該數(shù)據(jù)為RMW操作中modify后,與寫入的32 bit數(shù)據(jù)合并后的64 bit數(shù)據(jù),第一次寫入的32 bit數(shù)據(jù)是0x00000000。由于讀過來的數(shù)據(jù)是未初始化的x態(tài),因此經(jīng)ECC算法模塊計算后ecc_parity全是x態(tài),出現(xiàn)嚴重錯誤,這使得仿真進入死循環(huán)。

        圖7 控制器內(nèi)ECC算法計算得到的數(shù)據(jù)

        4.2 通過前門訪問初始化數(shù)據(jù)的仿真結(jié)果

        由于讀寫數(shù)據(jù)為32 bit,小于DDR3 memory總的64 bit數(shù)據(jù)位寬,正如本文第2節(jié)中所述,由于SDRAM的初始數(shù)據(jù)和ECC都是隨機值,如圖6所示,仿真為x態(tài),進而在DDR控制器進行RMW操作時,如圖7所示,數(shù)據(jù)經(jīng)過ECC模塊校驗時出現(xiàn)嚴重錯誤,導(dǎo)致仿真進入死循環(huán)。因此,在DDR系統(tǒng)開啟ECC功能后,必須要先對DDR memory進行初始化數(shù)據(jù)并計算出ECC值,否則就會使仿真進入死循環(huán)。

        通過前門訪問初始化DDR memory數(shù)據(jù)時,需要配置DDR控制器中的寄存器,其中2個數(shù)據(jù)寄存器用于配置初始化memory的數(shù)據(jù),分別為SBRWDATA0(低32 bit)和SBRWDTA1(高32 bit),可隨意配置數(shù)據(jù),本實驗中SBRWDATA0配置了0xcccccccc,SBRWDATA1配置了0xdddddddd。初始化數(shù)據(jù)的地址范圍為0x10000000~0x10000050,初始化數(shù)據(jù)過程仿真波形如圖8所示,對這段地址的memory全部初始成0xcccccccc_dddddddd,通過前門訪問計算的ECC值為0x03。

        圖8 前門訪問初始化數(shù)據(jù)過程

        從仿真結(jié)果文件看,整體仿真時間為287449118.5 ps,服務(wù)器CPU運行時間為2039.8 s。Verilog代碼編譯時間已不計算在內(nèi)。激勵向DDR3 memory寫第1筆數(shù)據(jù)的過程如圖9所示。另外,從圖9中可以看出,激勵在仿真時第一次寫入的數(shù)據(jù)為0x00000000,寫之前先做RMW操作,從圖中可以看出,先讀取了數(shù)據(jù),由于已經(jīng)通過前門訪問初始化了數(shù)據(jù)和ECC值,這次讀的數(shù)據(jù)不再是x態(tài),而是0x03_dddddddd_cccccccc,在RMW后,寫入的數(shù)據(jù)為0x30_dddddddd_00000000,已經(jīng)是正確的數(shù)據(jù)和ECC值了,不會出現(xiàn)4.1節(jié)的問題。

        4.3 通過本文方法初始化數(shù)據(jù)的仿真結(jié)果

        文中提出的方法經(jīng)過仿真后,從仿真log上看,整體仿真時間為265926764.5 ps,服務(wù)器CPU運行時間為1729.5 s。后門訪問加載數(shù)據(jù)的時間幾乎為0。RTL編譯時間已不計算在內(nèi)。因此,對比前門訪問仿真結(jié)果,本文提出的方法在初始化極小一段地址范圍(0x1000_0000~0x1000_0050)時,在服務(wù)器CPU運行時間上縮短2039.8 s-1729.5 s=310.3 s,縮短了約15.2%。從中可知,在開啟ECC功能時,如果初始化地址范圍擴大到kB、MB甚至GB數(shù)量級時,通過后門訪問初始化數(shù)據(jù)的方法將節(jié)約數(shù)小時甚至更多的時間。

        圖10是激勵中第一次寫操作時引發(fā)RMW的讀階段和寫階段,從中可知,第一次寫入的數(shù)據(jù)為0x0000_0000,該數(shù)據(jù)和DDR中初始數(shù)據(jù)合并成了0xaabbccdd_00000000,其中0xaabbccdd為后門方式初始化后的數(shù)據(jù)。合并數(shù)據(jù)的ECC值由控制器內(nèi)ECC模塊計算,為0xff,最后一起被寫入到DDR memory。另外,該方法也沒有出現(xiàn)4.1節(jié)的問題,仿真能正常運行。

        圖10 RMW中的read操作和write操作

        4.1節(jié)至4.3節(jié)各仿真結(jié)果對比如表2所示。未進行ECC初始化,仿真不能正常運行。在通過前門訪問進行ECC初始化后仿真正常,運行時間為2039.8 s。而通過本文提出的方法,不僅能正常仿真,而且運行時間為1729.5 s,比前門訪問ECC初始化的方法縮短了約15.2%,注意這是在訪問極小一段地址范圍的情況下得出的結(jié)果,從中可知,如果訪問地址擴大到kB、MB、GB等情況,本文提出的方法能節(jié)省大量時間。

        表2 各仿真驗證方法對比結(jié)果(極小一段地址空間情況下)

        5 結(jié)論

        在DDR控制系統(tǒng)開啟ECC功能的情況下,如果訪問的數(shù)據(jù)寬度小于DDR memory的數(shù)據(jù)總寬度時,在初始化階段需要對memory數(shù)據(jù)進行ECC計算并初始化,否則系統(tǒng)不能正常工作。傳統(tǒng)的通過前門訪問初始化數(shù)據(jù)的方式會占用大量的仿真時間。而本文提出的自動識別配置信息并計算ECC值的后門訪問方法在減少仿真時間方面具有顯著優(yōu)勢,且配置靈活方便,能夠自動提取信息并采用System Verilog語言模擬ECC算法自動計算出ECC值,在仿真開始時提前將數(shù)據(jù)和ECC數(shù)值加載到DDR memory,同時又能達到相同的驗證目的。在初始化很小一段地址范圍(0x1000_0000~0x1000_0050)時,比前門訪問方式減少約15.2%的時間。從中可知,如果初始化地址范圍擴大到kB、MB、GB的數(shù)量級時,采用本文提出的方法將會省下大量的仿真時間、加快研發(fā)進度,同時又能達到相同的驗證目的。本文提出的方法適用于各類DDR系統(tǒng)(DDR2~DDR5)。

        猜你喜歡
        方法
        中醫(yī)特有的急救方法
        中老年保健(2021年9期)2021-08-24 03:52:04
        高中數(shù)學(xué)教學(xué)改革的方法
        河北畫報(2021年2期)2021-05-25 02:07:46
        化學(xué)反應(yīng)多變幻 “虛擬”方法幫大忙
        變快的方法
        兒童繪本(2020年5期)2020-04-07 17:46:30
        學(xué)習(xí)方法
        可能是方法不對
        用對方法才能瘦
        Coco薇(2016年2期)2016-03-22 02:42:52
        最有效的簡單方法
        山東青年(2016年1期)2016-02-28 14:25:23
        四大方法 教你不再“坐以待病”!
        Coco薇(2015年1期)2015-08-13 02:47:34
        賺錢方法
        91精品国产91久久久无码95| 女人被男人爽到呻吟的视频| 孕妇特级毛片ww无码内射| 日本高清一区二区三区水蜜桃| 高潮喷水无遮挡毛片视频| 亚洲人成精品久久熟女| 日本高清在线一区二区三区 | 超碰Av一区=区三区| 国产精品三级国产精品高| 久久国产精品亚洲va麻豆| 欧美乱妇高清无乱码在线观看| 中文字幕在线免费 | 亚洲夜夜性无码| 亚洲av男人的天堂在线观看| 国产一区二区三区韩国| 黄页免费人成网址大全| 亚洲人成在线播放网站| 国产乱人视频在线播放| 国产免费网站看v片元遮挡| 亚洲中文字幕高清在线视频一区 | 色欲av自慰一区二区三区| 亚洲h电影| 日韩精品一区二区亚洲专区| 精品视频一区二区三区在线观看| 亚洲欧美日韩综合久久久| 精品免费久久久久国产一区| 日韩有码在线一区二区三区合集| 国产精品精品自在线拍| y111111少妇影院无码| 日本一区二区三区的免费视频观看 | 国产成人精品a视频| 日韩欧美成人免费观看| 久草视频福利| 亚洲在线一区二区三区| 无码AV无码免费一区二区| 国产一级黄色片在线播放| 麻豆婷婷狠狠色18禁久久| 欧美成人一级视频| 久久久成人av毛片免费观看| 狂猛欧美激情性xxxx大豆行情| 日韩少妇激情一区二区|