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

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

3天内不再提示

Vivado系列之TCL549驱动设计

FPGA技术江湖 来源:FPGA技术江湖 2023-07-27 09:25 次阅读

系统性的掌握技术开发以及相关要求,对个人就业以及职业发展都有着潜在的帮助,希望对大家有所帮助。本次带来Vivado系列,TLC549驱动设计。话不多说,上货。

TCL549驱动设计

在生活中,数模转换的例子到处可见。但是在我们做FPGA设计时,需要对数字信号进行处理,但是,不是所有的信号都是以数字信号的形式体现的,比如光信号、声信号、电信号等等。那么此时就需要我们先进行一下模数转换之后再进行处理。在此,我们将介绍一款模数转换芯片TLC549。

TLC549是一款串行总线控制的8bit模数转换芯片,封装如下图:

0f07a096-2c0a-11ee-a368-dac502259ad0.png

管脚说明:

0f1a8828-2c0a-11ee-a368-dac502259ad0.png

芯片特征:

1、8bit A/D转换器

2、最大转换时间为17us。

3、供电3V~6V之间。

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

在官方手册中,对此芯片有这样的一段描述:

0f3fa6da-2c0a-11ee-a368-dac502259ad0.png

在这段描述中,大致说出了这个芯片的一些控制。比如: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的控制下才能进行。

芯片示意图:

0f63ccea-2c0a-11ee-a368-dac502259ad0.png

从图中可以看出,参考电压是模数转换的一个标准,CS_N和I/O CLOCK给到逻辑控制和输出计数。数据通过一个输出寄存器给到一个并串转换的模块。DATA_OUT数据是给到我们的FPGA的,所以,对于我们来说需要做的就是输出CS_N和I/O CLOCK的波形,同时,将给进来的数据采到。

0f8ece54-2c0a-11ee-a368-dac502259ad0.png

上图为驱动的时序图,可以看到,当数据输出的时候,CS_N为低电平,总共输出8bit,输出完之后,CS_N拉高。我们在做驱动时。可以将一次转换过程看成一个周期,后续也是重复过程。那么,我们就需要搞清楚每段时间的要求,有助于我们写驱动。

0fc571f2-2c0a-11ee-a368-dac502259ad0.png

在上图中,我们可以知道:

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。

在知道了以上信息后,我们开始写驱动,首先新建一下工程。

0fefcac4-2c0a-11ee-a368-dac502259ad0.png

100eea26-2c0a-11ee-a368-dac502259ad0.png

选择好之后点击完成,新建文件写代码。

10337e86-2c0a-11ee-a368-dac502259ad0.png

10566eb4-2c0a-11ee-a368-dac502259ad0.png

