ADC0809驱动FPGA实现的verilog程序.docVIP

  1. 1、本文档被系统程序自动判定探测到侵权嫌疑,本站暂时做下架处理。
  2. 2、如果您确认为侵权,可联系本站左侧在线QQ客服请求删除。我们会保证在24小时内做出处理,应急电话:400-050-0827。
  3. 3、此文档由网友上传,因疑似侵权的原因,本站不提供该文档下载,只提供部分内容试读。如果您是出版社/作者,看到后可认领文档,您也可以联系本站进行批量认领。
查看更多
ADC0809驱动FPGA实现的verilog程序

/*FPGA实现的程序:(verilog) 贴子回复于:2008-4-27 15:26:01*/ module AD0809(clk500K, //脉宽(至少100ns) rst_n, EOC, //约100us后EOC变为高电平转换结束 START, //启动信号,上升沿有效(至少100ns) OE, //高电平打开三态缓冲器输出转换数据 ALE, //高电平有效,选择信道口 ADDA, //因为ADDB,ADDC都接地了,这里只有ADDA为变量 DATA, //转换数据 DATA_R); output START,OE,ALE,ADDA; input EOC,clk500K,rst_n; input[7:0] DATA; output[7:0] DATA_R; reg START,OE,ALE,ADDA; reg[7:0] DATA_R; reg[4:0] CS,NS; parameter IDLE=5b00001,START_H=5b00010,START_L=5b00100,CHECK_END=5b01000,GET_DATA=5b10000; always @(posedge clk500K) case(CS) IDLE: NS=START_H; START_H: NS=START_L; START_L: NS=CHECK_END; CHECK_END: if(EOC) NS=GET_DATA; else NS=CHECK_END; GET_DATA: NS=IDLE; default: NS=IDLE; endcase always @(posedge clk500K) if(!rst_n) CS=IDLE; else CS=NS; always @(posedge clk500K) case(NS) IDLE: begin OE=0; START=0; ALE=0;ADDA=1; end START_H: begin OE=0; START=1; //产生启动信号 ALE=1; ADDA=1;//选择信道口IN0 end START_L: begin OE=0; START=0; ALE=1;//启动信号脉宽要足够长,在启动的时候ALE要一直有效 end CHECK_END: begin OE=0; START=0; ALE=0; end GET_DATA: begin OE=1; //高电平打开三态缓冲器输出转换数据 DATA_R=DATA;//提取转换数据 START=0; ALE=0; end default: begin OE=0; START=0; ALE=0; ADDA=0; end endcase endmodule ad0809是根据逐位逼近的方法产生数据的。。 参考电压为0-5V的话。以0809八位255的转换精度每一位的电压值为(5-0)/255≈0.0196V 设输入电压为X则: X-27*0.0196=0则AD7=1否则AD7=0。 X-26*0.0196=0则AD6=1否则AD6=0。 。 。 。 X-20*0.0196=0则AD0=1否则AD0=0。 (27指2的7次方。26-------20同理) 若参考电压为0-1V (1-0)/255≈0.0039V精度自然高了。。可测量范围小了。 状态机要写成3段式的(这是最标准的写法),即 ... always @(posedge clk or negedge

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档