IP

 同期FIFOと 非同期FIFO
同期FIFOの構造と非同期FIFOの構造を比較して、説明している。必見。

 2進数から BCDへの変換回路
必要があって10ビットの2進数から3桁のBCD(Binary-coded decimal)への変換回路を作りました。私はビットごとに+6補正を入れながら、足していきました。変換するに11クロックです。
 2進数から BCDへの変換回路(まとめ)
”2進数からBCDへの変換回路1”の続き。この前、お恥ずかしい自分の回路を公開してから、 いろんなかたに変換回路を紹介していただいた。やはり、アルゴリズムが大事だな、ということを実感した。紹介していただいた回路をまとめてみた。

 擬似乱数、M系 列を使う1 
今度、作製するAXI4マスタIP用に擬似乱数としてM系列を使うことにした。
 擬似乱数、M系 列を使う2
前回は8ビットのM系列を試してみたが、256回目で元のパターンに戻るので、ちょっと物足り ないかな?と思ったので、16ビットのM系列の下8ビットを取ってみることにした。これならば、元のパターンに戻るのは、65536回目だ。 

 AXI Performance Monitor IPを試してみた1(インプリメント)
今回はAXI Performance Monitor IPを試して見ることにした。
AXI Performance Monitor は、言わばカウンタ・レジスタの塊でReadやWriteのレイテンシや、総データ転送数、トランザクション数をカウントしてくれるIPのようだ。
 AXI Performance Monitor IPを試してみた2(SDK)
前 回は、AXI Performance Monitor をXPSプロジェクトに入れて設定し、PlanAheadに戻ってインプリメントを行った。今回はSDKを起動して、XMDでAXI Performance Monitor が動作しているどうかを確認する。動作が確認できた。
 AXI Performance Monitor IPを試してみた3(SDKでCソフトを作成)
前回はXMDで直接アドレスを入力してAXI Performance Monitor を試してみたが、今回はCでソフトウェアを作成して1秒あたりのRead/Writeトランザクションのパラメータを取得することにした。
AXI IIC のお勉強1
今までは、自分で作ったI2Cの回路を使用してきたが、Xilinx社のEDK用IPコアの AXI IIC を使ってみることにした。そこで、AXI IICの使い方を勉強してみた。
Control (CR) Register、Status Register (SR)
AXI IIC のお勉強2
各種レジスタとレジスタ設定例

XORShiftを試してみ た1(XORShift.vhd)
なひたふさんの月刊 特電技術 第2号に載っている擬似乱数発生回路XORShift を試してみた。VHDLコードをnumeric_stdパッケージ用に書き換えた。HDLコードとテストベンチのHDLコードあり。シミュレーションを行った。
XORShiftを試してみ た2(M系列、m_seq_32.vh)
XORShift との対比のために32ビット長のM系列を作ってシミュレーションを行った。HDLコードあり。
XORShiftを試してみ た3(ビットごとの自己相関を取ってみた)
XORShift と32ビット長のM系列のビットごとの自己相関を取って、グラフ化してみた。結構違っている。

