1000円 スマホケース 全機種対応 おしゃれ 手帳型 Xperia 8 SOV42 Xperia 1 II SOG01 ケース アンドロイド 可愛い AQUOS sense3 SHV45 ケース 韓 スマホ・タブレット・モバイル通信 スマホアクセサリー スマホケース 韓,全機種対応,1000円,可愛い,ケース,SOV42,/Idistic167749.html,スマホ・タブレット・モバイル通信 , スマホアクセサリー , スマホケース,II,AQUOS,itrg.ir,Xperia,sense3,おしゃれ,アンドロイド,Xperia,8,SHV45,スマホケース,ケース,1,手帳型,SOG01 韓,全機種対応,1000円,可愛い,ケース,SOV42,/Idistic167749.html,スマホ・タブレット・モバイル通信 , スマホアクセサリー , スマホケース,II,AQUOS,itrg.ir,Xperia,sense3,おしゃれ,アンドロイド,Xperia,8,SHV45,スマホケース,ケース,1,手帳型,SOG01 スマホケース 全機種対応 おしゃれ 手帳型 【開店記念セール!】 Xperia 8 SOV42 1 II SOG01 可愛い アンドロイド AQUOS SHV45 sense3 ケース 韓 スマホケース 全機種対応 おしゃれ 手帳型 【開店記念セール!】 Xperia 8 SOV42 1 II SOG01 可愛い アンドロイド AQUOS SHV45 sense3 ケース 韓 1000円 スマホケース 全機種対応 おしゃれ 手帳型 Xperia 8 SOV42 Xperia 1 II SOG01 ケース アンドロイド 可愛い AQUOS sense3 SHV45 ケース 韓 スマホ・タブレット・モバイル通信 スマホアクセサリー スマホケース

スマホケース 全機種対応 おしゃれ 【SALE/92%OFF】 手帳型 開店記念セール Xperia 8 SOV42 1 II SOG01 可愛い アンドロイド AQUOS SHV45 sense3 ケース 韓

スマホケース 全機種対応 おしゃれ 手帳型 Xperia 8 SOV42 Xperia 1 II SOG01 ケース アンドロイド 可愛い AQUOS sense3 SHV45 ケース 韓

1000円

スマホケース 全機種対応 おしゃれ 手帳型 Xperia 8 SOV42 Xperia 1 II SOG01 ケース アンドロイド 可愛い AQUOS sense3 SHV45 ケース 韓

スマホケース 全機種対応 おしゃれ 手帳型 Xperia 8 SOV42 Xperia 1 II SOG01 ケース アンドロイド 可愛い AQUOS sense3 SHV45 ケース 韓のお買いものならKDDI株式会社/auコマース&ライフ株式会社が運営するネットショッピング・通販サイト「au PAY マーケット」。au PAY マーケット。人気のアイテムが大集合!2,000万品以上の豊富な品ぞろえ♪送料無料商品やセール商品も多数掲載中!ポイントやクーポンをつかったお買い物もOK!あなたの欲しい物がきっと見つかる♪
★国内全スマートフォンケース対応★

Diary Case
iPhoneX/XS、iPhoneXS Max、iPhoneXR対応!iPhone8/8 Plus などアイフォンはもちろん、アクオス、エクスペリア、アローズなどアンドロイド携帯対応!

ネイルカラーをモチーフにオシャレで個性的なあなただけの手帳型ケースが登場しました♪
全機種対応であなたのスマホに合わせてカメラ穴などをあけてお届けします☆ケース内側には便利なカードポケット付き♪
スタンド機能もついているので、横置き使用でyoutubeなどを楽しむこともできます♪磁石式の開閉もあなたのスマホをしっかりガードしてくれます☆




手帳型ケースをお探しの方必見
→プレゼントや記念にも←
→メッセージ等を入れる←
→サービス始めました←

↓ストラップホール加工できます↓

必ずご確認下さい。
【対応機種】Apple アップル
iPhoneX/XS iPhoneXS Max iPhoneXR iPhone8 iPhone8plus iPhone7 iPhone7 plus iPhone6/6s iPhone6 plus/6s plus iPhoneSE iPhone5/5s iPhone5c iPhone4/4s iPod touch6 iPod touch5

Docomo ドコモ
AQUOS アクオス
AQUOS R3 SH-04L sense2 SH-01L R2 SH-03K sense SH-01K R SH-03J EVER SH-02J ZETA SH-04H Compact SH-02H ZETA SH-01H EVER SH-04G ZETA SH-03G ZETA SH-01G ZETA SH-04F AQUOS PHONE EX SH-02F ZETA SH-01F si SH-07E ZETA SH-06E EX SH-04E ZETA SH-02E si SH-01E ZETA SH-09D st SH-07D SH-06D SH-01D f SH-13C

Disney Mobile ディズニーモバイル
Disney Mobile DM-01K DM-01J DM-02H DM-01H DM-01G SH-02G SH-05F F-03F F-07E N-03E

GALAXY ギャラクシー
GALAXY S10+ SC-04L S10 SC-03L Feel2 SC-02L Note9 SC-01L S9+ SC-03K S9 SC-02K Note8 SC-01K Feel SC-04J S8+ SC-03J S8 SC-02J S7 edge SC-02H Active neo SC-01H S6 SC-05G S6 edge SC-04G S5 ACTIVE SC-02G Note Edge SC-01G S5 SC-04F J SC-02F Note3 SC-01F S4 SC-04E S3 α SC-03E S3 SC-06D S2 LTE SC-03D S2 SC-02C S SC-02B

arrows アローズ
arrows Be3 F-02L Be F-04K NX F-01K Be F-05J NX F-01J SV F-03H NX F-02H Fit F-01H NX F-04G NX F-02G NX F-05F NX F-01F NX F-06E V F-04E Kiss F-03E X F-02E Me F-11D X F-10D μ F-07D X LTE F-05D Kiss F-03D

