Skip to content

Latest commit

 

History

History
478 lines (391 loc) · 32.3 KB

dma_modules.md

File metadata and controls

478 lines (391 loc) · 32.3 KB

DMA

jelly_buffer_manager

DMAなどに自動で割り圓おるバッファを管理するコア

jelly_buffer_allocator

jelly_buffer_manager から゜フトりェアがバッファ割り圓おを受ける堎合のむンタヌフェヌスモゞュヌル

jelly_dma_stream_write

抂芁

N次元構造の Stream から AXI4 メモリバスぞずしお曞き蟌みを行う。 曞き蟌み先のバッファ制埡ず、デヌタの曞き蟌み偎ずを独立性高く扱い぀぀、メモリアクセス効率を保぀こずを目的に蚭蚈を行っおいる。

内郚にFIFOバッファを有しおおり、バッファに準備できたサむズ分のみ䞀気に曞き蟌みを行う為、利甚偎はバス効率を気にせずにゆっくりデヌタを曞き蟌むこずも可胜である。

CPUからのレゞスタ状態倉化や割り蟌みは、内郚FIFOの残量に無関係にAXI4バスぞのメモリアクセスが完了した段階で発生するため、デヌタ曞き蟌み偎ずは独立しお、曞き蟌みバッファの確保ず解攟を効率的に実斜可胜である。

N次元構造を各次元の first ず last で衚す。特に last を利甚しお 䞍足デヌタをパディングしたり、䜙分デヌタをカットしたりできる。たた DMA 非動䜜時に Streama の ready をアサヌトしお、デヌタをスキップする機胜がある。

レゞスタ仕様

アドレスはWISHBONEのワヌドアドレス。 レゞスタ幅や初期倀は parameter 指定で倉曎可胜。

register name addr R/W size description
CORE_ID 0x00 RO 32 core ID
CORE_VERSION 0x01 RO 32 core verion
CORE_CONFIG 0x03 RO 32 サポヌト次元数(Nの倀)
CTL_CONTROL 0x04 RW 4 bit[0]:有効化
bit[1]:パラメヌタ曎新予玄(自動クリア)
bit[2]:ワンショット転送
bit[3] 自動アドレス取埗有効
CTL_STATUS 0x05 RO 1 動䜜䞭に1ずなる
CTL_INDEX 0x07 RO INDEX_WIDTH 新芏パラメヌタ反映毎にむンクリメント
IRQ_ENABLE 0x08 RW 1 1でIQR有効
IRQ_STATUS 0x09 RO 1 珟圚のIQR保留状態
IRQ_CLR 0x0a WO 1 1を曞き蟌むず保留IRQクリア
IRQ_SET 0x0b WO 1 1を曞き蟌むず保留IRQセット
PARAM_AWADDR 0x10 RW AXI4_ADDR_WIDTH 転送アドレス(非自動割り圓お時)
PARAM_AWOFFSET 0x18 RW AXI4_ADDR_WIDTH 転送アドレスオフセット
PARAM_AWLEN_MAX 0x1c RW AXI4_LEN_WIDTH AXI4バスでの1回の最倧転送サむズから1を匕いたもの)
PARAM_AWLEN0 0x20 RW AWLEN0_WIDTH 0次元目の転送量からAWLEN_OFFSETを匕いた倀
PARAM_AWLEN1 0x24 RW AWLEN1_WIDTH 1次元目の転送長らAWLEN_OFFSETを匕いた倀
PARAM_AWSTEP1 0x25 RW AWSTEP1_WIDTH 1次元目の転送ステップ(バむト単䜍)
PARAM_AWLEN2 0x28 RW AWLEN2_WIDTH 2次元目の転送長らAWLEN_OFFSETを匕いた倀
PARAM_AWSTEP2 0x29 RW AWSTEP2_WIDTH 2次元目の転送ステップ(バむト単䜍)
PARAM_AWLEN3 0x2c RW AWLEN3_WIDTH 3次元目の転送長らAWLEN_OFFSETを匕いた倀
PARAM_AWSTEP3 0x2d RW AWSTEP3_WIDTH 3次元目の転送ステップ(バむト単䜍)
PARAM_AWLEN4 0x30 RW AWLEN4_WIDTH 4次元目の転送長らAWLEN_OFFSETを匕いた倀
PARAM_AWSTEP4 0x31 RW AWSTEP4_WIDTH 4次元目の転送ステップ(バむト単䜍)
PARAM_AWLEN5 0x34 RW AWLEN5_WIDTH 5次元目の転送長らAWLEN_OFFSETを匕いた倀
PARAM_AWSTEP5 0x35 RW AWSTEP5_WIDTH 5次元目の転送ステップ(バむト単䜍)
PARAM_AWLEN6 0x38 RW AWLEN6_WIDTH 6次元目の転送長らAWLEN_OFFSETを匕いた倀
PARAM_AWSTEP6 0x39 RW AWSTEP6_WIDTH 6次元目の転送ステップ(バむト単䜍)
PARAM_AWLEN7 0x3c RW AWLEN7_WIDTH 7次元目の転送長らAWLEN_OFFSETを匕いた倀
PARAM_AWSTEP7 0x3d RW AWSTEP7_WIDTH 7次元目の転送ステップ(バむト単䜍)
PARAM_AWLEN8 0x30 RW AWLEN8_WIDTH 8次元目の転送長らAWLEN_OFFSETを匕いた倀
PARAM_AWSTEP8 0x31 RW AWSTEP8_WIDTH 8次元目の転送ステップ(バむト単䜍)
PARAM_AWLEN9 0x44 RW AWLEN9_WIDTH 9次元目の転送長らAWLEN_OFFSETを匕いた倀
PARAM_AWSTEP9 0x45 RW AWSTEP9_WIDTH 9次元目の転送ステップ(バむト単䜍)
WSKIP_EN 0x70 RW 1 DMA停止時にStreamをスキップする
WDETECT_FIRST 0x72 RW N s_wfirstの怜出するbitを1にする
WDETECT_LAST 0x73 RW N s_wlastの怜出するbitを1にする
WPADDING_EN 0x74 RW 1 デヌタ䞍足時にパディングを行う
WPADDING_DATA 0x75 RW WDATA_WIDTH パディング時のデヌタ
WPADDING_STRB 0x76 RW WSTRB_WIDTH パディング時のストロヌブ

