0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PYNQ > Verilog-HDL > UART > loopbackの実装 (rx -> tx)

Last updated at Posted at 2020-08-14
動作環境
Windows 10 Pro (v1909) 
PYNQ-Z1 (Digilent) (以下、PYNQと表記)
PYNQ v2.5 Image
Vivado v2019.1 (64-bit)
Akafugu FTDIアダプター
NonSoft様 RS232Cテストツール

概要

  • Verilog-HDLにてrx受信したものをtx送信する実装
  • Akafugu FTDIアダプタでPCと接続
  • RS232Cテストツールにてエコーバックを確認した

Block Design

コメント 2020-08-14 110246.png

UARTのrxに対して、Make Externalしたrx_0を接続。
同時に、自作のUartLoopBack_v1_0のrxに接続した。

Address Editor

UartLiteのアドレスはデフォルトのまま。

コメント 2020-08-14 112142.png

UartLoopBack_v1_0 (Verilog-HDL)

UartLoopBack_v1_0はrxしたものをtxするだけの実装。

UartLoopBack_v1_0.v
`timescale 1ns / 1ps

module UartLoopBack(
    input rx,
    output tx,
    input clk
    );
    
    reg buffer;  // rxをtxに渡すためのバッファ
    always @(posedge clk)
    begin
        buffer <= rx;
    end
    
    assign tx = buffer;
endmodule

制約ファイル

XDC
set_property PACKAGE_PIN Y18 [get_ports rx_0]
set_property IOSTANDARD LVCMOS33 [get_ports rx_0]
set_property IOSTANDARD LVCMOS33 [get_ports tx_1]
set_property PACKAGE_PIN Y19 [get_ports tx_1]

set_property IOSTANDARD LVCMOS33 [get_ports reset_rtl]
set_property PACKAGE_PIN W6 [get_ports reset_rtl]

reset_rtlの設定はしっかりとは考えてない。

FTDIアダプタ (3.3V使用)

今回は3.3Vとして使用。
上記の制約ファイルでもLVCMOS33を設定している。

COM3としてパソコンでは認識した。

接続

PMOD
https://pynq.readthedocs.io/en/v2.4/pynq_libraries/pmod.html

pmod_pins.png

  • PYNQ <-> FTDIアダプター
    • PMODA 0ピン(RX) <-> FTDI (TX)
    • PMODA 1ピン(TX) <-> FTDI (RX)
    • PMODA (GND) <-> FTDI (GND)

ブレッドボード用のケーブル3本で接続した。

Vivado生成ファイル

下記のファイルをPYNQの「\\pynq\xilinx\jupyter_notebooks\base」に配置する。
(Explorerでコピーした)。

  • UARTloopback_200814.bit
  • UARTloopback_200814.tcl

Pythonスクリプト

from pynq import Overlay

ol = Overlay("/home/xilinx/jupyter_notebooks/base/UARTloopback_200814.bit")

動作確認

NonSoft様の以下を使用させていただきました。
ソフト提供ありがとうございます。

下記が実行した結果。

コメント 2020-08-14 111812.png

loopbackのVerilog HDL実装が有効となり、送信した文字列がそのまま受信できている。

9600 bpsでない動作 :thinking:

19200bpsでも試してみた。
文字化けはない。

:thinking:

コメント 2020-08-14 112049.png

そもそもUartLiteの初期化もしてない。

このあたりは将来もう少し理解を深めて使うことになるかな。

rxで受けたものをtxへループバックしながら、rxのコマンドをPSで解析、みたいなこと。それをするための今回のBlock Design (未検証)。

はまった点

UartLiteのtxを別のIPに接続しようとしたが、Make Externalするとそれはできないようだ。
シリアル通信モニターのようなことをするには工夫が必要になるだろう。

XSDK > Loopback機能

下記は広告などがある。見たくない人は開かないこと

XUartPs_SetOperMode(Uart_Ps, XUARTPS_OPER_MODE_LOCAL_LOOP); //Local loopback mode

XUARTPS_OPER_MODE_LOCAL_LOOPで指定する(ローカル)ループバック機能があるとのこと。
PYNQのシステムでXSDKを使わない場合、この機能を使うLibraryが見つからなかった。

その他、参考情報

この作業をする過程で見つけたいくつかのWebページ。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?