LTC2344-16Verilog HDL驱动程序

module LTC2344(
    input sys_clk,//FPGA 50MHz的时钟
	input sys_rst_n,
    input busy,//正在转换标识
    input sdo0,
    input sdo1,
    input sdo2,//三个二进制给FPGA
    
    output wire cs,//始终保持为0
    output reg cnv,//采样开始标志
    output reg scki,//采样时钟频率暂定为25MHz,最大可以是100MHz。
    output reg sdi,//输入电压范围选取0~2.048V,sdi定为000_001_001_001,第四通道不用
    output reg [15:0] data,
    output reg [15:0] data1,
    output reg [15:0] data2
    
);
assign cs=1'b0;

reg [5:0] cnt;
always@(posedge sys_clk or negedge sys_rst_n)
        if(!sys_rst_n)
            begin 
            cnt<=6'd1;
            cnv<=1'b0;
            scki<=1'b0;
            sdi<=1'b0;
            end
        else if(busy)
                 begin 
                 cnt<=6'd1;
                 cnv<=1'b1;
                 scki<=1'b0;
                 sdi<=1'b0;
                 end
        else begin
            cnv<=1'b0;
            if(cnt<6'd49) begin
            scki<=~scki;
            cnt<=cnt+1'b1;
                          end
            else scki<=1'b0;
        
        case(cnt)//sdi定为000_001_001_001,第四通道不用
        6'd1:begin
        sdi<=1'b0;data[15]<=sdo0;data1[15]<=sdo1;data2[15]<=sdo2;end
        6'd2:begin
        sdi<=1'b0;data[15]<=sdo0;data1[15]<=sdo1;data2[15]<=sdo2;end
        6'd3:begin
        sdi<=1'b0;data[14]<=sdo0;data1[14]<=sdo1;data2[14]<=sdo2;end
        6'd4:begin
        sdi<=1'b0;data[14]<=sdo0;data1[14]<=sdo1;data2[14]<=sdo2;end
        6'd5:begin
        sdi<=1'b0;data[13]<=sdo0;data1[13]<=sdo1;data2[13]<=sdo2;end
        6'd6:begin
        sdi<=1'b0;data[13]<=sdo0;data1[13]<=sdo1;data2[13]<=sdo2;end
        6'd7:begin
        sdi<=1'b0;data[12]<=sdo0;data1[12]<=sdo1;data2[12]<=sdo2;end
        6'd8:begin
        sdi<=1'b0;data[12]<=sdo0;data1[12]<=sdo1;data2[12]<=sdo2;end
        6'd9:begin
        sdi<=1'b0;data[11]<=sdo0;data1[11]<=sdo1;data2[11]<=sdo2;end
        6'd10:begin
        sdi<=1'b1;data[11]<=sdo0;data1[11]<=sdo1;data2[11]<=sdo2;end
        6'd11:begin
        sdi<=1'b1;data[10]<=sdo0;data1[10]<=sdo1;data2[10]<=sdo2;end
        6'd12:begin
        sdi<=1'b0;data[10]<=sdo0;data1[10]<=sdo1;data2[10]<=sdo2;end
        6'd13:begin
        sdi<=1'b0;data[9]<=sdo0;data1[9]<=sdo1;data2[9]<=sdo2;end
        6'd14:begin
        sdi<=1'b0;data[9]<=sdo0;data1[9]<=sdo1;data2[9]<=sdo2;end
        6'd15:begin
        sdi<=1'b0;data[8]<=sdo0;data1[8]<=sdo1;data2[8]<=sdo2;end
        6'd16:begin
        sdi<=1'b1;data[8]<=sdo0;data1[8]<=sdo1;data2[8]<=sdo2;end
        6'd17:begin
        sdi<=1'b1;data[7]<=sdo0;data1[7]<=sdo1;data2[7]<=sdo2;end
        6'd18:begin
        sdi<=1'b0;data[7]<=sdo0;data1[7]<=sdo1;data2[7]<=sdo2;end
        6'd19:begin
        sdi<=1'b0;data[6]<=sdo0;data1[6]<=sdo1;data2[6]<=sdo2;end
        6'd20:begin
        sdi<=1'b0;data[6]<=sdo0;data1[6]<=sdo1;data2[6]<=sdo2;end
        6'd21:begin
        sdi<=1'b0;data[5]<=sdo0;data1[5]<=sdo1;data2[5]<=sdo2;end
        6'd22:begin
        sdi<=1'b1;data[5]<=sdo0;data1[5]<=sdo1;data2[5]<=sdo2;end
        6'd23:begin
        sdi<=1'b1;data[4]<=sdo0;data1[4]<=sdo1;data2[4]<=sdo2;end
        6'd24:begin
        sdi<=1'b0;data[4]<=sdo0;data1[4]<=sdo1;data2[4]<=sdo2;end
        6'd25:begin
        sdi<=1'b0;data[3]<=sdo0;data1[3]<=sdo1;data2[3]<=sdo2;end
        6'd26:begin
        sdi<=1'b0;data[3]<=sdo0;data1[3]<=sdo1;data2[3]<=sdo2;end
        6'd27:begin
        sdi<=1'b0;data[2]<=sdo0;data1[2]<=sdo1;data2[2]<=sdo2;end
        6'd28:begin
        sdi<=1'b0;data[2]<=sdo0;data1[2]<=sdo1;data2[2]<=sdo2;end
        6'd29:begin
        sdi<=1'b0;data[1]<=sdo0;data1[1]<=sdo1;data2[1]<=sdo2;end
        6'd30:begin
        sdi<=1'b0;data[1]<=sdo0;data1[1]<=sdo1;data2[1]<=sdo2;end
        6'd31:begin
        sdi<=1'b0;data[0]<=sdo0;data1[0]<=sdo1;data2[0]<=sdo2;end
        6'd32:begin
        sdi<=1'b0;data[0]<=sdo0;data1[0]<=sdo1;data2[0]<=sdo2;end
        default:sdi<=1'b0;
        endcase
               end

endmodule

1.上述代码为采用三个通道的驱动程序。测试代码TestBench如下

`timescale 1ns/1ns
module LTC2344_tb();
parameter T=20;

reg sys_clk;
reg sys_rst_n;
reg busy;
reg sdo0;
reg sdo1;
reg sdo2;

wire cs;
wire cnv;
wire scki;
wire sdi;
wire [15:0]data;
wire [15:0]data1;
wire [15:0]data2;

always #(T/2) sys_clk=~sys_clk;

initial begin
            sys_clk=1'b0;
            sys_rst_n=1'b0;
            busy=1'b0;
            sdo0=1'b0;
            sdo1=1'b0;
            sdo2=1'b0;       
            #20 begin
                   sys_rst_n=1'b1; 
                   busy=1'b1;
                end
            #1405 begin 
                   busy=1'b0;
                   sdo0=1'b0;
                   sdo1=1'b1;
                   sdo2=1'b0;
                  end
            #40 begin
                    sdo0=1'b1;
                    sdo1=1'b0;
                    sdo2=1'b1;
                end
            #40 begin
                    sdo0=1'b0;
                    sdo1=1'b0;
                    sdo2=1'b0;
                end
            #1000 begin
                   busy=1'b1;
                   sdo0=1'b0;
                   sdo1=1'b0;
                   sdo2=1'b0;
                  end
            #1405 begin 
                   busy=1'b0;
                   sdo0=1'b0;
                   sdo1=1'b1;
                   sdo2=1'b0;
                  end
            #40 begin
                    sdo0=1'b1;
                    sdo1=1'b0;
                    sdo2=1'b1;
                end
            #40 begin
                    sdo0=1'b0;
                    sdo1=1'b0;
                    sdo2=1'b0;
                end
            #1000 begin
                   busy=1'b1;
                   sdo0=1'b0;
                   sdo1=1'b0;
                   sdo2=1'b0;
                  end
            #1405 begin 
                   busy=1'b0;
                   sdo0=1'b0;
                   sdo1=1'b1;
                   sdo2=1'b0;
                  end
            #40 begin
                    sdo0=1'b1;
                    sdo1=1'b0;
                    sdo2=1'b1;
                end
            #40 begin
                    sdo0=1'b0;
                    sdo1=1'b0;
                    sdo2=1'b0;
                end
            #1000 begin
                   busy=1'b1;
                   sdo0=1'b0;
                   sdo1=1'b0;
                   sdo2=1'b0;
                  end
      end

LTC2344 u_LTC2344(
            .sys_clk(sys_clk),
            .sys_rst_n(sys_rst_n),
            .busy(busy),
            .sdo0(sdo0),
            .sdo1(sdo1),
            .sdo2(sdo2),
           
            .cs(cs),
            .cnv(cnv),
            .scki(scki),
            .sdi(sdi),
            .data(data),
            .data1(data1),
            .data2(data2)


);
endmodule
                   
            

2.采用联合仿真,在modelsim下运行得到仿真图

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值