• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

基于FPGA的AD7705驱动设计Verilog代码ISE 仿真

07/31 08:20
428
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-2405241ZP9B9.doc

共1个文件

名称:基于FPGAAD7705驱动设计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

  • 2-2405241ZP9B9.doc
    下载

相关推荐