2009年3月29日日曜日

テストベンチを修正!

先ほど、書いたテストベンチがダメダメだったので、
シリアルデータをつくるところと一緒に修正しました。
ついでに少しだけ説明も追加。
でも見ている人には、何やってるかさっぱりわからない気がします。ごめんなさい。

このテストベンチは、Texas InstrumentのPCM1803という24ビットの96ksps
A/Dコンバータに接続するシリ・パラ変換回路の動作確認のために作ったものです。
ここでは48kspsで動かすことを想定して、必要なクロックやシリアルデータをつくります。

テストベンチの出力
 SDIN   ・・・シリ・パラ変換回路にシリアルデータ信号(PCM1803の出力を想定)
 CLK12M ・・・シリ・パラ変換回路に与えるクロック信号
 CLK3M  ・・・シリ・パラ変換回路に与えるクロック信号
 CLK48K ・・・シリ・パラ変換回路に与えるクロック信号
 RST    ・・・シリ・パラ変換回路に与えるリセット信号

シリ・パラ変換回路の出力
 LRCKO ・・・PCM1803に与えるLRクロック
 BCKO  ・・・PCM1803に与えるビットクロック
 SCKO  ・・・PCM1803に与えるシステムクロック
 DOUT1 ・・・パラレルデータ出力(L)
 DOUT2 ・・・パラレルデータ出力(R)


以下、テストベンチのコード


module tb_adc;

// Inputs
reg SDIN;
reg CLK12M;
reg CLK3M;
reg CLK48K;
reg RST;

// Outputs
wire BCKO;
wire LRCKO;
wire SCKO;
wire [23:0] DOUT1;
wire [23:0] DOUT2;

// Instantiate the Unit Under Test (UUT)
ADC_IF uut (
.SDIN(SDIN),
.BCKO(BCKO),
.LRCKO(LRCKO),
.SCKO(SCKO),
.CLK12M(CLK12M),
.CLK3M(CLK3M),
.CLK48K(CLK48K),
.DOUT1(DOUT1),
.DOUT2(DOUT2),
.RST(RST)
);

reg [5:0] i;
parameter DATA = 64'h0012_3456_0078_9ABC; // Lch(32bit)/Rch(32bit)
                                    //・・・ MSBファースト、右詰めフォーマット

initial begin
// Initialize Inputs
SDIN = 0;
CLK12M = 1;
CLK3M = 1;
CLK48K = 1;
RST = 0;
i = 6'd63;

#8;          // ・・・スタートしてから8ns後にリセット
RST = 1;

// Add stimulus here
#230;        // ・・・さらに230ns後にリセットを解除
RST = 0;

end

always #40 begin //256fs 12.288MHz  ・・・A/Dコンバータのシステムクロック
CLK12M = ‾CLK12M;
end

always #160 begin //64fs 3.072MHz  ・・・ A/Dコンバータのビットクロック(BCK)
CLK3M = ‾CLK3M;
end

always #10240 begin //fs 48kHz
CLK48K = ‾CLK48K;
end

always #320 begin  // ・・・320ns(ビットクロックの周期)毎にシリアルデータを出力
if (i == 6'd0) begin
i = 6'd63;
end else begin
i = i - 6'd1;
end
SDIN = DATA[i];
end

endmodule



こんなのでいいのかどうかわかりませんが、
とりあえずそれらしく動いてくれました。


0 件のコメント:

コメントを投稿