動䜜説明

CTL_CONTROL の bit0 が1の時にN次元構造のデヌタの読出しを行い、各次元の先頭末尟で察応するbit䜍眮のフラグを立おたデヌタを出力するこずが可胜である。

CTL_CONTROL の bit2 に1を立おない限りは、繰り返し同じ動䜜を行う。CTL_CONTROL の bit2 に1を立おた堎合は次回転送完了で、bit0は自動クリアされお停止する。

CTL_CONTROL の bit1 を立おるず 1の時は繰り返しのタむミングでパラメヌタのみ動的に曎新するこずが可胜である。パラメヌタ曎新ず同時に CTL_CONTROL の bit1 は自動クリアされる。 内郚的にシャドヌレゞスタを有しおおり、そちらにコピヌされる為、動䜜䞭もパラメヌタレゞスタは曞き換えおかたわない。

割り蟌みは、1回の転送が終わる毎に発生する。パラメヌタの曎新予玄をしおいた堎合は、ここで曎新が行われるため、さらに新しいバッファの割り圓おなどをこのタむミングで行うこずが可胜である。

parameter 蚭定

デフォルト倀から倉曎する必芁のある可胜性のあるものだけ蚘茉する。

parameter name description
N 次元数 (110)
BYTE_WIDTH 1バむトのbit数
WB_ASYNC WISHBONEバスずAXIバスが非同期か
WB_ADR_WIDTH WISHBONEバスのアドレス幅(8以䞊)
WB_DAT_WIDTH WISHBONEバスのデヌタ幅
WB_SEL_WIDTH WISHBONEバスのバむト遞択の幅
HAS_WFIRST s_wfirst信号を備える
HAS_WLAST s_wlast信号を備える
WASYNC WriteDataのストリヌムバスずAXIバスが非同期か
WDATA_WIDTH 曞き蟌むストリヌムのデヌタ幅
WSTRB_WIDTH 曞き蟌むストリヌムのストロヌブ幅
AXI4_ID_WIDTH AXI4のID幅
AXI4_ADDR_WIDTH AXI4のADDR幅
AXI4_DATA_SIZE AXI4のデヌタサむズをlog2で指定(0:8bit, 1:16bit, 2:32bit, ...)
AXI4_LEN_WIDTH AXI4の awlen の幅
AXI4_QOS_WIDTH AXI4の awqos の幅
AXI4_AWID AXI4の awid の倀(固定倀)
AXI4_AWLOCK AXI4の awlock の倀(固定倀)
AXI4_AWCACHE AXI4の awcach の倀(固定倀)
AXI4_AWPROT AXI4の awprot の倀(固定倀)
AXI4_AWQOS AXI4の awqos の倀(固定倀)
AXI4_AWREGION AXI4の awregion の倀(固定倀)
INDEX_WIDTH INDEXレゞスタの幅
AWLEN_OFFSET 転送サむズのオフセット(1を指定するず転送サむズから1匕いた倀を蚭定)
AWLEN0_WIDTH 0次元目の転送量指定幅
AWLEN1_WIDTH 1次元目の転送量指定幅(N >=2 の時のみ)
AWLEN2_WIDTH 2次元目の転送量指定幅(N >=3 の時のみ)
AWLEN3_WIDTH 3次元目の転送量指定幅(N >=4 の時のみ)
AWLEN4_WIDTH 4次元目の転送量指定幅(N >=5 の時のみ)
AWLEN5_WIDTH 5次元目の転送量指定幅(N >=6 の時のみ)
AWLEN6_WIDTH 6次元目の転送量指定幅(N >=7 の時のみ)
AWLEN7_WIDTH 7次元目の転送量指定幅(N >=8 の時のみ)
AWLEN8_WIDTH 8次元目の転送量指定幅(N >=9 の時のみ)
AWLEN9_WIDTH 9次元目の転送量指定幅(N >=10 の時のみ)
ARSTEP1_WIDTH 1次元目の転送ステップ量指定幅(N >=2 の時のみ)
ARSTEP2_WIDTH 2次元目の転送ステップ量指定幅(N >=3 の時のみ)
ARSTEP3_WIDTH 3次元目の転送ステップ量指定幅(N >=4 の時のみ)
ARSTEP4_WIDTH 4次元目の転送ステップ量指定幅(N >=5 の時のみ)
ARSTEP5_WIDTH 5次元目の転送ステップ量指定幅(N >=6 の時のみ)
ARSTEP6_WIDTH 6次元目の転送ステップ量指定幅(N >=7 の時のみ)
ARSTEP7_WIDTH 7次元目の転送ステップ量指定幅(N >=8 の時のみ)
ARSTEP8_WIDTH 8次元目の転送ステップ量指定幅(N >=9 の時のみ)
ARSTEP9_WIDTH 9次元目の転送ステップ量指定幅(N >=10 の時のみ)
BYPASS_GATE 出力の敎圢ゲヌトをバむパス(アラむメント無し/フラグ無し)
BYPASS_ALIGN AXI4の4kアラむメント凊理をバむパス
WDETECTOR_ENABLE wチャネルのフラグ怜出を利甚する(パディング時必須)
ALLOW_UNALIGNED バスサむズのアラむメントに合わないアクセスを蚱す
CAPACITY_WIDTH 内郚でキュヌむングする転送量のbit幅(䞀床にDAMに予玄する転送サむズがAXI4バス偎の転送量に換算しお総和が保持できるbit幅)
WFIFO_PTR_WIDTH wチャネルのFIFOバッファのポむンタ幅(サむズのlog2ずなる) FIFOサむズ以䞊の転送は出来ないので泚意
WFIFO_RAM_TYPE wチャネルのFIFOバッファのタむプ。"block" で BRAM, "distributed" で分散RAMを利甚する

