我用的是adc081sd芯片,(由于我们使用的是FPGA不用像单片机那样考虑极性cpol,相位cpha,下面仅仅介绍下跟单片机比较下) 什么是cpol:若cs被拉为低电平时sclk(时钟)是高那么cpol为1,若cs被拉为低电平时sclk为0时,cpol为0;

什么是相位 cpha:若cs被拉为低电平后是第一个时钟沿采集数据就为0,第二个时钟沿采集数据为1.

时钟上升沿对应SDATA位稳定时就为上升沿采集数据(下降沿时芯片内部会自动将数据送到SDTA引脚供上升沿采集),时钟下降沿对应图SDATA位稳定时就为下降沿沿采集数据,例如下图

如下图所示sclk上升沿时SDTA稳定,下降沿数据不稳定(那么时钟的下降沿时AD芯片送数据,上升沿到来采集管脚数据即可)。上升沿采集。

module adc
(
input clk_in,//
input rst_n_in,//
input adc_data,//caiji
output reg cs,
output reg sclk,
output reg[7:0] led

);

//产生状态
reg[5:0] cnt=0;
always@(posedge clk_in or negedge rst_n_in)
begin
if(!rst_n_in)
cnt<=0;
else
begin
if(cnt>=35)cnt<=0;
else cnt<=cnt+1;
end
end

reg[15:0] data_reg=16'b0;

always@(posedge clk_in or negedge rst_n_in)
begin
if(!rst_n_in)begin cs<=1;sclk<=1; end
else
begin
case(cnt)
0:begin sclk<=1; cs<=1; end
1:begin cs<=0; end

2:begin sclk<=0;end
3:begin sclk<=1;data_reg[15]<=adc_data;end //采集了数据最高位z2

4:begin sclk<=0;end
5:begin sclk<=1;data_reg[14]<=adc_data;end //采集了数据位z1

6:begin sclk<=0;end
7:begin sclk<=1;data_reg[13]<=adc_data;end//采集了数据z0

8:begin sclk<=0;end
9:begin sclk<=1;data_reg[12]<=adc_data;end//采集了数据DB7

10:begin sclk<=0;end
11:begin sclk<=1;data_reg[11]<=adc_data;end//采集了数据DB6

12:begin sclk<=0;end
13:begin sclk<=1;data_reg[10]<=adc_data;end//采集了数据DB5

14:begin sclk<=0;end
15:begin sclk<=1;data_reg[9]<=adc_data;end//采集了数据DB4

16:begin sclk<=0;end
17:begin sclk<=1;data_reg[8]<=adc_data; end//采集了数据DB3

18:begin sclk<=0;end ////采集了DB2
19:begin sclk<=1; data_reg[7]<=adc_data; end

20:begin sclk<=0;end //
21:begin sclk<=1;data_reg[6]<=adc_data;end//采集了数据DB1

22:begin sclk<=0;end //
23:begin sclk<=1;data_reg[5]<=adc_data;end//采集了数据DB0

24:begin sclk<=0;end //
25:begin sclk<=1;data_reg[4]<=adc_data;end//采集了数据ZERO 4

26:begin sclk<=0;end //
27:begin sclk<=1;data_reg[3]<=adc_data;end//采集了数据ZERO 3

28:begin sclk<=0;end //
29:begin sclk<=1;data_reg[2]<=adc_data;end//采集了数据ZERO 2

30:begin sclk<=0;end //
31:begin sclk<=1;data_reg[1]<=adc_data;end//采集了数据ZERO 1

32:begin sclk<=0;end //
33:begin sclk<=1;data_reg[0]<=adc_data;end //采集了数据ZERO 0
34:begin cs<=1; led<=data_reg[12:5]; end //将数据锁存,采下次数据时led的数据不会发生跳变
endcase
end
end

endmodule

