您當前的位置:首頁 > 攝影

【數字IC驗證快速入門】43、UVM專案實踐之APB_SPI(3)APB_SPI 待測設計(DUT)簡介

作者:由 ReCclay 發表于 攝影時間:2021-11-01

「導讀」

:作者有幸在中國電子資訊領域的排頭兵院校“

「電子科技大學」

”攻讀研究生期間,接觸到前沿的

「數字IC驗證知識」

,旁聽到諸如

「華為海思」

「清華紫光」

「聯發科技」

等業界頂尖積體電路相關企業面授課程,對數字IC驗證有了一些知識積累和學習心得。為幫助想入門前端IC驗證的朋友,思忱一二後,特開此專欄,以期花最短的時間,走最少的彎路,學最多的IC驗證技術知識。

@

一、概述

二、學習目標

三、快速理解待測設計

四、功能概述

五、拓撲結構

六、APB 介面

6。1、APB 介面訊號(再次回顧)

6。2、APB 介面時序圖

七、SPI 介面

7。1、SPI 介面資訊

7。2、SPI 介面時序

八、中斷介面訊號及時序

九、暫存器

9。1、暫存器地址列表

9。2、資料傳送暫存器

9。3、共享地址的暫存器結構

9。4、控制暫存器

9。5、時鐘分頻暫存器

9。6、從裝置選擇暫存器

9。7、配置過程

十、總結

一、概述

做驗證除了之前提到的演算法、協議這些必須要理解之外,當然還需要理解要驗的DUT功能!做任何一個專案都是先要熟悉業務,然後在這個業務基礎上搭建環境。不管是SystemVerilog還是UVM,這些對於驗證來講都僅僅是搭建環境的工具或手段,而搭建環境最核心的源頭在於業務,即要驗證的DUT是要實現一個什麼樣的功能。

本節我們將對APB_SPI專案涉及到的DUT模組進行詳細的介紹。在此之前,請務必先回顧一下APB協議與SPI協議的要點,傳送門如下:

【數字IC驗證快速入門】41、UVM專案實踐之APB_SPI(1)SPI協議重點回顧,要點提煉

【數字IC驗證快速入門】42、UVM專案實踐之APB_SPI(2)APB協議重點回顧,要點提煉

二、學習目標

學會如何描述待測設計

如何簡要描述待測設計?能不能大概畫個框圖什麼的?

如何進一步描述待測設計,需要記錄那些資訊(特性、配置資訊)?

待測設計有哪些特殊之處(重點、難點)?

三、快速理解待測設計

①、基本功能(概述):Feathures

實現片間互聯通訊的介面

②、拓撲結構(空間):Architecture

主從結構

③、資料流圖(時間):Data Path

CPU配置外圍裝置,同時也會從外圍裝置讀取資訊

④、介面訊號(空間):Interface

APB、SPI

⑤、介面時序(時間):Timing

SPI中SS_n有效的時候傳輸資料,並且資料是時鐘的邊沿序列傳輸的,至於是上邊沿還是下邊沿可以通過幾個模式暫存器配置選擇。

⑥、配置資訊(空間,如暫存器):Configure

⑦、執行過程(時間,啟動 -> 正常工作):Flow

四、功能概述

【數字IC驗證快速入門】43、UVM專案實踐之APB_SPI(3)APB_SPI 待測設計(DUT)簡介

五、拓撲結構

上一小節我們也提到了APB_SPI模組的整體框架圖,如下圖所示:

【數字IC驗證快速入門】43、UVM專案實踐之APB_SPI(3)APB_SPI 待測設計(DUT)簡介

這次我們更進一步將 APB_SPI 模組內部的框架給勾勒出來,它的整體拓撲架構如下圖所示:

【數字IC驗證快速入門】43、UVM專案實踐之APB_SPI(3)APB_SPI 待測設計(DUT)簡介

SCLK是由PCLK透過配置暫存器分頻得到的!

APB Slave 模組作用:

①、介面時序轉換

APB Slave 模組第一個作用就是進行APB介面時序到SRAM介面時序(使用暫存器搭建的SRAM)的轉換。

APB

匯流排

的介面時序中地址和資料是岔開一拍的(即,當前一拍是地址,下一拍才是資料),與AHB匯流排類似,不過APB匯流排沒有流水機制。APB Slave模組中使用暫存器搭建了SRAM,用於儲存APB匯流排過來的資料,而SRAM的介面時序要求地址和資料在同一個週期!不難發現SRAM和APB的介面時序不一致,所以這個 APB Slave 模組首先會進行介面時序轉換,把APB匯流排介面時序轉換成SRAM可以使用的SRAM介面時序,轉換如下圖:

【數字IC驗證快速入門】43、UVM專案實踐之APB_SPI(3)APB_SPI 待測設計(DUT)簡介

②、暫存器讀寫(暫存器是32bit)

APB Slave模組中的暫存器行為可直接理解成SRAM行為,不過這個SRAM不是用標準單元搭建的,而是用D觸發器搭建的!

