基于VerilogHDL的TLC549控制模块的设计 |
|
|
职称论文发表 | 职称论文发表 专业提供:发表论文、论文发表、毕业论文、职称论... | |
住在汉口网 | 住在汉口网是一个专业提供汉口房产信息、车辆服务、生活服务、招... | |
职称论文网 | 职称论文网提供:发表论文、论文发表、毕业论文、职称论等服务。 | |
|
(郑州航空工业管理学院 河南 郑州 450000)
摘 要:结合广泛使用的TLC549串行A/D转换器,采用FPGA器件EP1C6Q240C8,对A/D转换芯片TLC549进行采样控制。整个设计在Quartus II平台下进行软件编程和下载。采用VerilogHDL语言描述,实现正确的TLC549转换的工作时序控制过程。该设计可用于信号采集和实时监控方面,仿真结果和实际运行显示该模块工作性能稳定、可靠性高,使用方便。
关键词:采样控制;FPGA;VerilogHDL;A/D转换
中图分类号:TP274 文献标识码:A
对于信号的采集和处理,多数是以单片机或CPU为控制核心,虽然编程简单,控制灵活,但缺点是速度慢、控制周期长。单片机的速度极大地限制了A/D高速性能的利用。而FPGA的时钟频率可高达100 MHz以上。本设计以高集成度的芯片为核心,进行数据采集控制、数据时序控制等。具有开发周期短、灵活性强、通用能力好、易于开发、扩展等优点,既降低了设计难度,又加快了产品的开发周期。
1 TLC549芯片介绍
TLC549是8位串行A/D转换器,图1为其引脚图。
它与控制模块通过SPI接口连接,即通过I/O CLOCK、CS、DATA OUT 3个引脚串行与控制模块连接。TLC549有片内系统时钟,该时钟与I/O clock相互独立工作,无需特殊速度和相位匹配,其工作时序如图2。
从时序图中可以看出:①当CS拉低时,ADC前一次转换的数据(A)的最高位A7立即出现在数据线DATA OUT上,其余的7位数据在I/O CLOCK的下降沿依次由时钟同步输出。因此可在I/O CLOCK的上升沿读取数据;②读完8位数据后,ADC开始转换这一次转换的采样数据(B),以便下一次读取。转换时片选信号CS必须置高电平,每次转换的时间不超过17us,开始于CS变为低电平后I/O CLOCK的第8个下降沿,没有转换完成标志信号;③从CS变为低电平到I/O CLOCK第一个时钟到来至少要1.4us;④TLC549 A/D 转换电路没有启动控制端,只要读取前一次数据后马上就可以开始新的A/D 转换。转换完成后就进入保持状态;⑤I/O CLOCK不能超过1.1MHz。其它参数参考数据手册。
2 VerilogHDL实现
系统采用Altera公司Cyclone系列的EP1C6Q240C8芯片实现,系统输入时钟12MHz。采用VerilogHDL编程实现,顶层模块定义如下:
module adc(clock, reset, enable, sdat_in, adc_clk, cs_n, data_ready, data_out);
input clock; //系统时钟
input reset; //复位,高电平有效
input enable; //转换使能
input sdat_in; //TLC549串行数据输入
output adc_clk; //TLC549 I/O时钟
output cs_n; //TLC549片选控制
output data_ready; //指示有新的数据输出
output[7:0] data_out; //AD转换数据输出
2.1 用状态机控制处理过程
本文用状态机控制TLC549的处理过程,它控制着SPI总线的时序,是系统设计的核心。根据TLC549的时序图,状态机分为idle,adc_ready,adc_receive,adc_conversion,adc_data_load共5个状态,各个状态的含义说明如如表1所示。
状态机的状态转移条件如下:
ready_done为1表示CS拉低>1.4 μs,可以输出数据;rec_done为1表示8位数据已经输出完毕;conv_done为1表示采样数据转换完成;enable使能端,高电平有效。
描述ADC状态机转换逻辑的always过程块如下:
always @(adc_state or ready_done or rec_done or conv_done or enable)
begin
… …
end
2.2 A/D转换起始条件的处理
由TLC549 时序得出片选信号CS变低后,I/O CLOCK 开始正跳变的最小时间间隔1.4 μs,所以在设计时应该重点考虑CS引脚由高变低与I/O CLOCK引脚由低变高之间的时间间隔应至少大于1.4μs,这样才能够正确采样到第1位数据(A7)。由于系统时钟是12MHz,而输出的I/O CLOCK不能超过1.1MHz,从CS拉低到第一个时钟到来至少要1.4μs,因此采用2个分频计数器实现。第1个计数器clk_count用来对系统时钟进行分频,产生采样需要的时钟;第2个计数器bit_count用来对采样时序和时间进行控制。
//时钟分频计数器
always @(posedge clock)
begin
if (clk_count < CLK_DIV_VALUE)
begin
clk_count <= clk_count + 1'b1;
div_clk <= 1'b0;
end
else
begin
clk_count <= 5'd0;
div_clk <= 1'b1;
end
end
//位移位计数器
always @(posedge clock)
begin
if (div_clk = = 1'b1)
bit_count <= bit_count + 1'b1;
end
由于——(——b) 引脚由高变低与I/O CLOCK引脚由低变高之间的时间间隔应至少大于1.4μs,ADC的转换时间不超过17μs,因此可通过如下语句判断时间:
assign ready_done = (bit_count = = 6'd4); //准备时间大于1.4μs
assign rec_done = (bit_count = = 6'd19); //8个采样时钟
assign conv_done = (bit_count = = 6'd63); //转换时间
2.3 读取数据的处理
由于TLC549输出的数据在I/O CLOCK的下降沿改变,所以可在时钟的上升沿依次读取8位数据。
//在接收位计数器4~20之间输出8个adc_clk
always @(bit_count)
begin
if ((bit_count < 6'd20) && (bit_count >= 6'd4))
adc_clk_r <= ~bit_count[0];
else
adc_clk_r <= 1'b0;
end
//锁存变化沿
always @(posedge clock)
begin
buf1 <= adc_clk_r;
buf2 <= buf1;
end
//下降沿读取数据
always @(posedge clock)
begin
if(buf1 && ~buf2) //ADC时钟上升沿
q <= {q[6:0], sdat_in_r};
else if(data_ready_r = = 1'b1) //输出读取的数据
data_out_r <= q;
end
3 仿真与实现
本设计在QuartusII9.0下编译综合通过,生成的符号如图3。仿真结果如图4,设计的控制模块完全符合TLC549的时序要求。将编程文件.sof下载到基于EP1C6Q240C8的开发板上,运行正常稳定。
4 结语
采用FPGA芯片EP1C6Q240C8实现了对TLC549的采样控制。根据TLC549的工作时序,Verilog HDL进行了描述,通过了仿真并在开发板上实现。本文的设计方法灵活,编程环境简单,具有一定的现实意义和参考价值。
参考文献
1 杨来侠,万建军.基于TLC549的数据采集系统设计[J].电子元器件应用,2009(2)
2 安源.8位串行模数转换器TLC548、TLC549的应用[J].电子设计工程,2000(2)
3 李国厚.串行A/D转换器TLC548/549 及其应用[J].仪表技术,2001(3)
4 户国强,房建东,郭春兰.基于FPGA的A/D转换采样控制模块的设计[J].微计算机信息,2008(24)
5 夏字闻.Verilog数字系统设计教程[M].北京:北京航天航空大学出版社,2008
6 付晓丹.海水中叶绿素a含量监测系统的研究[D].哈尔滨:哈尔滨工业大学,2007
7 韦存刚,金星.基于FPGA的多路数据采集和控制模块设计[J].微计算机信息,2008(2) 职称论文发表网http://www.issncn.com
职称论文发表网http://www.issncn.com
|
|
|
|