AD7352的关于verilog代码
来源:互联网 发布:mysql常用命令总结 编辑:程序博客网 时间:2024/06/15 16:20
思路:计算一个完整的采样及转化周期,fsample=3MHZ大约是333ns,选取的基础时钟tick为5ns
nCS拉低之后需要延时5ns,tsclk的最短时间是1/48MHZ大约为20.8ns ,为了方便计算选取30ns为其周期时间,之后拉高基本上也是5ns
考虑到计算方便把fsample=2MHZ-----500ns 一个周期时间分布:50ns+30ns*13+60ns=500ns
tick上升沿计数,范围[0,100]
tick=0, nCS=1; tick=1,nCS=0;
tick=10+6*n, n--[0,11]; SCLK=0;
tick=13+6*n, n--[0,11]; SCLK=1;
tick=[88,100]; nCS=1;
代码如下:module AD7352_driver( input CLOCK, input RST_N, // input ad_enable, output reg [11:0] segdataA, output reg [11:0] segdataB, // output reg nCS, output reg SCK, input sdataA; input sdataB); function integer log2(input integer n); integer i; for(i=0; 2**i <=n; i=i+1) log2=i+1;endfunction /*************************************** 生成5ns的tick时钟**************************************/reg cnt_5ns;always@(posedge CLOCK) cnt_5ns <= cnt_5ns + 1'b1;wire tick_5ns = (cnt_5ns == 1'b1) ? 1 : 0; /*************************************** 根据tick时钟生成ad基准计数器**************************************/reg [log2(100):1] ad_ref_cnt; // [0,100]always@(posedge CLOCK, negedge RST_N) if(!RST_N) ad_ref_cnt <= 0; else begin if(!ad_enable) ad_ref_cnt <= 0; else begin if(tick_5ns) begin if(ad_ref_cnt < 100) ad_ref_cnt <= ad_ref_cnt + 1'b1; else ad_ref_cnt <= 0; end end end /*************************************** 根据基准计数器生成串行信号**************************************/reg samping_flag; // 采样标志always@(posedge CLOCK, negedge RST_N) if(!RST_N) begin nCS <= 1; SCK <= 0; samping_flag <= 0; end else begin if(tick_5ns) begin case(ad_ref_cnt) // 采样期 10,16,22,28,34,40,46,52,58,64,70,76,82 : SCK <= 0; 13,19,25,31,37,43,49,55,61,67,73,79,85 : SCK <= 1; default : ; // 缺省不操作 endcase case(ad_ref_cnt) 0 : nCS <= 1; 1 : nCS <= 0; // 转换期 88: nCS <= 1; default : ; // 缺省不操作 endcase case(ad_ref_cnt) 0 : samping_flag <= 0; // 采样期 10 : samping_flag <= 1; // 转换期 88: samping_flag <= 0; default : ; // 缺省不操作 endcase end endwire samping_end = (ad_ref_cnt == 88) ? 1 : 0; // 采样结束标志 /*************************************** 根据串行信号读取串行样本数据**************************************/reg [11:0] sample_dataA;reg [11:0] asmple_dataB;always@(posedge SCK, negedge RST_N) if(!RST_N) begin sample_dataA <= {11{1'b0}}; sample_dataB <= {11{1'b0}}; end else begin if(SCK) begin if (samping_flag != 0) begin sample_dataA[11:1] <={sample_dataA[10:0],sdataA};sample_dataB[11:1] <={sample_dataB[10:0],sdataA}; end end end always@(posedge CLOCK, negedge RST_N) if(!RST_N) beginsdataA <= {12{1'b0}};sdataB <= {12{1'b0}}; end else begin if (samping_end) begin sdataA <= sample_dataA; sdataB <= sample_dataB; end else beginsdataA <= sdataA;sdataB <= sdataB; end endendmodule0 0
- AD7352的关于verilog代码
- 关于串并转换的VERILOG代码
- Verilog中关于总线的代码
- 关于Verilog代码中命名的六大黄金规则
- FIFO的verilog代码
- 异步fifo的verilog代码
- 定时/计数器的verilog代码
- 关于Verilog的综合~转载
- 关于Verilog HDL的学习
- 关于Verilog的模块使用
- 关于Verilog的可综合性
- 关于verilog 的always的用法
- verilog代码的一些经验和小结
- 异步FIFO的Verilog代码 DCFIFO实现
- 模N计数器的Verilog HDL代码
- VERILOG代码:VGA显示字符串的解读
- emacs脚本实现verilog代码的缩进
- verilog 编写代码的顺序问题
- 3 python replace以及split用法
- 分治法---折半查找(python描述)
- 【记录】JavaWeb中自己遇到的小问题
- MSP430程序升级
- 关于solrcloud 排序控制问题
- AD7352的关于verilog代码
- 项目的简单总结一 -- 关于对贝塞尔和shapelayer结合使用的动画特效
- 链表的基本操作
- docker 小点
- Jquery实现数据双向绑定(赋值和取值),类似AngularJS
- Spring bean的相关属性
- 数据文件从系统文件迁移到asm的操作
- cin,cin.get(),cin.getline()的深入分析
- 使用 GPG 签名 Git Commits