0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

FPGA常用運(yùn)算模塊-除法器

CHANBAEK ? 來源:FPGA and ICer ? 作者: Vuko ? 2023-05-22 16:20 ? 次閱讀

寫在前面

本文是本系列的第四篇,本文主要介紹FPGA常用運(yùn)算模塊-除法器,xilinx提供了相關(guān)的IP以便于用戶進(jìn)行開發(fā)使用。

除法器

除法器生成器IP 創(chuàng)建了一個(gè)基于基數(shù) 2 非恢復(fù)除法或具有預(yù)分頻的高基數(shù)除法的整數(shù)除法電路。 Radix-2 算法利用 FPGA 邏輯來實(shí)現(xiàn)一系列吞吐量選項(xiàng),包括單周期,而高基數(shù)算法在較低吞吐量下利用 DSP 切片,但通過重用來減少資源。

該IP符合 AXI4-Stream 的接口。操作數(shù)最大為 64 位寬的整數(shù)除法。提供Radix-2、LUTMult 和High Radix 實(shí)現(xiàn)算法以允許選擇資源和延遲權(quán)衡??蛇x操作數(shù)寬度、同步控制和可選延遲。可選的除以零檢測

三種除法器實(shí)現(xiàn)方式

LUTMult

除數(shù)倒數(shù)的簡單查找估計(jì),后跟乘數(shù)。 由于倒數(shù)估計(jì)中需要偏差,因此僅支持余數(shù)輸出類型。 如果用于創(chuàng)建小數(shù)輸出,此偏差會(huì)引入偏移(錯(cuò)誤)。 推薦用于小于或等于 12 位的操作數(shù)寬度。 此實(shí)現(xiàn)方式使用 DSP Slice、塊 RAM 和少量 FPGA 邏輯原語(寄存器和 LUT)。 對(duì)于可以使用 Radix2 或 LUTMult 選項(xiàng)的操作數(shù)寬度,由于使用了 DSP 和塊 RAM 原語,LUTMult 解決方案提供了使用較少 FPGA 邏輯資源的解決方案。

該實(shí)現(xiàn)方式特點(diǎn)如下:

提供了帶有整數(shù)余數(shù)的商;

可以使用流水線并行架構(gòu)以提高吞吐量;

可配置延遲;

2 到 17 位的分頻寬度;

2 到 12 位的除數(shù)寬度(被除數(shù)寬度和除數(shù)寬度之和限制為 23 位);

獨(dú)立的除數(shù)和除數(shù)位寬;

使用單個(gè)時(shí)鐘的完全同步設(shè)計(jì);

支持無符號(hào)或二進(jìn)制補(bǔ)碼有符號(hào)數(shù)。

Radix-2

使用整數(shù)操作數(shù)的基數(shù) 2 非恢復(fù)整數(shù)除法,允許生成小數(shù)或整數(shù)余數(shù)。 對(duì)于小于 16 位左右的操作數(shù)寬度或需要高吞吐量的應(yīng)用程序,建議使用該種實(shí)現(xiàn)方式。 實(shí)現(xiàn)使用 FPGA 邏輯原語(寄存器和 LUT)。Radix2 解決方案不使用 DSP 或塊 RAM 原語,因此當(dāng)其他地方需要這些原語時(shí),建議使用此實(shí)現(xiàn)。

該實(shí)現(xiàn)方式特點(diǎn)如下:

提供整數(shù)或小數(shù)余數(shù)的商;

流水線并行架構(gòu)以提高吞吐量;

減少流水線大小與吞吐量可選;

被除數(shù)寬度從 2 到 64 位;

除數(shù)寬度從 2 到 64 位;

獨(dú)立的被除數(shù)、除數(shù)和小數(shù)位寬;

使用單個(gè)時(shí)鐘的同步設(shè)計(jì);

支持無符號(hào)數(shù)或二進(jìn)制補(bǔ)碼有符號(hào)數(shù);

可以實(shí)現(xiàn) 1/X(倒數(shù))功能。

High Radix

帶有預(yù)縮放的高基數(shù)除法。 對(duì)于大于 16 位左右的操作數(shù)寬度,建議這樣做。 此實(shí)現(xiàn)使用 DSP Slice 和 Block RAM。

該實(shí)現(xiàn)方式特點(diǎn)如下:

通過預(yù)縮放啟用高基數(shù)除法;

提供可選的商和小數(shù)輸出;

可配置寬度、同步控制、可選延遲和除以零檢測;

使用 DSP Slices。

Divider Generator 內(nèi)核使用三種實(shí)現(xiàn)中的一種。 LUTMult 推薦用于非常小的操作數(shù)寬度、高吞吐量以及必須最小化切片使用的情況。 對(duì)于較小的操作數(shù)寬度、高吞吐量或必須最小化 DSP 切片使用的情況,建議使用 Radix-2 解決方案。 對(duì)于較大的操作數(shù)寬度,建議使用高基數(shù)解決方案。

三種實(shí)現(xiàn)方式延遲對(duì)比

分頻器內(nèi)核的延遲是 AXI4-Stream 配置參數(shù)和所選算法延遲的函數(shù)。 當(dāng) AXI4-Stream 模式設(shè)置為非阻塞且核心算法和吞吐量設(shè)置為每個(gè)時(shí)鐘周期輸入一個(gè)樣本時(shí),延遲僅是一個(gè)常數(shù)。 如果選擇了完整的 AXI4-Stream 行為。 這是因?yàn)?FIFO 用于管理此模式的數(shù)據(jù),并且 FIFO 的深度增加了延遲。

