ヤンシャンリンの「経営管理」における注意事項と放課後の演習の詳細な説明

`タイムスケール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

おすすめ

転載: blog.csdn.net/m0_47432812/article/details/106936660