AXI VDMAのお勉強
AXI VDMAはXilinx社のEDK用のIPコアだ。この使い方を勉強するので、覚書として書いておくことにした。
AXI VDMAのお勉強2(Register Direct Mode)
AXI VDMAはマニュアルが152ページもあって、どうやって使うか覚えるのが大変だが、90ページの Programming Sequence を読みながら、覚書を書いていこうと思う。Register Direct Mode (C_INCLUDE_SG = 0) (90ページ) 、Updating Video Transfer Information (91ページ)
AXI VDMAのお勉強3(Scatter Gather Mode)
Scatter Gather Mode (C_INCLUDE_SG = 1) (92ページ)、Updating Video Transfer Information(93ページ)、Additional Design Information(101ページ)
AXI VDMAのお勉強4(AXI VDMA General Operations 1)
AXI VDMA General Operations(93ページ)
”AXI VDMA Frame Boundary”、”AXI VDMA Video Transfer”、”Free Run Mode (C_USE_FSYNC = 0)”、”Frame Sync Mode (C_USE_FSYNC = 1,2,3)”
AXI VDMAのシミュレーション1
AXI VDMAシミュレーションをするために、今まで、いろいろとXPSプロジェクトのカスタムIPを作ってきた。それらのIPを集めて、AXI VDMAをシミュレーションするために、Project Navigator のプロジェクト(VDMA_test)を作った。
AXI VDMAのシミュレーション2(Generate Netlist)
デザイン・ルール・チェックが通ったので、ネットリストを生成してみた。失敗した。
AXI VDMAのシミュレーション3(Generate Netlist2)
前回、ネットリストが生成できなかったので、もう一度、プロジェクトを作り直した。ネットリス トを生成することが出来た。
AXI VDMAのシミュレーション4(インプリメント)
ほとんどのカスタムIPはインプリメントする予定なので、Project Navigator に戻ってインプリメントしてみた。
AXI VDMAのシミュレーション5(こんどこそシミュレーション)
インプリメントをしてみたので、こんどこそISim14.5でシミュレーションを行った。
AXI VDMAのシミュレーション6(reg_set_axi_lite_master のバグ)
AXI VDMAの設定レジスタに設定値を入れる必要がある。それにはどうするかというと、reg_set_axi_lite_master IPの vdma_reg_set.txt に設定するレジスタのアドレスと設定データを書いて、AXI VDMAの設定レジスタに書き込む必要がある。その、reg_set_axi_lite_master IPにバグが有ったので修正した。
AXI VDMAのシミュレーション7(v_axi4s_vid_out)
v_axi4s_vid_outだが、AXI4 Stream の s_axis_video_tdata と s_axis_video_tuser の値が X になっている。
AXI VDMAのシミュレーション8(とりあえず休止)
いろいろとAXI VDMAのシミュレーションのために頑張ってきたが、どうやら AXI VDMAの m_axis_mm2s_tdata, m_axis_mm2s_tkeep, m_axis_mm2s_tuser が 'X' になる状況は解決できないようだ。AXI4-Streamのデータ幅が24ビットの場合はXになってしまう。
AXI VDMAのシミュレーション9(v_axi4s_vid_outの変更)
s_axis_video_tdata のMM2Sのデータ幅を24ビットから32ビットに変更した。
AXI VDMAのシミュレーション10(シミュレーション成功)
カメラ・インターフェース回路のmt9d111_inf_axi_stream のデータバス幅を24ビット幅から32ビット幅に変更した。シミュレーションができるようになった。(しかし、v_axi4s_vid_out のビデオ信号出力が出ないので自作することにした)
AXI VDMAのシミュレーション11(シミュレーション成功2)
前回、シミュレーションが成功したと書いたが、v_axi4s_vid_out IP の video_... の信号が出て無かった。従って、HDMIの信号が出力されていない。
そこで、v_axi4s_vid_out IP と互換(あくまで私が想定する用途ではということです)のカスタムIPを自分で作った。
シミュレーションすることができたが、13msecほどシミュレーションすると、ISimが落ちてしまう
AXI VDMAのシミュレーション12(ハードウェア協調シミュレーション)
ISimのハードウェア協調シミュレーションを試みたができなかった。
AXI VDMAのシミュレーション13(Questaでシミュレーション)
AXI VDMA回路のシミュレーションをQuesta で行った。成功した。

ラプラシアン・フィルタの AXI4 Master IPを作製する1(仕様の検討)
Vivado HLSでラプラシアン・フィルタをAXI Master で構成するC言語のソースを書いて、IPとしてZedBoardのLinux用ハードウェアに実装してみたが、動作しなかった。そこで、Vivado HLSが出力したIPのトップファイルのポート構成はそのままで、自分でHDLを書いて、ラプラシアン・フィルタのAXI4 Master IPを完成させてみることにした。
lap_filter_axim_cam_fb_if.v をシミュレーションする
Vivado HLSでラプラシアン・フィルタ関数をaxi masterモジュールにする2”で、Vivado HLSでIPとして出力された Verilog HDLファイルを見たが、使えそうな機能を持ったモジュールが結構あった。その中から、lap_filter_axim_cam_fb_if.v をシミュレーションしてみることにした。
lap_filter_axim_cam_fb_if.v をシミュレーションする2
”lap_filter_axim_cam_fb_if.v をシミュレーションする”でlap_filter_axim_cam_fb_if.vのAXI4 Master Readをシミュレーションしてみたが、今度は、AXI4 Master Write をシミュレーションしてみた。