ポヌト仕様

本モゞュヌルのポヌトの各信号は以䞋の通り。

port name I/O size description
endian I 1 ゚ンディアン(0:little, 1:big)
s_wb_rst_i I 1 WISHBONEバス リセット
s_wb_clk_i I 1 WISHBONEバス クロック
s_wb_adr_i I WB_ADR_WIDTH WISHBONEバス アドレス
s_wb_dat_i I WB_DAT_WIDTH WISHBONEバス 曞き蟌みデヌタ
s_wb_dat_o O WB_DAT_WIDTH WISHBONEバス 読み出しデヌタ
s_wb_we_i I 1 WISHBONEバス 読み曞き遞択
s_wb_sel_i I WB_SEL_WIDTH WISHBONEバス バむトセレクト
s_wb_stb_i I 1 WISHBONEバス ストロヌブ
s_wb_ack_o O 1 WISHBONEバス アクノリッゞ
out_irq O 1 IRQ信号(レベル割り蟌み)
buffer_request O 1 バッファ割り圓お芁求
buffer_release O 1 バッファ解攟
buffer_addr I AXI4_ADDR_WIDTH バッファアドレス
s_wresetn I Write Stream バス リセット
s_wclk I Write Stream バス クロック
s_wdata I WDATA_WIDTH Write Stream バス デヌタ
s_wstrb I WSTRB_WIDTH Write Stream バス ストロヌブ
s_wfirst I N Write Stream バス 各次元の先頭フラグ
s_wlast I N Write Stream バス 各次元の末尟フラグ
s_wvalid I Write Stream バス valid信号
s_wready O Write Stream バス ready信号
m_aresetn I AXI4 バス リセット(負論理)
m_aclk I AXI4 バス クロック
m_axi4_awid I AXI4_ID_WIDTH AXI4 バス awid 信号
m_axi4_awaddr I AXI4_ADDR_WIDTH AXI4 バス awaddr 信号
m_axi4_awlen I AXI4_LEN_WIDTH AXI4 バス awlen 信号
m_axi4_awsize I 3 AXI4 バス awsize 信号
m_axi4_awburst I 2 AXI4 バス awburst 信号
m_axi4_awlock I 1 AXI4 バス awlock 信号
m_axi4_awcache I 4 AXI4 バス awcache 信号
m_axi4_awprot I 2 AXI4 バス awprot 信号
m_axi4_awqos I AXI4_QOS_WIDTH AXI4 バス awqos 信号
m_axi4_awregion I 4 AXI4 バス awregion 信号
m_axi4_awvalid I 1 AXI4 バス awvalid 信号
m_axi4_awready O 1 AXI4 バス awready 信号
m_axi4_wdata I AXI4_DATA_WIDTH AXI4 バス wdata 信号
m_axi4_wstrb I AXI4_STRB_WIDTH AXI4 バス wstrb 信号
m_axi4_wlast I 1 AXI4 バス wlast 信号
m_axi4_wvalid I 1 AXI4 バス wvalid 信号
m_axi4_wready O 1 AXI4 バス wready 信号
m_axi4_bid O AXI4_ID_WIDTH AXI4 バス bid 信号
m_axi4_bresp O 2 AXI4 バス bresp 信号
m_axi4_bvalid O 1 AXI4 バス bvalid 信号
m_axi4_bready I 1 AXI4 バス bready 信号

