寫在前面
本文是本系列的第四篇,本文主要介紹FPGA常用運算模塊-除法器,xilinx提供了相關(guān)的IP以便于用戶進行開發(fā)使用。
除法器
除法器生成器IP 創(chuàng)建了一個基于基數(shù) 2 非恢復(fù)除法或具有預(yù)分頻的高基數(shù)除法的整數(shù)除法電路。 Radix-2 算法利用 FPGA 邏輯來實現(xiàn)一系列吞吐量選項,包括單周期,而高基數(shù)算法在較低吞吐量下利用 DSP 切片,但通過重用來減少資源。
該IP符合 AXI4-Stream 的接口。操作數(shù)最大為 64 位寬的整數(shù)除法。提供Radix-2、LUTMult 和High Radix 實現(xiàn)算法以允許選擇資源和延遲權(quán)衡。可選操作數(shù)寬度、同步控制和可選延遲??蛇x的除以零檢測。
三種除法器實現(xiàn)方式
LUTMult
除數(shù)倒數(shù)的簡單查找估計,后跟乘數(shù)。 由于倒數(shù)估計中需要偏差,因此僅支持余數(shù)輸出類型。 如果用于創(chuàng)建小數(shù)輸出,此偏差會引入偏移(錯誤)。 推薦用于小于或等于 12 位的操作數(shù)寬度。 此實現(xiàn)方式使用 DSP Slice、塊 RAM 和少量 FPGA 邏輯原語(寄存器和 LUT)。 對于可以使用 Radix2 或 LUTMult 選項的操作數(shù)寬度,由于使用了 DSP 和塊 RAM 原語,LUTMult 解決方案提供了使用較少 FPGA 邏輯資源的解決方案。
該實現(xiàn)方式特點如下:
提供了帶有整數(shù)余數(shù)的商;
可以使用流水線并行架構(gòu)以提高吞吐量;
可配置延遲;
2 到 17 位的分頻寬度;
2 到 12 位的除數(shù)寬度(被除數(shù)寬度和除數(shù)寬度之和限制為 23 位);
獨立的除數(shù)和除數(shù)位寬;
使用單個時鐘的完全同步設(shè)計;
支持無符號或二進制補碼有符號數(shù)。
Radix-2
使用整數(shù)操作數(shù)的基數(shù) 2 非恢復(fù)整數(shù)除法,允許生成小數(shù)或整數(shù)余數(shù)。 對于小于 16 位左右的操作數(shù)寬度或需要高吞吐量的應(yīng)用程序,建議使用該種實現(xiàn)方式。 實現(xiàn)使用 FPGA 邏輯原語(寄存器和 LUT)。Radix2 解決方案不使用 DSP 或塊 RAM 原語,因此當(dāng)其他地方需要這些原語時,建議使用此實現(xiàn)。
該實現(xiàn)方式特點如下:
提供整數(shù)或小數(shù)余數(shù)的商;
流水線并行架構(gòu)以提高吞吐量;
減少流水線大小與吞吐量可選;
被除數(shù)寬度從 2 到 64 位;
除數(shù)寬度從 2 到 64 位;
獨立的被除數(shù)、除數(shù)和小數(shù)位寬;
使用單個時鐘的同步設(shè)計;
支持無符號數(shù)或二進制補碼有符號數(shù);
可以實現(xiàn) 1/X(倒數(shù))功能。
High Radix
帶有預(yù)縮放的高基數(shù)除法。 對于大于 16 位左右的操作數(shù)寬度,建議這樣做。 此實現(xiàn)使用 DSP Slice 和 Block RAM。
該實現(xiàn)方式特點如下:
通過預(yù)縮放啟用高基數(shù)除法;
提供可選的商和小數(shù)輸出;
可配置寬度、同步控制、可選延遲和除以零檢測;
使用 DSP Slices。
Divider Generator 內(nèi)核使用三種實現(xiàn)中的一種。 LUTMult 推薦用于非常小的操作數(shù)寬度、高吞吐量以及必須最小化切片使用的情況。 對于較小的操作數(shù)寬度、高吞吐量或必須最小化 DSP 切片使用的情況,建議使用 Radix-2 解決方案。 對于較大的操作數(shù)寬度,建議使用高基數(shù)解決方案。
三種實現(xiàn)方式延遲對比
分頻器內(nèi)核的延遲是 AXI4-Stream 配置參數(shù)和所選算法延遲的函數(shù)。 當(dāng) AXI4-Stream 模式設(shè)置為非阻塞且核心算法和吞吐量設(shè)置為每個時鐘周期輸入一個樣本時,延遲僅是一個常數(shù)。 如果選擇了完整的 AXI4-Stream 行為。 這是因為 FIFO 用于管理此模式的數(shù)據(jù),并且 FIFO 的深度增加了延遲。
LUTMult
完全流水線化的 LUTMult 的延遲為 8。
Radix-2
完全流水線分頻器的延遲(內(nèi)核生成第一個有效輸出之前所需的啟用時鐘周期數(shù))是被除數(shù)位寬的函數(shù)。 如果需要小數(shù)輸出,則完全流水線延遲也是小數(shù)位寬的函數(shù)。 一般來說:
對于整數(shù)余數(shù)除法器,完全流水線延遲的數(shù)量級為 M,其中 M 是商的寬度。
對于分?jǐn)?shù)余數(shù)除法器,完全流水線延遲的數(shù)量級為 M + F,其中 F 是分?jǐn)?shù)輸出的寬度。
下表提供了用于分頻器選擇的完全流水線延遲公式的列表。 通過完整的流水線,可以實現(xiàn)最大可能的性能。 當(dāng)每格時鐘數(shù)為 1 時,可以手動將延遲設(shè)置為介于 0 和表 2-1 中所示值之間的數(shù)字。 這允許以降低內(nèi)核可以計時的最大時鐘頻率為代價來減少內(nèi)核的延遲。 減少延遲會減少使用的寄存器數(shù)量,但 LUT 計數(shù)保持大致相同。
Signed | Fractional | Clocks Per Division | Fully Pipelined Latency |
---|---|---|---|
FALSE | FALSE | 1 | M+A+2 |
FALSE | FALSE | >1 | M+A+3 |
FALSE | TRUE | 1 | M+F+A+2 |
FALSE | TRUE | >1 | M+F+A+3 |
TRUE | FALSE | 1 | M+A+4 |
TRUE | FALSE | >1 | M+A+5 |
TRUE | TRUE | 1 | M+F+A+4 |
TRUE | TRUE | >1 | M+F+A+5 |
M = 被除數(shù)和商寬度,F(xiàn) = 小數(shù)寬度,A = AXI 接口的總延遲。
High Radix
表中位寬范圍為被除數(shù)和商寬度 + 分?jǐn)?shù)寬度。
4 to 12 | 13 to 26 | 27 to 40 | 41 to 54 | 55 to 68 | 69 to 82 |
---|---|---|---|---|---|
2 | 3 | 4 | 5 | 6 | 7 |
表中行位寬范圍為被除數(shù)和商寬度 + 分?jǐn)?shù)寬度。
Divisor Width | 4 to 12 | 13 to 26 | 41 to 54 | 27 to 40 | 55 to 68 | 69 to 82 |
---|---|---|---|---|---|---|
4 to 8 | 16 | 20 | 29 | 24 | 33 | 37 |
9 to 18 | 17 | 21 | 30 | 25 | 34 | 38 |
19 to 32 | 18 | 22 | 31 | 26 | 35 | 39 |
33 to 35 | 19 | 23 | 32 | 27 | 36 | 40 |
36 to 48 | 20 | 24 | 33 | 28 | 37 | 41 |
49 to 52 | 22 | 26 | 35 | 30 | 39 | 43 |
53 to 54 | 23 | 27 | 36 | 31 | 40 | 44 |
三種實現(xiàn)方式吞吐量對比
LUTMult
此解決方案始終支持全吞吐量。
Radix-2
Clocks per Division 參數(shù)允許對吞吐量與資源進行一系列選擇。當(dāng) Clocks per Division 設(shè)置為 1 時,內(nèi)核是完全流水線化的,因此每個時鐘周期的最大吞吐量為一個分頻,但使用的資源最多。 Clock per Division 設(shè)置為 2、4 和 8,對于較小的內(nèi)核尺寸,這些相應(yīng)的因素會降低吞吐量。AXI 接口為非阻塞提供 0 的額外延遲,無輸出線程的阻塞為 1,輸出線程為阻塞 (m_axis_dout_tready) 為 3。但是,當(dāng)選擇阻塞模式時,延遲會隨運行時間而變化。
High Radix
迭代過程是作為循環(huán)來實現(xiàn)的,以減少資源。 這意味著必須推遲新輸入,直到在迭代電路中完成先前的計算。 因此,最大可能的吞吐量是每個時鐘 1/N 分頻,其中 N 是所需的迭代次數(shù)。 然而,為了達到這個最大吞吐量,輸入可能需要是突發(fā)的。 這是因為迭代引擎可以通過管道的每個階段進行流水線化,為隔行分割提供一個輪播位置。
添加 AXI4-Stream 接口后,平均吞吐量保持不變。 阻塞模式為數(shù)據(jù)提供了 FIFO 緩沖元素,因此無法對內(nèi)核何時準(zhǔn)備好接受新數(shù)據(jù)進行確定性預(yù)測。 對于 NonBlocking 模式,時序更可預(yù)測。 Vivado IDE 中的分頻器生成器接口提供分頻器以恒定間隔連續(xù)接受輸入的速率(N 中的 1)的反饋。 這在接口的吞吐量字段上表示,并表示為每 N 個啟用的時鐘周期 1 個輸入。
IP核圖示及端口介紹
IP核圖示如下圖所示:
Signal | I/O | Optional | Description |
---|---|---|---|
aclk | I | No | 時鐘 |
ACLKEN | I | Yes | 高有效使能 |
ARESETn | I | Yes | Active-Low 同步清零(可選,始終優(yōu)先于 ACLKEN) ARESETn 應(yīng)被置位或置位不少于兩個 aclk 周期。 |
s_axis_dividend_tvalid | I | No | s_axis_dividend 通道的 tvalid。(被除數(shù)) |
s_axis_dividend_tready | O | Yes | s_axis_dividend 通道的 tready。(被除數(shù)) |
s_axis_dividend_tdata | I | No | s_axis_dividend 通道的 tdata。 (被除數(shù)) |
s_axis_dividend_tuser | I | Yes | s_axis_dividend 通道的 tuser。(被除數(shù)) |
s_axis_dividend_tlast | I | Yes | s_axis_dividend 通道的 tlast。(被除數(shù)) |
s_axis_divisor_tvalid | I | No | s_axis_divisor 通道的 tvalid。(除數(shù)) |
s_axis_divisor_tready | O | Yes | s_axis_divisor 通道的 tready 。(除數(shù)) |
s_axis_divisor_tdata | I | No | s_axis_divisor 通道的 tdata。 (除數(shù)) |
s_axis_divisor_tuser | I | Yes | s_axis_divisor 通道的 tuser。 (除數(shù)) |
s_axis_divisor_tlast | I | Yes | s_axis_divisor 通道的 tlast。(除數(shù)) |
m_axis_dout_tvalid | O | No | m_axis_dout 通道的 tvalid。(結(jié)果) |
m_axis_dout_tready | I | Yes | m_axis_dout 通道的 tready。(結(jié)果) |
m_axis_dout_tdata | O | No | m_axis_dout 通道的 tdata。(結(jié)果) |
m_axis_dout_tuser | O | Yes | m_axis_dout 通道的 tuser。(結(jié)果) |
m_axis_dout_tlast | O | Yes | m_axis_dout 通道的 tlast。(結(jié)果) |
運算方式區(qū)別
LUTMult
此參數(shù)化解決方案將M位寬的變量除數(shù)除以N位寬的變量除數(shù)。輸出由商和整數(shù)余數(shù)組成。除法的結(jié)果是M位寬的商和N位寬的整數(shù)余數(shù)。
被除數(shù)商除數(shù)整數(shù)余數(shù)
當(dāng)選擇有符號運算時,所有操作數(shù)和結(jié)果都使用兩個補號,但會導(dǎo)致結(jié)果的大小減少一位。
分?jǐn)?shù)余數(shù)整數(shù)余數(shù)除數(shù)
LUTMult解決方案支持可選的零除輸出。對于除零,商和余數(shù)結(jié)果是未定義的。LUTMult解決方案始終支持全吞吐量(每個時鐘周期一個結(jié)果)。延遲可以配置為完全流水線所需的最大值(超過該值,進一步的寄存器將無法提高性能)。由于LUTMult解使用倒數(shù)的常數(shù)有限精度估計乘以被除數(shù),從而獲得結(jié)果,因此除數(shù)的最大寬度是被除數(shù)寬度的函數(shù)。操作數(shù)寬度之和限制為23位。就商和余數(shù)的符號而言,LUTMult解決方案以與Radix2解決方案相同的方式處理負(fù)操作數(shù)。
Radix-2
此參數(shù)化解決方案將M位寬的變量除數(shù)除以N位寬的變量除數(shù)。輸出由商和整數(shù)余數(shù)或分?jǐn)?shù)結(jié)果(商繼續(xù)超過二進制點)組成。在整數(shù)余數(shù)情況下,除法的結(jié)果是商的M位寬字段和整數(shù)余數(shù)的N位寬字段。對于帶整數(shù)余數(shù)的有符號模式,商和余數(shù)的正負(fù)也對應(yīng)于下式。
被除數(shù)商除數(shù)整數(shù)余數(shù)
在分?jǐn)?shù)情況下,結(jié)果是商的M位寬字段,結(jié)果的分?jǐn)?shù)部分為F位寬字段。
分?jǐn)?shù)余數(shù)整數(shù)余數(shù)除數(shù)
當(dāng)選擇有符號運算時,所有操作數(shù)和結(jié)果都使用一個2補符號位,從而使結(jié)果的大小減少一位。
分?jǐn)?shù)余數(shù)整數(shù)余數(shù)除數(shù)
對于帶分?jǐn)?shù)輸出的帶符號模式,在商和分?jǐn)?shù)字段中都有符號位。對于除零,商、余數(shù)和分?jǐn)?shù)結(jié)果未定義。IP是高度流水化的。核心的吞吐量是可配置的,可以從每個分區(qū)1個時鐘周期減少到每個分區(qū)2、4或8個時鐘周期,以減少資源。可以獨立設(shè)置被除數(shù)和除數(shù)的位寬度。商的位寬度等于被除數(shù)的位寬度。整數(shù)余數(shù)的位寬度等于除數(shù)的寬度。對于分?jǐn)?shù)輸出,余數(shù)位寬度與被除數(shù)和除數(shù)無關(guān)。核心處理2到64位的數(shù)據(jù)范圍,用于被除數(shù)、除數(shù)和分?jǐn)?shù)輸出。
除法器可用于實現(xiàn)X的倒數(shù);這就是1/X函數(shù)。為此,將被除數(shù)位寬度設(shè)置為2,并選擇分?jǐn)?shù)模式。然后,對于無符號或有符號運算,被除數(shù)輸入都綁定到01,并且X值通過除數(shù)輸入提供。上電復(fù)位或ARESETn后,IP的輸出商和分?jǐn)?shù)的零,直到出現(xiàn)新結(jié)果。
High Radix Solution
高基數(shù)實現(xiàn)在采用加速高基數(shù)除法算法之前,通過預(yù)縮放操作數(shù)執(zhí)行除法。該設(shè)計是完全流水線的最大時鐘頻率。首先,對除數(shù)進行歸一化,然后對其倒數(shù)進行估計。兩個操作數(shù)都乘以此估計值,使除數(shù)更接近1。預(yù)刻度的精度和精確度決定了在每次后續(xù)迭代中可以解析的商位數(shù)。預(yù)縮放除數(shù)接近于1的事實允許新商位的估計正好是上一次迭代剩余的頂部位。迭代操作本身以進位保存表示法執(zhí)行,因此沒有長進位鏈限制性能。由于只使用剩余的頂部位作為估計值,且除數(shù)不完全為1,因此每次迭代的內(nèi)部結(jié)果中都會出現(xiàn)錯誤;因此,在每次迭代中解析的商位與先前解析的位略微重疊,以允許在后續(xù)迭代中校正錯誤。 由于迭代計算由進位-保存乘法和減法組成,因此它非常適合于DSP(乘法-加法)切片,從而提供高效、低延遲的迭代。
協(xié)議描述
該內(nèi)核遵循AXI4流規(guī)范。
AXI4-Stream注意事項
轉(zhuǎn)換為AXI4流接口,使得接口協(xié)議更加標(biāo)準(zhǔn)并增強了IP的互操作性。除aclk、ACLKEN和ARESETn等常規(guī)控制信號外,除法器發(fā)生器的所有輸入和輸出均通過AXI4流通道傳輸。通道由tvalid和tdata always以及幾個可選端口和字段組成。在除法器中,支持的可選端口為tready、tlast和tuser。tvalid和tready一起執(zhí)行握手以傳輸消息,其中有效負(fù)載為tdata、tuser和tlast。除法器對tdata中包含的操作數(shù)進行操作,并在輸出通道的tdata中輸出結(jié)果。除法器不使用input、tuser和tlast,但提供了以與tdata延遲傳輸?shù)墓δ堋?/p>
除法器使用輸出tuser保持除法零(divide_by_zero)指示信號。這種將tlast和tuser從輸入傳遞到輸出的功能旨在簡化系統(tǒng)中除法器的使用。例如,除法器可能對流式分組數(shù)據(jù)進行操作。在此示例中,可以將核心配置為通過打包數(shù)據(jù)通道的tlast,從而減小工作量。
基本握手協(xié)議
下圖顯示了AXI4流通道中的數(shù)據(jù)傳輸。
tvalid 由通道的源(主)端驅(qū)動,而tready 由接收器(從)驅(qū)動。 tvalid 表示有效載荷字段(tdata、tuser 和 tlast)中的值有效。 tready 表示從機已準(zhǔn)備好接收數(shù)據(jù)。 當(dāng)循環(huán)中 tvalid 和treaty 都為TRUE 時,就會發(fā)生傳輸。master 和 slave 分別為下一次傳輸適當(dāng)?shù)卦O(shè)置了 tvalid 和tready。
非阻塞模式
除法器提供了一種模式,用于簡化從該內(nèi)核以前的非 AXI 版本遷移。 非阻塞用于表示一個輸入通道上缺少數(shù)據(jù)不會導(dǎo)致另一通道上的傳入數(shù)據(jù)被緩沖。 因為在 NonBlocking 模式下,輸出通道沒有不穩(wěn)定的信號。 并非總是需要 AXI4-Stream 的完整流量控制。 使用 FlowControl 參數(shù)或用戶界面字段選擇阻塞或非阻塞行為。Blocking 或 NonBlocking 的選擇適用于整個IP,而不是單獨的每個通道。 通道仍然具有非可選的 tvalid 信號,這類似于采用 AXI4-Stream 之前許多內(nèi)核上的新數(shù)據(jù) (ND) 信號。 由于沒有阻止數(shù)據(jù)流的功能,內(nèi)部實現(xiàn)大大簡化,因此這種模式需要的資源更少。 對于希望從 AXI 之前的版本遷移到此版本且更改最少的用戶,建議使用此模式。
當(dāng)所有當(dāng)前的輸入通道都接收到一個有效的 tvalid(并且tready被斷言),那么這個操作是有效的。這是為了允許從 v3.0 進行最小的遷移。如果一個通道接收到 tvalid 而另一個沒有接收,則不會發(fā)生操作,即使存在和斷言tready也是如此。 因此,與完全符合 AXI4-Stream 的阻塞模式不同,在非阻塞模式下可以忽略單個通道上的有效事務(wù)。 出于性能考慮,ARESETn 是在內(nèi)部的,這會將其操作延遲一個時鐘周期。效果是在取消置位 ARESETn 之后的循環(huán)中,內(nèi)核仍然復(fù)位并且不接受輸入。 tvalid 在此周期的輸出通道上也處于非活動狀態(tài)。
上圖顯示了操作中的非阻塞模式。 內(nèi)核的延遲為零。 正如 s_axis_dividend_tready 和 s_axis_divisor_tready 所指示的,它們最終是相同的信號,內(nèi)核可以每三個周期接受一次數(shù)據(jù)。 由于 s_axis_divisor_tvalid 被置低,被除數(shù)通道中的數(shù)據(jù) A1 被忽略。 數(shù)據(jù)輸入 A2 和 B1 被接受,因為 tvalids 和 traily 都被斷言。
阻塞模式
術(shù)語“阻塞”意味著每個通道都在緩沖數(shù)據(jù)以供使用。 AXI4-Stream 的完整流控制有助于系統(tǒng)設(shè)計,因為數(shù)據(jù)流是自我調(diào)節(jié)的。使用 FlowControl 參數(shù)選擇阻塞或非阻塞行為。 背壓(tready)的存在可以防止數(shù)據(jù)丟失,因此只有在下游數(shù)據(jù)路徑準(zhǔn)備好處理數(shù)據(jù)時才會傳播數(shù)據(jù)。
除法器有兩個輸入通道和一個輸出通道。 當(dāng)所有輸入通道都有可用的有效數(shù)據(jù)時,就會發(fā)生操作,結(jié)果在輸出上可用。 如果由于 m_axis_dout_tready 為低而阻止輸出裝載數(shù)據(jù),則數(shù)據(jù)會在內(nèi)部的輸出緩沖區(qū)中累積。當(dāng)這個輸出緩沖器快滿時,內(nèi)核停止進一步的操作。 這可以防止輸入緩沖區(qū)為新操作裝載數(shù)據(jù),以便在輸入新數(shù)據(jù)時填充輸入緩沖區(qū)。 當(dāng)輸入緩沖區(qū)填滿時,它們各自(s_axis_divisor_tready 和 s_axis_dividend_tready)被置為無效以防止進一步輸入。
從某種意義上說,這兩個輸入通道是相互關(guān)聯(lián)的,每個通道都必須先接收經(jīng)過有效的數(shù)據(jù),然后才能繼續(xù)進行操作。 因此,有一種額外的阻塞機制,其中一個輸入通道不接收有效數(shù)據(jù),而另一個接收。 在這種情況下,經(jīng)過有效的數(shù)據(jù)存儲在通道的輸入緩沖區(qū)中。
在這種情況下,經(jīng)過有效的數(shù)據(jù)存儲在通道的輸入緩沖區(qū)中。 在這種情況的幾個循環(huán)之后,接收數(shù)據(jù)的通道的緩沖區(qū)被填滿并且該通道的tready被取消斷言,直到饑餓的通道接收到一些數(shù)據(jù)。
上圖顯示了阻塞行為和背壓。 通道 s_axis_dividend 上的第一個數(shù)據(jù)與通道 s_axis_divisor 上的第一個數(shù)據(jù)配對,第二個與第二個數(shù)據(jù)配對,依此類推。 這展示了“阻塞”的概念。 概念上使用通道名稱 s_axis_dividend 和 s_axis_divisor。 兩者都可以表示除數(shù)或被除數(shù)通道。
并且在圖中進一步顯示了數(shù)據(jù)輸出是如何被延遲的,不僅是延遲,還有握手信號 m_axis_dout_tready。 是背壓的。 輸出上的持續(xù)背壓以及輸入上的數(shù)據(jù)可用性最終會導(dǎo)致核心緩沖區(qū)飽和,從而導(dǎo)致核心發(fā)出信號,表明它無法再通過取消斷言來接受進一步的輸入通道的tready信號。
這個例子中的最小延遲是兩個周期,但需要注意的是,Blocking 操作中的延遲并不是一個有用的概念。 一個重要的思想是每個通道都充當(dāng)一個隊列,確保每個通道上的第一個、第二個、第三個數(shù)據(jù)樣本與其他通道上的相應(yīng)樣本配對以進行每次操作。
TDATA包
AXI4-Stream 接口中的遵循特定的命名法。 在該內(nèi)核中,操作數(shù)通過通道 tdata 端口傳入或傳出內(nèi)核。 為了簡化協(xié)議的互操作性,如果需要時,首先擴展 tdata 中可以獨立使用的每個子字段,以適應(yīng) 8 位倍數(shù)的位字段。 對于輸出 DOUT 通道,結(jié)果字段符號擴展到字節(jié)邊界。 由字節(jié)方向添加的位被內(nèi)核忽略并且不會導(dǎo)致額外的資源使用。
被除數(shù)和除數(shù)通道的 TDATA 結(jié)構(gòu)
輸入通道 Dividend 和 Divisor 僅在其 tdata 字段中攜帶其操作數(shù)。 對于每個操作數(shù)占據(jù)最低有效位。tdata 端口寬度本身是包含操作數(shù)所需的字節(jié)寬度的最小倍數(shù)。
輸出(DOUT)通道的TDATA結(jié)構(gòu)
m_axis_dout_tdata 的結(jié)構(gòu)比較復(fù)雜。 此端口包含商和(余數(shù)或小數(shù)輸出如果存在)。當(dāng)余數(shù)類型設(shè)置為余數(shù)時,兩個輸出被認(rèn)為是分開的,因此在串聯(lián)以形成 m_axis_dout_tdata 信號之前是面向字節(jié)的。 當(dāng)余數(shù)類型為小數(shù)時,小數(shù)部分被視為商的擴展,因此這兩個字段在填充到下一個字節(jié)邊界之前連接。
TLAST and TUSER握手
AXI4-Stream 中的 tlast 用于表示數(shù)據(jù)塊的最后一次傳輸。 tuser 用于限定或擴充 tdata 中的主要數(shù)據(jù)的輔助信息。 除法器在每個樣本的基礎(chǔ)上運行,其中每個操作都獨立于之前或之后的任何操作。因此,不需要在除法器上放置 tlast。
在每個輸入通道上支持 tlast 和 tuser 信號純粹是作為系統(tǒng)設(shè)計的一個可選輔助,在這種情況下,通過除法器的數(shù)據(jù)流確實具有一些分組化或輔助字段,但不是與除法器相關(guān)。 傳遞 tlast 或 tuser 的功能消除了通過除法器將延遲匹配到 tdata 路徑的負(fù)擔(dān),該路徑可以是可變的。
當(dāng)選擇Divide_by_zero detect(除以零檢測)時,指示除以零的信號在輸出通道tuser端口的最低有效位上輸出。
TLAST Options
每個輸入通道的 tlast 是可選的。 每個存在時,都可以通過除法器,或者,當(dāng)多個通道啟用了 tlast 時,可以通過 tlast 輸入的邏輯 AND 或邏輯 OR。 當(dāng)任何輸入通道上不存在 tlasts時,輸出通道也沒有 tlast。
TUSER Options
每個輸入通道的 tuser 是可選的。 每個都有用戶可選擇的寬度。 Divider IP也可能生成一個 tuser 位。 這是選擇divide_by_zero 檢測時。divide_by_zero 位占據(jù)最低有效位置,然后是來自除數(shù)通道的 tuser,然后是來自最高有效位置的被除數(shù)通道的 tuser。
除法器IP配置
除法器IP配置界面如下:
Common Options
描述了兩種實現(xiàn)的參數(shù),并允許選擇除法器實現(xiàn)。
Algorithm Type: 算法類型:這在基數(shù) 2、LUTMult 和高基數(shù)劃分解決方案之間進行選擇。
Dividend Channel
Dividend Width: 被除數(shù)寬度,指定在 DIVIDEND (s_axis_dividend_tdata) 和 QUOTIENT(m_axis_dout_tdata 的子字段)上提供的整數(shù)位數(shù)。 這必須設(shè)置為滿足最大可能的商結(jié)果。 由于二進制補碼表示的非對稱性,從被除數(shù)到商的位增長是可能的,但僅適用于最大負(fù)數(shù)除以負(fù)數(shù)的單個組合(即 -2(M-1)/-1)。 如果需要適應(yīng)這種情況,被除數(shù)(以及商)的寬度可以擴展 1 位。
Has TLAST: 指定此通道是否具有 tlast 端口。 除法器不使用此信息。 該項用于簡化系統(tǒng)設(shè)計。tlast信息以和數(shù)據(jù)路徑相同的延遲傳送到輸出通道。
Has TUSER: 指定此通道是否具有 tuser 端口。 與 tlast 一樣, 除法器不使用此信息。 該項用于簡化系統(tǒng)設(shè)計。 tuser 位以和數(shù)據(jù)路徑相同的延遲傳送到輸出。
TUSER Width: 當(dāng) Has tuser 為 TRUE 時可用,這將設(shè)置此通道的 tuser 端口的寬度。
Divisor Channel
Divisor Width: 除數(shù)寬度。指定在 s_axis_divisor_tdata 的 DIVISOR 字段上提供的整數(shù)位數(shù)。 當(dāng)配置有余數(shù)輸出時,余數(shù)的寬度也等于該參數(shù)的值。
Has TLAST: 指定此通道是否具有 tlast 端口。 除法器不使用此信息。 該項用于簡化系統(tǒng)設(shè)計。 tuser 位以和數(shù)據(jù)路徑相同的延遲傳送到輸出。
Has TUSER: 指定此通道是否具有 tuser 端口。 與 tlast 一樣, 除法器不使用此信息。 該項用于簡化系統(tǒng)設(shè)計。 tuser 位以和數(shù)據(jù)路徑相同的延遲傳送到輸出。
TUSER Width: 當(dāng) Has tuser 為 TRUE 時可用,這將設(shè)置此通道的 tuser 端口的寬度。
Output Channel
Remainder Type: 余數(shù)類型。這可以在輸出 tdata 端口 (m_axis_dout_tdata) 的 FRACTIONAL 上顯示的余數(shù)類型小數(shù)和余數(shù)之間進行選擇。分?jǐn)?shù)余數(shù)類型是高基數(shù)的唯一選項。
Fractional Width: 小數(shù)寬度。如果選擇小數(shù)余數(shù)類型,這將確定在輸出通道 (m_axis_dout_tdata) 的小數(shù)字段上提供的位數(shù)。 選擇高基數(shù)時,總輸出寬度(商部分加小數(shù)部分)限制為 82。
商的寬度等于被除數(shù)的寬度,并在被除數(shù)通道部分設(shè)置。
如果divide_by_zero 檢測處于有效狀態(tài),tuser 端口的寬度是當(dāng)前輸入通道tuser 字段的總和加上1。 如果任一輸入通道具有 tlast 端口,則該通道也具有 tlast 端口。
Detect Divide-by-Zero: 檢測被零除。確定內(nèi)核在輸出 tuser 端口 (m_axis_dout_tuser) 中是否有 DIVIDE_BY_ZERO 以在執(zhí)行除以零時發(fā)出信號。
Radix-2 Options
Clocks Per Division: 分頻時鐘。確定 Radix-2 解決方案的吞吐量(輸入(或輸出)之間的時鐘間隔)。 此參數(shù)的低值會導(dǎo)致高吞吐量,但也會導(dǎo)致更多資源使用。
High Radix and LUTMult Options
Number of iterations (High Radix only) 迭代次數(shù)(僅限高基數(shù)): 只讀,報告高基數(shù)操作模式為每次除法執(zhí)行的迭代次數(shù)。 這設(shè)置了分頻器的最大吞吐量。為實現(xiàn)此吞吐量,必須在s_axis_dividend_tready 和 s_axis_divisor_tready 輸出請求時立即提供操作數(shù)。
Number of iterations (High Radix only)吞吐量(僅限高基數(shù)) :只讀,報告以恒定速率提供操作數(shù)時除法器可維持的最大吞吐量。 在 AXI 阻塞模式下,由于緩沖,吞吐量可能略高。 當(dāng)FlowControl 設(shè)置為 NonBlocking 并且輸出通道 DOUT 沒有tready 時,此速率適用。
AXI4-Stream Options
Flow Control: 流控制。阻塞或非阻塞。非阻塞模式提供了從之前版本的分頻器生成器內(nèi)核的更簡單的遷移路徑。 阻塞模式以一些額外的資源和延遲為代價,簡化了進出其他 AXI4-Stream 阻塞模式內(nèi)核的數(shù)據(jù)流管理。
Optimize Goal: 優(yōu)化目標(biāo)。這僅適用于阻塞模式。 選擇ACLKEN并優(yōu)化目標(biāo)設(shè)置為資源時,可能會降低性能。
Output has TREADY: 選擇輸出通道是否有tready信號。 這是允許來自下游的背壓所必需的。例如,如果連接到另一個 AXI4-Stream Blocking內(nèi)核。 如果沒有tready,下游電路無法停止來自分頻器的數(shù)據(jù)流,但會節(jié)省一些資源。
Output TLAST Behavior: 輸出 TLAST行為。選擇輸出通道 tlast 信號的來源。 當(dāng)沒有或只有一個輸入通道有 tlast 時,輸出 tlast 不存在或適當(dāng)?shù)貜妮斎?tlast 派生。當(dāng)兩個輸入通道都有 tlast 時,輸出通道 tlast 可以單獨從兩個輸入的邏輯 OR或邏輯 AND 得出。
Latency Options
Latency Configuration: 延遲配置。自動(完全流水線)或手動。Radix2 解決方案的延遲配置僅在每格時鐘設(shè)置為 1 時才可配置。這是由于迭代反饋,因此當(dāng)每格時鐘大于 1 時非可選寄存器。
Latency :延遲,當(dāng)Latency Configuration 設(shè)置為Automatic 時,提供從輸入到輸出的延遲,以時鐘使能時鐘周期為單位。 手動時,此字段用于指定所需的延遲。 當(dāng)不需要高性能(時鐘頻率)時,該字段中較低的值可以節(jié)省資源。
Control Signals
ACLKEN :確定內(nèi)核是否具有時鐘使能輸入 (ACLKEN)。信號ARESETn始終優(yōu)先于ACLKEN,即無論ACLKEN的狀態(tài)如何,ARESETn都生效。
ARESETn :確定內(nèi)核是否具有低電平有效同步清零輸入 (ARESETn)。為低電平有效。信號 ARESETn 應(yīng)保持有效至少兩個時鐘周期。 這是因為,為了性能,ARESETn 在被饋送到原語的重置端口之前在內(nèi)部注冊。
-
dsp
+關(guān)注
關(guān)注
556文章
8155瀏覽量
357283 -
FPGA
+關(guān)注
關(guān)注
1645文章
22036瀏覽量
618106 -
接口
+關(guān)注
關(guān)注
33文章
8993瀏覽量
153689 -
Xilinx
+關(guān)注
關(guān)注
73文章
2184瀏覽量
125256 -
除法器
+關(guān)注
關(guān)注
2文章
14瀏覽量
14028
發(fā)布評論請先 登錄
基于FPGA的除法器純邏輯設(shè)計案例

哪位有模擬除法器的電路仿真?
基于FPGA的除法器
FPGA除法器IP核運算出錯
FPGA中的除法運算及初識AXI總線
高速硬件除法器
除法器的設(shè)計資料分享
乘除法和開方運算的FPGA串行實現(xiàn)
并行除法器 ,并行除法器結(jié)構(gòu)原理是什么?
除法器對數(shù)運算電路的應(yīng)用

實例九— 除法器設(shè)計

如何實現(xiàn)FPGA中的除法運算
FPGA常用運算模塊-復(fù)數(shù)乘法器

評論