AXI4 Master用自作AXI4 Slave BFM
今までの自作BFMでは、Writeした値をReadするという検証戦略だったため、Read している時にはWrite出来ないという制約が付いていた。今回はそれではシミュレーションするのに不都合があったため、その制約を取り払った。
シミュレーション用 同期FIFO IP
axi_slave_BFM.v を変更して、ネストされたアドレス転送を受け付けることにした。そのためには、ネストされたReadアドレス転送を溜めておくためにFIFOが必要となる。それで、シミュ レーションに使用するために汎用の同期FIFO を作った。
AXI4 Slave Bus Functional Model (axi_slave_BFM.vhd)
AXI4 Slave Bus Functional Model (axi_slave_BFM.vhd) を貼っておく。今回のBFMは今まで公開したBFMをアドレス転送をネストできるように変更したものだ。よりXilinx社のAXI Interconnect に近くなったと思う。但し、ネストできるアドレス転送は15なので、より多いと思う。ソースコードあり。

AXI4 Master Interfaceモジュールの作製1(仕様の検討)
今までのカメラ・コントローラやビットマップ・ディスプレイ・コントローラは、複数のアドレス 転送を許さなかったので、今回は複数のアドレス転送を許す汎用AXI4 Master Interfaceモジュールを作製することにした。
AXI4 Master Interfaceモジュールの作製2(シミュレーション)
汎用AXI Master IPを目指して、ユーザー回路を非同期FIFOのインターフェースで接続するAXI4 Master Interfaceモジュールが大体出来た。非同期FIFOを使用しているので、例えばユーザー回路がフルHDのピクセルクロックで動作して、AXIバスが200MHzで 動作するということが可能になる。
単体シミュレーションを行った。
AXI4 Master Interfaceモジュールの作製3(シミュレーション2)
前回は、AXI Slave BFM がアドレス転送がネストできないので、アドレス転送のネストにも対応できるように AXI Slave BFM を書き換えた。そのため、シミュレーション用 同期FIFO IPを作製して使用した。このAXI Slave BFM を使用してシミュレーションを行った。
AXI4 Master Interfaceモジュールの作製4(axi4_master_inf.v のHDLソース)
AXI4 Masterアクセスをする汎用モジュール axi4_master_inf.v を貼っておく。
AXI4 Master Interfaceモジュールの作製5(Write用FIFOのXCO)
axi4_master_inf.v で使用されているWrite用のFIFOのXCOファイルを貼っておく。
AXI4 Master Interfaceモジュールの作製6(Read用FIFOのXCO)
axi4_master_inf.v で使用されているRead用のFIFOのXCOファイルを貼っておく。

CORDIC IP
XilinxのCoregenにCORDIC IPがある。CORDIC IP では、次の種類の方程式を実行できるそうだ。
直交座標⇔極座標の変換、三角関数、双曲型、平方根

AXI VDMAのレジスタ設定(Triple Frame Buffer)
AXI VDMAを Triple Frame Buffer (LogiCORE IP AXI Video Direct Memory Access v6.1Product Guide for Vivado Design Suite PG020 December 18, 2013の65ページ)の設定値に設定する際のAXI VDMAのレジスタ設定値の覚書を書いておく。

AXI4-Stream Switchについて
今回は、”AXI4-Stream版ラプラシアンフィルタIPのカメラ表示システム5(制約 ファイル、インプリメント)”で使ったAXI4-Stream Switchについて学んでいく。

AXI VDMAのソフトウェア制御について
AXI VDMAのソフトウェア制御について学習した。
AXI VDMAのドライバによるレジスタの設定値
AXI VDMAのドライバを使って書いてみたが、実際にどのようにレジスタを設定しているか?を見ていく。Vivado Logic Analyzer でAXI VDMAの設定用のAXI4 Lite Slave バスを観察して、どのレジスタを設定しているのかを見ていこう。

AXI VDMAのドライバによるレジスタの設定値
AXI VDMAのドライバを使って書いてみたが、実際にどのようにレジスタを設定しているか?を見ていく。Vivado Logic Analyzer でAXI VDMAの設定用のAXI4 Lite Slave バスを観察して、どのレジスタを設定しているのかを見ていこう。
AXI VDMAのドライバによるレジスタの設定値2
前回はディスプレイに画像が表示されない状態でデバックのためにドライバを使用してAXI VDMA を設定した時のWrite/Read したレジスタ番地とその値を調べた。
今回は、動作する状態になった時のWrite/Read したAXI VDMAのレジスタ番地とその値を調べる。

IP Integrator のブロックデザインで使うと便利なIP
IP Integrator のブロックデザインで使うと便利なIP がある。それは、ISEのXPS 時代からも存在していた。
わかっている限りでは、Utility Vector Logic, Utility Reduced Logic, Concat, Constant, Slice だ。