MEDIAS X N-06E X N-04E U N-02E X N-07D ES N-05D LTE N-04D PP N-01D WP N-06C N-04C

Xperia エクスペリア
Xperia 1 SO-03L Ace SO-02L XZ3 SO-01L XZ2 SO-03K XZ2 Compact SO-05K XZ2 Premium SO-04K XZ1 SO-01K XZ1 Compact SO-02K XZ Premium SO-04J XZs SO-03J XZ SO-01J X Compact SO-02J X Performance SO-04H Z5 Premium SO-03H Z5 Compact SO-02H Z5 SO-01H A4 SO-04G Z4 SO-03G Z3 Compact SO-02G Z3 SO-01G A2 SO-04F Z2 SO-03F Z1 f SO-02F Z1 SO-01F A SO-04E Z SO-02E AX SO-01E SX SO-05D GX SO-04D acro HD SO-03D NX SO-02D ray SO-03C acro SO-02C arc SO-01C

ELUGA P P-03E X P-02E power P-07D V P-06D
Google Pixel3 Pixel_3XL
Optimusit L-05E G pro L-04E LIFE L-02E G L-01E it L-05D LTE L-01D
HUAWEI P30 Pro HW-02L P20 Pro HW-01K
MONO MO-01K MO-01J
LG style2 L-01L STYLE L-03K
JOJO L-02K
V30+ L-01K
V20 PRO L-01J
nexus5X
ANTEPRIMA F-09D
Ascend D2 HW-03E HW-01E
F-12C F-12C
LG G2 L L-01F
P-04D P-04D
LUMIX Phone P-02D
REGZA Phone T-02D T-01D T-01C
らくらくフォン me F-01L me F-03K 4 F-04J 3 F-06F F-09E 2 F-08E F-12D
ビジネススマートフォン F-04Fらくらくフォン
ジュニア 2 SH-03F SH-05E


au エーユー
AQUOS アクオス
AQUOS R3 SHV44 sense2 SHV43 R2 SHV42 R Compact SHV41 sense SHV40 R SHV39 SERIE mini SHV38 U SHV37 U SHV35 SERIE SHV34 SERIE mini SHV33 SERIE SHV32 SERIE mini SHV31 SERIE SHL25 PHONE SERIE mini SHL24 PHONE SERIE SHL23 AQUOSPHONE SERIE SHL22 PHONE SERIE SHL21 CL IS17SH SERIE ISW16SH SL IS15SH IS13SH

ARROWS アローズ
ARROWS Z FJL22 ef FJL21 Z ISW13F Z ISW11F

DIGNO rafre KYV36 M KYL22 S KYL21 ISW11K
Qua phone QZ KYV44 QX KYV42 PX LGV33 KYV37
rafre KYV40
miraie f KYV39 KYL23
BASIO KYV32

GALAXY ギャラクシー
GALAXY Note8 SCV37 A30 SCV43 S10+ SCV42 S10 SCV41 Note9 SCV40 S9+ SCV39 S9 SCV38 Note8 SCV37 S8 SCV36 S8+ SCV35 S7 edge SCV33 A8 SCV32 S6 edge SCV31 Note Edge SCL24 S5 SCL23 S III Progre SCL21

HTC
HTC U11 HTV33 10 HTV32 J butterfly HTV31 J butterfly HTL23 J One HTL22 J butterfly HTL21 J ISW13HT EVO 3D ISW12HT

INFOBAR A03 A02 A01
isai Beat LGV34 vivid LGV32 VL LGV31 FL LGL24 LGL22
Fx0 LGL25
IS05 IS05
Optimus X IS11LG

Xperia エクスペリア
Xperia 1 SOV40 XZ3 SOV39 XZ2 Premium SOV38 XZ2 SOV37 XZ1 SOV36 XZs SOV35 XZ SOV34 X Performance SOV33 Z5 SOV32 Z4 SOV31 Z3 SOL26 ZL2 SOL25 Z1 SOL23 UL SOL22 VL SOL21

G"zOne TYPE-L CAL21
HUAWEI P30 lite Premium P20 lite HWV32 nova2 HWV31
TORQUE G03 G01
URBANO V04 V03 V02 V01 L03 L02 L01 PROGRESSO ISW12K
VEGA PTL21

softbank ソフトバンク
AQUOS アクオス
AQUOS R3 808SH R2 compact 803SH ZERO 801SH R2 706SH R Compact 701SH ea 605SH R 604SH Xx3 mini 603SH Xx3 506SH Xx2 mini 503SH Xx2 502SH Xx 404SH CRYSTAL 2 403SH CRYSTAL X 402SH CRYSTAL 305SH Xx 304SH AQUOSPHONE Xx mini 303SH Xx 302SH Xx 206SH ss 205SH Xx 203SH Xx 106SH 104SH

Xperia エクスペリア
Xperia 1 802SO XZ3 801SO XZ2 702SO XZ1 701SO XZs 602SO XZ 503SO X Performance 502SO Z5 501SO Z4 402SO Z3 401SO

ARROWS U 801FJ A 301F A 202F A 201F
Android One S3
LG K50
DELL Streak Pro 101DL
DIGNO J 704KC G 601KC F 503KC U 404KC R 202K
Disney Mobile DM016SH
GALAPAGOS 003SH
Google Pixel3 Pixel_3XL
GALAXY S6 edge 404SC
HONEY BEE 101K 201K
MOTOROLA RAZR M 201M
MEDIAS CH 101N
nexus6P
PANTONE6 200SH
STAR WARS mobile
STREAM 201HW
HUAWEI Mate10 Pro nova lite2
HTC U11 601HT
シンプルスマホ4 707SH シンプルスマホ3 509SH シンプルスマホ2 401SH 204SH
あんしんケータイ 204HW