LUTMult

完全流水線化的 LUTMult 的延遲為 8。

Radix-2

完全流水線分頻器的延遲(內(nèi)核生成第一個(gè)有效輸出之前所需的啟用時(shí)鐘周期數(shù))是被除數(shù)位寬的函數(shù)。 如果需要小數(shù)輸出,則完全流水線延遲也是小數(shù)位寬的函數(shù)。 一般來說:

對(duì)于整數(shù)余數(shù)除法器,完全流水線延遲的數(shù)量級(jí)為 M,其中 M 是商的寬度。

對(duì)于分?jǐn)?shù)余數(shù)除法器,完全流水線延遲的數(shù)量級(jí)為 M + F,其中 F 是分?jǐn)?shù)輸出的寬度。

下表提供了用于分頻器選擇的完全流水線延遲公式的列表。 通過完整的流水線,可以實(shí)現(xiàn)最大可能的性能。 當(dāng)每格時(shí)鐘數(shù)為 1 時(shí),可以手動(dòng)將延遲設(shè)置為介于 0 和表 2-1 中所示值之間的數(shù)字。 這允許以降低內(nèi)核可以計(jì)時(shí)的最大時(shí)鐘頻率為代價(jià)來減少內(nèi)核的延遲。 減少延遲會(huì)減少使用的寄存器數(shù)量,但 LUT 計(jì)數(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

三種實(shí)現(xiàn)方式吞吐量對(duì)比

LUTMult

此解決方案始終支持全吞吐量。

Radix-2

Clocks per Division 參數(shù)允許對(duì)吞吐量與資源進(jìn)行一系列選擇。當(dāng) Clocks per Division 設(shè)置為 1 時(shí),內(nèi)核是完全流水線化的,因此每個(gè)時(shí)鐘周期的最大吞吐量為一個(gè)分頻,但使用的資源最多。 Clock per Division 設(shè)置為 2、4 和 8,對(duì)于較小的內(nèi)核尺寸,這些相應(yīng)的因素會(huì)降低吞吐量。AXI 接口為非阻塞提供 0 的額外延遲,無輸出線程的阻塞為 1,輸出線程為阻塞 (m_axis_dout_tready) 為 3。但是,當(dāng)選擇阻塞模式時(shí),延遲會(huì)隨運(yùn)行時(shí)間而變化。

High Radix

迭代過程是作為循環(huán)來實(shí)現(xiàn)的,以減少資源。 這意味著必須推遲新輸入,直到在迭代電路中完成先前的計(jì)算。 因此,最大可能的吞吐量是每個(gè)時(shí)鐘 1/N 分頻,其中 N 是所需的迭代次數(shù)。 然而,為了達(dá)到這個(gè)最大吞吐量,輸入可能需要是突發(fā)的。 這是因?yàn)榈婵梢酝ㄟ^管道的每個(gè)階段進(jìn)行流水線化,為隔行分割提供一個(gè)輪播位置。

添加 AXI4-Stream 接口后,平均吞吐量保持不變。 阻塞模式為數(shù)據(jù)提供了 FIFO 緩沖元素,因此無法對(duì)內(nèi)核何時(shí)準(zhǔn)備好接受新數(shù)據(jù)進(jìn)行確定性預(yù)測。 對(duì)于 NonBlocking 模式,時(shí)序更可預(yù)測。 Vivado IDE 中的分頻器生成器接口提供分頻器以恒定間隔連續(xù)接受輸入的速率(N 中的 1)的反饋。 這在接口的吞吐量字段上表示,并表示為每 N 個(gè)啟用的時(shí)鐘周期 1 個(gè)輸入。

IP核圖示及端口介紹

IP核圖示如下圖所示:

poYBAGRrJVCAf192AAGYUlpaKQg040.png

Signal I/O Optional Description
aclk I No 時(shí)鐘
ACLKEN I Yes 高有效使能
ARESETn I Yes Active-Low 同步清零(可選,始終優(yōu)先于 ACLKEN) ARESETn 應(yīng)被置位或置位不少于兩個(gè) 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é)果)

運(yùn)算方式區(qū)別

LUTMult

此參數(shù)化解決方案將M位寬的變量除數(shù)除以N位寬的變量除數(shù)。輸出由商和整數(shù)余數(shù)組成。除法的結(jié)果是M位寬的商和N位寬的整數(shù)余數(shù)。

被除數(shù)商除數(shù)整數(shù)余數(shù)

當(dāng)選擇有符號(hào)運(yùn)算時(shí),所有操作數(shù)和結(jié)果都使用兩個(gè)補(bǔ)號(hào),但會(huì)導(dǎo)致結(jié)果的大小減少一位。

分?jǐn)?shù)余數(shù)整數(shù)余數(shù)除數(shù)