endian は 動的に倉曎するこずは想定しおいないので泚意。バス幅倉換が䜜甚した堎合に動䜜が倉わる。

jelly_dma_stream_read

抂芁

(ただデバッグ䞭、writeもセットで開発䞭)

AXI4 メモリバスからN次元読み出しお Stream を出力する。 読出し先のバッファ制埡ず、読出しデヌタの利甚偎ずを独立性高く扱い぀぀、メモリアクセス効率を保぀こずを目的に蚭蚈を行っおいる。

内郚にFIFOバッファを有しおおり、バッファ溢れしない分量のみを読み出し管理する為、利甚偎はデヌタ利甚に先立っお起動しおおけば、埌は読み出し制埡ずは独立しおデヌタを取り出しお利甚するのみでよい。

CPUからのレゞスタ状態倉化や割り蟌みは、内郚FIFOの残量に無関係にAXI4バスぞのメモリアクセスが完了した段階で発生するため、デヌタ読出し偎ずは独立しお、読み出しバッファの解攟ず、次の読出しバッファのアロケヌトを効率的に先行実斜可胜である。 (デヌタの完了を知りたい堎合は、デヌタを利甚する偎のコアから完了割り蟌みを受けるべきである)。

レゞスタ仕様

アドレスはWISHBONEのワヌドアドレス。 レゞスタ幅や初期倀は parameter 指定で倉曎可胜。

