0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FPGA驱动AD芯片之实现与芯片通信

FPGA设计论坛 来源:FPGA设计论坛 2024-12-17 15:27 次阅读

概述:利用FPGA实现AD芯片的时序,进一步实现与AD芯片数据的交互,主要熟悉FPGA对时序图的实现,掌握时序图转换Verilog硬件描述语言技巧后与其它芯片进行数据的交互也是类似的。

说明:FPGA芯片采用了altera的Cyclon IV E系列的“EP4CE10F17C8”,软件环境-Quartus-Ⅱ,采用的AD芯片为—AD-TLC549。

通过FPGA实现以下时序设计:

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

1.AD-TLC549简介

位数:8位。
最大转换时间:17us(36个内部时钟周期)。
转换速率:每秒40000次。
TOP VIEW:

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


电路连接图:

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

2.AD-TLC549时序图解析

From datasheet:

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

2.1时序图说明:

(1)当CS为高时,转换结果数据串行输出端DATA OUT处于高阻态,此时I/O CLOCK也不起作用。
(2)当CS为低时,AD前一次转换的数据A的最高位A7立即出现在数据线DATA OUT上,其余的7位数据在I/O CLOCK的下降沿依次由时钟同步输出(方便我们在上升沿采集数据,细品)。

注意:

①当CS变为低电平到I/O CLOCK的第一个时钟到来至少需要1.4us。

f23a5858-b909-11ef-8732-92fbcf53809c.png
②I/O CLOCK不能超过1.1M,Verilog代码中采用了1M的时钟。

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


(3)读完8位数据后,AD开始转换下一帧 数据B,以便下次读取,转换时片选信号CS必须置高电平,每次转换的时间不超过17us,转换开始于CS变低后的I/O CLOCK的第8个下降沿,没有转换完成的标志信号;也没有启动控制端,只要读取前一次数据后马上就可以开始新的AD转换,转换完后就进入保持状态。
f26e7610-b909-11ef-8732-92fbcf53809c.png

3.时序图转化为Verilog代码

在时序图转化为Verilog代码过程中,要注意的是时间t su {{ ext{t}}_{{ ext{su}}}}tsu=1.4us、t conv {{ ext{t}}_{{ ext{conv}}}}tconv=17us、I/O CLOCK=1MHz,AD转换的时候I/O CLOCK是没有的。

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)代码按以下状态机编写:

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


状态1:CS拉低至CLK第一个上升沿。
状态2:在I/O CLOCK8个上升沿读取数据。
状态3:等待AD转换完成。
状态4:AD转换完完成。

(3)依据时序图完成以下代码:

//系统时钟为50M,周期为20ns; AD时钟为1M,周期为1us

`define Tsu_time 10'd70//70*20=1.4us,Tsu延时的计数终值
`define Cov_time 10'd850//850*20=17us, Cov延时的计数终值
`define CLK_time 10'd50//20*50=1us,  实现1M AD时钟得计数终值
`define CLKHALF_time 10'd25//20*25=0.5us,实现1M AD时钟得计数中值

module AD_TLC549
(
//输入
inputCLK_50M,//系统时钟
input RST_N,//复位
input AD_DATA,//8bit AD原始数据
//输出
output reg AD_CS,//片选
output reg AD_CLK//AD时钟1M
);

//状态机,四个状态;状态1:CS拉低至CLK第一个上升沿,状态2:读取数据,状态3等待转换,状态4:转换完成
reg [2:0]SM_NOW/*synthesis preserve*/; //现在的状态
reg [2:0]SM_NEXT/*synthesis preserve*/;//下一状态
parameter SM_Tsu= 3'd0, //CS拉低至CLK第一个上升沿1.4us
SM_Data = 3'd1, //读取AD数据8个AD_CLK
SM_Cov= 3'd2, //等待转换17us
SM_End= 3'd3; //转换完成

//产生计数
reg[9:0] Time_cnt;//在状态机的每个状态开始都会被清零,可以运用至每个状态的计数
reg[3:0] CLK_posedge;//AD_CLK 的8个时钟上升沿

