0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

FPGA驅(qū)動(dòng)AD芯片之實(shí)現(xiàn)與芯片通信

FPGA設(shè)計(jì)論壇 ? 來(lái)源:FPGA設(shè)計(jì)論壇 ? 2024-12-17 15:27 ? 次閱讀

概述:利用FPGA實(shí)現(xiàn)AD芯片的時(shí)序,進(jìn)一步實(shí)現(xiàn)與AD芯片數(shù)據(jù)的交互,主要熟悉FPGA對(duì)時(shí)序圖的實(shí)現(xiàn),掌握時(shí)序圖轉(zhuǎn)換Verilog硬件描述語(yǔ)言技巧后與其它芯片進(jìn)行數(shù)據(jù)的交互也是類似的。

說(shuō)明:FPGA芯片采用了altera的Cyclon IV E系列的“EP4CE10F17C8”,軟件環(huán)境-Quartus-Ⅱ,采用的AD芯片為—AD-TLC549。

通過(guò)FPGA實(shí)現(xiàn)以下時(shí)序設(shè)計(jì):

f1e28984-b909-11ef-8732-92fbcf53809c.png

1.AD-TLC549簡(jiǎn)介

位數(shù):8位。
最大轉(zhuǎn)換時(shí)間:17us(36個(gè)內(nèi)部時(shí)鐘周期)。
轉(zhuǎn)換速率:每秒40000次。
TOP VIEW:

f200be5e-b909-11ef-8732-92fbcf53809c.png


電路連接圖:

f20ee268-b909-11ef-8732-92fbcf53809c.png

2.AD-TLC549時(shí)序圖解析

From datasheet:

f22704ce-b909-11ef-8732-92fbcf53809c.png

2.1時(shí)序圖說(shuō)明:

(1)當(dāng)CS為高時(shí),轉(zhuǎn)換結(jié)果數(shù)據(jù)串行輸出端DATA OUT處于高阻態(tài),此時(shí)I/O CLOCK也不起作用。
(2)當(dāng)CS為低時(shí),AD前一次轉(zhuǎn)換的數(shù)據(jù)A的最高位A7立即出現(xiàn)在數(shù)據(jù)線DATA OUT上,其余的7位數(shù)據(jù)在I/O CLOCK的下降沿依次由時(shí)鐘同步輸出(方便我們?cè)谏仙夭杉瘮?shù)據(jù),細(xì)品)。

注意:

①當(dāng)CS變?yōu)榈碗娖降絀/O CLOCK的第一個(gè)時(shí)鐘到來(lái)至少需要1.4us。

f23a5858-b909-11ef-8732-92fbcf53809c.png
②I/O CLOCK不能超過(guò)1.1M,Verilog代碼中采用了1M的時(shí)鐘。

f25071b0-b909-11ef-8732-92fbcf53809c.png


(3)讀完8位數(shù)據(jù)后,AD開(kāi)始轉(zhuǎn)換下一幀 數(shù)據(jù)B,以便下次讀取,轉(zhuǎn)換時(shí)片選信號(hào)CS必須置高電平,每次轉(zhuǎn)換的時(shí)間不超過(guò)17us,轉(zhuǎn)換開(kāi)始于CS變低后的I/O CLOCK的第8個(gè)下降沿,沒(méi)有轉(zhuǎn)換完成的標(biāo)志信號(hào);也沒(méi)有啟動(dòng)控制端,只要讀取前一次數(shù)據(jù)后馬上就可以開(kāi)始新的AD轉(zhuǎn)換,轉(zhuǎn)換完后就進(jìn)入保持狀態(tài)。
f26e7610-b909-11ef-8732-92fbcf53809c.png

3.時(shí)序圖轉(zhuǎn)化為Verilog代碼

在時(shí)序圖轉(zhuǎn)化為Verilog代碼過(guò)程中,要注意的是時(shí)間t su {{ ext{t}}_{{ ext{su}}}}tsu=1.4us、t conv {{ ext{t}}_{{ ext{conv}}}}tconv=17us、I/O CLOCK=1MHz,AD轉(zhuǎn)換的時(shí)候I/O CLOCK是沒(méi)有的。

f281a758-b909-11ef-8732-92fbcf53809c.png


f23a5858-b909-11ef-8732-92fbcf53809c.png
f26e7610-b909-11ef-8732-92fbcf53809c.png

(1)代碼TOP VIEW:

f2cb248c-b909-11ef-8732-92fbcf53809c.png


(2)代碼按以下?tīng)顟B(tài)機(jī)編寫(xiě):

f2de508e-b909-11ef-8732-92fbcf53809c.png


狀態(tài)1:CS拉低至CLK第一個(gè)上升沿。
狀態(tài)2:在I/O CLOCK8個(gè)上升沿讀取數(shù)據(jù)。
狀態(tài)3:等待AD轉(zhuǎn)換完成。
狀態(tài)4:AD轉(zhuǎn)換完完成。

(3)依據(jù)時(shí)序圖完成以下代碼:

//系統(tǒng)時(shí)鐘為50M,周期為20ns; AD時(shí)鐘為1M,周期為1us

`define Tsu_time 10'd70//70*20=1.4us,Tsu延時(shí)的計(jì)數(shù)終值
`define Cov_time 10'd850//850*20=17us, Cov延時(shí)的計(jì)數(shù)終值
`define CLK_time 10'd50//20*50=1us,  實(shí)現(xiàn)1M AD時(shí)鐘得計(jì)數(shù)終值
`define CLKHALF_time 10'd25//20*25=0.5us,實(shí)現(xiàn)1M AD時(shí)鐘得計(jì)數(shù)中值

module AD_TLC549
(
//輸入
inputCLK_50M,//系統(tǒng)時(shí)鐘
input RST_N,//復(fù)位
input AD_DATA,//8bit AD原始數(shù)據(jù)
//輸出
output reg AD_CS,//片選
output reg AD_CLK//AD時(shí)鐘1M
);

//狀態(tài)機(jī),四個(gè)狀態(tài);狀態(tài)1:CS拉低至CLK第一個(gè)上升沿,狀態(tài)2:讀取數(shù)據(jù),狀態(tài)3等待轉(zhuǎn)換,狀態(tài)4:轉(zhuǎn)換完成
reg [2:0]SM_NOW/*synthesis preserve*/; //現(xiàn)在的狀態(tài)
reg [2:0]SM_NEXT/*synthesis preserve*/;//下一狀態(tài)
parameter SM_Tsu= 3'd0, //CS拉低至CLK第一個(gè)上升沿1.4us
SM_Data = 3'd1, //讀取AD數(shù)據(jù)8個(gè)AD_CLK
SM_Cov= 3'd2, //等待轉(zhuǎn)換17us
SM_End= 3'd3; //轉(zhuǎn)換完成

//產(chǎn)生計(jì)數(shù)
reg[9:0] Time_cnt;//在狀態(tài)機(jī)的每個(gè)狀態(tài)開(kāi)始都會(huì)被清零,可以運(yùn)用至每個(gè)狀態(tài)的計(jì)數(shù)
reg[3:0] CLK_posedge;//AD_CLK 的8個(gè)時(shí)鐘上升沿

//讀取的8bit數(shù)據(jù)
reg[7:0]DATA;//數(shù)據(jù)現(xiàn)態(tài)
reg[7:0]    DATA_N/*synthesis preserve*/;//數(shù)據(jù)的下一個(gè)狀態(tài)


//時(shí)鐘
reg AD_CLK_N;//AD_CLK的下一個(gè)狀態(tài)


//時(shí)序產(chǎn)生,Tsu計(jì)時(shí)、Cov計(jì)時(shí)、AD_CLK計(jì)時(shí)
always@(posedge CLK_50M or negedge RST_N)
begin
if(!RST_N)
Time_cnt <= 10'd0;
else if(SM_NOW != SM_NEXT)
Time_cnt <= 10'd0;
else if(SM_NOW == SM_Tsu)//產(chǎn)生tus延時(shí)
begin
if(Time_cnt == `Tsu_time)
Time_cnt <= 10'd0;
else
Time_cnt <= Time_cnt + 10'd1;
end
else if(SM_NOW == SM_Cov)//產(chǎn)生Cov延時(shí)
begin
if(Time_cnt == `Cov_time)
Time_cnt <= 10'd0;
else
Time_cnt <= Time_cnt + 10'd1;
end
else if(SM_NOW == SM_Data)//產(chǎn)生CLK
begin
if(Time_cnt == `CLK_time)
Time_cnt <= 10'd0;
else
Time_cnt <= Time_cnt + 10'd1;
end
else
Time_cnt <= Time_cnt;
end

//產(chǎn)生AD_CLK
always@(posedge CLK_50M or negedge RST_N)
begin
if(!RST_N)
AD_CLK <= 0;
else
AD_CLK <= AD_CLK_N;
end
always@(*)
begin
if(SM_NOW != SM_Data)
AD_CLK_N = 0;
else if(Time_cnt == `CLKHALF_time)//半周期
begin
AD_CLK_N = 1;//CLK_H
end
else if(Time_cnt == `CLK_time)//滿周期
AD_CLK_N = 0;//CLK_L
else
AD_CLK_N = AD_CLK;
end

//記錄AD_CLK的8個(gè)上升沿
always@(posedge CLK_50M or negedge RST_N)
begin
if(!RST_N)
CLK_posedge <= 4'd0;
else if(SM_NOW != SM_Data)
CLK_posedge <= 4'd0;
else if(Time_cnt == `CLKHALF_time)
CLK_posedge <= CLK_posedge + 4'd1;
else
CLK_posedge <= CLK_posedge;
end