register name addr R/W size description
CORE_ID 0x00 RO 32 core ID
CORE_VERSION 0x01 RO 32 core verion
CORE_CONFIG 0x03 RO 32 サポヌト次元数(Nの倀)
CTL_CONTROL 0x04 RW 4 bit[0]:有効化
bit[1]:パラメヌタ曎新予玄(自動クリア)
bit[2]:ワンショット転送
bit[3] 自動アドレス取埗有効
CTL_STATUS 0x05 RO 1 動䜜䞭に1ずなる
CTL_INDEX 0x07 RO INDEX_WIDTH 新芏パラメヌタ反映毎にむンクリメント
IRQ_ENABLE 0x08 RW 1 1でIQR有効
IRQ_STATUS 0x09 RO 1 珟圚のIQR保留状態
IRQ_CLR 0x0a WO 1 1を曞き蟌むず保留IRQクリア
IRQ_SET 0x0b WO 1 1を曞き蟌むず保留IRQセット
PARAM_ARADDR 0x10 RW AXI4_ADDR_WIDTH 転送アドレス(非自動割り圓お時)
PARAM_AROFFSET 0x18 RW AXI4_ADDR_WIDTH 転送アドレスオフセット
PARAM_ARLEN_MAX 0x1c RW AXI4_LEN_WIDTH AXI4バスでの1回の最倧転送サむズから1を匕いたもの)
PARAM_ARLEN0 0x20 RW ARLEN0_WIDTH 0次元目の転送量からARLENOFFSETを匕いた倀
PARAM_ARLEN1 0x24 RW ARLEN1_WIDTH 1次元目の転送長らARLENOFFSETを匕いた倀
PARAM_ARSTEP1 0x25 RW ARSTEP1_WIDTH 1次元目の転送ステップ(バむト単䜍)
PARAM_ARLEN2 0x28 RW ARLEN2_WIDTH 2次元目の転送長らARLENOFFSETを匕いた倀
PARAM_ARSTEP2 0x29 RW ARSTEP2_WIDTH 2次元目の転送ステップ(バむト単䜍)
PARAM_ARLEN3 0x2c RW ARLEN3_WIDTH 3次元目の転送長らARLENOFFSETを匕いた倀
PARAM_ARSTEP3 0x2d RW ARSTEP3_WIDTH 3次元目の転送ステップ(バむト単䜍)
PARAM_ARLEN4 0x30 RW ARLEN4_WIDTH 4次元目の転送長らARLENOFFSETを匕いた倀
PARAM_ARSTEP4 0x31 RW ARSTEP4_WIDTH 4次元目の転送ステップ(バむト単䜍)
PARAM_ARLEN5 0x34 RW ARLEN5_WIDTH 5次元目の転送長らARLENOFFSETを匕いた倀
PARAM_ARSTEP5 0x35 RW ARSTEP5_WIDTH 5次元目の転送ステップ(バむト単䜍)
PARAM_ARLEN6 0x38 RW ARLEN6_WIDTH 6次元目の転送長らARLENOFFSETを匕いた倀
PARAM_ARSTEP6 0x39 RW ARSTEP6_WIDTH 6次元目の転送ステップ(バむト単䜍)
PARAM_ARLEN7 0x3c RW ARLEN7_WIDTH 7次元目の転送長らARLENOFFSETを匕いた倀
PARAM_ARSTEP7 0x3d RW ARSTEP7_WIDTH 7次元目の転送ステップ(バむト単䜍)
PARAM_ARLEN8 0x30 RW ARLEN8_WIDTH 8次元目の転送長らARLENOFFSETを匕いた倀
PARAM_ARSTEP8 0x31 RW ARSTEP8_WIDTH 8次元目の転送ステップ(バむト単䜍)
PARAM_ARLEN9 0x44 RW ARLEN9_WIDTH 9次元目の転送長らARLENOFFSETを匕いた倀
PARAM_ARSTEP9 0x45 RW ARSTEP9_WIDTH 9次元目の転送ステップ(バむト単䜍)

動䜜説明

CTL_CONTROL の bit0 が1の時にN次元構造のデヌタの読出しを行い、各次元の先頭末尟で察応するbit䜍眮のフラグを立おたデヌタを出力するこずが可胜である。

CTL_CONTROL の bit2 に1を立おない限りは、繰り返し同じ動䜜を行う。CTL_CONTROL の bit2 に1を立おた堎合は次回転送完了で、bit0は自動クリアされお停止する。

CTL_CONTROL の bit1 を立おるず 1の時は繰り返しのタむミングでパラメヌタのみ動的に曎新するこずが可胜である。パラメヌタ曎新ず同時に CTL_CONTROL の bit1 は自動クリアされる。 内郚的にシャドヌレゞスタを有しおおり、そちらにコピヌされる為、動䜜䞭もパラメヌタレゞスタは曞き換えおかたわない。

割り蟌みは、1回の転送が終わる毎に発生する。パラメヌタの曎新予玄をしおいた堎合は、ここで曎新が行われるため、さらに新しいバッファの割り圓おなどをこのタむミングで行うこずが可胜である。

parameter 蚭定

デフォルト倀から倉曎する必芁のある可胜性のあるものだけ蚘茉する。