//读取的8bit数据
reg[7:0]DATA;//数据现态
reg[7:0]    DATA_N/*synthesis preserve*/;//数据的下一个状态


//时钟
reg AD_CLK_N;//AD_CLK的下一个状态


//时序产生,Tsu计时、Cov计时、AD_CLK计时
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)//产生tus延时
begin
if(Time_cnt == `Tsu_time)
Time_cnt <= 10'd0;
else
Time_cnt <= Time_cnt + 10'd1;
end
else if(SM_NOW == SM_Cov)//产生Cov延时
begin
if(Time_cnt == `Cov_time)
Time_cnt <= 10'd0;
else
Time_cnt <= Time_cnt + 10'd1;
end
else if(SM_NOW == SM_Data)//产生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

//产生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个上升沿
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信号产生
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


//状态机,产生AD时序
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://状态1:CS拉低至CLK第一个上升沿。
if(Time_cnt == `Tsu_time)
SM_NEXT = SM_Data;
else
SM_NEXT = SM_Tsu;
SM_Data://状态2:在I/O CLOCK8个上升沿读取数据。
if(CLK_posedge == 4'd8 && Time_cnt == `CLK_time)
SM_NEXT = SM_Cov;
else
SM_NEXT = SM_Data;
SM_Cov: //状态3:等待AD转换完成。
if(Time_cnt == `Cov_time)
SM_NEXT = SM_End;
else
SM_NEXT = SM_Cov;
SM_End://状态4:AD转换完完成。
 SM_NEXT <= SM_Tsu;
default:SM_NEXT <= SM_Tsu;
endcase
end



//提取数据
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. 仿真结果

通过SignalTapⅡ仿真得到以下波形:

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


波形解析:

(1)t su {{ ext{t}}_{{ ext{su}}}}tsu:
用计数器实现了1.9us延时,大于了1.4us。

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

(2)t conv {{ ext{t}}_{{ ext{conv}}}}tconv:
用计数器实现17us延时

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


(3)8bit数据及其时钟:

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

原文链接:

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1628

    文章

    21721

    浏览量

    602865
  • 通信
    +关注

    关注

    18

    文章

    6021

    浏览量

    135947
  • AD芯片
    +关注

    关注

    2

    文章

    25

    浏览量

    18396

原文标题:FPGA驱动AD芯片_实现与芯片通信

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何排查FPGA与USB之间的芯片通信问题?

    ”,而在SBBulkSourceSink固件中没有显示这个错误,可不可以证明我的FPGA和USB之间通信成功?另外,我该如何排查FPGA与USB之间的芯片
    发表于 02-27 06:46

    FPGA芯片的选择问题

    本人刚刚接触FPAG不久,之前用cyclone3的DE0开发板自己编过串口通信和CRC校验,但是对FPGA整体了解还很菜鸟,现在想用FPGA实现一个自动控制,需要DA和AD,不想用开发
    发表于 06-13 14:59

    PCI总线协议的FPGA实现驱动设计

    PCI总线协议的FPGA实现驱动设计 摘要! 采用FPGA技术! 在公司的flex6000系列芯片
    发表于 03-12 14:30 36次下载

    扩频通信芯片STEL-2000A的FPGA实现

    针对传统集成电路(ASIC)功能固定、升级困难等缺点,利用FPGA实现了扩频通信芯片STEL-2000A的核心功能。使用ISE提供的DDS IP核
    发表于 11-22 16:23 44次下载

    基于FPGA-SPARTAN芯片的CCD的硬件驱动电路设计

      CCD驱动电路的实现是CCD应用技术的关键问题。以往大多是采用普通数字芯片实现驱动电路,CCD外围电路复杂,为了克服以上方法的缺点,利用
    发表于 08-30 09:58 1382次阅读
    基于<b class='flag-5'>FPGA</b>-SPARTAN<b class='flag-5'>芯片</b>的CCD的硬件<b class='flag-5'>驱动</b>电路设计

    芯片fpga实现及仿真

    dac0832ad08098259a,825382508255等芯片fpga实现及仿真
    发表于 01-20 15:12 13次下载

    低成本的采用FPGA实现SDH设备时钟芯片技术

    介绍一种采用FPGA(现场可编程门阵列电路)实现SDH(同步数字体系)设备时钟芯片设计技术,硬件主要由1 个FPGA 和1 个高精度温补时钟组成.通过该技术,可以在
    发表于 11-21 09:59 2188次阅读
    低成本的采用<b class='flag-5'>FPGA</b><b class='flag-5'>实现</b>SDH设备时钟<b class='flag-5'>芯片</b>技术

    基于FPGA 的嵌入式系统程序开发实现对ARM 接口通信控制模块、芯片驱动模块的程序设计

    数字存储示波器采用ARM 与FPGA 双处理器结合的嵌入式系统设计方案,重点介绍在FPGA 中如何实现对外围芯片通信
    发表于 11-18 05:47 2664次阅读
    基于<b class='flag-5'>FPGA</b> 的嵌入式系统程序开发<b class='flag-5'>实现</b>对ARM 接口<b class='flag-5'>通信</b>控制模块、<b class='flag-5'>芯片</b><b class='flag-5'>驱动</b>模块的程序设计

    如何吧项目实现FPGA芯片

    在本辅导教材中,将重点讲解如何将一个设计项目物理地实现FPGA 芯片中。我们将展示如何用手工的方法选择器件封装的引脚,并且把这些引脚用做电路的输入和输出信号,此外还将描述如何使用Quartus II 编程器模块把编译完的电路传
    发表于 10-27 16:26 20次下载
    如何吧项目<b class='flag-5'>实现</b>在<b class='flag-5'>FPGA</b><b class='flag-5'>芯片</b>中

    基于FPGA芯片和SOPC技术实现水文测报通信系统的设计

    随着微电子工艺技术和IC设计技术的不断提高,整个系统都可集成在一个芯片上,而且系统芯片的复杂性越来越高。为了提高效率,复用以前的设计模块已经成为系统世馘 (SOC)设计的必上之路。SOC的实现基本上有两种方法,一种是用ASIC
    的头像 发表于 06-11 15:55 2101次阅读
    基于<b class='flag-5'>FPGA</b><b class='flag-5'>芯片</b>和SOPC技术<b class='flag-5'>实现</b>水文测报<b class='flag-5'>通信</b>系统的设计

    如何使用FPGA驱动并行ADC和并行DAC芯片

    ADC和DAC是FPGA与外部信号的接口,从数据接口类型的角度划分,有低速的串行接口和高速的并行接口。FPGA经常用来采集中高频信号,因此使用并行ADC和DAC居多。本文将介绍如何使用FPGA
    的头像 发表于 04-21 08:55 7075次阅读

    芯片行业之浅谈FPGA芯片

    FPGA 是数字芯片的一类分支,与CPU、GPU等功能固定芯片不同的是, FPGA 制造完成后可根据用户需要,赋予其特定功能。 FPGA
    的头像 发表于 02-08 06:20 4078次阅读

    FPGA高级设计之实现功耗优化

    点击上方 蓝字 关注我们   FPGA 高级设计之实现功耗优化 与ASICs(Application Specific Integrated Circuits)比较,相似的逻辑功能,用FPGA
    的头像 发表于 05-19 13:50 1272次阅读

    fpga芯片工作原理 fpga芯片有哪些型号

    部分。这些部分共同构成了FPGA的基本结构,使其具有高度的灵活性和可配置性。 在FPGA中,小型查找表(LUT)是实现组合逻辑的关键组件。每个查找表连接到一个D触发器的输入端,触发器进而驱动
    的头像 发表于 03-14 17:17 1454次阅读

    DS1302芯片FPGA之间SPI通信原理

    本文通过以DS1302芯片为基础,介绍该芯片FPGA之间SPI通信原理,详细描述硬件设计原理及FPGA SPI接口
    的头像 发表于 10-24 14:16 385次阅读
    DS1302<b class='flag-5'>芯片</b>与<b class='flag-5'>FPGA</b>之间SPI<b class='flag-5'>通信</b>原理