• 正文
    • 1. Pass Through
    • 2. Forward registered
    • 3. Backward registered
    • 4. Full registered
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

芯片設(shè)計時序優(yōu)化 -- register slice

4小時前
149
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

芯片設(shè)計中,經(jīng)常會遇到時序違例的問題,通常的解決方式就是插入寄存器,也就是打拍。但對于握手信號來說(例如AXI總線中的ready和valid信號),直接打拍會導(dǎo)致valid和ready不滿足正確的握手關(guān)系,從而導(dǎo)致數(shù)據(jù)漏采樣或者重復(fù)采樣。

因此,需要使用特殊的方法來對握手信號進行打拍。對AXI總線中握手信號的打拍通常稱為AXI register slice,可以降低關(guān)鍵路徑的組合邏輯延遲,提高系統(tǒng)工作頻率。register slice通常有四種模式:

Pass Through:直連,也就是不使用register slice。

Forward Registered(前向打拍) :對valid和data信號打拍。

Backward Registered(后向打拍) :對ready信號打拍。

Full Registered(雙向打拍):同時對valid,data信號和ready信號進行打拍。

1. Pass Through

不進行打拍,即不插入寄存器。

2. Forward registered

Forward指的是從數(shù)據(jù)發(fā)送方 (source) 到數(shù)據(jù)接收方 (destination) 之間的數(shù)據(jù)傳遞方向。Forward register是同時對valid信號和payload信號進行打拍。Forward打拍的電路框圖如下:

forward registered

verilog代碼示例如下,其中valid_src、data_src、ready_src這三個信號是發(fā)送端(source)使用的,而valid_dst、data_dst、ready_dst這三個信號是接收端(destination)使用的。

valid_dst用于對發(fā)送端的valid_src進行打拍(鎖存),它在ready_src為1時鎖存valid_src,ready_src為1有以下兩種情況:

valid_dst為0:此時valid_dst和data_dst寄存器沒有有效數(shù)據(jù),可以接收發(fā)送端的valid_src。

ready_dst為1:此時接收端準備好了接收數(shù)據(jù)。若valid_dst為0:表示接收方先準備好接收數(shù)據(jù),而valid_dst和data_dst寄存器沒有有效數(shù)據(jù),可以接收valid_src。若valid_dst為1:發(fā)送方和接收方都完成了一次握手,valid_dst和data_dst可以更新。

data_dst是對數(shù)據(jù)進行打拍(鎖存),條件是發(fā)送端完成握手(valid_src和ready_src均有效)。這里的數(shù)據(jù)通路沒有用于控制邏輯,因此可以不帶復(fù)位端,以節(jié)省面積。

3. Backward registered

Backward指的是接收端向發(fā)送端發(fā)送ready信號的方向。需要注意,不能只對ready信號打拍,而不對valid和data信號進行處理,這樣會導(dǎo)致數(shù)據(jù)漏采或重復(fù)采樣。

正確的方法是為發(fā)送端的valid和data信號也打拍(進行鎖存),當發(fā)送端握手成功但接收端沒有ready時,可以鎖存發(fā)送端發(fā)過來的數(shù)據(jù)。等接收端ready后,可以接收到暫存的數(shù)據(jù)。backward registered的電路框圖如下所示:

backward registered

verilog代碼示例如下:

valid_r: ?對發(fā)送端的valid_src進行鎖存,會在以下情況下置1或置0:

當接收端ready_dst為1時,置0,此時接收端可以接收數(shù)據(jù),不需要暫存。

當發(fā)送端valid_src和ready_src有效,且接收端ready_dst無效,此時需要鎖存數(shù)據(jù),將valid_r置1。

data_r:和valid_dst的邏輯類似,當滿足valid_src & ready_src & ~ready_dst時,鎖存發(fā)送端的data_src。

ready_src:通過以下邏輯控制

復(fù)位值為1,一旦發(fā)送端準備好數(shù)據(jù),即可暫存data_src。

接收端ready_dst有效時,置1。

發(fā)送端valid_src有效時,置0。

valid_dst和data_dst這兩個信號根據(jù)ready_src的值來進行賦值:

當ready_src為1時,接收端或者可以接收數(shù)據(jù),賦值為valid_src和data_src。

當ready_src為0時,此時暫存寄存器中的數(shù)據(jù)有效,因此賦值為valid_r和data_r。

4. Full registered

Full Registered是對valid/data和ready都進行時序優(yōu)化的寄存器,將Forward Registered和Backward Registered組合在一起即可得到Full Registered,電路框圖如下圖所示:

full registered

參考內(nèi)容:

Synopsys DesignWare DW_axi_rs databook

ic基礎(chǔ)|時序篇:握手協(xié)議valid和ready的時序優(yōu)化

相關(guān)推薦