Y!mobile ワイモバイル
Android One X5 X4 X3 X2 X1 S5 S4 S3 S2 S1 507SH
AQUOS Xx-Y 404SH CRYSTAL Y2 403SH Y 402SH
ARROWS S EM01F
DIGNO E 503KC C 404KC T 302KC DUAL2 WX10K
HUAWEI P30 lite P20 lite LUMIERE 503HW
nexus5X
Nexus 6 5 EM01L
Spray 402LG
STREAM X GL07S S 302HW
かんたんスマホ 705KC

楽天モバイル
HUAWEI ファーウェイ
HUAWEI nova lite3 nova3 nova lite2 Mate 10 Pro honor9 P20 P10 P10 lite P10 Plus nova lite nova Mate 9 honor8 P9 EVA-L09 P9 lite VNS-L22 Ascend Mate7 MT-J1 honor6 Plus PE-TL10 P8 lite ALE-L02

ASUS
ASUS ZenFone 5 ZE620KL Max Plus M1 4 MaxZC520KL 4 ZE554KL 3 Max ZC520TL 3 Laser ZC551KL 3 ZE552KL 3 ZE520KL GO ZB551KL Selfie ZD551KL 2 ZE551ML 5 A500KL

AQUOS
AQUOS ZERO SH-M10 R2 compact SH-M09 sense2 SH-M08 sense plus SH-M07 R compact SH-M06 sense lite SH-M05 SH-M04 mini SH-M03 SH-M02/SH-RM02 SH-M01

arrows M04 M03 M02/RM02 M01
HTC U11 life
Xperia J1 Compact D5788

その他
Google Pixel3a Pixel_3aXL Pixel3 Pixel_3XL
OPPO Find X R17 Pro R17 Neo AX7 R15 Pro R15 Neo R11s
ZenFone Live L1 ZA550KL
HUAWEI GR5 KII-L22
LUCE KCP01K
LG G2 mini LG-D620J
AQUOS L2SH-L02 L
LG G3 Beat LG-D722J
KC-01 KC-01
DIGNO W KYV40
KYOCERA S301
VAIO PHONE VA-10J
nexus6P
FREETEL 雷神 FTJ162E Priori 4 FTJ162D SAMURAI 麗 FTJ161B KATANA 02 FTJ152F SAMURAI 雅 FTJ152C
ZTE AXON 7
【商品内容】・手帳型スマートフォン ケース
【商品素材】・PUレザー
・プラスチック
【注意事項】・ページ内写真と実物では多少の色の違いが生じる事があります。
・商品によるバラツキにより、印刷位置に多少のずれが生じる場合がございます。
・発送まで3〜5営業日いただいております。
・注文確定後、自社印刷するため、ご注文後のキャンセルはお断りさせていただいております。
【メール便について】・代金引換の場合、メール便は選択できません。
 弊社規定送料+代引き手数料となります。
・メール便配送中における商品破損の返品・交換はできません。
 配送中の保障をご希望の方は宅配便での購入をお勧めします。

スマホケース 全機種対応 おしゃれ 手帳型 Xperia 8 SOV42 Xperia 1 II SOG01 ケース アンドロイド 可愛い AQUOS sense3 SHV45 ケース 韓

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

Vivado HLS, Vitis HLS の 2022 年問題にパッチを当てる

Vivado HLSリビジョンオーバーフロー問題のパッチの当て方”(参考にさせて頂きます)を見て Vivado HLS, Vitis HLS の 2022 年問題のパッチが出ていることに気がついたので、私もやってみることにした。

Vivado HLS, Vitis HLS の 2022 年問題については、”Vivado HLS, Vitis HLS で 2022 年問題発生”を参照のこと。

パッチは”Export IP Invalid Argument / Revision Number Overflow Issue (Y2K22)”にあった。
ファイル名は、y2k22_patch-1.2.zip だった。



Ubuntu 18.04 LTS での Vitis HLS 2021.2 のパッチ
y2k22_patch-1.2.zip をダウンロードして展開した。


展開された y2k22_patch ディレクトリを確認した。


README ファイルを確認した。
パッチのやり方が書いてある。


Vitis hLS 2021.2 にパッチを当てよう。
Vivado などのインストール・ディレクトリに移動して LD_LIBRARY_PATH 環境変数を設定して、パッチを当てた。
cd /media/masaaki/Ubuntu_Disk/tools/Xilinx/
export LD_LIBRARY_PATH=$PWD/Vivado/2021.2/tps/lnx64/python-3.8.3/lib/
Vivado/2021.2/tps/lnx64/python-3.8.3/bin/python3 y2k22_patch/patch.py




これでパッチが当たったはずなので、Vitis HLS 2021.2 を起動して、Export RTL を行ったところ成功した。


solution1/impl ディレクトリに export.zip ができている。


solution1/impl/ip ディレクトリにも IP が生成されていた。



Windows11 のパッチ
Windows11 に y2k22_patch-1.2.zip をダウンロードして解凍した。


Windows ターミナルを起動して、C:\Xilinx フォルダに移動した。
Vivado\2021.2\tps\win64\python-3.8.3\python.exe y2k22_patch\patch.py
を実行した。


Vitis HLS 2021.2 を起動して Export RTL を実行したところ、Windows11 でも成功した。


solution1/impl ディレクトリに export.zip ができている。


solution1/impl/ip ディレクトリにも IP が生成されていた。


(追加)
Linux の 2019.2 のパッチ・コマンドが間違っていました。正しくは、
Vivado/2019.2/tps/lnx64/python-2.7.5/bin/python2.7 y2k22_patch/patch.py
です。

Linux の 2020.1 のパッチ・コマンドも間違っていました。正しくは、
Vivado/2020.1/tps/lnx64/python-2.7.16/bin/python2.7 y2k22_patch/patch.py
です。