LUTMult解決方案支持可選的零除輸出。對(duì)于除零,商和余數(shù)結(jié)果是未定義的。LUTMult解決方案始終支持全吞吐量(每個(gè)時(shí)鐘周期一個(gè)結(jié)果)。延遲可以配置為完全流水線所需的最大值(超過該值,進(jìn)一步的寄存器將無法提高性能)。由于LUTMult解使用倒數(shù)的常數(shù)有限精度估計(jì)乘以被除數(shù),從而獲得結(jié)果,因此除數(shù)的最大寬度是被除數(shù)寬度的函數(shù)。操作數(shù)寬度之和限制為23位。就商和余數(shù)的符號(hào)而言,LUTMult解決方案以與Radix2解決方案相同的方式處理負(fù)操作數(shù)。

Radix-2

此參數(shù)化解決方案將M位寬的變量除數(shù)除以N位寬的變量除數(shù)。輸出由商和整數(shù)余數(shù)或分?jǐn)?shù)結(jié)果(商繼續(xù)超過二進(jìn)制點(diǎn))組成。在整數(shù)余數(shù)情況下,除法的結(jié)果是商的M位寬字段和整數(shù)余數(shù)的N位寬字段。對(duì)于帶整數(shù)余數(shù)的有符號(hào)模式,商和余數(shù)的正負(fù)也對(duì)應(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)選擇有符號(hào)運(yùn)算時(shí),所有操作數(shù)和結(jié)果都使用一個(gè)2補(bǔ)符號(hào)位,從而使結(jié)果的大小減少一位。

分?jǐn)?shù)余數(shù)整數(shù)余數(shù)除數(shù)

對(duì)于帶分?jǐn)?shù)輸出的帶符號(hào)模式,在商和分?jǐn)?shù)字段中都有符號(hào)位。對(duì)于除零,商、余數(shù)和分?jǐn)?shù)結(jié)果未定義。IP是高度流水化的。核心的吞吐量是可配置的,可以從每個(gè)分區(qū)1個(gè)時(shí)鐘周期減少到每個(gè)分區(qū)2、4或8個(gè)時(shí)鐘周期,以減少資源。可以獨(dú)立設(shè)置被除數(shù)和除數(shù)的位寬度。商的位寬度等于被除數(shù)的位寬度。整數(shù)余數(shù)的位寬度等于除數(shù)的寬度。對(duì)于分?jǐn)?shù)輸出,余數(shù)位寬度與被除數(shù)和除數(shù)無關(guān)。核心處理2到64位的數(shù)據(jù)范圍,用于被除數(shù)、除數(shù)和分?jǐn)?shù)輸出。

除法器可用于實(shí)現(xiàn)X的倒數(shù);這就是1/X函數(shù)。為此,將被除數(shù)位寬度設(shè)置為2,并選擇分?jǐn)?shù)模式。然后,對(duì)于無符號(hào)或有符號(hào)運(yùn)算,被除數(shù)輸入都綁定到01,并且X值通過除數(shù)輸入提供。上電復(fù)位或ARESETn后,IP的輸出商和分?jǐn)?shù)的零,直到出現(xiàn)新結(jié)果。

High Radix Solution

高基數(shù)實(shí)現(xiàn)在采用加速高基數(shù)除法算法之前,通過預(yù)縮放操作數(shù)執(zhí)行除法。該設(shè)計(jì)是完全流水線的最大時(shí)鐘頻率。首先,對(duì)除數(shù)進(jìn)行歸一化,然后對(duì)其倒數(shù)進(jìn)行估計(jì)。兩個(gè)操作數(shù)都乘以此估計(jì)值,使除數(shù)更接近1。預(yù)刻度的精度和精確度決定了在每次后續(xù)迭代中可以解析的商位數(shù)。預(yù)縮放除數(shù)接近于1的事實(shí)允許新商位的估計(jì)正好是上一次迭代剩余的頂部位。迭代操作本身以進(jìn)位保存表示法執(zhí)行,因此沒有長進(jìn)位鏈限制性能。由于只使用剩余的頂部位作為估計(jì)值,且除數(shù)不完全為1,因此每次迭代的內(nèi)部結(jié)果中都會(huì)出現(xiàn)錯(cuò)誤;因此,在每次迭代中解析的商位與先前解析的位略微重疊,以允許在后續(xù)迭代中校正錯(cuò)誤。 由于迭代計(jì)算由進(jìn)位-保存乘法和減法組成,因此它非常適合于DSP(乘法-加法)切片,從而提供高效、低延遲的迭代。

協(xié)議描述

該內(nèi)核遵循AXI4流規(guī)范。

AXI4-Stream注意事項(xiàng)

轉(zhuǎn)換為AXI4流接口,使得接口協(xié)議更加標(biāo)準(zhǔn)并增強(qiáng)了IP的互操作性。除aclk、ACLKEN和ARESETn等常規(guī)控制信號(hào)外,除法器發(fā)生器的所有輸入和輸出均通過AXI4流通道傳輸。通道由tvalid和tdata always以及幾個(gè)可選端口和字段組成。在除法器中,支持的可選端口為tready、tlast和tuser。tvalid和tready一起執(zhí)行握手以傳輸消息,其中有效負(fù)載為tdata、tuser和tlast。除法器對(duì)tdata中包含的操作數(shù)進(jìn)行操作,并在輸出通道的tdata中輸出結(jié)果。除法器不使用input、tuser和tlast,但提供了以與tdata延遲傳輸?shù)墓δ堋?/p>

