默認情況下,VitisHLS會對待綜合的C函數(shù)使用ap_ctrl_hs接口,這其實是一種握手方式。在這個接口中,我們會看到ap_start、ap_idle、ap_ready和ap_done等信號(這些信號被稱為Block-level輸入/輸出信號)。其中ap_start是輸入信號,而其余三個信號是輸出信號。那么我們?nèi)绾胃鶕?jù)這些信號管理輸入數(shù)據(jù)呢?這就要理解這些信號之間的時序關系。為便于說明,我們以一個簡單的算法為例。
如下圖所示代碼片段。函數(shù)array_mult有3個形參。其中a1和a2是長度為N的一維數(shù)組,兩者對應元素相減再平方即為另一形參prod。顯然,prod也是長度為N的一維數(shù)組。
為了觀察這些Block-level信號之間的時序關系,我們在仿真時將多次調(diào)用函數(shù)array_mult。為此,在描述測試激勵時,輸入激勵以兩個二維數(shù)組形式給出,這兩個二維數(shù)組對應的每一列作為array_mult的輸入。假定這兩個二維數(shù)組是8行4列的數(shù)組,C/RTLco-sim仿真結(jié)果波形如下圖所示。
標記1為數(shù)組a2對應存儲單元的讀地址a2_address,共8個數(shù)據(jù);標記2顯示了讀書的數(shù)據(jù)數(shù)值a2_q0,可以看到兩者相差一個時鐘周期。那么什么時候a2_address可以發(fā)生變化呢?我們從標記A可以看到,在標記A左邊,ap_idle為高電平,表明該模塊處于空閑狀態(tài),標記A之后,ap_start為高電平,同時ap_idle變?yōu)榈碗娖健R坏゛p_start為高,a2_ce0即為高,表明可以開始讀取a2對應的數(shù)據(jù)。當?shù)谝粠?個數(shù)據(jù)讀取完畢,即讀取到第一幀最后一個數(shù)據(jù)時,ap_ready為由低電平變?yōu)楦唠娖角页掷m(xù)一個時鐘周期,表明第一幀輸入數(shù)據(jù)已讀取完畢,如圖中標記B。緊接著ap_start也由高電平變?yōu)榈碗娖健.數(shù)谝粠嬎阃戤叄敵鰧?個數(shù)據(jù)后,ap_done由低電平變?yōu)楦唠娖讲⒊掷m(xù)一個時鐘周期,如圖中標記C。當ap_done由高變低時,ap_idle則由低變高,表明可以再次啟動該模塊。因此,我們可以看到標記D處ap_start為高,之后a2_ce0由低變高開始讀取第二幀輸入數(shù)據(jù)。讀取到第二幀輸入數(shù)據(jù)的最后一個數(shù)據(jù)后,ap_ready由低電平變?yōu)楦唠娖健?/p>
由此我們可以得出如下結(jié)論:
ap_start受ap_idle影響,只有當ap_idle為高時,才可以啟動ap_start,將其由低電平變?yōu)楦唠娖?
ap_ready為高電平時,表明已完成一幀的輸入數(shù)據(jù)讀取任務;
ap_done為高電平時,表明已完成一幀的輸出數(shù)據(jù)寫入任務;
ap_done持續(xù)一個時鐘周期由高變低后,ap_idle會由低變高。
審核編輯:湯梓紅
-
函數(shù)
+關注
關注
3文章
4331瀏覽量
62622 -
HLS
+關注
關注
1文章
129瀏覽量
24119
原文標題:如何理解HLS Block-level輸入輸出信號之間的時序關系
文章出處:【微信號:Lauren_FPGA,微信公眾號:FPGA技術驛站】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論