【數字IC驗證快速入門】43、UVM專案實踐之APB_SPI(3)APB_SPI 待測設計(DUT)簡介
❝
「導讀」
:作者有幸在中國電子資訊領域的排頭兵院校“
「電子科技大學」
”攻讀研究生期間,接觸到前沿的
「數字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
四、功能概述
五、拓撲結構
上一小節我們也提到了APB_SPI模組的整體框架圖,如下圖所示:
這次我們更進一步將 APB_SPI 模組內部的框架給勾勒出來,它的整體拓撲架構如下圖所示:
SCLK是由PCLK透過配置暫存器分頻得到的!
APB Slave 模組作用:
①、介面時序轉換
APB Slave 模組第一個作用就是進行APB介面時序到SRAM介面時序(使用暫存器搭建的SRAM)的轉換。
APB
匯流排
的介面時序中地址和資料是岔開一拍的(即,當前一拍是地址,下一拍才是資料),與AHB匯流排類似,不過APB匯流排沒有流水機制。APB Slave模組中使用暫存器搭建了SRAM,用於儲存APB匯流排過來的資料,而SRAM的介面時序要求地址和資料在同一個週期!不難發現SRAM和APB的介面時序不一致,所以這個 APB Slave 模組首先會進行介面時序轉換,把APB匯流排介面時序轉換成SRAM可以使用的SRAM介面時序,轉換如下圖:
②、暫存器讀寫(暫存器是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匯流排。
整體讀寫資料流如下圖所示:
當然了讀資料的時候,還需要透過配置APB Slave裡面的暫存器,傳送寫命令SPI Slave,它才會返回資料,因為Slave只會被動地接收資料!
六、APB 介面
6.1、APB 介面訊號(再次回顧)
❝ 注:下述I/O方向以APB Master角度為例,如果對於DUT角度下述I/O方向則剛好相反!
❞
PADDR 32位位寬,地址空間是
,但是一般我們用不完。一般給APB外設劃分的空間大概是2K(
)或4K(
),也就是
位寬
是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 為常高。
❞
寫資料:
讀資料:
七、SPI 介面
7.1、SPI 介面資訊
7.2、SPI 介面時序
SPI 介面時序詳細介紹,參考:【數字IC驗證快速入門】41、UVM專案實踐之APB_SPI(1)SPI協議重點回顧,要點提煉
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的負擔,加快存取效率!
❞
常見中斷訊號時序
電平
觸發(本專案所使用)
脈衝觸發
九、暫存器
9.1、暫存器地址列表
注意看資料接收和傳送暫存器的地址貌似是複用的,那麼怎麼區分呢?答案也很簡單,透過判斷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、控制暫存器
9.5、時鐘分頻暫存器
16bit分頻係數,可分頻範圍[1~
]
SPI 時鐘(sclk)與系統時鐘(wb_clk)的關係如下公式所示
分頻係數預設值0
9.6、從裝置選擇暫存器
若
控制暫存器AS
S域段為0,則想SS暫存器某bit寫1,則對應bit拉低(使能),想某bit寫0,則對應bit拉高(釋放)
若控制暫存器ASS域段為1,向SS暫存器的某bit寫1,當傳輸啟動後(GO_BSY使能),設計自動將對應bit拉低(使能),完成傳輸後,再自動將對應bit拉高(釋放)
SS域段預設值0
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連載更新中,歡迎訂閱!
❞