FC2カウンター FPGAの部屋 調歩同期式シリアル通信の受信 IP (uart_rx)を Vitis HLS で作成する2
fc2ブログ

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

FPGAの部屋

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

調歩同期式シリアル通信の受信 IP (uart_rx)を Vitis HLS で作成する2

調歩同期式シリアル通信の受信 IP (uart_rx)を Vitis HLS で作成する1”の続き。

調歩同期方式シリアル通信の受信 IP を Vitis HLS で作成することにしたということで、前回は、ソースコードをブログに貼って、Vitis HLS 2020.2 の uart_rx プロジェクトを作成した。今回は、uart_rx プロジェクトで C シミュレーション、C コードの合成、C/RTL 協調シミュレーション、Export RTL を行って、uart_rx IP を作成しよう。

前回、ソースコードを貼ったのだが、このソースコードで、どの程度、TREADY が 0 の Wait が発生するか?を C/RTL 協調シミュレーションで見ていきたい。それで、使い物になるかどうか?が決まることだろう。

まずは、C シミュレーションからやってみよう。結果を示す。
uart_rx_4_210219.png

0x55 と 0xaa が受かっている。

C コードの合成を行った。結果を示す。
uart_rx_5_210219.png
uart_rx_6_210219.png

12×(16÷2−1)+12×16×8+12×16 = 1812 クロックのはずなのだが、1820 クロックになっている。 1820 / 1812 ≒ 1.0044 で 0.44 % の誤差なので、大丈夫そうだね。

さて、お待ちかねの C/RTL 協調シミュレーションをやってみる。
uart_rx_7_210219.png

2202 クロックだった。

C/RTL 協調シミュレーションの全体波形を示す。
uart_rx_8_210219.png

いい感じだと思う。

波形の前の部分、rxst_V_dout[0:0] が 0 になった時のレイテンシを拡大して見てみよう。
uart_rx_8_210219.png

rxst_V_dout[0:0] が 0 になるタイミングを見ると、rxst_V_dout[0:0] が1 の時には、 rxst_V_read が 0 , 1 を繰り返している。つまり、rxst_V_dout[0:0] が 0 になるのを検出するのに 1 クロックのレイテンシが発生する可能性があるということが分かる。

次に rxst_V_read が 0 になるタイミングは、 12 x 7 クロック後に 0 (スタートビット)を検出するタイミングとなる。そこでも 1 クロック間 rxst_V_read が 0 になる。
uart_rx_10_210219.png

最後に rxst_V_read が 0 になるタイミングは、ストップビットを検出するタイミングだ。ここでは、TVALID が 1 クロック間 0 になっていることもあるだろうが 2 クロック間 0 になっている。
uart_rx_12_210219.png

つまり、全体のクロック数 12 x 16 + 12 x 16 x 8 + 12 x 16 = 1920 クロックの内の 3 クロックだけ伸びているので、 3 / 1920 x 100 ≒ 0.16 % ずれていることになるが、問題無さそうだ。

Export RTL を行った。結果を示す。
uart_rx_11_210219.png

問題無さそうだ。

次に、ものが物だけに心配なので、Vivado でプロジェクトを作って、RTL シミュレーションをやってみようと思う。
  1. 2021年02月21日 04:30 |
  2. Vitis HLS
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/5154-e636839c
この記事にトラックバックする(FC2ブログユーザー)