`タイムスケール1ns / 1ps
module level_adc
(
input clk、
input start、// two cycle width of“ clk”
output sclk、
output cs_n、
input sdat、
output [12:0] level、
output reg valid
);
// ADCサンプリングを実際に開始するには、1サイクルのあいまいさがあります。
//
reg div2 = 1'b1;から
常に@(posedge clk)
div2 <=〜div2;
reg [13:0] length = 0;
常に@(posedge clk)
if(div2)
開始
長<= {length [12:0]、start};
終わり
(* IOB =“ TRUE” *)
reg chip_sel = 1'b1;
reg sclk_gat = 1'b0;
常に@(posedge clk)
if(div2)
if(length!= 14'h0)
begin
chip_sel <= 1'b0;
end
else
begin
begin_chip <= 1'b1; 常に
終了
@(posedge clk)
if(div2)
if({length [13:0]、start}!= 15'h0)
begin
sclk_gat <= 1'b1; それ以外は
終了sclk_gat <= 1'b0; end cs_n = chip_sel;を割り当てます。
reg clk_gen=1'b0;
always @ ( posedge clk )
clk_gen <= div2 & sclk_gat;
assign sclk = clk_gen;
reg [11:0] sample = 12'h0;
常に@(posedge clk)
if(div2)
case(length)
14'h0004:#1 sample [00] <= sdat;
14'h0008:#1 sample [01] <= sdat;
14'h0010:#1 sample [02] <= sdat;
14'h0020:#1 sample [03] <= sdat;
14'h0040:#1 sample [04] <= sdat;
14'h0080:#1 sample [05] <= sdat;
14'h0100:#1 sample [06] <= sdat;
14'h0200:#1 sample [07] <= sdat;
14'h0400:#1 sample [08] <= sdat;
14'h0800:#1 sample [09] <= sdat;
14'h1000:#1 sample [10] <= sdat;
14'h2000:#1 sample [11] <= sdat;
デフォルト:#1サンプル<= sample; // 14'h0;
エンドケース
assign level = sample;
always @ ( posedge clk )
valid <= chip_sel & clk_gen;
エンドモジュール
上記はADCシリアル変換と実装コードですので、コードソースファイルのリンクをクリックしてください。
リンク:ヤンシャンリンの「経営」ノートと放課後の演習の詳細な説明
抽出コード:d7c8