Linux の 2020.2 のパッチ・コマンドも間違っていました。正しくは、
Vivado/2020.2/tps/lnx64/python-3.8.3/bin/python3.8 y2k22_patch/patch.py
です。

Linux の 2020.3 のパッチ・コマンドはやってないですが、間違っているんじゃないでしょうか?
  1. 2022年01月09日 05:23 |
  2. Vitis HLS
  3. | トラックバック:0
  4. | コメント:0

Vitis HLS 2021.2 で AXI4-Lite インターフェースのクロックに別のクロックを指定する7

Vitis HLS 2021.2 で AXI4-Lite インターフェースのクロックに別のクロックを指定する6”の続き。

Vitis HLS 2021.2 で AXI4-Lite インターフェースのクロックに別のクロックを指定してみようということで、前回は、FCLK_CLK0 が 100 MHz 、FCLK_CLK1 が 50 MHz で再度やり直したところ、タイミング・エラーは発生しなかった。今回は、実際に動作するか?を調べてみよう。

ハードウェアをエクスポートした。
DMA_pow2_defclk_bd_wrapper.xsa ファイルが生成された。


Vivado の Tools メニューから Launch Vitis IDE を選択して、Vitis 2021.2 を起動する。
Vitis IDE Launcher が起動する。
vitis_work ディレクトリを作成して、Launch ボタンをクリックする。


Vitis 2021.2 が起動した。


Create Application Project をクリックして、DMA_pow2_defclk_test アプリケーション・プロジェクトを作成した。DMA_pow2_defclk_bd_wrapper プラットフォーム・プロジェクトも作成した。


DMA_pow2_defclk_test.c を作成した。


トンカチアイコンをクリックして、ビルドを行った。
DMA_pow2_defclk_test.elf ファイルが生成された。
富士通 FMV ESPRIMO FH55/S FMVF55SBC[21.5インチ]機種で使える ブルーライトカット 液晶保護フィルム 指紋防止 気泡レス加工 メール便送

Explorer で DMA_pow2_defclk_test_system を選択して、Run アイコンをクリックすると ZYBO Z7-20 がコンフィギュレーションされて、DMA_pow2_defclk_test.elf ファイルが実行された。


Tera Term に 2 乗したデータが表示された。成功だ。


結局、Vitis HLS 2021.2 の AXI4-Lite インターフェースのクロックを独自に生成する機能は、クロック載せ替えがされていないので、特定の周波数しか Vivado でのタイミングがメットしないようだ。今回は、IP 全体の動作周波数が 100 MHz で AXI4-Lite インターフェースが 50 MHz で動作確認した。
  1. 2022年01月09日 04:19 |
  2. Vitis HLS
  3. | トラックバック:0
  4. | コメント:0

Vitis HLS 2021.2 で AXI4-Lite インターフェースのクロックに別のクロックを指定する6

Vitis HLS 2021.2 で AXI4-Lite インターフェースのクロックに別のクロックを指定する5”の続き。

Vitis HLS 2021.2 で AXI4-Lite インターフェースのクロックに別のクロックを指定してみようということで、前回は、タイミング・エラーを検証して FCLK_CLK0 が 100 MHz 、FCLK_CLK1 が 75 MHz ではダメそうだということが分かった。今回は、FCLK_CLK0 が 100 MHz 、FCLK_CLK1 が 50 MHz で再度やり直してみよう。

DMA_pow2_defclk_bd ブロック・デザインを再度示す。


ブロック・デザインで processing_system7_0 をダブルクリックして設定画面を開く。
FCLK_CLK1 を 50 MHz に設定する。


これで、論理合成、インプリメンテーション、ビットストリームの生成を行ったところ、今度はタイミング・エラーが発生しなかった。
Project Summary を示す。


Open Implemented Design を開いた。
Inter-Clock Paths も問題ない。


Report CDC... をやってみた。
clk_fpga_0 to clk_fpga_1 を示す。


これは何も変わっていない。

clk_fpga_1 to clk_fpga_0 を示す。


こちらも変わっていない。
  1. 2022年01月08日 04:25 |
  2. Vitis HLS
  3. | トラックバック:0
  4. | コメント:0

Vitis HLS 2021.2 で AXI4-Lite インターフェースのクロックに別のクロックを指定する5

Vitis HLS 2021.2 で AXI4-Lite インターフェースのクロックに別のクロックを指定する4”の続き。

itis HLS 2021.2 で AXI4-Lite インターフェースのクロックに別のクロックを指定してみようということで、前回は、前回 IP を作成できたので、Vivado 2021.2 でプロジェクトを作成し、作成した DMP_pow2_defclk IP を使用して、ブロック・デザインを作成した。そして、論理合成、インプリメンテーション、ビットストリームの生成を行ったが、タイミングでエラーになった。今回は、タイミング・エラーを検証する。

Vivado 2021.2 GUI の Flow Navigator から IMPLEMENTATION -> Open Implemented Design をクリックして起動した。


Inter-Clock Paths の”clk_fpga_0 to clk_fpga_1”と”clk_fpga_1 to clk_fpga_0”にエラーが出ている。

”clk_fpga_0 to clk_fpga_1”のエラーを見た。


”clk_fpga_1 to clk_fpga_0”のエラーを見た。


Clock Domain Crossing のレポートを見てみよう。
Vivado の Reports メニューから Timing -> Report CDC... を選択する。
Report CDC ダイアログが開く。
Clocks の From に clk_fpga_0 を To に clk_fpga_1 を入れて OK ボタンをクリックした。


Endpoint は 37 個, Unsafe は 0 個だった。 Unknown は 5 個ある。


CDC Details の”clk_fpga_0 to clk_fpga_1”をクリックした。


CDC-1 と CDC-15 が出ている。
Vivado Design Suite ユーザー ガイド デザイ ン解析およびク ロージ ャテクニック UG906 (v2018.2) 2018 年 6 月 6 日”の 76 ページの”表 2‐3: CDC ルールおよび説明”によると CDC-1 は