寫資料

APB 匯流排過來的32位資料,進行介面時序轉換後,會根據系統地址(0/4/8/C。。。)寫到APB Slave模組的SRAM中。

從SPI Slave讀取回來的資料要想傳送到APB匯流排,首先得進行串並轉換,然後也是得在APB Slave模組的SRAM中寄存資料(寫入到SRAM中),進行介面時序轉換後才能將資料寫入到APB匯流排!

讀資料

APB Slave模組也會根據配置資訊從SRAM中讀取資料傳送到SPI Slave。

APB Slave模組也會根據配置資訊從SRAM中讀取資料傳送到APB匯流排。

整體讀寫資料流如下圖所示:

【數字IC驗證快速入門】43、UVM專案實踐之APB_SPI(3)APB_SPI 待測設計(DUT)簡介

當然了讀資料的時候,還需要透過配置APB Slave裡面的暫存器,傳送寫命令SPI Slave,它才會返回資料,因為Slave只會被動地接收資料!

六、APB 介面

6.1、APB 介面訊號(再次回顧)

❝ 注:下述I/O方向以APB Master角度為例,如果對於DUT角度下述I/O方向則剛好相反!

【數字IC驗證快速入門】43、UVM專案實踐之APB_SPI(3)APB_SPI 待測設計(DUT)簡介

PADDR 32位位寬,地址空間是

2^{32}

,但是一般我們用不完。一般給APB外設劃分的空間大概是2K(

2^{11}

)或4K(

2^{12}

),也就是

位寬

是11位或者12即可!協議是寫了32位地址空間,但是到每個Slave外設時用不到32位這麼多的!

PWRITE:口訣-高寫低讀(1寫0讀)

PSEL為1,PENABLE為0,在協議上該時鐘週期稱為準備階段(SETUP Cycle,就是用來發地址階段);PSEL為1,PENABLE為1,在協議上該時鐘週期稱為使能階段(ENABLE Cycle,寫命令就是發寫資料,讀命令就是等待讀資料回來)。最開始的AMBA2。0及以下,就是固定的兩拍。AMBA3。0及以後,如果PREADY為低,使能階段(Enable Cycle)將保持若干個

時鐘週期

。此時,整個過程至少兩個時鐘週期。

「但是對於本設計中的暫存器來講,PREADY為常高」

,即整個階段固定兩個時鐘週期!

6.2、APB 介面時序圖

APB協議時序,詳細介紹參考:【數字IC驗證快速入門】42、UVM專案實踐之APB_SPI(2)APB協議重點回顧,要點提煉

❝ 注:預設 PREADY 為常高。

寫資料:

【數字IC驗證快速入門】43、UVM專案實踐之APB_SPI(3)APB_SPI 待測設計(DUT)簡介

讀資料:

【數字IC驗證快速入門】43、UVM專案實踐之APB_SPI(3)APB_SPI 待測設計(DUT)簡介

七、SPI 介面

7.1、SPI 介面資訊

【數字IC驗證快速入門】43、UVM專案實踐之APB_SPI(3)APB_SPI 待測設計(DUT)簡介

7.2、SPI 介面時序

SPI 介面時序詳細介紹,參考:【數字IC驗證快速入門】41、UVM專案實踐之APB_SPI(1)SPI協議重點回顧,要點提煉

【數字IC驗證快速入門】43、UVM專案實踐之APB_SPI(3)APB_SPI 待測設計(DUT)簡介

case1 的暫存器配置如下:

CTRL[LSB] = 0;

CTRL[CHAR_LEN] = 0x08;

CTRL[TX_NEG] = 1;

CTRL[RX_NEG] = 0;

case2 的暫存器配置如下:

CTRL[LSB] = 1;

CTRL[CHAR_LEN] = 0x08;

CTRL[TX_NEG] = 0;

CTRL[RX_NEG] = 1;

❝ 注:上述兩種場景的暫存器配置資訊暫時不懂的話沒關係,隨著專案的推進慢慢就知道為什麼了,這裡僅僅寫出來,大家可以自己對照上圖思考下!

八、中斷介面訊號及時序

❝ 注:中斷可以降低CPU的負擔,加快存取效率!

【數字IC驗證快速入門】43、UVM專案實踐之APB_SPI(3)APB_SPI 待測設計(DUT)簡介

常見中斷訊號時序

電平

觸發(本專案所使用)

脈衝觸發

九、暫存器

9.1、暫存器地址列表

【數字IC驗證快速入門】43、UVM專案實踐之APB_SPI(3)APB_SPI 待測設計(DUT)簡介

注意看資料接收和傳送暫存器的地址貌似是複用的,那麼怎麼區分呢?答案也很簡單,透過判斷CTRL暫存器中的讀寫標誌,如果當前是讀,那麼0/4/8/C就用資料接收暫存器;反之,如果是寫,那麼0/4/8/C就用資料傳送暫存器!

接收和傳送暫存器也可以不共享地址

❝ 注:上述暫存器類似SRAM的結構,不過這個SRAM不是Standard Cell搭的,而是用DFF來搭建的!

