FPGA零基础学习之Vivado-TLC5620驱动教程
作者:李西锐校对:陆辉
大侠好,欢迎来到FPGA技术江湖。本系列将带来FPGA的系统性学习,从最基本的数字电路基础开始,最详细操作步骤,最直白的言语描述,手把手的“傻瓜式”讲解,让电子、信息、通信类专业学生、初入职场小白及打算进阶提升的职业开发者都可以有系统性学习的机会。
(资料图片)
系统性的掌握技术开发以及相关要求,对个人就业以及职业发展都有着潜在的帮助,希望对大家有所帮助。本次带来Vivado系列,TLC5620驱动教程。话不多说,上货。
TLC5620驱动教程
在FPGA处理完数字信号之后,我们有些情况下是需要将数字信号转变为模拟信号再输出的。比如音频信号在滤波后,需要转换为声音信号进行输出。此次,我们要讲数字信号转换为电压信号进行输出,以便我们后续可以用示波器之类的器械观察信号。
我们采用的芯片为TLC5620,是一款8bit四通道的数模转换器。
在四路通道中,我们可以设置4种不同的参考电压进行转换使用。但是在此次实验中,我们采用的四路参考电压一样,如下图:
接下来我们介绍一下此芯片的一些特征以及手册对芯片的描述。下图为官方手册对芯片的一段描述:
TLC5620是一款使用3线串行总线控制的芯片。11bit的命令中包含8bit数据、2bit通道选择、1bit输出范围选择bit。输出范围选择,可以输出一倍或者两倍的参考电压差值范围。当两级锁存器都打开时,新的数据可以进入到芯片。下图为芯片的框图:
端口介绍:
我们的数据为8bit,那也就是将电压范围划分为256份,我们的数字信号会对应成电压进行输出,所以我们的输出电压的计算公式为:
接下来我们看一下时序图:
当LOAD为高电平时,数据被锁存进DATA在每一个时钟下降沿,一旦数据所有的bit被采集到,LOAD被拉低,将寄存器中的数据传输到被选择的DAC中。如图一所示,当LDAC为低电平时,LOAD信号拉低,被选择的DAC芯片输出电压会更新。如果LDAC为高电平,电压更新将会被禁止,直到我们将LDAC拉低,如图二:
对于我们的通道选择,如下图:
当RNG=0时,输出电压为一倍范围,当RNG=1时,输出电压为两倍范围。
接下来,我们来做一下芯片的驱动,同样可以使用线性序列机。转换总周期为11us的时间。
首先我们先新建工程。
新建代码文件,写入代码:
驱动代码如下:
1 module tlc5620_driver(
2
3 input wire clk,
4 input wire rst_n,
5 input wire [7:0] data,
6
7 output reg da_clk,
8 output reg da_data,
9 output wire da_ldac,
10 output reg da_load
11 );
12
13 parameter t = 550;
14 parameter select_bit = 2"b00;
15 parameter RNG = 1"b1; //0代表输出1倍,1代表输出两�??
16
17 reg [9:0] cnt;
18
19 assign da_ldac = 1"b0;
20
21 always @ (posedge clk, negedge rst_n)
22 begin
23 if(rst_n == 1"b0)
24 cnt <= 10"d0;
25 else if(cnt == t - 1)
26 cnt <= 10"d0;
27 else
28 cnt <= cnt + 1"b1;
29 end
30
31 always @ (posedge clk, negedge rst_n)
32 begin
33 if(rst_n == 1"b0)
34 begin
35 da_clk <= 1"b0;
36 da_data <= 1"b0;
37 da_load <= 1"b1;
38 end
39 else
40 case(cnt)
41 0 : begin da_clk <= 1"b1; da_data <= select_bit[1]; da_load <= 1"b1; end
42 24 : begin da_clk <= 1"b0; end
43 49 : begin da_clk <= 1"b1; da_data <= select_bit[0]; end
44 74 : begin da_clk <= 1"b0; end
45 99 : begin da_clk <= 1"b1; da_data <= RNG; end
46 124 : begin da_clk <= 1"b0; end
47 149 : begin da_clk <= 1"b1; da_data <= data[7]; end
48 174 : begin da_clk <= 1"b0; end
49 199 : begin da_clk <= 1"b1; da_data <= data[6]; end
50 224 : begin da_clk <= 1"b0; end
51 249 : begin da_clk <= 1"b1; da_data <= data[5]; end
52 274 : begin da_clk <= 1"b0; end
53 299 : begin da_clk <= 1"b1; da_data <= data[4]; end
54 324 : begin da_clk <= 1"b0; end
55 349 : begin da_clk <= 1"b1; da_data <= data[3]; end
56 374 : begin da_clk <= 1"b0; end
57 399 : begin da_clk <= 1"b1; da_data <= data[2]; end
58 424 : begin da_clk <= 1"b0; end
59 449 : begin da_clk <= 1"b1; da_data <= data[1]; end
60 474 : begin da_clk <= 1"b0; end
61 499 : begin da_clk <= 1"b1; da_data <= data[0]; end
62 524 : begin da_clk <= 1"b0; end
63 529 : begin da_load <= 1"b0; end
64 default : ;
65 endcase
66 end
67
68 endmodule
在写驱动代码时,我们需要注意时序图中的一些时间要求,比如,数字信号的建立时间和保持时间,以及load信号的建立时间与保持时间。时间要求如下图:
由上图可以得出结论,芯片的驱动时钟最大为1MHz。数据的建立时间与保持时间最小值都为50ns。如果我们在时钟上升沿发送数据,那么我们发送的数据,建立时间与保持时间最小值为500ns。满足条件。
接下来我们写一下仿真看一下波形。
代码如下:
1 `timescale 1ns / 1ps
2
3 module tlc5620_driver_tb;
4
5 reg clk;
6 reg rst_n;
7 reg [7:0] data;
8
9 wire da_clk;
10 wire da_data;
11 wire da_ldac;
12 wire da_load;
13
14 initial begin
15 clk = 1"b0;
16 rst_n = 1"b0;
17 data = {$random}%256;
18 #105;
19 rst_n = 1"b1;
20 #11000;
21 repeat(10) begin
22 data = {$random}%256;
23 #11000;
24 end
25 #1000;
26 $stop;
27 end
28
29 always #10 clk = ~clk;
30
31 tlc5620_driver tlc5620_driver_inst(
32
33 .clk (clk ),
34 .rst_n (rst_n ),
35 .data (data ),
36
37 .da_clk (da_clk),
38 .da_data (da_data),
39 .da_ldac (da_ldac),
40 .da_load (da_load)
41 );
42
43 endmodule
运行波形,观察仿真波形:
观察da_clk、da_data、da_load、da_ldac波形全部正常,即说明驱动正确。
关键词:
相关阅读
-
FPGA零基础学习之Vivado-TLC5620驱动教程
作者:李西锐校对:陆辉大侠好,欢迎来到FPGA技术江湖。本系列将带来FP -
瑞幸又杀回来了
图片来源@视觉中国文|节点财经,作者|零度瑞幸带着新一财季的业绩报告 -
卡车投河堵缺口司机最后一刻跳车
00:11近日,黑龙江尚志。因暴雨引发洪水,多辆卡车投河堵缺口,司机在 -
小米再发 Redmi K60 至尊版手机预告...
IT之家8月5日消息,从昨天下午到今天上午,小米集团总裁卢伟冰、小米科 -
省联社改革新进展!这两家银行同日获批筹建
8月4日,国家金融监督管理总局(以下简称“金融监管总局”)披露了... -
2023中国社会科学院西亚非洲研究所(中...
根据事业单位公开招聘工作有关规定,现将我单位2023年度第一批专业技术 -
近四成上市公司公布半年报业绩信息 电...
近期,上市公司密集公布半年报业绩信息,多个重点行业在今年上半年表现 -
新华全媒+丨河北涿州:救援安置工作持续...
↑8月3日,衡水市消防救援支队救援人员在涿州市码头镇沙窝村为受灾群众 -
复兴号亚运智能动车组迎首次试乘
新华社杭州8月4日电(记者胡佳丽、徐中哲)4日,在杭州亚运会倒计时50 -
上半年我国服务进出口总额同比增长8.5%
新华社北京8月3日电(记者谢希瑶)商务部3日发布数据显示,2023年上半 -
工伤打官司多久能拿到钱
工伤打官司三个月到一年能拿到钱,一般工伤赔偿是劳动者取得工伤认定, -
2023广西来宾市公安局兴宾分局第一次招...
2023年7月10日,来宾市公安局兴宾分局面向社会发布公告,公开招聘辅警7 -
2023杭州钱塘社保最低缴费标准(缴费基...
杭州钱塘自费社保一年需交多少钱?即便是自行交社保费用,也要注意好参 -
2024年度城乡居民医疗保险缴费时间什么...
一年一度的城乡居民医疗保险缴费要开始了,对于许多年轻人都会给家里老 -
“三期叠加”,防灾避险提示!
8月1日,广东汕尾海丰县有网友称多名市民在莲花山大东门玩水时遇涨水多 -
08月01日白鹭氨纶氨纶为36500元
08月01日白鹭氨纶关于氨纶的报价为36500元 吨。氨纶的规格:细度:2 -
累计产气120万立方米!我国西南深层煤层...
近日,位于重庆市南川区的深层煤层气井阳2井实现自喷生产100天,日产气 -
2023江西农民基础养老金调整标准 江西...
养老金(pension)也称退休金、退休费,是一种最主要的社会养老保险待遇 -
【财经分析】我国服务贸易稳步增长 制...
在全球经贸合作低位徘徊的背景下,今年上半年,我国服务进出口总额实现 -
郑州启动防汛四级应急响应
郑州市防汛抗旱指挥部办公室消息,郑州市气象台2023年8月5日14时40分