1 ビッ ト CDC CDC-1 クリティカル 1 ビッ ト CDC パスが、 同期化されていないか、 または不明の CDC 回路を含みます。


CDC-15 は

CE 制御の CDC CDC-15 警告 ク ロ ッ ク イネーブルで制御された CDC。

だそうだ。
やはり、ダメっぽい?

次に”clk_fpga_1 to clk_fpga_0”のパスの CDC を見てみよう。


こちらは Endpoints が 232 個で、Unknonwn がやはり、232 個になっている。


CDC Details の”clk_fpga_1 to clk_fpga_0”をクリックした。


全部 CDC-1 だけだった。
これはあまり良くないか。。。
もう一度 AXI4-Lite のクロックを 50 MHz でやってみよう。
  1. 2022年01月07日 04:32 |
  2. Vitis HLS
  3. | トラックバック:0
  4. | コメント:0

Vitis HLS 2021.2 で AXI4-Lite インターフェースのクロックに別のクロックを指定する4

Vitis HLS 2021.2 で AXI4-Lite インターフェースのクロックに別のクロックを指定する3”の続き。

Vitis HLS 2021.2 で AXI4-Lite インターフェースのクロックに別のクロックを指定してみようということで、前回は、 C コードの合成の AXI4 Master のアドレス幅が 64 ビットになっていたので、32 ビットに変更し、もう一度 C コードの合成と Export RTL をやり直した。更に C/RTL 協調シミュレーションも Dump Trace の設定を port にしたら成功した。今回は、前回 IP を作成できたので、Vivado 2021.2 でプロジェクトを作成し、作成した DMP_pow2_defclk IP を使用して、ブロック・デザインを作成した。そして、論理合成、インプリメンテーション、ビットストリームの生成を行ったが、タイミングでエラーになった。

Vivado 2021.2 で ZYBO Z7-20 用の DMA_pow2_defclk_test プロジェクトを作成した。


IP Catalog に Dma_pow2 IP を登録した。


DMA_pow2_defclk_bd ブロック・デザインを作成した。
ZYNQ7 Processing System を Add IP した。
Run Block Automation を行った状態だ。


ZYNQ7 Processing System を ダブルクリックして設定画面を開く。
FCLK_CLK0 を 100 MHz に設定した。これは、DMA _pow2 IP の AXI4 Master インターフェースのクロックとする。
FCLK_CLK1 を 75 MHz に設定した。これは、DMA_pow2 IP の AXI4-Lite インターフェースのクロックとする。Vitis HLS の C/RTL 協調シミュレーションのクロックは 50 MHz だったが Vivado でタイミング・エラーがでるかどうか?見るために 75 MHz に設定した。
【中古】マークバイマークジェイコブス MARC by MARC JACOBS カーディガン クルーネック グログラン サーモンピンク S

DMA_pow2 を Add IP した。


Run Connection Automation で s_axi_control のクロックを FCLK_CLK1 ( 76 MHz ) に設定した。


配線が行われた。


Run Connection Automation が表示されないかと思っていたら、 ZYNQ7 Processing System に HP Slave AXI interface を追加するのを忘れていた。
ZYNQ7 Processing System をダブルクリックして、設定画面を開く。
PS-PL Configuration をクリックして、HP Slave AXI interface を展開し、S AXI HP0 interface の Select ボックスにチェックを入れた。


Run Connection Automation が表示された。


Run Connection Automation をクリックした。
S_AXI_HP0 を FCLK_CLK0 ( 100 MHz ) に接続した。


ブロック・デザインが完成した。


Create HDL Wrapper... でトップの Verilog HDL ファイル DMA_pow2_defclk_bd_wrapper.v を作成した。


Flow Navigator の PROGRAM AND DEBUG から Generate Bitstream をクリックして、論理合成、インプリメンテーション、ビットストリームの生成を行った。
Project Summary を示す。


タイミング・エラーが出ている。
  1. 2022年01月06日 04:25 |
  2. Vitis HLS
  3. | トラックバック:0
  4. | コメント:0

Vitis HLS 2021.2 で AXI4-Lite インターフェースのクロックに別のクロックを指定する3

Vitis HLS 2021.2 で AXI4-Lite インターフェースのクロックに別のクロックを指定する2”の続き。

Vitis HLS 2021.2 で AXI4-Lite インターフェースのクロックに別のクロックを指定してみようということで、前回は、C コードの合成と C/RTL 協調シミュレーションを行ったが、C/RTL 協調シミュレーションがエラーで停止してしまった。Export RTL と Implementation は Vitis HLS 2022 年問題が出てしまった。今回は、前回の C コードの合成の AXI4 Master のアドレス幅が 64 ビットになっていたので、32 ビットに変更し、もう一度 C コードの合成と Export RTL をやり直した。更に C/RTL 協調シミュレーションも Dump Trace の設定を port にしたら成功した。

前回の C コードの合成の AXI4 Master のアドレス幅が 64 ビットになっていたので、32 ビットに変更しよう。
Vitis HLS 2021.2 の Solution メニューから Solution Settings... を選択する。
Solution Settings (solutiojn1) ダイアログが開く。
config_interface を展開して、 m_axi_addr64 の Value のチェックボックスのチェックをクリックして外す。


これで、もう一度 C コードの合成を行った。
HW interface -> M_AXI -> m_axi_gmem の Address Width が 32 ビットになった。


C/RTL 協調シミュレーションを行う時に、Co-Simulation ダイアログで Dump Trace を port に設定した。(前回は、all に設定してエラーになった)
【単行本】 小倉広 / もしアドラーが上司だったら

C/RTL 協調シミュレーションが成功した。


C/RTL 協調シミュレーションの波形を示す。
ap_clk は 10 ns つまり 100 MHz になっている。