除法器使用輸出tuser保持除法零(divide_by_zero)指示信號(hào)。這種將tlast和tuser從輸入傳遞到輸出的功能旨在簡化系統(tǒng)中除法器的使用。例如,除法器可能對(duì)流式分組數(shù)據(jù)進(jìn)行操作。在此示例中,可以將核心配置為通過打包數(shù)據(jù)通道的tlast,從而減小工作量。

基本握手協(xié)議

下圖顯示了AXI4流通道中的數(shù)據(jù)傳輸。

poYBAGRrJYaAOlMwAADXRwsVsLw547.png

tvalid 由通道的源(主)端驅(qū)動(dòng),而tready 由接收器(從)驅(qū)動(dòng)。 tvalid 表示有效載荷字段(tdata、tuser 和 tlast)中的值有效。 tready 表示從機(jī)已準(zhǔn)備好接收數(shù)據(jù)。 當(dāng)循環(huán)中 tvalid 和treaty 都為TRUE 時(shí),就會(huì)發(fā)生傳輸。master 和 slave 分別為下一次傳輸適當(dāng)?shù)卦O(shè)置了 tvalid 和tready。

非阻塞模式

除法器提供了一種模式,用于簡化從該內(nèi)核以前的非 AXI 版本遷移。 非阻塞用于表示一個(gè)輸入通道上缺少數(shù)據(jù)不會(huì)導(dǎo)致另一通道上的傳入數(shù)據(jù)被緩沖。 因?yàn)樵?NonBlocking 模式下,輸出通道沒有不穩(wěn)定的信號(hào)。 并非總是需要 AXI4-Stream 的完整流量控制。 使用 FlowControl 參數(shù)或用戶界面字段選擇阻塞或非阻塞行為。Blocking 或 NonBlocking 的選擇適用于整個(gè)IP,而不是單獨(dú)的每個(gè)通道。 通道仍然具有非可選的 tvalid 信號(hào),這類似于采用 AXI4-Stream 之前許多內(nèi)核上的新數(shù)據(jù) (ND) 信號(hào)。 由于沒有阻止數(shù)據(jù)流的功能,內(nèi)部實(shí)現(xiàn)大大簡化,因此這種模式需要的資源更少。 對(duì)于希望從 AXI 之前的版本遷移到此版本且更改最少的用戶,建議使用此模式。

當(dāng)所有當(dāng)前的輸入通道都接收到一個(gè)有效的 tvalid(并且tready被斷言),那么這個(gè)操作是有效的。這是為了允許從 v3.0 進(jìn)行最小的遷移。如果一個(gè)通道接收到 tvalid 而另一個(gè)沒有接收,則不會(huì)發(fā)生操作,即使存在和斷言tready也是如此。 因此,與完全符合 AXI4-Stream 的阻塞模式不同,在非阻塞模式下可以忽略單個(gè)通道上的有效事務(wù)。 出于性能考慮,ARESETn 是在內(nèi)部的,這會(huì)將其操作延遲一個(gè)時(shí)鐘周期。效果是在取消置位 ARESETn 之后的循環(huán)中,內(nèi)核仍然復(fù)位并且不接受輸入。 tvalid 在此周期的輸出通道上也處于非活動(dòng)狀態(tài)。

poYBAGRrJZGARnLwAAIX62AipiI280.png

上圖顯示了操作中的非阻塞模式。 內(nèi)核的延遲為零。 正如 s_axis_dividend_tready 和 s_axis_divisor_tready 所指示的,它們最終是相同的信號(hào),內(nèi)核可以每三個(gè)周期接受一次數(shù)據(jù)。 由于 s_axis_divisor_tvalid 被置低,被除數(shù)通道中的數(shù)據(jù) A1 被忽略。 數(shù)據(jù)輸入 A2 和 B1 被接受,因?yàn)?tvalids 和 traily 都被斷言。

阻塞模式

術(shù)語“阻塞”意味著每個(gè)通道都在緩沖數(shù)據(jù)以供使用。 AXI4-Stream 的完整流控制有助于系統(tǒng)設(shè)計(jì),因?yàn)閿?shù)據(jù)流是自我調(diào)節(jié)的。使用 FlowControl 參數(shù)選擇阻塞或非阻塞行為。 背壓(tready)的存在可以防止數(shù)據(jù)丟失,因此只有在下游數(shù)據(jù)路徑準(zhǔn)備好處理數(shù)據(jù)時(shí)才會(huì)傳播數(shù)據(jù)。

除法器有兩個(gè)輸入通道和一個(gè)輸出通道。 當(dāng)所有輸入通道都有可用的有效數(shù)據(jù)時(shí),就會(huì)發(fā)生操作,結(jié)果在輸出上可用。 如果由于 m_axis_dout_tready 為低而阻止輸出裝載數(shù)據(jù),則數(shù)據(jù)會(huì)在內(nèi)部的輸出緩沖區(qū)中累積。當(dāng)這個(gè)輸出緩沖器快滿時(shí),內(nèi)核停止進(jìn)一步的操作。 這可以防止輸入緩沖區(qū)為新操作裝載數(shù)據(jù),以便在輸入新數(shù)據(jù)時(shí)填充輸入緩沖區(qū)。 當(dāng)輸入緩沖區(qū)填滿時(shí),它們各自(s_axis_divisor_tready 和 s_axis_dividend_tready)被置為無效以防止進(jìn)一步輸入。

