[Verilog]ADC0809驱动程序

[Verilog]ADC0809驱动程序

  • ADC0809芯片双通道轮询采样
  • Xilinx basys2 100E 测试通过
  • FPGA

相较于原程序,修改了一部分时序,添加了多通道采集,以及输出。

`timescale 1ns / 1ps

 module ADC0809 ( rst ,clk ,D ,EOC ,ale ,OE ,start ,clk_out ,an ,ane ,reg1, reg2, addr_ad);
 //in from AD
 input              rst ;                    //系统 复位
 input              clk ;                    //系统时钟
// input    [2:0]    abc_in     ;             //外部控制的通道选择信号
 input      [7:0]    D ;                      //ADC0809传进来的数据
 input              EOC ;                    //ADC0809转换完成信号标志

 //out for AD
 output             ale ;                    //FPGA给ADC0809的地址锁存信号
 output             OE ;                     //FPGA给ADC0809的使能信号
 output             start ;                  //ADC0809 转换开始信号
 output                 clk_out;                         //FPGA给ADC0809的时钟信号
 output                 addr_ad ;                //FPGA给ADC0809的通道选择信号
 //out for other module
 //output                   addr_om ;                //FPGA给其他模块的地址信号
 output     [7:0]       an;                          //数码管段码
 output     [3:0]       ane;                             //数码管使能
 output     [7:0]   reg1  ; 
 output     [7:0]       reg2;


 fclkout A1(clk,rst,clk_out);
 adc0809inout A2(rst,clk,D,EOC,ale,OE,start,addr_ad,reg1,reg2);
 display A3(clk,rst,reg1,reg2,an,ane);
 endmodule

 ///AD--750kHz时钟输出
 module fclkout(clk,rst,clk_out);
 input clk;
 input rst;
 output clk_out;
 reg                    clkoutsign; 
 reg     [5:0]    clkoutf        ;

 assign clk_out = clkoutsign;

 always @ (posedge clk or posedge rst) //AD--750kHz时钟输出
 begin
      if ( rst== 1'b1 ) begin           //复位
         clkoutf<=0;
            clkoutsign<=0;          
     end
     else  begin                            //分频
         clkoutf <= clkoutf + 1;
         if ( clkoutf >= 6'b10_1000 ) begin
             clkoutf <= 6'b00_0000;
                 clkoutsign<=~clkoutsign;               
         end 
     end
 end 
 endmodule
 时序状态转换
 module adc0809inout(rst,clk,D,EOC,ale,OE,start,addr_ad,reg1,reg2);
 //状态转换标志位
 //in from AD
 input              rst ;                    //系统 复位
 input              clk ;                    //系统时钟
 input      [7:0]    D ;                      //ADC0809传进来的数据
 input              EOC ;                    //ADC0809转换完成信号标志
 //out for AD
 output             ale ;                    //FPGA给ADC0809的地址锁存信号
 output             OE ;                     //FPGA给ADC0809的使能信号
 output             start ;                  //ADC0809 转换开始信号
 output                 addr_ad ;                //FPGA给ADC0809的通道选择信号
 output      [7:0]  reg1;
  output         [7:0]  reg2;

 parameter   st0 = 3'b000,
             st1 = 3'b001,
             st2 = 3'b010,
             st3 = 3'b011,
             st4 = 3'b100,
             st5 = 3'b101,
             st6 = 3'b110 ;

  reg     [2:0]    p_state  ;           //状态转换
  reg     [2:0]    n_state ;            
  reg          
  • 3
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值