axi4l_clk は 20 ns つまり、50 MHz だった。


Export RTL を行うと、 Vitis HLS 2022 年問題でエラーになった。


Vivado HLS, Vitis HLS で 2022 年問題発生”でエラーを回避して、 IP 化することができた。

  1. 2022年01月05日 04:37 |
  2. Vitis HLS
  3. | トラックバック:0
  4. | コメント:0

Vitis HLS 2021.2 で AXI4-Lite インターフェースのクロックに別のクロックを指定する2

Vitis HLS 2021.2 で AXI4-Lite インターフェースのクロックに別のクロックを指定する”の続き。

Vitis HLS 2021.2 で AXI4-Lite インターフェースのクロックに別のクロックを指定してみようということで、前回は、Vitis HLS 2021.2 のプロジェクトを作成し、C シミュレーションを行った。今回は、C コードの合成と C/RTL 協調シミュレーションを行ったが、C/RTL 協調シミュレーションがエラーで停止してしまった。Export RTL と Implementation は Vitis HLS 2022 年問題が出てしまった。

最初に C コードの合成を行った。


特段変わったことはない。
合成結果の DMA_pow2.v を見ると、クロックが ap_clk と axi4l_clk と 2 つある。リセットも ap_rst_n と ap_rst_n_axi4l_clk と 2 つある。



AXI4-Lite インターフェースを司る DMA_pow2_control_s_axi.v を見ると ACLK と clk の 2 つのクロックがある。
ACLK がAXI4-Lite インターフェースのクロックで、 clk が内部クロックだ。


Verilog HDL ソースコードを見るとクロック載せ替えには注意が払われていないように見える?

C/RTL 協調シミュレーションを行ったが信号が無いと言われてエラーだった。

## add_wave /apatb_DMA_pow2_top/m_axi_gmem_BUSER -into $wdata_group -radix hex
ERROR: [Wavedata 42-471] Note: Nothing was found for the following items: /apatb_DMA_pow2_top/m_axi_gmem_BUSER 
ERROR: [Common 17-39] 'add_wave' failed due to earlier errors.

    while executing
"add_wave /apatb_DMA_pow2_top/m_axi_gmem_BUSER -into $wdata_group -radix hex"
    (file "DMA_pow2.tcl" line 103)



Export RTL と Implementation は Vitis HLS 2022 年問題が出てしまった。

最後に AXI4-Lite インターフェースを司る DMA_pow2_control_s_axi.v を貼っておく。