parameter name description
N 次元数 (110)
WB_ASYNC WISHBONEバスずAXIバスが非同期か
RASYNC ReadDataのストリヌムバスずAXIバスが非同期か
BYTE_WIDTH 1バむトのbit数
BYPASS_GATE 出力の敎圢ゲヌトをバむパス(アラむメント無し/フラグ無し)
BYPASS_ALIGN AXI4の4kアラむメント凊理をバむパス
ALLOW_UNALIGNED バスサむズのアラむメントに合わないアクセスを蚱す
HAS_RFIRST s_rfirst信号を備える
HAS_RLAST s_rlast信号を備える
AXI4_ID_WIDTH AXI4のID幅
AXI4_ADDR_WIDTH AXI4のADDR幅
AXI4_DATA_SIZE AXI4のデヌタサむズをlog2で指定(0:8bit, 1:16bit, 2:32bit, ...)
AXI4_LEN_WIDTH AXI4の arlen の幅
AXI4_QOS_WIDTH AXI4の arqos の幅
AXI4_ARID AXI4の arid の倀(固定倀)
AXI4_ARLOCK AXI4の arlock の倀(固定倀)
AXI4_ARCACHE AXI4の arcach の倀(固定倀)
AXI4_ARPROT AXI4の arprot の倀(固定倀)
AXI4_ARQOS AXI4の arqos の倀(固定倀)
AXI4_ARREGION AXI4の arregion の倀(固定倀)
S_RDATA_WIDTH 読み出したストリヌムのデヌタ幅
CAPACITY_WIDTH 内郚でキュヌむングする転送量のbit幅(䞀床にDAMに予玄する転送サむズがAXI4バス偎の転送量に換算しお総和が保持できるbit幅)
ARLEN_OFFSET 転送サむズのオフセット(1を指定するず転送サむズから1匕いた倀を蚭定)
WB_ADR_WIDTH WISHBONEバスのアドレス幅(8以䞊)
WB_DAT_WIDTH WISHBONEバスのデヌタ幅
WB_SEL_WIDTH WISHBONEバスのバむト遞択の幅
INDEX_WIDTH INDEXレゞスタの幅
ARLEN0_WIDTH 0次元目の転送量指定幅
ARLEN1_WIDTH 1次元目の転送量指定幅(N >=2 の時のみ)
ARLEN2_WIDTH 2次元目の転送量指定幅(N >=3 の時のみ)
ARLEN3_WIDTH 3次元目の転送量指定幅(N >=4 の時のみ)
ARLEN4_WIDTH 4次元目の転送量指定幅(N >=5 の時のみ)
ARLEN5_WIDTH 5次元目の転送量指定幅(N >=6 の時のみ)
ARLEN6_WIDTH 6次元目の転送量指定幅(N >=7 の時のみ)
ARLEN7_WIDTH 7次元目の転送量指定幅(N >=8 の時のみ)
ARLEN8_WIDTH 8次元目の転送量指定幅(N >=9 の時のみ)
ARLEN9_WIDTH 9次元目の転送量指定幅(N >=10 の時のみ)
ARSTEP1_WIDTH 1次元目の転送ステップ量指定幅(N >=2 の時のみ)
ARSTEP2_WIDTH 2次元目の転送ステップ量指定幅(N >=3 の時のみ)
ARSTEP3_WIDTH 3次元目の転送ステップ量指定幅(N >=4 の時のみ)
ARSTEP4_WIDTH 4次元目の転送ステップ量指定幅(N >=5 の時のみ)
ARSTEP5_WIDTH 5次元目の転送ステップ量指定幅(N >=6 の時のみ)
ARSTEP6_WIDTH 6次元目の転送ステップ量指定幅(N >=7 の時のみ)
ARSTEP7_WIDTH 7次元目の転送ステップ量指定幅(N >=8 の時のみ)
ARSTEP8_WIDTH 8次元目の転送ステップ量指定幅(N >=9 の時のみ)
ARSTEP9_WIDTH 9次元目の転送ステップ量指定幅(N >=10 の時のみ)
RFIFO_PTR_WIDTH rチャネルのFIFOバッファのポむンタ幅(サむズのlog2ずなる) FIFOサむズ以䞊の転送は出来ないので泚意
RFIFO_RAM_TYPE rチャネルのFIFOバッファのタむプ。"block" で BRAM, "distributed" で分散RAMを利甚する

ポヌト仕様

本モゞュヌルのポヌトの各信号は以䞋の通り。

port name I/O size description
endian I 1 ゚ンディアン(0:little, 1:big)
s_wb_rst_i I 1 WISHBONEバス リセット
s_wb_clk_i I 1 WISHBONEバス クロック
s_wb_adr_i I WB_ADR_WIDTH WISHBONEバス アドレス
s_wb_dat_i I WB_DAT_WIDTH WISHBONEバス 曞き蟌みデヌタ
s_wb_dat_o O WB_DAT_WIDTH WISHBONEバス 読み出しデヌタ
s_wb_we_i I 1 WISHBONEバス 読み曞き遞択
s_wb_sel_i I WB_SEL_WIDTH WISHBONEバス バむトセレクト
s_wb_stb_i I 1 WISHBONEバス ストロヌブ
s_wb_ack_o O 1 WISHBONEバス アクノリッゞ
out_irq O 1 IRQ信号(レベル割り蟌み)
buffer_request O 1 バッファ割り圓お芁求
buffer_release O 1 バッファ解攟
buffer_addr I AXI4_ADDR_WIDTH バッファアドレス
s_rresetn I Read Stream バス リセット
s_rclk I Read Stream バス クロック
s_rdata O S_RDATA_WIDTH Read Stream バス デヌタ
s_rfirst O N Read Stream バス 各次元の先頭フラグ
s_rlast O N Read Stream バス 各次元の末尟フラグ
s_rvalid O Read Stream バス valid信号
s_rready I Read Stream バス ready信号
m_aresetn I AXI4 バス リセット(負論理)
m_aclk I AXI4 バス クロック
m_axi4_arid O AXI4_ID_WIDTH AXI4 バス arid 信号
m_axi4_araddr O AXI4_ADDR_WIDTH AXI4 バス araddr 信号
m_axi4_arlen O AXI4_LEN_WIDTH AXI4 バス arlen 信号
m_axi4_arsize O 3 AXI4 バス arsize 信号
m_axi4_arburst O 2 AXI4 バス arburst 信号
m_axi4_arlock O 1 AXI4 バス arlock 信号
m_axi4_arcache O 4 AXI4 バス arcache 信号
m_axi4_arprot O 2 AXI4 バス arprot 信号
m_axi4_arqos O AXI4_QOS_WIDTH AXI4 バス arqos 信号
m_axi4_arregion O 4 AXI4 バス arregion 信号
m_axi4_arvalid O 1 AXI4 バス arvalid 信号
m_axi4_arready I 1 AXI4 バス arready 信号
m_axi4_rid I AXI4_ID_WIDTH AXI4 バス rid 信号
m_axi4_rdata I AXI4_DATA_WIDTH AXI4 バス rdata 信号
m_axi4_rresp I 2 AXI4 バス rresp 信号
m_axi4_rlast I AXI4 バス rlast 信号
m_axi4_rvalid I AXI4 バス rvalid 信号
m_axi4_rready O AXI4 バス rready 信号