//CS信號(hào)產(chǎn)生
always@(posedge CLK_50M or negedge RST_N)
begin
if(!RST_N)
AD_CS <= 1'b1;
else
begin
if(SM_NOW == SM_Tsu)
AD_CS <= 1'b0;
else if(SM_NOW == SM_Cov)
AD_CS <= 1'b1;
else
AD_CS <= AD_CS;
end
end


//狀態(tài)機(jī),產(chǎn)生AD時(shí)序
always@(posedge CLK_50M or negedge RST_N)
begin
if(!RST_N)
SM_NOW <= 3'd0;
else
SM_NOW <= SM_NEXT;
end
always@(*)
begin
case(SM_NOW)
SM_Tsu://狀態(tài)1:CS拉低至CLK第一個(gè)上升沿。
if(Time_cnt == `Tsu_time)
SM_NEXT = SM_Data;
else
SM_NEXT = SM_Tsu;
SM_Data://狀態(tài)2:在I/O CLOCK8個(gè)上升沿讀取數(shù)據(jù)。
if(CLK_posedge == 4'd8 && Time_cnt == `CLK_time)
SM_NEXT = SM_Cov;
else
SM_NEXT = SM_Data;
SM_Cov: //狀態(tài)3:等待AD轉(zhuǎn)換完成。
if(Time_cnt == `Cov_time)
SM_NEXT = SM_End;
else
SM_NEXT = SM_Cov;
SM_End://狀態(tài)4:AD轉(zhuǎn)換完完成。
 SM_NEXT <= SM_Tsu;
default:SM_NEXT <= SM_Tsu;
endcase
end



//提取數(shù)據(jù)
always@(posedge CLK_50M or negedge RST_N)
begin
if(!RST_N)
DATA <= 8'b0;
else
DATA <= DATA_N;
end

always@(*)
begin
if((SM_NOW == SM_Data)&&(!AD_CLK)&&(AD_CLK_N))//上升沿
DATA_N = {DATA[6:0],AD_DATA};
else
DATA_N = DATA;
end

endmodule

4. 仿真結(jié)果

通過(guò)SignalTapⅡ仿真得到以下波形:

f2e9368e-b909-11ef-8732-92fbcf53809c.png


波形解析:

(1)t su {{ ext{t}}_{{ ext{su}}}}tsu:
用計(jì)數(shù)器實(shí)現(xiàn)了1.9us延時(shí),大于了1.4us。

f2fea316-b909-11ef-8732-92fbcf53809c.png

(2)t conv {{ ext{t}}_{{ ext{conv}}}}tconv:
用計(jì)數(shù)器實(shí)現(xiàn)17us延時(shí)

f30665a6-b909-11ef-8732-92fbcf53809c.png


(3)8bit數(shù)據(jù)及其時(shí)鐘:

f31bc086-b909-11ef-8732-92fbcf53809c.png

原文鏈接:

https://openatomworkshop.csdn.net/6746bf193a01316874d9466f.html

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1629

    文章

    21736

    瀏覽量

    603248
  • 通信
    +關(guān)注

    關(guān)注

    18

    文章

    6032

    瀏覽量

    135985
  • AD芯片
    +關(guān)注

    關(guān)注

    2

    文章

    25

    瀏覽量

    18397

原文標(biāo)題:FPGA驅(qū)動(dòng)AD芯片_實(shí)現(xiàn)與芯片通信

文章出處:【微信號(hào):gh_9d70b445f494,微信公眾號(hào):FPGA設(shè)計(jì)論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何排查FPGA與USB之間的芯片通信問(wèn)題?

    ”,而在SBBulkSourceSink固件中沒(méi)有顯示這個(gè)錯(cuò)誤,可不可以證明我的FPGA和USB之間通信成功?另外,我該如何排查FPGA與USB之間的芯片
    發(fā)表于 02-27 06:46

    FPGA芯片的選擇問(wèn)題

    本人剛剛接觸FPAG不久,之前用cyclone3的DE0開(kāi)發(fā)板自己編過(guò)串口通信和CRC校驗(yàn),但是對(duì)FPGA整體了解還很菜鳥(niǎo),現(xiàn)在想用FPGA實(shí)現(xiàn)一個(gè)自動(dòng)控制,需要DA和AD,不想用開(kāi)發(fā)
    發(fā)表于 06-13 14:59

    PCI總線協(xié)議的FPGA實(shí)現(xiàn)驅(qū)動(dòng)設(shè)計(jì)

    PCI總線協(xié)議的FPGA實(shí)現(xiàn)驅(qū)動(dòng)設(shè)計(jì) 摘要! 采用FPGA技術(shù)! 在公司的flex6000系列芯片
    發(fā)表于 03-12 14:30 ?36次下載

    擴(kuò)頻通信芯片STEL-2000A的FPGA實(shí)現(xiàn)

    針對(duì)傳統(tǒng)集成電路(ASIC)功能固定、升級(jí)困難等缺點(diǎn),利用FPGA實(shí)現(xiàn)了擴(kuò)頻通信芯片STEL-2000A的核心功能。使用ISE提供的DDS IP核實(shí)
    發(fā)表于 11-22 16:23 ?44次下載

    基于FPGA-SPARTAN芯片的CCD的硬件驅(qū)動(dòng)電路設(shè)計(jì)

      CCD驅(qū)動(dòng)電路的實(shí)現(xiàn)是CCD應(yīng)用技術(shù)的關(guān)鍵問(wèn)題。以往大多是采用普通數(shù)字芯片實(shí)現(xiàn)驅(qū)動(dòng)電路,CCD外圍電路復(fù)雜,為了克服以上方法的缺點(diǎn),利用
    發(fā)表于 08-30 09:58 ?1385次閱讀
    基于<b class='flag-5'>FPGA</b>-SPARTAN<b class='flag-5'>芯片</b>的CCD的硬件<b class='flag-5'>驅(qū)動(dòng)</b>電路設(shè)計(jì)

    芯片fpga實(shí)現(xiàn)及仿真

    dac0832ad08098259a,825382508255等芯片fpga實(shí)現(xiàn)及仿真
    發(fā)表于 01-20 15:12 ?13次下載

    低成本的采用FPGA實(shí)現(xiàn)SDH設(shè)備時(shí)鐘芯片技術(shù)

    介紹一種采用FPGA(現(xiàn)場(chǎng)可編程門(mén)陣列電路)實(shí)現(xiàn)SDH(同步數(shù)字體系)設(shè)備時(shí)鐘芯片設(shè)計(jì)技術(shù),硬件主要由1 個(gè)FPGA 和1 個(gè)高精度溫補(bǔ)時(shí)鐘組成.通過(guò)該技術(shù),可以在
    發(fā)表于 11-21 09:59 ?2198次閱讀
    低成本的采用<b class='flag-5'>FPGA</b><b class='flag-5'>實(shí)現(xiàn)</b>SDH設(shè)備時(shí)鐘<b class='flag-5'>芯片</b>技術(shù)

    基于FPGA 的嵌入式系統(tǒng)程序開(kāi)發(fā)實(shí)現(xiàn)對(duì)ARM 接口通信控制模塊、芯片驅(qū)動(dòng)模塊的程序設(shè)計(jì)

    數(shù)字存儲(chǔ)示波器采用ARM 與FPGA 雙處理器結(jié)合的嵌入式系統(tǒng)設(shè)計(jì)方案,重點(diǎn)介紹在FPGA 中如何實(shí)現(xiàn)對(duì)外圍芯片通信
    發(fā)表于 11-18 05:47 ?2667次閱讀
    基于<b class='flag-5'>FPGA</b> 的嵌入式系統(tǒng)程序開(kāi)發(fā)<b class='flag-5'>實(shí)現(xiàn)</b>對(duì)ARM 接口<b class='flag-5'>通信</b>控制模塊、<b class='flag-5'>芯片</b><b class='flag-5'>驅(qū)動(dòng)</b>模塊的程序設(shè)計(jì)

    如何吧項(xiàng)目實(shí)現(xiàn)FPGA芯片

    在本輔導(dǎo)教材中,將重點(diǎn)講解如何將一個(gè)設(shè)計(jì)項(xiàng)目物理地實(shí)現(xiàn)FPGA 芯片中。我們將展示如何用手工的方法選擇器件封裝的引腳,并且把這些引腳用做電路的輸入和輸出信號(hào),此外還將描述如何使用Quartus II 編程器模塊把編譯完的電路傳
    發(fā)表于 10-27 16:26 ?20次下載
    如何吧項(xiàng)目<b class='flag-5'>實(shí)現(xiàn)</b>在<b class='flag-5'>FPGA</b><b class='flag-5'>芯片</b>中

    基于FPGA芯片和SOPC技術(shù)實(shí)現(xiàn)水文測(cè)報(bào)通信系統(tǒng)的設(shè)計(jì)

    隨著微電子工藝技術(shù)和IC設(shè)計(jì)技術(shù)的不斷提高,整個(gè)系統(tǒng)都可集成在一個(gè)芯片上,而且系統(tǒng)芯片的復(fù)雜性越來(lái)越高。為了提高效率,復(fù)用以前的設(shè)計(jì)模塊已經(jīng)成為系統(tǒng)世馘 (SOC)設(shè)計(jì)的必上之路。SOC的實(shí)現(xiàn)基本上有兩種方法,一種是用ASIC
    的頭像 發(fā)表于 06-11 15:55 ?2111次閱讀
    基于<b class='flag-5'>FPGA</b><b class='flag-5'>芯片</b>和SOPC技術(shù)<b class='flag-5'>實(shí)現(xiàn)</b>水文測(cè)報(bào)<b class='flag-5'>通信</b>系統(tǒng)的設(shè)計(jì)

    如何使用FPGA驅(qū)動(dòng)并行ADC和并行DAC芯片

    ADC和DAC是FPGA與外部信號(hào)的接口,從數(shù)據(jù)接口類型的角度劃分,有低速的串行接口和高速的并行接口。FPGA經(jīng)常用來(lái)采集中高頻信號(hào),因此使用并行ADC和DAC居多。本文將介紹如何使用FPGA
    的頭像 發(fā)表于 04-21 08:55 ?7117次閱讀

    芯片行業(yè)之淺談FPGA芯片

    FPGA 是數(shù)字芯片的一類分支,與CPU、GPU等功能固定芯片不同的是, FPGA 制造完成后可根據(jù)用戶需要,賦予其特定功能。 FPGA
    的頭像 發(fā)表于 02-08 06:20 ?4097次閱讀

    FPGA高級(jí)設(shè)計(jì)之實(shí)現(xiàn)功耗優(yōu)化

    點(diǎn)擊上方 藍(lán)字 關(guān)注我們 ? FPGA 高級(jí)設(shè)計(jì)之實(shí)現(xiàn)功耗優(yōu)化 與ASICs(Application Specific Integrated Circuits)比較,相似的邏輯功能,用FPGA來(lái)
    的頭像 發(fā)表于 05-19 13:50 ?1286次閱讀

    fpga芯片工作原理 fpga芯片有哪些型號(hào)

    部分。這些部分共同構(gòu)成了FPGA的基本結(jié)構(gòu),使其具有高度的靈活性和可配置性。 在FPGA中,小型查找表(LUT)是實(shí)現(xiàn)組合邏輯的關(guān)鍵組件。每個(gè)查找表連接到一個(gè)D觸發(fā)器的輸入端,觸發(fā)器進(jìn)而驅(qū)動(dòng)
    的頭像 發(fā)表于 03-14 17:17 ?1494次閱讀

    DS1302芯片FPGA之間SPI通信原理

    本文通過(guò)以DS1302芯片為基礎(chǔ),介紹該芯片FPGA之間SPI通信原理,詳細(xì)描述硬件設(shè)計(jì)原理及FPGA SPI接口
    的頭像 發(fā)表于 10-24 14:16 ?444次閱讀
    DS1302<b class='flag-5'>芯片</b>與<b class='flag-5'>FPGA</b>之間SPI<b class='flag-5'>通信</b>原理