HLS for 迴圈優化其他方法

2021-10-03 11:59:53 字數 1547 閱讀 5948

當不滿足合併的時候,採用allocation,內部加上pipeline

2個單獨的for

這時可以將迴圈包裝成函式,然後用不同的資料做引數進行呼叫,在上述函式化的**的基礎上,對 loop_sequential 函式用 allocation指令優化, 裡面的引數 instances 就是指定操作哪個函式,limit=2 意思就是把 instances指定的函式複製兩份,**這樣就實現了函式的並行執行。

使用 rewind 之後,兩次 for 迴圈之間是沒有空擋的,這樣就降低了整個函式的 latency。

對於上述結果可以看出,在預設情況下,共迴圈 4 次,每次兩個週期,共 8 個週期,再加乙個進入迴圈消耗週期,共 9 個週期。

pipeline 之後,四次迴圈重疊了 3 個週期,所以減少到 6 個週期。

選中 rewind 選項後,減少了進入迴圈的時間,並且和前面的一次迴圈重疊了乙個週期,所以又減少了兩個時鐘週期,一共 4 個週期。

對於文首2個單獨的for 迴圈示例** 的兩個迴圈來說,對其中的迴圈 pipeline 選中 rewind 的話會出現警告,因為函式包含了多個迴圈,所以不能執行 rewind。

可以在 solution settings 中新增 config_compile 來達到自動新增 pipeline 的目的,其中的 pipeline_loops 選項的數字是乙個閾值,當某個迴圈的迴圈次數小於這個數字的時候就會被自動新增 pipeline。

q:是新增在哪一層?

當迴圈邊界是變數時會引發一些問題。首先 vivado hls 無法確定 loop latency 是多少,進而就無法確定函式的 latency,此時相應的 latency 會用問號作為標記。

對於這種情況有 3 種處理方式:

tripcount 指令會指定迴圈邊界的最值,這樣就把迴圈邊界確定在乙個範圍內了,在綜合報告中各項引數就會以相應的範圍來表示而不會出現問號了。tripcount 指令只會影響到綜合報告的顯示而不會影響到綜合的 rtl **的結果。

(3)使用 assert 巨集

== 從三種方法的結果比較中可以發現,採用 assert 方式時 latency 是最小的,同時相應的資源消耗也是最少的。 ==

jQuery其他方法

1.jquery拷貝物件 深拷貝 深拷貝把裡面的資料完全複製乙份給目標物件 會另開闢乙個內心空間 如果裡面有不衝突的屬性,會合併到一起。2.多庫共存 jquery使用 作為識別符號,隨著jquery的流行,其他js庫也會使用 作為識別符號,這樣一起使用會引起衝突。使jquery和其他的js庫不存在衝...

selenium 其他方法

coding utf 8 from selenium import webdriver import time from selenium.webdriver.common.keys import keys driver webdriver.chrome driver.get driver.maxi...

06 其他方法

1 isalive 執行緒是否存活 system.out.println thread.currentthread getname 存活 thread.currentthread isalive 2 setname 給執行緒起名字 myinfo mi newmyinfo thread t newth...