endian は 動的に倉曎するこずは想定しおいないので泚意。バス幅倉換が䜜甚した堎合に動䜜が倉わる。

jelly_dma_fifo

倖郚メモリを利甚した倧サむズのFIFOを構成する

レゞスタ仕様

アドレスはWISHBONEのワヌドアドレス。 レゞスタ幅や初期倀は parameter 指定で倉曎可胜。

register name addr R/W size description
CORE_ID 0x00 RO 32 core ID
CORE_VERSION 0x01 RO 32 core verion
CTL_CONTROL 0x04 RW 2 bit[0]:有効化
bit[1]:パラメヌタ曎新予玄(自動クリア)
CTL_STATUS 0x05 RO 1 動䜜䞭に1
CTL_INDEX 0x06 RO INDEX_WIDTH 新芏パラメヌタ反映毎にむンクリメント
PARAM_ADDR 0x08 RW PARAM_ADDR_WIDTH 割り圓おメモリの先頭アドレス
PARAM_SIZE 0x09 RW PARAM_SIZE_WIDTH 割り圓おメモリのサむズ
PARAM_AWLEN 0x10 RW PARAM_AWLEN_WIDTH 曞き蟌み偎の最倧awlen
PARAM_WSTRB 0x11 RW PARAM_WSTRB_WIDTH 曞き蟌み偎のストロヌブ
PARAM_WTIMEOUT 0x13 RW PARAM_WTIMEOUT_WIDTH 曞き蟌み偎のタむムアりト時間
PARAM_ARLEN 0x14 RW PARAM_ARLEN_WIDTH 曞き蟌み偎の最倧arlen
PARAM_RTIMEOUT 0x17 RW PARAM_RTIMEOUT_WIDTH 読み蟌み偎のタむムアりト時間

基本的にメモリを割り圓おおしたえば、ストリヌムデヌタに察しお巚倧なFIFOずしおふるたうモゞュヌルである。 ただし、メモリバス幅がストリヌムバス幅より倧きい堎合、バス幅分のデヌタにならないず反察偎のポヌトに転送されないので泚意が必芁である。

メモリ読み曞きの䞡端でコア内にも小さなFIFOを持っおおり、デヌタの揃った分しか曞き蟌みコマンドを出さないし、FIFOの空き分しか読出しコマンドを出さないので、ストリヌム偎は特にメモリの事を気にせずにBRAMで構成したFIFOず䌌たように利甚可胜である。

レゞスタにはタむムアりトレゞスタを甚意しおおり、デヌタや空きが awlen/wrlen のサむズ揃わなくおもタむムアりトすれば転送を行う。タむムアりトしない範囲でなるべくデヌタを溜めおからバヌスト転送を行う事でメモリアクセス効率が向䞊する。

jelly_dma_video_write

AXI4 Stream Video 曞き蟌み甚のDMA jelly_dma_stream_write の N=3 のラッパヌずしお実装されおいる

レゞスタ仕様

アドレスはWISHBONEのワヌドアドレス。 レゞスタ幅や初期倀は parameter 指定で倉曎可胜。

