名称:基于FPGA的AD7705驱动设计Verilog代码ISE 仿真
软件:ISE
语言:Verilog
代码功能:AD7705驱动设计
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
1.工程文件
2.程序文件
3.程序编译
4.仿真图
Testbench
仿真图
整体仿真
复位,连续写入32个高电平
依次写入8'h20,8'h03,8'h10,8'h40
写入8'h38,及读数
部分代码展示:
module AD7705_driver( input clk_50M, input reset_n,//系统复位信号,低有效 output [15:0] AD_data_out,//输出AD数据 //AD7705 input AD_DRDY_n, input AD_dout, output AD_CS, output AD_clk, output AD_din ); assign AD_CS=0;//CS保持低电平 parameter s_reset=3'd0;//FFFF parameter s_communicate_clkreg=3'd1;//8'h20 parameter s_clk_reg=3'd2;//8'h03 parameter s_communicate_setreg=3'd3;//8'h10 parameter s_set_reg=3'd4;//8'h40 parameter s_communicate_datareg=3'd5;//8'h38,读通道1 parameter s_read_data=3'd6;//读数16bit parameter s_wait_DRDY=3'd7;//等待DRDY==0 //定义寄存器 reg [7:0] communicate_clkreg=8'h20; reg [7:0] clk_reg=8'h03; reg [7:0] communicate_setreg=8'h10; reg [7:0] set_reg=8'h40; reg [7:0] communicate_datareg=8'h38; reg [2:0] state=3'd0; //AD_clk最大5M,上升沿读写 reg [7:0] cycle_cnt=8'd0; reg AD_clk_reg=0;//使用5M时钟,50/5=10; reg [7:0] AD_clk_reg_cnt=8'd0; always@(posedge clk_50M) if(~reset_n) AD_clk_reg_cnt<=8'd0; else if(AD_clk_reg_cnt==8'd9) AD_clk_reg_cnt<=8'd0; else AD_clk_reg_cnt<=AD_clk_reg_cnt+8'd1; //50M分频为5MHz always@(posedge clk_50M) if(AD_clk_reg_cnt>=8'd5) AD_clk_reg<=1; else AD_clk_reg<=0; reg clk_en=0;//SPI工作使能 assign AD_clk=AD_clk_reg & clk_en;//5M reg AD_din_reg=0; assign AD_din=AD_din_reg & clk_en; reg AD_clk_reg_buf=0; always@(posedge clk_50M) AD_clk_reg_buf<=AD_clk_reg; wire AD_clk_reg_down;//AD_clk_reg的下降沿 wire AD_clk_reg_rise;//AD_clk_reg的上升沿 assign AD_clk_reg_down=~AD_clk_reg & AD_clk_reg_buf;//AD_clk_reg的下降沿 assign AD_clk_reg_rise=AD_clk_reg & ~AD_clk_reg_buf;//AD_clk_reg的上升沿 //初始化及读取AD值状态机 reg [15:0] AD_data=16'd0; always@(posedge clk_50M) if(~reset_n)begin state<=s_reset; cycle_cnt<=8'd0; clk_en<=0; communicate_clkreg<=8'h20; clk_reg<=8'h03; communicate_setreg<=8'h10; set_reg<=8'h40; communicate_datareg<=8'h38; end else case(state) s_reset:begin//复位,连续写入32个高电平 if(AD_clk_reg_down==1) if(cycle_cnt>8'd31)begin cycle_cnt<=8'd0; state<=s_communicate_clkreg; clk_en<=0; end else begin cycle_cnt<=cycle_cnt+8'd1; AD_din_reg<=1; state<=s_reset;
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=778
阅读全文
428