Browse Subversion Repository
Contents of /trunk/Toriya/txdriver.v
Parent Directory
| Revision Log
Revision 118 -
( show annotations)
( download)
Wed Apr 11 04:55:06 2007 UTC
(17 years, 1 month ago)
by chapuni
File size: 1870 byte(s)
「本物の鳥屋」ついに公開です。
たぶん 2005/09 頃のものです。
もしかするとあと一度ほど、改良するかもね。
| 1 |
//////////////////////////////////////////////////////////////// |
| 2 |
// Serial TxD - 単純なシリアル送信 |
| 3 |
// author: 中村 巧 <webmaster@chapuni.com> |
| 4 |
// $Id$ |
| 5 |
|
| 6 |
module txdriver(clk, rst, |
| 7 |
TxD, CTS, |
| 8 |
we, d, rdy); |
| 9 |
input clk; // x1 |
| 10 |
input rst; |
| 11 |
output TxD; // 送信データ |
| 12 |
input CTS; // 送信データ要求(負論理) |
| 13 |
|
| 14 |
input we; // d にデータを用意してアサートせよ。 |
| 15 |
input [7:0] d; // data byte |
| 16 |
output rdy; // データを取り込めるときにアサートされる。 |
| 17 |
|
| 18 |
// フレームキューが空の状態は、これである。 |
| 19 |
// このとき、1が送信され続ける。 |
| 20 |
parameter EMPTY = 10'b0000000001; |
| 21 |
|
| 22 |
// フレーム(10ビット) |
| 23 |
reg [9:0] q; |
| 24 |
|
| 25 |
// 常にフレームのLSBが送信され続ける。 |
| 26 |
// 何もしないときは、1 でドライブしておくべきである。 |
| 27 |
assign TxD = q[0]; |
| 28 |
|
| 29 |
// rdyは、ストップビットを送ってる最中にアサートされる。 |
| 30 |
assign rdy = (q == EMPTY || q[9:1] == 8'b00000001); |
| 31 |
|
| 32 |
// ステート変数 |
| 33 |
// それぞれ排他的な条件である。 |
| 34 |
wire empty; |
| 35 |
wire waitcts; |
| 36 |
|
| 37 |
// キューにデータを取り込み可能な状態 |
| 38 |
// キューのシフトは行われない。 |
| 39 |
assign empty = (q == EMPTY); |
| 40 |
|
| 41 |
// 送信許可が下りるのを待ってる状態 |
| 42 |
// このとき、q[8:1]は、送信待ちデータになっている。 |
| 43 |
assign waitcts = (q[9] && q[0]); |
| 44 |
|
| 45 |
always @(posedge clk or posedge rst) |
| 46 |
if (rst) |
| 47 |
begin |
| 48 |
q <= EMPTY; |
| 49 |
end |
| 50 |
else if (empty) |
| 51 |
begin |
| 52 |
// データがセットされるときは、ストップビットを立てておく |
| 53 |
// CTSに応じてスタートビットがセットされる |
| 54 |
if (we) |
| 55 |
q <= {1'b1, d, CTS}; |
| 56 |
// CTS=1のときは、waitctsステートに移る |
| 57 |
// CTS=0のときは、txbitsステートに移る |
| 58 |
end |
| 59 |
else if (waitcts) |
| 60 |
begin |
| 61 |
// CTS, 送信許可待ちの状態 |
| 62 |
// CTS=0になったら自動的にtxbitsステートに |
| 63 |
// 移り、送信動作が開始される。 |
| 64 |
q[0] <= CTS; // start bit |
| 65 |
end |
| 66 |
else |
| 67 |
begin |
| 68 |
// txbits - ストップビット(番人でもある)に突き当たるまで |
| 69 |
// キューをシフトする。キューのLSBはTxDに直結している |
| 70 |
// ので、送信が自動的に行われる。 |
| 71 |
// MSBから0を充填していくので、ストップビットに |
| 72 |
// 突き当たったときに自動的にemptyステートに移行する。 |
| 73 |
q <= {1'b0, q[9:1]}; |
| 74 |
end |
| 75 |
|
| 76 |
endmodule |
Properties
| svn:eol-style |
native
|
| svn:keywords |
Author Date Id Rev URL
|
|