從某種意義上說,這兩個(gè)輸入通道是相互關(guān)聯(lián)的,每個(gè)通道都必須先接收經(jīng)過有效的數(shù)據(jù),然后才能繼續(xù)進(jìn)行操作。 因此,有一種額外的阻塞機(jī)制,其中一個(gè)輸入通道不接收有效數(shù)據(jù),而另一個(gè)接收。 在這種情況下,經(jīng)過有效的數(shù)據(jù)存儲(chǔ)在通道的輸入緩沖區(qū)中。

在這種情況下,經(jīng)過有效的數(shù)據(jù)存儲(chǔ)在通道的輸入緩沖區(qū)中。 在這種情況的幾個(gè)循環(huán)之后,接收數(shù)據(jù)的通道的緩沖區(qū)被填滿并且該通道的tready被取消斷言,直到饑餓的通道接收到一些數(shù)據(jù)。

pYYBAGRrJZmAMaUiAAI0B9a6ew4227.png

上圖顯示了阻塞行為和背壓。 通道 s_axis_dividend 上的第一個(gè)數(shù)據(jù)與通道 s_axis_divisor 上的第一個(gè)數(shù)據(jù)配對(duì),第二個(gè)與第二個(gè)數(shù)據(jù)配對(duì),依此類推。 這展示了“阻塞”的概念。 概念上使用通道名稱 s_axis_dividend 和 s_axis_divisor。 兩者都可以表示除數(shù)或被除數(shù)通道。

并且在圖中進(jìn)一步顯示了數(shù)據(jù)輸出是如何被延遲的,不僅是延遲,還有握手信號(hào) m_axis_dout_tready。 是背壓的。 輸出上的持續(xù)背壓以及輸入上的數(shù)據(jù)可用性最終會(huì)導(dǎo)致核心緩沖區(qū)飽和,從而導(dǎo)致核心發(fā)出信號(hào),表明它無法再通過取消斷言來接受進(jìn)一步的輸入通道的tready信號(hào)。

這個(gè)例子中的最小延遲是兩個(gè)周期,但需要注意的是,Blocking 操作中的延遲并不是一個(gè)有用的概念。 一個(gè)重要的思想是每個(gè)通道都充當(dāng)一個(gè)隊(duì)列,確保每個(gè)通道上的第一個(gè)、第二個(gè)、第三個(gè)數(shù)據(jù)樣本與其他通道上的相應(yīng)樣本配對(duì)以進(jìn)行每次操作。

TDATA包

AXI4-Stream 接口中的遵循特定的命名法。 在該內(nèi)核中,操作數(shù)通過通道 tdata 端口傳入或傳出內(nèi)核。 為了簡化協(xié)議的互操作性,如果需要時(shí),首先擴(kuò)展 tdata 中可以獨(dú)立使用的每個(gè)子字段,以適應(yīng) 8 位倍數(shù)的位字段。 對(duì)于輸出 DOUT 通道,結(jié)果字段符號(hào)擴(kuò)展到字節(jié)邊界。 由字節(jié)方向添加的位被內(nèi)核忽略并且不會(huì)導(dǎo)致額外的資源使用。

被除數(shù)和除數(shù)通道的 TDATA 結(jié)構(gòu)

輸入通道 Dividend 和 Divisor 僅在其 tdata 字段中攜帶其操作數(shù)。 對(duì)于每個(gè)操作數(shù)占據(jù)最低有效位。tdata 端口寬度本身是包含操作數(shù)所需的字節(jié)寬度的最小倍數(shù)。

pYYBAGRrJaGACrTDAAEnMWBe0LQ295.png

輸出(DOUT)通道的TDATA結(jié)構(gòu)

m_axis_dout_tdata 的結(jié)構(gòu)比較復(fù)雜。 此端口包含商和(余數(shù)或小數(shù)輸出如果存在)。當(dāng)余數(shù)類型設(shè)置為余數(shù)時(shí),兩個(gè)輸出被認(rèn)為是分開的,因此在串聯(lián)以形成 m_axis_dout_tdata 信號(hào)之前是面向字節(jié)的。 當(dāng)余數(shù)類型為小數(shù)時(shí),小數(shù)部分被視為商的擴(kuò)展,因此這兩個(gè)字段在填充到下一個(gè)字節(jié)邊界之前連接。

poYBAGRrJaaANVYjAADJ_WRjm8o854.png

TLAST and TUSER握手

AXI4-Stream 中的 tlast 用于表示數(shù)據(jù)塊的最后一次傳輸。 tuser 用于限定或擴(kuò)充 tdata 中的主要數(shù)據(jù)的輔助信息。 除法器在每個(gè)樣本的基礎(chǔ)上運(yùn)行,其中每個(gè)操作都獨(dú)立于之前或之后的任何操作。因此,不需要在除法器上放置 tlast。

在每個(gè)輸入通道上支持 tlast 和 tuser 信號(hào)純粹是作為系統(tǒng)設(shè)計(jì)的一個(gè)可選輔助,在這種情況下,通過除法器的數(shù)據(jù)流確實(shí)具有一些分組化或輔助字段,但不是與除法器相關(guān)。 傳遞 tlast 或 tuser 的功能消除了通過除法器將延遲匹配到 tdata 路徑的負(fù)擔(dān),該路徑可以是可變的。

當(dāng)選擇Divide_by_zero detect(除以零檢測)時(shí),指示除以零的信號(hào)在輸出通道tuser端口的最低有效位上輸出。

