Develop and Download Open Source Software

Browse Subversion Repository

Contents of /trunk/Toriya/rxdriver.v

Parent Directory Parent Directory | Revision Log 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

Name Value
svn:eol-style native
svn:keywords Author Date Id Rev URL

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26