AD7606是一个16位的8路通道采集模块,本文主要对其时序图进行分析从而了解接口电路状态机的编译原理。
下图为AD7606的时序图以及时间要求。芯片手册链接





很多博客里只是对状态机进行编写,但是对于里面的延时时钟的计算没有讲解,也没有结合时序图进行分析,我在此进行一个简要分析。首先是conv上升沿触发系统开始采样转换,进入busy状态,然后busy下降沿后开始进行8个通道的读取。

首先是系统主频为100mhz,那么一个clock就是10ns。根据上图可得,
ad7606的一个cycle为5us;
conv的时间为4.15us;
t8和t9虽然没做最低时间要求,但是仍然赋予一个clock;
conv的低电平和高电平时间均为25ns,则均赋予3个clock;
读取一个通道,首先是read信号低电平时间为21ns,(因为fpga的电压一般为3.3v),根据向上取整的原则,给3个clock,read高电平为15ns,给两个clock;
编译的时候主要对conv信号的高低电平时间和read信号的高低电平时间做了约束。
接口模块编辑如下:

module AD_IF(
input clk,                      //clock
input rst_n,                    //reset
input ad_data,                 //input data
input ad_busy,                  //busy signal
input first_data,               output [2:0] ad_os,                  //Oversampling
output reg ad_cs,                    //chip select
output reg ad_reset,                 //data reset
output reg ad_convstab,              // Conversion signal
output reg ad_rd,                    //read signal
output     ad_data_valid,            //data validoutput reg [15:0] ad_ch1,                   //channel 1
output reg [15:0] ad_ch2,                   //channel 2
output reg [15:0] ad_ch3,                   //channel 3
output reg [15:0] ad_ch4,                   //channel 4
output reg [15:0] ad_ch5,                   //channel 5
output reg [15:0] ad_ch6,                   //channel 6
output reg [15:0] ad_ch7,                   //channel 7
output reg [15:0] ad_ch8                    //channel 8);reg [15:0] rst_cnt;                         //reset count signal
reg [8:0]  i;always@(posedge clk or negedge rst_n)   //reset module
beginif(rst_n == 1'b0)            //reset signal validbeginrst_cnt <= 16'b0;          //count signal set 0ad_reset <= 1'b0;          //set ad reset signalendelse if(rst_n< 16'hffff)beginrst_cnt <=rst_cnt+16'h1;   //count signal add 1ad_reset <=1'b1;           //ad reset signal invalidendelse ad_reset <=1'b0;           //count signal full,ad reset siganl valid
end always@(posedge clk)
beginif(ad_reset==1'b0)            // ad resetbegini = 9'b0;ad_ch1<= 0;                 //ad channel 1-8 all reset  ad_ch2<= 0;ad_ch3<= 0;ad_ch4<= 0;ad_ch5<= 0;ad_ch6<= 0;ad_ch7<= 0;ad_ch8<= 0;ad_cs<= 1'b1;ad_rd<=1'b1;ad_convstab <=1'b1;i<=6'b0;endelsebeginif(i==9'd499) i<=1'd0;i<=i+1'd1;case(i)9'd0:                         //initial statebeginad_cs<=1'b1;ad_rd<=1'b1;ad_convstab<=1'b1;end9'd3:                         //convst low levelbeginad_cs<=1'b1;ad_rd<=1'b1;ad_convstab<=1'b0;end9'd6:                         //convst high levelbeginad_cs<=1'b1;ad_rd<=1'b1;ad_convstab<=1'b1;end//wait conversion9'd450:beginad_cs<=1'b0;ad_rd<=1'b1;ad_convstab<=1'b1;end9'd451:                    //ch1,read signal  initial statebegin         ad_cs<=1'b0;ad_rd<=1'b0;ad_convstab<=1'b1;end 9'd454:                    //wait 3 clockbeginad_cs<=1'b0;ad_rd<=1'b0;ad_convstab<=1'b1;ad_ch1<=ad_data;end 9'd455:                    //wait 2 clockbeginad_cs<=1'b0;ad_rd<=1'b1;ad_convstab<=1'b1;end 9'd457:beginad_cs<=1'b0;ad_rd<=1'b0;ad_convstab<=1'b1;end 9'd460:beginad_cs<=1'b0;ad_rd<=1'b0;ad_convstab<=1'b1;ad_ch2<=ad_data;end 9'd461:beginad_cs<=1'b0;ad_rd<=1'b1;ad_convstab<=1'b1;end 9'd463:  beginad_cs<=1'b0;ad_rd<=1'b0;ad_convstab<=1'b1;end  9'd466:beginad_cs<=1'b0;ad_rd<=1'b0;ad_convstab<=1'b1;ad_ch3<=ad_data;end 9'd467:beginad_cs<=1'b0;ad_rd<=1'b1;ad_convstab<=1'b1;end 9'd469:beginad_cs<=1'b0;ad_rd<=1'b0;ad_convstab<=1'b1;end 9'd472:beginad_cs<=1'b0;ad_rd<=1'b0;ad_convstab<=1'b1;ad_ch4<=ad_data;end 9'd473:beginad_cs<=1'b0;ad_rd<=1'b1;ad_convstab<=1'b1;end 9'd475:  beginad_cs<=1'b0;ad_rd<=1'b0;ad_convstab<=1'b1;end  9'd478:beginad_cs<=1'b0;ad_rd<=1'b0;ad_convstab<=1'b1;ad_ch5<=ad_data;end 9'd479:beginad_cs<=1'b0;ad_rd<=1'b1;ad_convstab<=1'b1;end 9'd481:beginad_cs<=1'b0;ad_rd<=1'b0;ad_convstab<=1'b1;end 9'd484:beginad_cs<=1'b0;ad_rd<=1'b0;ad_convstab<=1'b1;ad_ch6<=ad_data;end 9'd485:beginad_cs<=1'b0;ad_rd<=1'b1;ad_convstab<=1'b1;end 9'd487:   beginad_cs<=1'b0;ad_rd<=1'b0;ad_convstab<=1'b1;end 9'd490:beginad_cs<=1'b0;ad_rd<=1'b0;ad_convstab<=1'b1;ad_ch7<=ad_data;end 9'd491:beginad_cs<=1'b0;ad_rd<=1'b1;ad_convstab<=1'b1;end 9'd493:beginad_cs<=1'b0;ad_rd<=1'b0;ad_convstab<=1'b1;end 9'd496:beginad_cs<=1'b0;ad_rd<=1'b0;ad_convstab<=1'b1;ad_ch8<=ad_data;end 9'd497:beginad_cs<=1'b0;ad_rd<=1'b1;ad_convstab<=1'b1;end default: ;endcase end
end
endmodule

FPGA第四节(一):AD7606时序图分析以及接口模块编译相关推荐

  1. SPI四种工作模式时序图

    1.SPI总线简介 SPI(serial peripheral interface,串行外围设备接口)总线技术是Motorola公司推出的一种同步串行接口.它用于CPU与各种外围器件进行全双工.同步串 ...

  2. spi四种工作模式时序图_SPI总线协议及SPI时序图详解

    嵌入式linux QQ交流群:175159209,欢迎爱好者加入交流技术问题! SPI,是英语Serial Peripheral Interface的缩写,顾名思义就是串行外围设备接口.SPI,是一种 ...

  3. 8255工作方式一选通输入——A口(含时序图分析)

    北京交通大学戴胜华老师MOOC微机原理与接口技术 7.3 并行接口8255A 课件 定性描述 选通:有选择有甄别的让数据传输 STB和IBF握手信号线,避免数据丢失 PC几个口做联络信号,PA全部用来 ...

  4. C51单总线时序图分析与底层编程配置(DS18B20为例)

    系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 系列文章目录 前言 一.场景 二.编程实现 ...

  5. spi四种工作模式时序图_还没学会SPI总线协议?干货都在这里

    SPI总线基本概念 SPI是一种高速.全双工.同步的串行通信总线,全称是Serial Peripheral Interface,使用时在芯片的管脚上只占用三根或者四根线(如果单向传输的话只需三根线就可 ...

  6. 使用PlantText画时序图分析业务流程

  7. spi协议时序图和四种模式实际应用详解

    大家好,我是无际. 上个章节我们讲解了spi接口定义,今天我们更加深入讲解下spi协议时序图和spi四种模式的用法. 刚开始接触单片机开发时,最怕就是看时序图,对于我来说就是奇怪的知识. 特别是SPI ...

  8. 经典同步时序逻辑电路分析汇总(第六道)(同步四进制可逆加减法计数器)

    题: 分析该时序逻辑电路 的功能, 写出电路的驱动方程.状态方程和输出方程, 画出电路的状态转换图和时序图. 分析: 第一步, 根据电路逻辑图写出驱动方程和输出方程. (由于书中Y的接法不合理, 我将 ...

  9. 4米乘以12米CAD图_设备时序图的绘制方法

    每日一省:你觉得工作上还有哪些需要改进的地方? 在方案说明书中常用C/T来作为设备性能参数,说明设备的生产能力.C/T是指设备完成一个完整动作周期所需要的时间.设备的理论C/T是通过时序图的分析得到的 ...

最新文章

  1. python3笔记_python3 笔记
  2. 比较某两个时间的时间戳相等
  3. C语言scanf函数详解
  4. python基于什么语言-一种基于Python语言的EDA开发平台及其使用方法与流程
  5. 课程直播|极致AI助力新经济时代个性化精准营销
  6. Django(part15)--页面跳转
  7. Web自动化测试理论知识
  8. Membership学习记录
  9. 前端工作笔记-element ui弹窗嵌套并获取输入
  10. Linux select()
  11. db2如何锁定一张表_办公必备的保护工作表技巧,你会了么?
  12. Redis Manager 如何查看监控
  13. Python程序打包exe文件(pyinstaller)
  14. hadoop入门手册5:Hadoop【2.7.1】初级入门之命令:文件系统shell2
  15. JavaScript网页特效
  16. 充电IC中的动态路径管理
  17. 自学编程,上这8个免费网站,省去上万元学费
  18. Java 岗史上最全八股文面试真题汇总,堪称 2022 年面试天花板
  19. 如何将风险应用加入白名单_vivo手机怎么把风险应用添加到白名单
  20. 一些基于 D3.js 的图表库

热门文章

  1. 记一次 Centos7 yum 安装、配置 PgAdmin4
  2. c语言对数组求秩,怎样用C语言求矩阵的秩
  3. 淘宝无货源与亚马逊无货源模式谁更好做?
  4. 使用标签〈base〉
  5. swf反编译/swf decompiler/flash decompiler软件ASV2011截图
  6. 云南高中计算机会考成绩,云南省某校2009年12月高中信息技术会考实录
  7. 软件工程之工程网络例题详解
  8. 电子计算机女生就业方向,计算机专业的女生就业方向有哪些
  9. 计算机课程logo,《认识PCLogo系统》的教案
  10. 使用UltraISO制作Windows 10启动U盘