TLAST Options

每個(gè)輸入通道的 tlast 是可選的。 每個(gè)存在時(shí),都可以通過除法器,或者,當(dāng)多個(gè)通道啟用了 tlast 時(shí),可以通過 tlast 輸入的邏輯 AND 或邏輯 OR。 當(dāng)任何輸入通道上不存在 tlasts時(shí),輸出通道也沒有 tlast。

TUSER Options

每個(gè)輸入通道的 tuser 是可選的。 每個(gè)都有用戶可選擇的寬度。 Divider IP也可能生成一個(gè) tuser 位。 這是選擇divide_by_zero 檢測時(shí)。divide_by_zero 位占據(jù)最低有效位置,然后是來自除數(shù)通道的 tuser,然后是來自最高有效位置的被除數(shù)通道的 tuser。

poYBAGRrJa-AD--yAAB1j60XRDM835.png

除法器IP配置

除法器IP配置界面如下:

pYYBAGRrJbmAPD3sAAF-uA5rAog194.png

Common Options

描述了兩種實(shí)現(xiàn)的參數(shù),并允許選擇除法器實(shí)現(xiàn)。

Algorithm Type: 算法類型:這在基數(shù) 2、LUTMult 和高基數(shù)劃分解決方案之間進(jìn)行選擇。

Dividend Channel

Dividend Width: 被除數(shù)寬度,指定在 DIVIDEND (s_axis_dividend_tdata) 和 QUOTIENT(m_axis_dout_tdata 的子字段)上提供的整數(shù)位數(shù)。 這必須設(shè)置為滿足最大可能的商結(jié)果。 由于二進(jìn)制補(bǔ)碼表示的非對(duì)稱性,從被除數(shù)到商的位增長是可能的,但僅適用于最大負(fù)數(shù)除以負(fù)數(shù)的單個(gè)組合(即 -2(M-1)/-1)。 如果需要適應(yīng)這種情況,被除數(shù)(以及商)的寬度可以擴(kuò)展 1 位。

Has TLAST: 指定此通道是否具有 tlast 端口。 除法器不使用此信息。 該項(xiàng)用于簡化系統(tǒng)設(shè)計(jì)。tlast信息以和數(shù)據(jù)路徑相同的延遲傳送到輸出通道。

Has TUSER: 指定此通道是否具有 tuser 端口。 與 tlast 一樣, 除法器不使用此信息。 該項(xiàng)用于簡化系統(tǒng)設(shè)計(jì)。 tuser 位以和數(shù)據(jù)路徑相同的延遲傳送到輸出。

TUSER Width: 當(dāng) Has tuser 為 TRUE 時(shí)可用,這將設(shè)置此通道的 tuser 端口的寬度。

Divisor Channel

Divisor Width: 除數(shù)寬度。指定在 s_axis_divisor_tdata 的 DIVISOR 字段上提供的整數(shù)位數(shù)。 當(dāng)配置有余數(shù)輸出時(shí),余數(shù)的寬度也等于該參數(shù)的值。

Has TLAST: 指定此通道是否具有 tlast 端口。 除法器不使用此信息。 該項(xiàng)用于簡化系統(tǒng)設(shè)計(jì)。 tuser 位以和數(shù)據(jù)路徑相同的延遲傳送到輸出。

Has TUSER: 指定此通道是否具有 tuser 端口。 與 tlast 一樣, 除法器不使用此信息。 該項(xiàng)用于簡化系統(tǒng)設(shè)計(jì)。 tuser 位以和數(shù)據(jù)路徑相同的延遲傳送到輸出。

TUSER Width: 當(dāng) Has tuser 為 TRUE 時(shí)可用,這將設(shè)置此通道的 tuser 端口的寬度。

Output Channel

Remainder Type: 余數(shù)類型。這可以在輸出 tdata 端口 (m_axis_dout_tdata) 的 FRACTIONAL 上顯示的余數(shù)類型小數(shù)和余數(shù)之間進(jìn)行選擇。分?jǐn)?shù)余數(shù)類型是高基數(shù)的唯一選項(xiàng)。

Fractional Width: 小數(shù)寬度。如果選擇小數(shù)余數(shù)類型,這將確定在輸出通道 (m_axis_dout_tdata) 的小數(shù)字段上提供的位數(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í)行除以零時(shí)發(fā)出信號(hào)。

Radix-2 Options

Clocks Per Division: 分頻時(shí)鐘。確定 Radix-2 解決方案的吞吐量(輸入(或輸出)之間的時(shí)鐘間隔)。 此參數(shù)的低值會(huì)導(dǎo)致高吞吐量,但也會(huì)導(dǎo)致更多資源使用。

High Radix and LUTMult Options

Number of iterations (High Radix only) 迭代次數(shù)(僅限高基數(shù)): 只讀,報(bào)告高基數(shù)操作模式為每次除法執(zhí)行的迭代次數(shù)。 這設(shè)置了分頻器的最大吞吐量。為實(shí)現(xiàn)此吞吐量,必須在s_axis_dividend_tready 和 s_axis_divisor_tready 輸出請(qǐng)求時(shí)立即提供操作數(shù)。

