Browse Subversion Repository
Contents of /trunk/Toriya/rxdriver.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: 1591 byte(s)
「本物の鳥屋」ついに公開です。
たぶん 2005/09 頃のものです。
もしかするとあと一度ほど、改良するかもね。
| 1 |
//////////////////////////////////////////////////////////////// |
| 2 |
// Serial RxD - 単純なシリアル受信 |
| 3 |
// author: 中村 巧 <webmaster@chapuni.com> |
| 4 |
// $Id$ |
| 5 |
|
| 6 |
module rxdriver(clk, rst, |
| 7 |
RxD, RTS, |
| 8 |
rdy, d, ack); |
| 9 |
input clk; // x4 |
| 10 |
input rst; |
| 11 |
input RxD; // 受信データ |
| 12 |
output RTS; // 受信要求(負論理) |
| 13 |
output rdy; // d にデータが載ってるときにアサートされる |
| 14 |
output [7:0] d; |
| 15 |
input ack; // d をフェッチしてほしいときにアサートせよ |
| 16 |
|
| 17 |
// サンプリングキュー(4 * 10 - いくつか) |
| 18 |
// エンドビットを認識できればいいので、これで十分 |
| 19 |
parameter ENDBIT = 38; |
| 20 |
reg [ENDBIT:0] q; |
| 21 |
|
| 22 |
// フレームを受信している間アサートされる |
| 23 |
reg f; |
| 24 |
|
| 25 |
// 1-byte FIFO |
| 26 |
reg [7:0] d; |
| 27 |
reg rdy; // FIFOに有効データがセットされてるときアサート |
| 28 |
|
| 29 |
// ステートを表わす |
| 30 |
wire qrdy; |
| 31 |
|
| 32 |
// フレーム検出されているときにアサートされる |
| 33 |
assign qrdy = q[0] && !q[3:1] && q[ENDBIT]; |
| 34 |
|
| 35 |
// 早めにRTSを出さないと、PCが余分に送りつけてきて |
| 36 |
// overrunしてしまう。なのでFIFOが埋まって |
| 37 |
// 次のフレームが始まったらネゲートする。 |
| 38 |
assign RTS = rdy && f; |
| 39 |
|
| 40 |
always @(posedge clk or posedge rst) |
| 41 |
if (rst) |
| 42 |
begin |
| 43 |
q <= ~0; // すべて1で埋めておく |
| 44 |
f <= 0; |
| 45 |
d <= ~0; |
| 46 |
rdy <= 0; // FIFOは空 |
| 47 |
end |
| 48 |
else |
| 49 |
begin |
| 50 |
if (qrdy && !rdy && !ack) |
| 51 |
begin |
| 52 |
// キューをまっさらにする。 |
| 53 |
// フレームの取り込みを続行するため |
| 54 |
q[ENDBIT] <= RxD; |
| 55 |
q[ENDBIT - 1:0] <= ~0; |
| 56 |
f <= 0; |
| 57 |
|
| 58 |
// キューからFIFOにフレームを取り込む |
| 59 |
d <= { q[34], q[30], q[26], q[22], |
| 60 |
q[18], q[14], q[10], q[ 6]}; |
| 61 |
rdy <= 1; |
| 62 |
end |
| 63 |
else if (!qrdy) |
| 64 |
begin |
| 65 |
q <= {RxD, q[ENDBIT:1]}; // キューにサンプリング |
| 66 |
if (!RxD) |
| 67 |
f <= 1; |
| 68 |
end |
| 69 |
|
| 70 |
// 外からデータが取り込まれたらrdyをネゲート |
| 71 |
if (rdy && ack) |
| 72 |
rdy <= 0; |
| 73 |
end |
| 74 |
|
| 75 |
endmodule |
Properties
| svn:eol-style |
native
|
| svn:keywords |
Author Date Id Rev URL
|
| |