Video In to AXI4-Stream IP と AXI4-Stream to Video Out IP
ビデオ入力-AXI4 Stream 変換、AXI4 Stream-ビデオ出力 を作ろうと思ったが、すでにXilinx のIP としてあるので、それを学習して使おうと思う。
Video Timing Controller (VTC)
Video In to AXI4-Stream IP と AXI4-Stream to Video Out IPを使うということになったが、Video Timing Controller (VTC) も必要ということだった。

プロジェクトにインスタンスされているIPに制約を追加する
IP にBUFRの制約を追加すれば、XGA解像度でもHDMI 表示がうまくいくことを確かめる。(BUFR でクロックを分周する場合は制約を追加する必要がある(ビットマップ・ディスプレイ・コントローラ IP のHDMI 出力参 照)

AXI VDMAのドライバによるレジスタの設定値(S2MMの設定)
”AXI VDMAのドライバによるレジスタの設定値”でAXI VDMA のS2MM を使用する場合のベアメタル・ドライバの設定値をVivado Analyzer を使って解析した。
それでも、前回解析したのは動作しなかった場合で、フレームバッファが 1 面の時だったので、動作するようになった 3 面のフレームバッファの場合の解析をしてみた。

ビットマップ・ディスプレ イ・コントローラのReport CDC unsafe 箇所を確認し、修正する
”Vivado のImplemented Design で Report CDC を確認する”で確認されたビットマップ・ディスプレイ・コントローラのReport CDC unsafe 箇所を確認して修正した。

Synchronizer IP をVivado 2016.2 で作った
”PmodHB5 のセンサー・フィードバック処理IP を作ってみた2”で作ったセンサー・フィードバック端子の入力はベースクロックに同期しているわけではないので、シンクロナイザーが必要だ。
FF を数個並べてシンクロナイザーを作ることにした。これはVivado HLS で作ろうとしてみたのだが、やはり作ることは難しい。
そこで、久しぶりにVerilog HDL を使って、シンクロナイザーを作ることにした。

ビットマップ・ディスプレ イ・コントローラをAXI4-Stream対応にする1(構想編)
以前にVivado HLS でDMA IP を作ってみた。(”Vivado HLS で DMA Write IP を作る(絶対アドレス指定編)”、”Vivado HLS で DMA Read IP を作る(絶対アドレス指定版)”)これを使ってみたいと思っていた。カメラ・コントローラはAXI4-Stream版がすでに作ってあるが、ビットマップ・ディスプレイ・ コントローラのAXI4-Stream版がないのでそれを作ることにした。
ビットマップ・ディスプレ イ・コントローラをAXI4-Stream対応にする2(bitmap_afifo)
前回は構想編だったので、今回は、Vivado 2016.2 のプロジェクトを作って、bitmap_afifo (ビットマップのピクセル用の非同期FIFO)を作った。
ビットマップ・ディスプレ イ・コントローラをAXI4-Stream対応にする3(シミュレーション)
前回は、bitmap_afifo を生成した。今回は、”Vivado HLS でAXI4-Stream Master Model IP を作る”で作った AXI4-Stream Master Model IP を使って、AXI4-Stream版ビットマップ・ディスプレイ・コントローラをシミュレーションしてみた。なお、AXI4-Stream版ビットマップ・ディスプレイ・ コントローラは、Verilog HDL で実装できている。
ビットマップ・ディスプレ イ・コントローラをAXI4-Stream対応にする4(ソースコードの公開)
前回は、シミュレーションを行って、テストベンチのVerilog HDLのソースコードを貼った。今回は、それ以外のVerilog HDLのソースコードを貼っておく。
ビットマップ・ディスプレ イ・コントローラをAXI4-Stream対応にする5(IP作成)
前回は、シミュレーションを行ってから、Verilog HDLのソースコードを公開した。今回は出来上がりAXI4-Stream版ビットマップ・ディスプレイ・コントローラをIPにする。
Vivado HLS で生成した AXI4 Master DMA IP を使用したカメラ画像表示システム2(SDK)
前回は、今まで作ってきた AXI4-Stream版ビットマップ・ディスプレイ・コントローラ IPと AXI4-Stream版カメラ・コントローラ IP、Vivado HLS で作成したAXI4 Master DMA Write IP、Vivado HLS で作成したAXI4 Master DMA Read IP を使って、カメラ表示システムのVivado プロジェクトを作り、ビットストリームの生成まで終了した。今回は、ハードウェアをエクスポートしてSDK を立ち上げてアプリケーションを作り、実機で動作させようと思う。


inserted by FC2 system