FPGA综合实验 04 - | ADC采样控制电路设计

本文探讨了如何使用状态机实现ADC0809的A/D转换器采样控制电路,通过代码示例、仿真波形分析和状态机工作流程,详细解析了每个状态的功能及其在时序控制中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、实验目的和任务

      学习用状态机对A/D转换器ADC0809的采样控制电路的实现。

二、设计代码(或原理图)、仿真波形及分析

1、ADC控制电路代码

module ADC0809(D,CLK,EOC,RST,ALE,START,OE,ADDA,ADDB,ADDC,Q,LOCK_T,CLK_OUT);
  input[7:0] D;
  input CLK,RST;
  input EOC;
  output reg CLK_OUT;
  output ALE;
  output START,OE;
  output ADDA,ADDB,ADDC,LOCK_T;
  output[7:0] Q;
  reg ALE,START,OE;
  parameter s0=0,s1=1,s2=2,s3=3,s4=4;
  reg[4:0] cs, next_state;
  reg[7:0] REGL;
  reg[5:0] clki;
  reg LOCK;
  
  always @(posedge CLK)
    if(clki>10)
	 begin 
	 CLK_OUT=~CLK_OUT;
	 clki=0;
	 end
	 else
	 clki=clki+1;
	 
	 
	 
	 always @(cs or EOC) begin
	 case(cs)
	 s0:begin ALE=0;    START=0  ;  OE=0;  LOCK=0;
	              next_state <=s1; end
	 s1:begin ALE=1;    START=1  ;  OE=0;  LOCK=0;
                  next_state <=s2; end
	 s2:begin ALE=0;    START=0  ;  OE=0;  LOCK=0;	
           if(EOC==1'b1) next_state =s3;
			else next_state =s2; end
	 s3:begin ALE=0;    START=0  ;  OE=1;  LOCK=0;		
      	next_state =s4; end
	 s4:begin ALE=0;    START=0  ;  OE=1;  LOCK=1;
         next_state <= s0;   end
	 default :begin ALE=0;    START=0  ;  OE=0;  LOCK=0;
	      next_state =s0;   end
	endcase
end	
  always @(posedge CLK or posedge RST ) begin
  if(RST)cs<=s0;
  else cs <=next_state;end
  always @(posedge LOCK)
  if (LOCK) REGL <= D;
  assign ADDA=0;
  assign ADDB=0;
  assign ADDC=0;
  assign Q=REGL;
  assign LOCK_T=LOCK;
  endmodule
  

2、ADC控制电路仿真截图

3、ADC控制电路的仿真分析

结合代码分析,如图所示,每一个时钟上升沿都使状态机进入下一个状态,刚开始的ALE和START高电位表明状态机经过了状态s1,在给EOC输入高电位前,给D所写的值121并没有送进电路,因而Q输出为0,这是因为从状态s2到s3需要EOC信号为高电位才能进入状态s3,否则会一直停留在状态s2,当给EOC输入高电位后,此时D值为220,OE高电位处说明经过了状态s3,而其后LOCK_T输出高电位,说明变量LOCK为高电平,即经过了状态s4,此时会把D的值给读走,同时Q输出220,即D的值。

4、ADC控制电路的状态机截图及分析

 结合代码分析,如图所示,在s0状态之时,当CLK信号处于上升沿,则进入s1状态;在s1状态之时,当CLK信号处于上升沿,ALE、START输出为1,则进入s2状态;在s2状态之时,当CLK信号处于上升沿,ALE、START下拉为0,如果EOC输入为1则进入s3状态,否则仍然处于s2状态;在s3状态之时,OE输出为1,同时进入s4状态;在s4状态之时,OE、LOCK输出为1,并且重新回到s0状态;如果执行RST复位操作,无论当前处于什么状态,都回到s0状态。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式逍遥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值