成人免费无码不卡毛片,亚洲AⅤ无码精品一区二区三区,国产尤物精品视频,久久精品日本亚洲,欧美成人一区三区无码乱码A片,中文字日产幕码一区二区色哟哟,亞洲日韓中文字幕網AV

  • 正文
    • TCL549驅動設計
  • 推薦器件
  • 相關推薦
申請入駐 產業(yè)圖譜

FPGA零基礎學習之Vivado-TLC549驅動設計

2023/07/27
1809
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

作者:李西銳??校對:陸輝

大俠好,歡迎來到FPGA技術江湖。本系列將帶來FPGA的系統性學習,從最基本的數字電路基礎開始,最詳細操作步驟,最直白的言語描述,手把手的“傻瓜式”講解,讓電子、信息、通信類專業(yè)學生、初入職場小白及打算進階提升的職業(yè)開發(fā)者都可以有系統性學習的機會。

系統性的掌握技術開發(fā)以及相關要求,對個人就業(yè)以及職業(yè)發(fā)展都有著潛在的幫助,希望對大家有所幫助。本次帶來Vivado系列,TLC549驅動設計。話不多說,上貨。

TCL549驅動設計

在生活中,數模轉換的例子到處可見。但是在我們做FPGA設計時,需要對數字信號進行處理,但是,不是所有的信號都是以數字信號的形式體現的,比如光信號、聲信號、電信號等等。那么此時就需要我們先進行一下模數轉換之后再進行處理。在此,我們將介紹一款模數轉換芯片TLC549。

TLC549是一款串行總線控制的8bit模數轉換芯片,封裝如下圖:

管腳說明:

芯片特征:

1、8bit A/D轉換器。

2、最大轉換時間為17us。

3、供電3V~6V之間。

4、低功耗最大功率為15mW。

在官方手冊中,對此芯片有這樣的一段描述:

在這段描述中,大致說出了這個芯片的一些控制。比如:TLC548和TLC549都是8bit的模數轉換器。這個芯片使用I/O CLOCK和CS_N來控制數據。TLC548的I/O CLOCK最大頻率為2.048MHz,TLC549的I/O CLOCK最大頻率為1.1MHz。

在這段描述中可以看出,AD芯片的數據輸出,需要在I/O CLOCK和CS_N的控制下才能進行。

芯片示意圖:

從圖中可以看出,參考電壓是模數轉換的一個標準,CS_N和I/O CLOCK給到邏輯控制和輸出計數。數據通過一個輸出寄存器給到一個并串轉換的模塊。DATA_OUT數據是給到我們的FPGA的,所以,對于我們來說需要做的就是輸出CS_N和I/O CLOCK的波形,同時,將給進來的數據采到。

上圖為驅動的時序圖,可以看到,當數據輸出的時候,CS_N為低電平,總共輸出8bit,輸出完之后,CS_N拉高。我們在做驅動時??梢詫⒁淮无D換過程看成一個周期,后續(xù)也是重復過程。那么,我們就需要搞清楚每段時間的要求,有助于我們寫驅動。

在上圖中,我們可以知道:

1、CS_N從拉低到第一bit數據出現在數據線上的時間最大為1.4us。

2、CS_N從拉低到第一個時鐘上升沿出現,時間最小為1.4us。

3、I/O CLOCK頻率最大為1.1MHz。為了方便計算,我們采取1MHz。

4、Tconv轉換時間最大為17us。

5、CS_N拉高時間最小為17us。

在知道了以上信息后,我們開始寫驅動,首先新建一下工程。

選擇好之后點擊完成,新建文件寫代碼。

代碼如下:

1   module TLC549_driver(2     3     input   wire          clk,4     input   wire          rst_n,5     6     output  reg           ad_clk,7     output  reg           ad_cs_n,8     input   wire          ad_data,9     10    output  reg    [7:0]  data11  );1213    parameter   t = 1300;1415    reg     [10:0]    cnt;16    reg     [7:0]     data_temp;17    18    always @ (posedge clk, negedge rst_n)19    begin20    if(rst_n == 1'b0)21      cnt <= 11'd0;22    else if(cnt == t - 1)23      cnt <= 11'd0;24    else25      cnt <= cnt + 1'b1;26    end27    28    always @ (posedge clk, negedge rst_n)29    begin30    if(rst_n == 1'b0)31      begin32      ad_clk <= 1'b0;33      ad_cs_n <= 1'b1;34      data_temp <= 8'd0;35      data <= 8'd0;36      end37    else38      case(cnt)39      0   : begin ad_cs_n <= 1'b0; ad_clk <= 1'b0; end40      74  : begin ad_clk <= 1'b1; data_temp[7] <= ad_data; end41      99  : begin ad_clk <= 1'b0; end42      124 : begin ad_clk <= 1'b1; data_temp[6] <= ad_data; end43      149 : begin ad_clk <= 1'b0; end44      174 : begin ad_clk <= 1'b1; data_temp[5] <= ad_data; end45      199 : begin ad_clk <= 1'b0; end46      224 : begin ad_clk <= 1'b1; data_temp[4] <= ad_data; end47      249 : begin ad_clk <= 1'b0; end48      274 : begin ad_clk <= 1'b1; data_temp[3] <= ad_data; end49      299 : begin ad_clk <= 1'b0; end50      324 : begin ad_clk <= 1'b1; data_temp[2] <= ad_data; end51      349 : begin ad_clk <= 1'b0; end52      374 : begin ad_clk <= 1'b1; data_temp[1] <= ad_data; end53      399 : begin ad_clk <= 1'b0; end54      424 : begin ad_clk <= 1'b1; data_temp[0] <= ad_data; end55      449 : begin ad_clk <= 1'b0; ad_cs_n <= 1'b1; end56      1299: begin data <= data_temp; end57      default : ;58      endcase59    end60    61  endmodule

 

代碼寫好之后,我們做一下仿真看一下數據能否被正確采集,代碼如下:

1   `timescale 1ns / 1ps2 3   module TLC549_driver_tb;4 5     reg         clk;6     reg         rst_n;7     8     wire        ad_clk;9     wire        ad_cs_n;10    reg         ad_data;11    12    wire  [7:0] data;13    14    initial begin15    clk = 0;16    rst_n = 0;17    ad_data = 0;18    #100;19    rst_n = 1;20    #1000;21    ad_data = 1;     //1010011022    #1000;23    ad_data = 0;24    #1000;25    ad_data = 1;26    #1000;27    ad_data = 0;28    #1000;29    ad_data = 0;30    #1000;31    ad_data = 1;32    #1000;33    ad_data = 1;34    #1000;35    ad_data = 0;36    #20000;37    $stop;38    end3940    always #10 clk = ~clk;41    42    TLC549_driver TLC549_driver_inst(43    44    .clk          (clk),45    .rst_n        (rst_n),46    47    .ad_clk       (ad_clk),48    .ad_cs_n      (ad_cs_n),49    .ad_data      (ad_data),50    51    .data         (data)52  );53    54  endmodule

編譯無誤,打開波形觀察。

仿真中給出的數據位8’b10100110,換算成16進制為8’ha6。與波形中顯示一致,仿真正確。

 

推薦器件

更多器件
器件型號 數量 器件廠商 器件描述 數據手冊 ECAD模型 風險等級 參考價格 更多信息
XC7S50-1FGGA484I 1 AMD Xilinx Field Programmable Gate Array, 4075 CLBs, PBGA484, FBGA-484
$554.63 查看
10M08SCU324C8G 1 Intel Corporation Field Programmable Gate Array,
$148.65 查看
M1A3P250-PQG208I 1 Microsemi FPGA & SoC Field Programmable Gate Array, 6144 CLBs, 250000 Gates, 350MHz, 6144-Cell, CMOS, PQFP208, 28 X 28 MM, 3.40 MM HEIGHT, 0.50 MM PITCH, GREEN, PLASTIC, QFP-208
$556.64 查看

相關推薦

登錄即可解鎖
  • 海量技術文章
  • 設計資源下載
  • 產業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄

任何技術的學習就好比一個江湖,對于每一位俠客都需要不斷的歷練,從初入江湖的小白到歸隱山林的隱世高人,需要不斷的自我感悟自己修煉,讓我們一起仗劍闖FPGA乃至更大的江湖。

高台县| 巨鹿县| 石城县| 化隆| 玉树县| 泸西县| 海阳市| 黄石市| 广州市| 英吉沙县| 乐都县| 衡阳县| 巴彦淖尔市| 离岛区| 长宁区| 伊通| 崇州市| 武夷山市| 宁夏| 普宁市| 永宁县| 城口县| 苏尼特左旗| 营口市| 旌德县| 阜康市| 从江县| 呼图壁县| 平顺县| 焉耆| 吕梁市| 鄂托克前旗| 长子县| 应城市| 石屏县| 墨玉县| 鄂州市| 益阳市| 合江县| 汤原县| 醴陵市|