2015-02-11 63 views
2

我是賽靈思HLS的新手。我正在接受教程ug871-vivado-high-level-synthesis-tutorial.pdf(第77頁)。16位陣列需要5位地址(Xilinx Vivado HLS)?

的代碼是

#define N 32 

void array_io (dout_t d_o[N], din_t d_i[N])  
{ 
    //..do something 
} 

合成後,我得到了像

enter image description here

我很困惑報告如何地址端口的寬度已經自動調整大小匹配的數量必須訪問的地址(32位地址爲5位)?

請幫忙。

回答

0

從UG871看來,陣列的大小似乎是從0到16個採樣,因此您需要32個地址才能訪問所有值(參見圖69)。我想N的數量是限制在少於32(或者恰好16)的地方。這意味着Vivado知道這一限制,並只生成所需的地址位數。大多數綜合工具檢查大小的限制並優化不必要的代碼。

0

當你合成你創建的函數時,還有一些寄存器來存儲變量。這意味着您輸入的地址是您在d_o或d_in中同時寫入的數據之一。

在你的情況下,N = 32,你有32個不同的變量(在輸入和輸出)。爲了應對32個不同的變量,你需要32位不同的位組合(指向特定的一個,沒有歧義)。用5位你有2^5 = 32個不同的地址組合:的最小位數來解決你所有的數據。 例如,如果你有32 enter image description here

位的地址數是從數據的大小INDIPENDENT(即,它們可以是整數,浮點,字符,短,雙,任意精度等)