FPGA设计 6位8通道同步采集AD芯片MAX11046 Verilog驱动源码: /* * @Description: MAX11046 divider */ module max11046_dev( input clk, input rst_n, input en, //开始采集信号 input sny_clk, //同步信号 input eoc, //转换结束输出 output reg wr, //写使能 输入(低电平有效) output reg cs, //片选 输入(低电平有效) output reg rd, //读使能 输入(低电平有效) output convst, //启动转换 输入(上升沿结束采样,并开始对捕获的样本进行转换。 当COVST为低电平时, ADC处于采集模式) inout [15:0] db, //数据信号 输入输出 output [127:0] mdb, //数据输出 output reg rev_done //获取数据完成 ); reg [15:0] dataBus; reg [127:0] r_mdb; reg [3:0] channel; reg [4:0] cur_state; reg [4:0] next_state; reg [7:0] time_cnt; reg time_cnt_clr; //计数器清零信号 reg st_dong; parameter st_cfg = 5'b0_0001; //配置状态 parameter st_mesu = 5'b0_0010; //采样状态 parameter st_covt = 5'b0_0100; //转换状态 parameter st_rdata = 5'b0_1000; //接收单通道数据 parameter st_nover = 5'b1_0000; //接收数据 //寄存器配置 parameter cr0 = 1'b0; //采集模式 0:convst 下降沿开始采集上升沿开始转换 1:一旦先前的转换完成,获取模式就会启动。 上升沿开始转换 parameter cr1 = 1'b0; //必须为0 parameter cr2 = 1'b1; //0:偏移二进制 1:补码二进制 parameter cr3 = 1'b0; //0:内部基准电源 1:外部基准电源 assign db = wr ? 16'hzzzz : dataBus ; assign convst = sny_clk; assign mdb = r_mdb; //系统主频50MHZ,每个节拍20nS always @(posedge clk or negedge rst_n) begin if(!rst_n) time_cnt <= 8'b0; else if(time_cnt_clr) time_cnt <= 8'b0; else time_cnt <= time_cnt + 8'b1; end always @ (posedge clk or negedge rst_n) begin if(!rst_n) cur_state <= st_cfg; else cur_state <= next_state ; end always @ (*) begin case(cur_state) st_cfg:begin if(st_dong)begin next_state = st_mesu; end else begin next_state = st_cfg; end end st_mesu:begin if(st_dong)begin next_state = st_covt; end else begin next_state = st_mesu;