Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

0

Share

Download to read offline

Verilog-HDL Tutorial (12)

Download to read offline

Verilog-HDL Tutorial Using DE0 FPGA Board

  • Be the first to like this

Verilog-HDL Tutorial (12)

  1. 1. 1 Verilog-HDL 講習会DE0編(12) RS232C受信(Rx) 31, July, 2013 鹿児島大学 中原 啓貴
  2. 2. UARTとは •  シリアルポートに外部機器を接続して行う通信 •  1ビットずつ逐次データ転送 ‒  3本の信号線を使用: グランド(GND), 送信 (TX), 受信 (RX) •  同期をとるために予め以下の項目を決めておく ‒  ボーレート: 1秒当りの転送ビット数 ‒  データ長 ‒  パリティの有無: ありの場合は奇数か偶数かを設定 ‒  ストップビットの長さ •  データそのものに同期用信号を持ち, 送受信側双方で同 期をとる通信方法を調歩同期式 (別名, 非同期式: Asynchronous Communication)という •  調歩同期式でシリアルデータとパラレルデータを相互に 変換する回路を汎用非同期送受信回路 (UART: Universal Asynchronous Receiver Transmitter)という 2
  3. 3. RS232C通信とは 3 •  よく使われているUARTの一種 •  今回は3本線通信を実装しよう
  4. 4. 準備 •  DE0ボードにはRS232Cコネクタを取り付け るパターンが設計済み ‒  レベル(電圧)変換IC(ADM3202)も取り付け済み 4
  5. 5. RS232Cコネクタを半田付け 5 5 4 3 2 1 9 8 7 6 1 2 3 4 5 6 7 8 9 RS232Cコネクタ(メス)に ハンダ付け. 表と裏のピン番号に 気をつけること! 表 裏
  6. 6. RS232C信号を受信 (今回は9600 bpsとする) 6 スタートビット (1ビットの0) データ(8ビット) LSB(最下位ビット)から送信 ストップビット (1ビットの1) D0 D1 D2 D3 D7 9600 bps = 9600 bit per second つまり, 1秒間に(スタートビットや ストップビットも含めて) 9600bit送信するという意味
  7. 7. RS232C受信方法 •  4倍速いクロックでスタートビットを検出 ‒  9600bpsと等速→データ間を上手く切り替えられない ‒  速すぎるクロック→信号の変化を受信してしまう •  4クロック毎に受信 7 スタートビット (1ビットの0) データ(8ビット) LSB(最下位ビット)から送信 ストップビット (1ビットの1) D0 D1 D2 D3 D7 3回連続で0を 受信したとき スタートビット を受信と判定 D0を 受信 D1を 受信 D1を 受信
  8. 8. 50MHzから 9600bpsよりも 4倍速いクロック(つまり, 38400Hz)を 生成するには 8 38400 Hz ということは, 1周期= 1 / 38400 = 0.0000260416 [sec] 38400Hz ということは, 0.0000260416 / 2 = 0.0000130208 [sec] 毎に High と Low を切り替えればよい 50MHz 50 MHz ということは, 1周期= 1 / 50x106 = 0.02x10-6 [sec] つまり, 0.0000130208 / (0.02 x 10-6) = 651.04 クロック毎に High と Lowを切り替えればよい (実際は651クロック毎に行う)
  9. 9. 仕様 •  PCから送信したデータをLEDGに表示 9 USBシリアルケーブル (BUFFALO社製) BSUSRC0605BS を使用 (amazonで¥2011)
  10. 10. RS232C受信回路の状態遷移図 (ストップビットは受信していません…) 10 0000 0001 0010 0011 Reset LEDG <= 8'b0; clk_count <= 2'b0; catch_startbit <= 3'b111; catch_startbit == 3'b000 NONE 0100 catch_startbit != 3'b000 NONE 1001 1000 0111 0110 0101 clk_count == 2'b11 clk_count <= 2'b00; LEDG[0] <= UART_RXD; clk_count != 2'b11 clk_count <= clk_count + 1'b1; clk_count == 2'b11 clk_count <= 2'b00; LEDG[1] <= UART_RXD; clk_count == 2'b11 clk_count <= 2'b00; LEDG[2] <= UART_RXD; clk_count != 2'b11 clk_count <= clk_count + 1'b1; clk_count != 2'b11 clk_count <= clk_count + 1'b1; clk_count != 2'b11 clk_count <= clk_count + 1'b1; clk_count != 2'b11 clk_count <= clk_count + 1'b1; clk_count != 2'b11 clk_count <= clk_count + 1'b1; clk_count != 2'b11 clk_count <= clk_count + 1'b1; clk_count != 2'b11 clk_count <= clk_count + 1'b1; clk_count != 2'b11 clk_count <= clk_count + 1'b1; clk_count == 2'b11 clk_count <= 2'b00; LEDG[3] <= UART_RXD; clk_count == 2'b11 clk_count <= 2'b00; LEDG[4] <= UART_RXD; clk_count == 2'b11 clk_count <= 2'b00; LEDG[5] <= UART_RXD; clk_count == 2'b11 clk_count <= 2'b00; LEDG[6] <= UART_RXD; clk_count == 2'b11 clk_count <= 2'b00; LEDG[7] <= UART_RXD; clk_count == 2'b11 clk_count <= 2'b00;
  11. 11. 11 •  ピン配置が面倒くさいので、デフォルト のプロジェクトを読み込みましょう! (DE0に限った事ではないが、Terasic製品はサンプルCD-ROMの プロジェクトを改変するのが楽でお勧め) DE0付属のCD-ROM Demonstrations 内の "DE0_Top"フォルダの ファイル全てを C:¥verilog¥DE0_tutorial_9_LEDG_Slide¥ 内にコピー
  12. 12. DE0_TOP.qpfをダブルクリック してQuartus IIを起動 12 Pin Plannerを開いてみると ピン配置が終わっている!
  13. 13. Verilog-HDLを入力 13 ダブルクリック Verilog-HDLの テンプレートが 表示されるので コードを入力 コード入力したら保存を忘れずに!
  14. 14. 38400Hz生成回路の追加 14
  15. 15. 入力するVerilog-HDL 15
  16. 16. Verilog-HDLを保存する 16 Gen_CLK38400Hz.v として保存
  17. 17. RS232C受信回路の追加 17
  18. 18. 入力する Verilog-HDL (1) 18
  19. 19. 入力する Verilog-HDL (2) 19
  20. 20. 入力する Verilog-HDL (3) 20
  21. 21. Verilog-HDLを保存する 21 RS232C_RX.v として保存
  22. 22. DE0_Top.vの記述 22
  23. 23. コンパイルを行う 23 「保存アイコン」を クリックして保存 「コンパイルアイコン」を クリックして コンパイルを行う コンパイル後、このウインドウが 表示されればOK
  24. 24. FPGAとPCを接続する前に… •  COMポート(RS232C)の番号を確認 •  マイコンピュータを右クリックして「プロパティ」を選択 (Windowx XP) 24 このPCではCOM7ポート
  25. 25. FPGAをプログラム 25
  26. 26. RS232Cテストツールを起動 •  VECTOR (http://www.vector.co.jp/soft/winnt/ hardware/se411276.html)からダウンロードしてインス トールしてください 26 ポート名 ↓ 各PC毎に 異なる ボーレート: 9600, バイトサイズ: 8, パリティ: なし ストップビット: 1
  27. 27. PCとFPGAを RS232Cケーブルで接続 27
  28. 28. RS232C経由でデータ送信 28 3. 送信データ(A)のバイナリ値 →0x41 → 8'b0100 0001を受信 1. 送信TEXT: A, 送信データのバイナリ変換にチェックをつける 2. 接続をクリックし, TEXT送信をクリック
  29. 29. まとめ •  RS232CケーブルをDE0ボードにとりつけ •  RS232Cデータ受信回路を設計 •  課題: ‒  他のボーレートに対応する受信回路を設計せよ (115200bps, 14400bps) ‒  パリティを計算する回路を付加した受信回路を設計せよ ‒  【難】スライドスイッチでボーレートを切り替えること ができる受信回路を設計せよ 29

Verilog-HDL Tutorial Using DE0 FPGA Board

Views

Total views

1,678

On Slideshare

0

From embeds

0

Number of embeds

2

Actions

Downloads

15

Shares

0

Comments

0

Likes

0

×