我用的是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. 使用 jquery.webcam 进行asp.net 拍照

    HTML 代码 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="index. ...

  2. nej 搭配 vue 方案

    此文已由作者张磊授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 前言 目前项目使用的技术是 nej + regular,路由方面是使用 nej 自带的,随着时间推移,项目已经 ...

  3. 001.SQLServer高可用简介

    一 SQLServer高可用集群相关概念 1.1 Windows故障转移群集 Windows故障转移群集是由多个服务器组成的共同提供某高可用服务,该服务用于防止单台服务器故障导致服务失效.故障转移群集 ...

  4. Pillow的安装和使用

    需要把一段文字转换成图片,我找到了PIL(Python Imaging Library)库,专门干这个用的.还有一个Pillow是“friendly PIL fork”,于是我选择了后者. 安装过程稍 ...

  5. return die exit 常用

    die()停止程序运行,输出内容exit是停止程序运行,不输出内容return是返回值die是遇到错误才停止exit是直接停止,并且不运行后续代码,exit()可以显示内容.return就是纯粹的返回 ...

  6. [Xcode 实际操作]四、常用控件-(17)为MKMapView地图上显示提示框

    目录:[Swift]Xcode实际操作 本文将演示当点击地图上的标注圆点时,弹出信息窗口. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit ...

  7. UIDevice的简易说明

    typedef NS_ENUM(NSInteger, UIDeviceOrientation) //设备方向 { UIDeviceOrientationUnknown, UIDeviceOrienta ...

  8. AT2301 Solitaire

    传送门 这里提供智障的\(O(n^2)\)做法 其实是有\(O(logn)\)做法的,但是我太菜了想不出来 Solution: 首先可以发现生成的序列一定是一个两边向中间单调递减的序列 这样就可以发现 ...

  9. 2018年12月25&26日

    小结:昨天因为整理课件,调代码耗费了大量时间,所以没来得及整理作业,这两天主要做的题目是关于树链剖分和线段树的,难度大约都是省选难度,毕竟只要涉及到树链剖分难度就肯定不低. 一. 完成的题目: 洛谷P ...

  10. thinkphp5使用第三方没有使用命名空间的类库

    特别注意的是,如果你需要调用PHP内置的类库,或者第三方没有使用命名空间的类库,记得在实例化类库的时候加上 \ // 错误的用法 $class = new stdClass(); $xml = new ...