verilog-hdl tutorial (13)
TRANSCRIPT
RS232C信号を送信 (今回も9600 bpsとする)
2
スタートビット (1ビットの0)
データ(8ビット) LSB(最下位ビット)から送信
ストップビット (1ビットの1)
D0 D1 D2 D3 D7
9600 bps = 9600 bit per second つまり, 1秒間に(スタートビットや ストップビットも含めて) 9600bit送信するという意味
送信は結構簡単 • 9600bps -> 9600Hzに同期してデータを送信するだけ
3
スタートビット (1ビットの0)
データ(8ビット) LSB(最下位ビット)から送信
ストップビット (1ビットの1)
D0 D1 D2 D3 D7
タイミングの生成 • 50MHz (DE0ボードのクロック)から 9600Hzをどうやって生成?
4
9600Hz ということは, 1周期= 1 /9600 = 0.04 [sec]
9600Hz
ということは, 0.04 / 2 = 0.02 [sec] 毎にHigh と Low を切り替えればよい
50MHz 50 MHz ということは, 1周期= 1 / 50x106 = 0.02x10-6 [sec]
つまり, 0.02 / (0.02 x 10-6) = 100,000 クロック毎に High と Lowを切り替えればよい
自分で考えてみよう
仕様 • 8個のスライドスイッチ(8ビット)をPCに送信 ‒ ボーレート: 9600bps, ストップビット:1 , パリティ: なし
• 押しボタン (BUTTON[2])を押すと, 1データ送信
5
USBシリアルケーブル (BUFFALO社製) BSUSRC0605BS
を使用 (amazonで¥2011)
送信データ設定 (8ビット)
送信開始ボタン (負論理)
RS232C送信回路の状態遷移図
6
0000 0001 0010 0011 0100 0101
1011 1010 1001 1000 0111 0110
Reset UART_TXD <= 1'b1;
BUTTON[2] == 1'b0 NONE
BUTTON[2] != 1'b0 NONE
BUTTON[2] != 1'b1 NONE
BUTTON[2] == 1'b1 NONE
NONE UART_TXD <= 1'b1;
NONE UART_TXD <= SW[0];
NONE UART_TXD <= SW[1];
NONE UART_TXD <= SW[2];
NONE UART_TXD <= SW[3];
NONE UART_TXD <= SW[4];
NONE UART_TXD <= SW[5];
NONE UART_TXD <= SW[6];
NONE UART_TXD <= SW[7];
NONE UART_TXD <= 1'b1;
7
• ピン配置が面倒くさいので、デフォルトのプロジェクトを読み込みましょう! (DE0に限った事ではないが、Terasic製品はサンプルCD-ROMの プロジェクトを改変するのが楽でお勧め)
DE0付属のCD-ROM ”Demonstrations”内の "DE0_Top"フォルダの ファイル全てを C:¥verilog¥DE0_tutorial_9_LEDG_Slide¥ 内にコピー
RS232Cテストツールを起動 • VECTOR (http://www.vector.co.jp/soft/winnt/hardware/se411276.html)からダウンロードしてインストールしてください
22
ポート名 ↓ 各PC毎に 異なる
ボーレート: 9600, バイトサイズ: 8, パリティ: なし ストップビット: 1
RS232C経由で データ送信
24
1. RS232Cテストツールを起動し 設定を行う(前回を参考に)
2. 接続をクリック
3. スライドスイッチを設定(ここでは11000101, つまり16進数で0xC5 )
4. 送信ボタンを押すと スライドスイッチの値が RS232Cテストツールに 表示される