Number of iterations (High Radix only)吞吐量(僅限高基數(shù)) :只讀,報(bào)告以恒定速率提供操作數(shù)時(shí)除法器可維持的最大吞吐量。 在 AXI 阻塞模式下,由于緩沖,吞吐量可能略高。 當(dāng)FlowControl 設(shè)置為 NonBlocking 并且輸出通道 DOUT 沒有tready 時(shí),此速率適用。

AXI4-Stream Options

Flow Control: 流控制。阻塞或非阻塞。非阻塞模式提供了從之前版本的分頻器生成器內(nèi)核的更簡單的遷移路徑。 阻塞模式以一些額外的資源和延遲為代價(jià),簡化了進(jìn)出其他 AXI4-Stream 阻塞模式內(nèi)核的數(shù)據(jù)流管理。

Optimize Goal: 優(yōu)化目標(biāo)。這僅適用于阻塞模式。 選擇ACLKEN并優(yōu)化目標(biāo)設(shè)置為資源時(shí),可能會(huì)降低性能。

Output has TREADY: 選擇輸出通道是否有tready信號(hào)。 這是允許來自下游的背壓所必需的。例如,如果連接到另一個(gè) AXI4-Stream Blocking內(nèi)核。 如果沒有tready,下游電路無法停止來自分頻器的數(shù)據(jù)流,但會(huì)節(jié)省一些資源。

Output TLAST Behavior: 輸出 TLAST行為。選擇輸出通道 tlast 信號(hào)的來源。 當(dāng)沒有或只有一個(gè)輸入通道有 tlast 時(shí),輸出 tlast 不存在或適當(dāng)?shù)貜妮斎?tlast 派生。當(dāng)兩個(gè)輸入通道都有 tlast 時(shí),輸出通道 tlast 可以單獨(dú)從兩個(gè)輸入的邏輯 OR或邏輯 AND 得出。

Latency Options

Latency Configuration: 延遲配置。自動(dòng)(完全流水線)或手動(dòng)。Radix2 解決方案的延遲配置僅在每格時(shí)鐘設(shè)置為 1 時(shí)才可配置。這是由于迭代反饋,因此當(dāng)每格時(shí)鐘大于 1 時(shí)非可選寄存器。

Latency :延遲,當(dāng)Latency Configuration 設(shè)置為Automatic 時(shí),提供從輸入到輸出的延遲,以時(shí)鐘使能時(shí)鐘周期為單位。 手動(dòng)時(shí),此字段用于指定所需的延遲。 當(dāng)不需要高性能(時(shí)鐘頻率)時(shí),該字段中較低的值可以節(jié)省資源。

Control Signals

ACLKEN :確定內(nèi)核是否具有時(shí)鐘使能輸入 (ACLKEN)。信號(hào)ARESETn始終優(yōu)先于ACLKEN,即無論ACLKEN的狀態(tài)如何,ARESETn都生效。