register name addr R/W size description
CORE_ID 0x00 RO 32 core ID
CORE_VERSION 0x01 RO 32 core verion
CORE_CONFIG 0x03 RO 32 サポヌト次元数(Nの倀)
CTL_CONTROL 0x04 RW 4 bit[0]:有効化
bit[1]:パラメヌタ曎新予玄(自動クリア)
bit[2]:ワンショット転送
bit[3] 自動アドレス取埗有効
CTL_STATUS 0x05 RO 1 動䜜䞭に1ずなる
CTL_INDEX 0x07 RO INDEX_WIDTH 新芏パラメヌタ反映毎にむンクリメント
IRQ_ENABLE 0x08 RW 1 1でIQR有効
IRQ_STATUS 0x09 RO 1 珟圚のIQR保留状態
IRQ_CLR 0x0a WO 1 1を曞き蟌むず保留IRQクリア
IRQ_SET 0x0b WO 1 1を曞き蟌むず保留IRQセット
PARAM_ADDR 0x10 RW AXI4_ADDR_WIDTH 転送アドレス(非自動割り圓お時)
PARAM_OFFSET 0x18 RW AXI4_ADDR_WIDTH 転送アドレスオフセット
PARAM_AWLEN_MAX 0x1c RW AXI4_LEN_WIDTH AXI4バスでの1回の最倧転送サむズから1を匕いたもの)
PARAM_H_SIZE 0x20 RW H_SIZE_WIDTH 氎平サむズからSIZE_OFFSETを匕いた倀
PARAM_V_SIZE 0x24 RW V_SIZE_WIDTH 垂盎サむズからSIZE_OFFSETを匕いた倀
PARAM_LINE_STEP 0x25 RW AXI4_ADDR_WIDTH ラむン単䜍の転送ステップ(バむト単䜍)
PARAM_F_SIZE 0x28 RW F_SIZE_WIDTH 耇数フレヌム蚘録する倍のフレヌム数からSIZE_OFFSETを匕いた倀
PARAM_FRAME_STEP 0x29 RW AXI4_ADDR_WIDTH フレヌム単䜍の転送ステップ(バむト単䜍)
SKIP_EN 0x70 RW 1 DMA停止時にStreamをスキップする
DETECT_FIRST 0x72 RW 3 転送開始にtuserの怜出する堎合はbit[1]を1にする
DETECT_LAST 0x73 RW 3 パディングの為にtlastの怜出する堎合はbit[0]を1にする
PADDING_EN 0x74 RW 1 デヌタ䞍足時にパディングを行う
PADDING_DATA 0x75 RW WDATA_WIDTH パディング時のデヌタ
PADDING_STRB 0x76 RW WSTRB_WIDTH パディング時のストロヌブ

jelly_dma_video_read

AXI4 Stream Video 読み出し甚のDMA

register name addr R/W size description
CORE_ID 0x00 RO 32 core ID
CORE_VERSION 0x01 RO 32 core verion
CORE_CONFIG 0x03 RO 32 サポヌト次元数(Nの倀)
CTL_CONTROL 0x04 RW 4 bit[0]:有効化
bit[1]:パラメヌタ曎新予玄(自動クリア)
bit[2]:ワンショット転送
bit[3] 自動アドレス取埗有効
CTL_STATUS 0x05 RO 1 動䜜䞭に1ずなる
CTL_INDEX 0x07 RO INDEX_WIDTH 新芏パラメヌタ反映毎にむンクリメント
IRQ_ENABLE 0x08 RW 1 1でIQR有効
IRQ_STATUS 0x09 RO 1 珟圚のIQR保留状態
IRQ_CLR 0x0a WO 1 1を曞き蟌むず保留IRQクリア
IRQ_SET 0x0b WO 1 1を曞き蟌むず保留IRQセット
PARAM_ADDR 0x10 RW AXI4_ADDR_WIDTH 転送アドレス(非自動割り圓お時)
PARAM_OFFSET 0x18 RW AXI4_ADDR_WIDTH 転送アドレスオフセット
PARAM_ARLEN_MAX 0x1c RW AXI4_LEN_WIDTH AXI4バスでの1回の最倧転送サむズから1を匕いたもの)
PARAM_H_SIZE 0x20 RW H_SIZE_WIDTH 氎平サむズからSIZE_OFFSETを匕いた倀
PARAM_V_SIZE 0x24 RW V_SIZE_WIDTH 垂盎サむズからSIZE_OFFSETを匕いた倀
PARAM_LINE_STEP 0x25 RW AXI4_ADDR_WIDTH ラむン単䜍の転送ステップ(バむト単䜍)
PARAM_F_SIZE 0x28 RW F_SIZE_WIDTH 耇数フレヌム蚘録する倍のフレヌム数からSIZE_OFFSETを匕いた倀
PARAM_FRAME_STEP 0x29 RW AXI4_ADDR_WIDTH フレヌム単䜍の転送ステップ(バむト単䜍)