adc verilog spi 时序的更多相关文章

  1. SPI接口扫盲 SPI定义/SPI时序(CPHA CPOL)

    SPI接口扫盲   douqingl@gmail.com   为何要写这篇文档?百度上找出来的SPI接口中文描述都说的太过简略,没有一篇文档能够详尽的将SPI介绍清楚的.wikipedia英文版[注释 ...

  2. SPI总线协议及SPI时序图详解

    SPI,是英语Serial Peripheral Interface的缩写,顾名思义就是串行外围设备接口.SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚 ...

  3. SPI总线协议及SPI时序图详解【转】

    转自:https://www.cnblogs.com/adylee/p/5399742.html SPI,是英语Serial Peripheral Interface的缩写,顾名思义就是串行外围设备接 ...

  4. FPGA构造spi时序——AD7176为例(转)

    reference:https://blog.csdn.net/fzhykx/article/details/79490330 项目中用到了一种常见的低速接口(spi),于是整理了一下关于spi相关的 ...

  5. 使用软件模拟spi 时序时注意点

    软件模拟 spi 时序有以下几个点需要注意: cs 使能后到第一个 sck 边沿需要延时. 最后一个sck 边沿到下一个 cs 需要延时. sck 的高电平和低电平本身需要维持时间. mosi 需要先 ...

  6. MCU2FPGA之SPI时序总线

    转载自:http://blog.csdn.net/ce123/article/details/6895408 SPI总线有四种工作方式(SP0, SP1, SP2, SP3),其中使用的最为广泛的是S ...

  7. SPI时序

    1.串行外围接口 高速.全双工的同步通信总线 一主多从 一般速度几十MHZ,最高可以工作在上百MHZ 2.连接图  3.工作模式

  8. 【接口时序】4、SPI总线的原理与Verilog实现

    一. 软件平台与硬件平台 软件平台: 1.操作系统:Windows-8.1 2.开发套件:ISE14.7 3.仿真工具:ModelSim-10.4-SE 硬件平台: 1. FPGA型号:Xilinx公 ...

  9. SPI总线的原理与Verilog实现

    转载地址:https://www.cnblogs.com/liujinggang/p/9609739.html 一. 软件平台与硬件平台 软件平台: 1.操作系统:Windows-8.1 2.开发套件 ...

随机推荐

  1. 《JavaScript语言精粹》第二章-语法 简单笔记

    注释 JavaScript提供两种注释: /* */包围的块注释及//开头的行注释. 注释应该被优先用来提高程序的可读性,注释要精确地描述代码,没有用的注释比没有注释更糟糕. /* */块注释对于被注 ...

  2. 基于netty框架的轻量级RPC实现(附源码)

    前言 Rpc( Remote procedure call):是一种请求 - 响应协议.RPC由客户端启动,客户端向已知的远程服务器发送请求消息,以使用提供的参数执行指定的过程.远程服务器向客户端发送 ...

  3. Java学习笔记(一)语法

    基本语法 大小写敏感 类名:对于所有的类来说,类名的首字母应该大写 方法名:所有的方法名都应该以小写字母开头.如果方法名含有若干单词,则后面的每个单词首字母大写. 源文件名:源文件名必须和类名相同.当 ...

  4. 使用MailMessage发送邮件

    SmtpClient smtp = new SmtpClient(); //实例化一个SmtpClient smtp.DeliveryMethod = SmtpDeliveryMethod.Netwo ...

  5. 浅谈UML——九种图(一)

    前言 学UML将近两个星期了,对UML有了一定的了解,学过的没学过的都知道UML中最最最核心的部分要数那九个图了.浅谈UML九种图. 实例 1.用例图: 什么是用例?描绘一个系统外在可见的需求情况,是 ...

  6. 清北刷题冲刺 11-02 a.m

    卖书 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> ...

  7. Lotus Notes 学习笔记

    这是一个学习关于如何使用Lotus Notes的Agent功能来实现自动化办公的学习笔记. 一. 介绍 Lotus Notes/Domino 是一个世界领先的企业级通讯.协同工作及Internet/I ...

  8. HDU 6447 YJJ’s Salesman (树状数组 + DP + 离散)

    题意: 二维平面上N个点,从(0,0)出发到(1e9,1e9),每次只能往右,上,右上三个方向移动, 该N个点只有从它的左下方格点可达,此时可获得收益.求该过程最大收益. 分析:我们很容易就可以想到用 ...

  9. Linux--5 mariadb和redis的安装

    一.MYSQL(mariadb) MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可. 开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL ...

  10. Eclipse与异常处理

    快捷键:Ctrl+d删除光标所在的这一行 Alt+/ 智能提示 异常处理 异常是阻止当前方法或作用域继续执行的问题,在程序中导致程序中断运行的一些指令. try与catch关键字 try{ //有可能 ...