ARESETn :確定內(nèi)核是否具有低電平有效同步清零輸入 (ARESETn)。為低電平有效。信號(hào) ARESETn 應(yīng)保持有效至少兩個(gè)時(shí)鐘周期。 這是因?yàn)椋瑸榱诵阅?,ARESETn 在被饋送到原語的重置端口之前在內(nèi)部注冊(cè)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • dsp
    dsp
    +關(guān)注

    關(guān)注

    552

    文章

    7934

    瀏覽量

    347675
  • FPGA
    +關(guān)注

    關(guān)注

    1624

    文章

    21573

    瀏覽量

    600699
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8374

    瀏覽量

    150572
  • Xilinx
    +關(guān)注

    關(guān)注

    71

    文章

    2152

    瀏覽量

    120738
  • 除法器
    +關(guān)注

    關(guān)注

    2

    文章

    14

    瀏覽量

    13881
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于FPGA除法器純邏輯設(shè)計(jì)案例

    除法運(yùn)算。很多人覺得不就是除法嘛,直接打上/即可,但是,FPGA是不能正確綜合這個(gè)除法器的,綜合的結(jié)果只是一個(gè)固定數(shù)值,而不像其他微處理器。
    的頭像 發(fā)表于 06-17 10:17 ?7281次閱讀
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>除法器</b>純邏輯設(shè)計(jì)案例

    哪位有模擬除法器的電路仿真?

    哪位有模擬除法器的電路仿真,我需要一個(gè)簡單的除法運(yùn)算電路。MULTISIM10上面的除法器只是個(gè)代號(hào)沒有實(shí)際的型號(hào),我用AD532來做結(jié)果不行。
    發(fā)表于 12-16 11:10

    FPGA除法器IP核運(yùn)算出錯(cuò)

    請(qǐng)問一下大家有沒有用Xilinx的除法器IP核的,版本是V3.0的!我們?cè)谧鲇蟹?hào)數(shù)除法的過程中運(yùn)算結(jié)果經(jīng)常出錯(cuò)!原先做的產(chǎn)品,Divider的工作頻率是40M,后來工作頻率變?yōu)?2M時(shí)就經(jīng)常出錯(cuò)
    發(fā)表于 03-06 19:42

    FPGA中的除法運(yùn)算及初識(shí)AXI總線

    ] signal_b;需要注意一點(diǎn),FPGA將所有有符號(hào)數(shù)視為二進(jìn)制補(bǔ)碼形式,運(yùn)算的結(jié)果同樣為補(bǔ)碼。再來看看除法器IP核配置界面??偣簿蛢身摚浅:唵?。需要重點(diǎn)關(guān)注的有三個(gè)地方:1 算法實(shí)現(xiàn)結(jié)構(gòu)
    發(fā)表于 08-13 09:27

    高速硬件除法器

    這是一個(gè)高速硬件除法器,要求畫出此硬件的除法器的工作流程圖。說明其工作原理特別是高速原理。要求有仿真時(shí)序波形圖并說出說明在fpga上驗(yàn)證器硬件功能。
    發(fā)表于 12-17 09:10

    除法器的設(shè)計(jì)資料分享

    4.3 實(shí)例九 除法器設(shè)計(jì)4.3.1. 本章導(dǎo)讀要求掌握除法器原理,并根據(jù)原理設(shè)計(jì)除法器模塊以及設(shè)計(jì)對(duì)應(yīng)的測試模塊,最后在 Robei可視化
    發(fā)表于 11-12 07:03

    除法和開方運(yùn)算FPGA串行實(shí)現(xiàn)

    高精度的乘除法和開方等數(shù)學(xué)運(yùn)算FPGA實(shí)現(xiàn)中往往要消耗大量專用乘法器和邏輯資源。在資源敏感而計(jì)算時(shí)延要求較低的應(yīng)用中,以處理時(shí)間換取資源的串行運(yùn)算
    發(fā)表于 07-28 18:05 ?37次下載

    并行除法器 ,并行除法器結(jié)構(gòu)原理是什么?

    并行除法器 ,并行除法器結(jié)構(gòu)原理是什么?   1.可控加法/減法(CAS)單元    和陣列乘法器非常相似,陣列式除法器也是一種并行運(yùn)算
    發(fā)表于 04-13 10:46 ?1.5w次閱讀

    除法器對(duì)數(shù)運(yùn)算電路的應(yīng)用

    除法器對(duì)數(shù)運(yùn)算電路的應(yīng)用 由對(duì)數(shù)電路實(shí)現(xiàn)除法運(yùn)算的數(shù)學(xué)原理是:
    發(fā)表于 04-24 16:07 ?2662次閱讀
    <b class='flag-5'>除法器</b>對(duì)數(shù)<b class='flag-5'>運(yùn)算</b>電路的應(yīng)用

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

    4.3 實(shí)例九 除法器設(shè)計(jì)4.3.1. 本章導(dǎo)讀要求掌握除法器原理,并根據(jù)原理設(shè)計(jì)除法器模塊以及設(shè)計(jì)對(duì)應(yīng)的測試模塊,最后在 Robei可視化
    發(fā)表于 11-07 10:51 ?18次下載
    實(shí)例九— <b class='flag-5'>除法器</b>設(shè)計(jì)

    如何實(shí)現(xiàn)FPGA中的除法運(yùn)算

    FPGA中的硬件邏輯與軟件程序的區(qū)別,相信大家在做除法運(yùn)算時(shí)會(huì)有深入體會(huì)。若其中一個(gè)操作數(shù)為常數(shù),可通過簡單的移位與求和操作代替,但用硬件邏輯完成兩變量間除法
    的頭像 發(fā)表于 04-27 09:16 ?7117次閱讀

    FPGA常用運(yùn)算模塊-加減法器和乘法器

    本文是本系列的第二篇,本文主要介紹FPGA常用運(yùn)算模塊-加減法器和乘法器,xilinx提供了相關(guān)
    的頭像 發(fā)表于 05-22 16:13 ?4231次閱讀
    <b class='flag-5'>FPGA</b><b class='flag-5'>常用</b><b class='flag-5'>運(yùn)算</b><b class='flag-5'>模塊</b>-加減<b class='flag-5'>法器</b>和乘<b class='flag-5'>法器</b>

    FPGA常用運(yùn)算模塊-乘加器

    本文是本系列的第三篇,本文主要介紹FPGA常用運(yùn)算模塊-乘加器,xilinx提供了相關(guān)的IP以便于用戶進(jìn)行開發(fā)使用。
    的頭像 發(fā)表于 05-22 16:17 ?1549次閱讀
    <b class='flag-5'>FPGA</b><b class='flag-5'>常用</b><b class='flag-5'>運(yùn)算</b><b class='flag-5'>模塊</b>-乘加器

    FPGA常用運(yùn)算模塊-復(fù)數(shù)乘法器

    本文是本系列的第五篇,本文主要介紹FPGA常用運(yùn)算模塊-復(fù)數(shù)乘法器,xilinx提供了相關(guān)的IP以便于用戶進(jìn)行開發(fā)使用。
    的頭像 發(fā)表于 05-22 16:23 ?2377次閱讀
    <b class='flag-5'>FPGA</b><b class='flag-5'>常用</b><b class='flag-5'>運(yùn)算</b><b class='flag-5'>模塊</b>-復(fù)數(shù)乘<b class='flag-5'>法器</b>

    FPGA基于線性迭代法的除法器設(shè)計(jì)

    FPGA實(shí)現(xiàn)除法的方法有幾種,比如直接用/來進(jìn)行除法運(yùn)算,調(diào)用IP核進(jìn)行除法運(yùn)算,但這兩種方式都
    的頭像 發(fā)表于 07-04 10:03 ?1176次閱讀
    <b class='flag-5'>FPGA</b>基于線性迭代法的<b class='flag-5'>除法器</b>設(shè)計(jì)