代码如下:

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]  data
11  );
12
13    parameter   t = 1300;
14
15    reg     [10:0]    cnt;
16    reg     [7:0]     data_temp;
17    
18    always @ (posedge clk, negedge rst_n)
19    begin
20    if(rst_n == 1'b0)
21      cnt <= 11'd0;
22    else if(cnt == t - 1)
23      cnt <= 11'd0;
24    else
25      cnt <= cnt + 1'b1;
26    end
27    
28    always @ (posedge clk, negedge rst_n)
29    begin
30    if(rst_n == 1'b0)
31      begin
32      ad_clk <= 1'b0;
33      ad_cs_n <= 1'b1;
34      data_temp <= 8'd0;
35      data <= 8'd0;
36      end
37    else
38      case(cnt)
39      0   : begin ad_cs_n <= 1'b0; ad_clk <= 1'b0; end
40      74  : begin ad_clk <= 1'b1; data_temp[7] <= ad_data; end
41      99  : begin ad_clk <= 1'b0; end
42      124 : begin ad_clk <= 1'b1; data_temp[6] <= ad_data; end
43      149 : begin ad_clk <= 1'b0; end
44      174 : begin ad_clk <= 1'b1; data_temp[5] <= ad_data; end
45      199 : begin ad_clk <= 1'b0; end
46      224 : begin ad_clk <= 1'b1; data_temp[4] <= ad_data; end
47      249 : begin ad_clk <= 1'b0; end
48      274 : begin ad_clk <= 1'b1; data_temp[3] <= ad_data; end
49      299 : begin ad_clk <= 1'b0; end
50      324 : begin ad_clk <= 1'b1; data_temp[2] <= ad_data; end
51      349 : begin ad_clk <= 1'b0; end
52      374 : begin ad_clk <= 1'b1; data_temp[1] <= ad_data; end
53      399 : begin ad_clk <= 1'b0; end
54      424 : begin ad_clk <= 1'b1; data_temp[0] <= ad_data; end
55      449 : begin ad_clk <= 1'b0; ad_cs_n <= 1'b1; end
56      1299: begin data <= data_temp; end
57      default : ;
58      endcase
59    end
60    
61  endmodule

代码写好之后,我们做一下仿真看一下数据能否被正确采集,代码如下:

1   `timescale 1ns / 1ps
2 
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 begin
15    clk = 0;
16    rst_n = 0;
17    ad_data = 0;
18    #100;
19    rst_n = 1;
20    #1000;
21    ad_data = 1;     //10100110
22    #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    end
39
40    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

编译无误,打开波形观察。

106b7c00-2c0a-11ee-a368-dac502259ad0.png

仿真中给出的数据位8’b10100110,换算成16进制为8’ha6。与波形中显示一致,仿真正确。

责任编辑:彭菁

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

    关注

    3

    文章

    106

    浏览量

    28536
  • 驱动设计
    +关注

    关注

    1

    文章

    108

    浏览量

    15187
  • Vivado
    +关注

    关注

    18

    文章

    790

    浏览量

    65100
  • TCL549
    +关注

    关注

    0

    文章

    2

    浏览量

    3039
收藏 人收藏

    评论

    相关推荐

    TclVivado中的基础应用

    Xilinx的新一代设计套件Vivado相比上一代产品ISE,在运行速度、算法优化和功能整合等很多方面都有了显著地改进。但是对初学者来说,新的约束语言XDC以及脚本语言Tcl的引入则成为了快速掌握Vivado使用技巧的最大障碍,
    的头像 发表于 09-14 09:09 1554次阅读

    TCL 定制 Vivado 设计实现流程

    今天推出Xilinx已发布的《Vivado使用误区与进阶》系列:用TCL定制Vivado设计实现流程。 上一篇《Tcl
    发表于 06-28 19:34

    FPGA零基础学习Vivado-TLC549驱动设计

    及打算进阶提升的职业开发者都可以有系统性学习的机会。 系统性的掌握技术开发以及相关要求,对个人就业以及职业发展都有着潜在的帮助,希望对大家有所帮助。本次带来Vivado系列,TLC549驱动
    发表于 08-16 19:57

    Vivado设计之Tcl定制化的实现流程

    其实TclVivado中还有很多延展应用,接下来我们就来讨论如何利用Tcl语言的灵活性和可扩展性,在Vivado中实现定制化的FPGA设计流程。 基本的FPGA设计实现流程 FPGA
    发表于 11-18 01:48 3338次阅读
    <b class='flag-5'>Vivado</b>设计之<b class='flag-5'>Tcl</b>定制化的实现流程

    Vivado下利用Tcl脚本对综合后的网表进行编辑过程

    在ISE下,对综合后的网表进行编辑几乎是不可能的事情,但在Vivado下成为可能。VivadoTcl的支持,使得Tcl脚本在FPGA设计中有了用武之地。本文通过一个实例演示如何在
    发表于 11-18 03:16 7008次阅读
    在<b class='flag-5'>Vivado</b>下利用<b class='flag-5'>Tcl</b>脚本对综合后的网表进行编辑过程

    TclVivado中的基础应用

    Xilinx的新一代设计套件Vivado相比上一代产品ISE,在运行速度、算法优化和功能整合等很多方面都有了显著地改进。但是对初学者来说,新的约束语言XDC以及脚本语言Tcl的引入则成为了快速掌握
    发表于 11-18 03:52 4707次阅读
    <b class='flag-5'>Tcl</b>在<b class='flag-5'>Vivado</b>中的基础应用

    VivadoTCL脚本语言基本语法介绍

    TCL脚本语言 Tcl(Tool Command Language)是一种很通用的脚本语言,它几乎在所有的平台上都可以解释运行,而且VIVADO也提供了TCL命令行。最近发现
    发表于 04-11 12:09 9264次阅读

    如何使用Tcl命令语言让Vivado HLS运作

    了解如何使用Tcl命令语言以批处理模式运行Vivado HLS并提高工作效率。 该视频演示了如何从现有的Vivado HLS设计轻松创建新的Tcl批处理脚本。
    的头像 发表于 11-20 06:06 2923次阅读

    TclVivado中的基础应用及优势

    实际上Tcl的功能可以很强大,用其编写的程序也可以很复杂,但要在Vivado或大部分其它EDA工具中使用,则只需掌握其中最基本的几个部分
    的头像 发表于 07-24 16:52 3205次阅读
    <b class='flag-5'>Tcl</b>在<b class='flag-5'>Vivado</b>中的基础应用及优势

    FPGA设计中TclVivado中的基础应用

    Tcl介绍 Vivado是Xilinx最新的FPGA设计工具,支持7系列以后的FPGA及Zynq 7000的开发。与之前的ISE设计套件相比,Vivado可以说是全新设计的。无论从界面
    的头像 发表于 11-17 17:32 2177次阅读

    使用Tcl命令保存Vivado工程

    一个完整的vivado工程往往需要占用较多的磁盘资源,少说几百M,多的甚至可能达到上G,为节省硬盘资源,可以使用Tcl命令对vivado工程进行备份,然后删除不必要的工程文件,需要时再恢复即可。
    的头像 发表于 08-02 15:01 3823次阅读

    TclVivado中的应用

    Xilinx的新一代设计套件Vivado相比上一代产品 ISE,在运行速度、算法优化和功能整合等很多方面都有了显著地改进。但是对初学者来说,新的约束语言 XDC 以及脚本语言 Tcl 的引入则成为
    的头像 发表于 04-15 09:43 1032次阅读

    TCL定制Vivado设计实现流程

    今天推出Xilinx已发布的《Vivado使用误区与进阶》系列:用TCL定制Vivado设计实现流程。
    的头像 发表于 05-05 09:44 729次阅读
    用<b class='flag-5'>TCL</b>定制<b class='flag-5'>Vivado</b>设计实现流程

    Vivado设计套件Tcl命令参考指南

    电子发烧友网站提供《Vivado设计套件Tcl命令参考指南.pdf》资料免费下载
    发表于 09-14 10:23 1次下载
    <b class='flag-5'>Vivado</b>设计套件<b class='flag-5'>Tcl</b>命令参考指南

    Vivado设计套件用户指南:使用Tcl脚本

    电子发烧友网站提供《Vivado设计套件用户指南:使用Tcl脚本.pdf》资料免费下载
    发表于 09-14 14:59 0次下载
    <b class='flag-5'>Vivado</b>设计套件用户指南:使用<b class='flag-5'>Tcl</b>脚本