ADC0809驱动FPGA实现的verilog程序

更新时间:2024-01-28 14:05:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

/*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=5'b00001,START_H=5'b00010,START_L=5'b00100,CHECK_END=5'b01000,GET_DATA=5'b10000;

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 rst_n) ...

current_state <= next_state; ...

always @ (current_state ...) ...

case(current_state) ... s1: if ...

next_state = s2; ... ...

always @(posedge clk or negedge rst_n) ...

else

a <= 1'b0; c <= 1'b0;

c <= 1'b0; //赋默认值 case(current_state) s1:

a <= 1'b0; //由于上面赋了默认值,这里就不用再对b 、c赋值了(b、c在该状态为0,不会产生锁存器,下同) s2:

b <= 1'b1; s3:

c <= 1'b1; default: ... ...

本文来源:https://www.bwwdw.com/article/xblw.html

Top