9.2、資料傳送暫存器

資料傳送暫存器儲存下一次傳輸將要傳送的資料

傳送資料長度受控制暫存器中CHAR_LEN(在CTRL暫存器中)域段控制

若有效長度[1~32],則TX1,TX2,TX3無效

若有效長度[33~64],則TX2,TX3無效

若有效長度[65~96],則TX3無效

若有效長度[97~128],則TX0,TX1,TX2,TX3全有效

TX0~TX3預設值:

0x0000_0000

(整個128bit預設全0)

9.3、共享地址的暫存器結構

收/發暫存器的地址共享0x00、0x04、0x08、0x0C

在傳輸啟動前:寫暫存器,寫傳送資料

在傳輸完成後:讀暫存器,讀接收資料

環回結構:若前次傳輸完成後,到下次傳輸啟動前,未寫暫存器,則在下次傳輸傳送的資料為上次傳輸接收到的資料

9.4、控制暫存器

【數字IC驗證快速入門】43、UVM專案實踐之APB_SPI(3)APB_SPI 待測設計(DUT)簡介

【數字IC驗證快速入門】43、UVM專案實踐之APB_SPI(3)APB_SPI 待測設計(DUT)簡介

9.5、時鐘分頻暫存器

16bit分頻係數,可分頻範圍[1~

2^{16}

SPI 時鐘(sclk)與系統時鐘(wb_clk)的關係如下公式所示

分頻係數預設值0

f_{sclk} =  \frac{f_{wb\_clk}}{(DIVIDER+1)*2} \\

【數字IC驗證快速入門】43、UVM專案實踐之APB_SPI(3)APB_SPI 待測設計(DUT)簡介

9.6、從裝置選擇暫存器

控制暫存器AS

S域段為0,則想SS暫存器某bit寫1,則對應bit拉低(使能),想某bit寫0,則對應bit拉高(釋放)

若控制暫存器ASS域段為1,向SS暫存器的某bit寫1,當傳輸啟動後(GO_BSY使能),設計自動將對應bit拉低(使能),完成傳輸後,再自動將對應bit拉高(釋放)

SS域段預設值0

【數字IC驗證快速入門】43、UVM專案實踐之APB_SPI(3)APB_SPI 待測設計(DUT)簡介

9.7、配置過程

Case 1:ASS使能,IE不使能

①、配置時鐘分頻係數

②、配置CTRL暫存器除GO_BSY外的域段

③、配置TX0~TX3暫存器

④、配置GO_BSY為1,啟動傳輸

⑤、讀取GO_BSY,若變為0,則傳輸完成

⑥、完成傳輸後,可讀取RX0~RX3

Case 2:ASS不使能,IE不使能

①、配置

時鐘分頻係數

②、配置CTRL暫存器除GO_BSY外的域段

③、配置TX0~TX3暫存器

④、配置SS,使能相應選擇訊號

⑤、配置GO_BSY為1,啟動傳輸

⑥、讀取GO_BSY,若變為0,則傳輸完成

⑦、配置SS,釋放對應選擇訊號

⑧、完成傳輸後,可讀取RX0~RX3

Case 3:ASS使能,IE使能

①、配置時鐘分頻係數

②、配置CTRL暫存器除GO_BSY外的域段

③、配置TX0~TX3暫存器

④、配置GO_BSY為1,啟動傳輸

⑤、

中斷訊號IR

Q為高,則傳輸完成

⑥、完成傳輸後,可讀取RX0~RX3

Case 4:ASS不使能,IE使能

①、配置時鐘分頻係數

②、配置CTRL暫存器除GO_BSY外的域段

③、配置TX0~TX3暫存器

④、配置SS,使能相應選擇訊號

⑤、配置GO_BSY為1,啟動傳輸

⑥、中斷訊號IRQ為高,則傳輸完成

⑦、配置SS,釋放對應選擇訊號

⑧、完成傳輸後,可讀取RX0~RX3

十、總結

快速理解待測設計(DUT)的7個步驟

從Top結構、時序、介面這些地方下手理解即可!

知道如何簡要介紹待測設計

至少能畫出設計的框圖(Clgen、APB Slave Interface(介面轉換、暫存器處理)、並串轉換)

知道如何描述介面時序

APB和SPI時序

知道如何描述暫存器(含域段)

實現的功能點:資料長度可配、時鐘頻率可配等等

知道為什麼暫存器地址間隔為4

系統地址是8bit,暫存器是32bit,對應4個地址,故按照0/4/8/C遞增

知道該待測設計的特殊之處

收/發暫存器的地址共享、環回結構(要驗到的邊界場景)

「後記」

:因本人水平有限,不足之處在所難免,敬請各位讀者朋友批評指正。關於博主的《數字IC驗證快速入門》(

https://

blog。csdn。net/recclay/c

ategory_11009245。html

)系列文章,目前在CSDN連載更新中,歡迎訂閱!

標簽: 暫存器  APB  介面  SPI  時序