// ==============================================================
// Vitis HLS - High-Level Synthesis from C, C++ and OpenCL v2021.2 (64-bit)
// Copyright 1986-2021 Xilinx, Inc. All Rights Reserved.
// ==============================================================
`timescale 1ns/1ps
module DMA_pow2_control_s_axi
#(parameter
    C_S_AXI_ADDR_WIDTH = 6,
    C_S_AXI_DATA_WIDTH = 32
)(
    input  wire                          ACLK,
    input  wire                          ARESET,
    input  wire                          ACLK_EN,
    input  wire [C_S_AXI_ADDR_WIDTH-1:0] AWADDR,
    input  wire                          AWVALID,
    output wire                          AWREADY,
    input  wire [C_S_AXI_DATA_WIDTH-1:0] WDATA,
    input  wire [C_S_AXI_DATA_WIDTH/8-1:0] WSTRB,
    input  wire                          WVALID,
    output wire                          WREADY,
    output wire [1:0]                    BRESP,
    output wire                          BVALID,
    input  wire                          BREADY,
    input  wire [C_S_AXI_ADDR_WIDTH-1:0] ARADDR,
    input  wire                          ARVALID,
    output wire                          ARREADY,
    output wire [C_S_AXI_DATA_WIDTH-1:0] RDATA,
    output wire [1:0]                    RRESP,
    output wire                          RVALID,
    input  wire                          RREADY,
    output wire                          interrupt,
    input  wire                          clk,
    input  wire                          rst,
    output wire                          ap_start,
    input  wire                          ap_done,
    input  wire                          ap_ready,
    input  wire                          ap_idle,
    input  wire [31:0]                   ap_return,
    output wire [63:0]                   in_r,
    output wire [63:0]                   out_r,
    input  wire [0:0]                    ap_local_deadlock
);
//------------------------Address Info-------------------
// 0x00 : Control signals
//        bit 0  - ap_start (Read/Write/COH)
//        bit 1  - ap_done (Read/COR)
//        bit 2  - ap_idle (Read)
//        bit 3  - ap_ready (Read/COR)
//        bit 7  - auto_restart (Read/Write)
//        others - reserved
// 0x04 : Global Interrupt Enable Register
//        bit 0  - Global Interrupt Enable (Read/Write)
//        others - reserved
// 0x08 : IP Interrupt Enable Register (Read/Write)
//        bit 0 - enable ap_done interrupt (Read/Write)
//        bit 1 - enable ap_ready interrupt (Read/Write)
//        bit 5 - enable ap_local_deadlock interrupt (Read/Write)
//        others - reserved
// 0x0c : IP Interrupt Status Register (Read/TOW)
//        bit 0 - ap_done (COR/TOW)
//        bit 1 - ap_ready (COR/TOW)
//        bit 5 - ap_local_deadlock (COR/TOW)
//        others - reserved
// 0x10 : Data signal of ap_return
//        bit 31~0 - ap_return[31:0] (Read)
// 0x18 : Data signal of in_r
//        bit 31~0 - in_r[31:0] (Read/Write)
// 0x1c : Data signal of in_r
//        bit 31~0 - in_r[63:32] (Read/Write)
// 0x20 : reserved
// 0x24 : Data signal of out_r
//        bit 31~0 - out_r[31:0] (Read/Write)
// 0x28 : Data signal of out_r
//        bit 31~0 - out_r[63:32] (Read/Write)
// 0x2c : reserved
// (SC = Self Clear, COR = Clear on Read, TOW = Toggle on Write, COH = Clear on Handshake)

//------------------------Parameter----------------------
localparam
    ADDR_AP_CTRL      = 6'h00,
    ADDR_GIE          = 6'h04,
    ADDR_IER          = 6'h08,
    ADDR_ISR          = 6'h0c,
    ADDR_AP_RETURN_0  = 6'h10,
    ADDR_IN_R_DATA_0  = 6'h18,
    ADDR_IN_R_DATA_1  = 6'h1c,
    ADDR_IN_R_CTRL    = 6'h20,
    ADDR_OUT_R_DATA_0 = 6'h24,
    ADDR_OUT_R_DATA_1 = 6'h28,
    ADDR_OUT_R_CTRL   = 6'h2c,
    WRIDLE            = 2'd0,
    WRDATA            = 2'd1,
    WRRESP            = 2'd2,
    WRRESET           = 2'd3,
    RDIDLE            = 2'd0,
    RDDATA            = 2'd1,
    RDRESET           = 2'd2,
    ADDR_BITS                = 6;

//------------------------Local signal-------------------
    reg  [1:0]                    wstate = WRRESET;
    reg  [1:0]                    wnext;
    reg  [ADDR_BITS-1:0]          waddr;
    wire [C_S_AXI_DATA_WIDTH-1:0] wmask;
    wire                          aw_hs;
    wire                          w_hs;
    reg  [1:0]                    rstate = RDRESET;
    reg  [1:0]                    rnext;
    reg  [C_S_AXI_DATA_WIDTH-1:0] rdata;
    wire                          ar_hs;
    wire [ADDR_BITS-1:0]          raddr;
    // internal registers
    reg                           int_ap_idle;
    reg                           int_ap_ready = 1'b0;
    reg                           int_ap_done = 1'b0;
    wire                          ap_done_get;
    reg                           ap_done_ext;
    reg                           int_ap_start = 1'b0;
    wire                          ap_start_set;
    reg                           ap_start_mask;
    reg                           int_auto_restart = 1'b0;
    wire                          auto_restart_set;
    reg                           int_gie = 1'b0;
    reg  [5:0]                    int_ier = 6'b0;
    wire                          ier_toggle;
    reg                           ier_mask;
    reg  [5:0]                    int_isr = 6'b0;
    wire                          isr_toggle;
    reg                           isr_mask;
    reg  [31:0]                   int_ap_return;
    reg  [63:0]                   int_in_r = 'b0;
    reg  [63:0]                   int_out_r = 'b0;

//------------------------Instantiation------------------


//------------------------AXI write fsm------------------
assign AWREADY = (wstate == WRIDLE);
assign WREADY  = (wstate == WRDATA);
assign BRESP   = 2'b00;  // OKAY
assign BVALID  = (wstate == WRRESP);
assign wmask   = { {8{WSTRB[3]}}, {8{WSTRB[2]}}, {8{WSTRB[1]}}, {8{WSTRB[0]}} };
assign aw_hs   = AWVALID & AWREADY;
assign w_hs    = WVALID & WREADY;

// wstate
always @(posedge ACLK) begin
    if (ARESET)
        wstate <= WRRESET;
    else if (ACLK_EN)
        wstate <= wnext;
end

// wnext
always @(*) begin
    case (wstate)
        WRIDLE:
            if (AWVALID)
                wnext = WRDATA;
            else
                wnext = WRIDLE;
        WRDATA:
            if (WVALID)
                wnext = WRRESP;
            else
                wnext = WRDATA;
        WRRESP:
            if (BREADY)
                wnext = WRIDLE;
            else
                wnext = WRRESP;
        default:
            wnext = WRIDLE;
    endcase
end

// waddr
always @(posedge ACLK) begin
    if (ACLK_EN) begin
        if (aw_hs)
            waddr <= AWADDR[ADDR_BITS-1:0];
    end
end

//------------------------AXI read fsm-------------------
assign ARREADY = (rstate == RDIDLE);
assign RDATA   = rdata;
assign RRESP   = 2'b00;  // OKAY
assign RVALID  = (rstate == RDDATA);
assign ar_hs   = ARVALID & ARREADY;
assign raddr   = ARADDR[ADDR_BITS-1:0];

// rstate
always @(posedge ACLK) begin
    if (ARESET)
        rstate <= RDRESET;
    else if (ACLK_EN)
        rstate <= rnext;
end

// rnext
always @(*) begin
    case (rstate)
        RDIDLE:
            if (ARVALID)
                rnext = RDDATA;
            else
                rnext = RDIDLE;
        RDDATA:
            if (RREADY & RVALID)
                rnext = RDIDLE;
            else
                rnext = RDDATA;
        default:
            rnext = RDIDLE;
    endcase
end

// rdata
always @(posedge ACLK) begin
    if (ACLK_EN) begin
        if (ar_hs) begin
            rdata <= 'b0;
            case (raddr)
                ADDR_AP_CTRL: begin
                    rdata[0] <= int_ap_start;
                    rdata[1] <= int_ap_done;
                    rdata[2] <= int_ap_idle;
                    rdata[3] <= int_ap_ready;
                    rdata[7] <= int_auto_restart;
                end
                ADDR_GIE: begin
                    rdata <= int_gie;
                end
                ADDR_IER: begin
                    rdata <= int_ier;
                end
                ADDR_ISR: begin
                    rdata <= int_isr;
                end
                ADDR_AP_RETURN_0: begin
                    rdata <= int_ap_return[31:0];
                end
                ADDR_IN_R_DATA_0: begin
                    rdata <= int_in_r[31:0];
                end
                ADDR_IN_R_DATA_1: begin
                    rdata <= int_in_r[63:32];
                end
                ADDR_OUT_R_DATA_0: begin
                    rdata <= int_out_r[31:0];
                end
                ADDR_OUT_R_DATA_1: begin
                    rdata <= int_out_r[63:32];
                end
            endcase
        end
    end
end


//------------------------Register logic-----------------
assign interrupt        = int_gie & (|int_isr);
assign ap_start         = int_ap_start;
assign ap_start_set     = w_hs && waddr == ADDR_AP_CTRL && WSTRB[0] && WDATA[0];
assign ap_done_get      = ar_hs && raddr == ADDR_AP_CTRL && int_ap_done;
assign auto_restart_set = w_hs && waddr == ADDR_AP_CTRL && WSTRB[0];
assign isr_toggle       = w_hs && waddr == ADDR_ISR && WSTRB[0];
assign in_r             = int_in_r;
assign out_r            = int_out_r;
// ap_start_mask
always @(posedge clk) begin
    if (rst)
        ap_start_mask <= 1'b0;
    else
        ap_start_mask <= ap_start_set;
end
// int_ap_start
always @(posedge clk) begin
    if (rst)
        int_ap_start <= 1'b0;
    else if (ap_start_set == 1'b1 && ap_start_mask == 1'b0)
        int_ap_start <= 1'b1;
    else if (ap_ready)
        int_ap_start <= int_auto_restart; // clear on handshake/auto restart
end
// ap_done_ext
always @(posedge clk) begin
    if (rst)
        ap_done_ext <= 1'b0;
    else
        ap_done_ext <= ap_done_get;
end
// int_ap_done
always @(posedge clk) begin
    if (rst)
        int_ap_done <= 1'b0;
    else if (ap_done)
        int_ap_done <= 1'b1;
    else if (ap_done_get == 1'b0 && ap_done_ext == 1'b1)
        int_ap_done <= 1'b0; // clear on read
end
// int_ap_idle
always @(posedge clk) begin
    if (rst)
        int_ap_idle <= 1'b0;
    else
        int_ap_idle <= ap_idle;
end
// int_ap_ready
always @(posedge clk) begin
    if (rst)
        int_ap_ready <= 1'b0;
    else
        int_ap_ready <= ap_ready;
end
// int_auto_restart
always @(posedge clk) begin
    if (rst)
        int_auto_restart <= 1'b0;
    else if (auto_restart_set == 1'b1)
        int_auto_restart <=  WDATA[7];
end
// int_gie
always @(posedge clk) begin
    if (rst)
        int_gie <= 1'b0;
    else if (w_hs && waddr == ADDR_GIE && WSTRB[0])
        int_gie <= WDATA[0];
end
// int_ier
always @(posedge clk) begin
    if (rst)
        int_ier <= 'b0;
    else if (w_hs && waddr == ADDR_IER && WSTRB[0])
        int_ier <= WDATA[5:0];
    else if (w_hs && waddr == ADDR_IER && WSTRB[0])
        int_ier <= WDATA[5:0];
end
// isr_mask
always @(posedge clk) begin
    if (rst)
        isr_mask <= 1'b0;
    else
        isr_mask <= isr_toggle;
end
// int_isr[0]
always @(posedge clk) begin
    if (rst)
        int_isr[0] <= 1'b0;
    else if (int_ier[0] & ap_done)
        int_isr[0] <= 1'b1;
    else if (isr_toggle == 1'b1 && isr_mask == 1'b0)
        int_isr[0] <= int_isr[0] ^ WDATA[0]; // toggle on write
end
// int_isr[1]
always @(posedge clk) begin
    if (rst)
        int_isr[1] <= 1'b0;
    else if (int_ier[1] & ap_ready)
        int_isr[1] <= 1'b1;
    else if (isr_toggle == 1'b1 && isr_mask == 1'b0)
        int_isr[1] <= int_isr[1] ^ WDATA[1]; // toggle on write
end
// int_isr[5]
always @(posedge clk) begin
    if (rst)
        int_isr[5] <= 1'b0;
    else if (int_ier[5] & ap_local_deadlock)
        int_isr[5] <= 1'b1;
    else if (isr_toggle == 1'b1 && isr_mask == 1'b0)
        int_isr[5] <= int_isr[5] ^ WDATA[5]; // toggle on write
end
// int_ap_return
always @(posedge clk) begin
    if (rst)
        int_ap_return <= 0;
    else if (ap_done)
        int_ap_return <= ap_return;
end
// int_in_r[31:0]
always @(posedge clk) begin
    if (rst)
        int_in_r[31:0] <= 0;
    else if (w_hs && waddr == ADDR_IN_R_DATA_0)
        int_in_r[31:0] <= (WDATA[31:0] & wmask) | (int_in_r[31:0] & ~wmask);
end
// int_in_r[63:32]
always @(posedge clk) begin
    if (rst)
        int_in_r[63:32] <= 0;
    else if (w_hs && waddr == ADDR_IN_R_DATA_1)
        int_in_r[63:32] <= (WDATA[31:0] & wmask) | (int_in_r[63:32] & ~wmask);
end
// int_out_r[31:0]
always @(posedge clk) begin
    if (rst)
        int_out_r[31:0] <= 0;
    else if (w_hs && waddr == ADDR_OUT_R_DATA_0)
        int_out_r[31:0] <= (WDATA[31:0] & wmask) | (int_out_r[31:0] & ~wmask);
end
// int_out_r[63:32]
always @(posedge clk) begin
    if (rst)
        int_out_r[63:32] <= 0;
    else if (w_hs && waddr == ADDR_OUT_R_DATA_1)
        int_out_r[63:32] <= (WDATA[31:0] & wmask) | (int_out_r[63:32] & ~wmask);
end

//------------------------Memory logic-------------------

endmodule

  1. 2022年01月03日 05:10 |
  2. Vitis HLS
  3. | トラックバック:0
  4. | コメント:0
»