Verilog实现AD574驱动

AD574简介

AD574是12位A/D转换器,引脚图如下图1所示:

pin3-CS(in): 片选 低有效
pin5-RC(in): 状态控制 0-转换,1-读数
pin6-CE(in): 使能
pin16~27-DB(out): AD574转换的12位数据输出
pin28-STS(out): 状态指示:1-转换,0-转换结束

关于pin2(12/8)和pin4(A0)的用法请看下面的真值表

官方也有给出典型的参考电路

我们在了解一款数字芯片时,除了真值表最关心的就是时序图了
在编写程序之前,必须把时序图看明白,官方给出的时序图有两个,图3是转换过程时序图,图4是取数过程时序图

对AD574A 有了充分的了解后,我们来开始编写Verilog程序。

源程序

module ADC574A(clk,DB,clr,STS,CS,CE,RC,q);input clk;
input clr;  //复位
input STS;  //状态:1-转换,0-转换结束
input [11:0] DB; //AD574转换好的12位数据
output CS;  //片选 低有效
output reg CE;  //ADC使能
output reg RC;   //0-转换,1-读数
output [11:0] q;  //12位数据输出parameter S0='d0,S1='d1,S2='d2,S3='d3,S4='d4;
reg [2:0] current_state,next_state;
reg lock; //转换后数据输出锁存信号
reg [11:0] rel;  //12位数据寄存器assign CS=0;  //片选
assign q=rel;always @(posedge clk or posedge clr)
begin if(clr) current_state<=S0;else current_state<=next_state;
endalways @(posedge lock)   //lock上升沿锁存数据
beginrel<=DB;
endalways @(current_state,STS)
begin case(current_state)S0:begin   //AD574初始化CE<=1'b0;RC<=1'b1;lock<=1'b0;next_state<=S1; endS1:begin   //启动采样CE<=1'b1;RC<=1'b0;lock<=1'b0;next_state<=S2;    endS2:begin CE<=1'b1;RC<=1'b0;lock<=1'b0;if(~STS) next_state<=S3;  //STS变为0,转换结束else next_state<=S2;   //转换未结束,等待  endS3:begin    //AD574输出转换好的数据CE<=1'b1;lock<=1'b0;RC<=1'b1;next_state<=S4; endS4:beginCE<=1'b1;RC<=1'b1;lock<=1'b1;  //FPGA读取AD输出的数据  next_state<=S0;enddefault: next_state<=S0;endcase;
end

刚开始综合时因为状态编码不当,即写成:
parameter S0=5’b0000,S1=5’b00010,S2=5’b00100,
S3=5’b01000,S4=5’b10000;
一直不能萃取到状态机。

其实官方提供的帮助文档中也给出了状态机的萃取条件,编写状态机时应严格按照要求。下面是文档中的5条要求:

1.表现状态机的信号或变量必须为枚举类型。
2.状态转移必须由clk触发,并且是用if语句检测的上升沿进行转移。
3.状态转移到下一个状态由CASE语句判断
4.所有信号,变量赋值都要放在状态机进程里进行。
5.状态机的状态必须多于两个状态。

RTL图

状态转移图

testbench编写

initial
begin
clk=0;
DB=12'bzzzzzzzzzzzz;
clr=1;
STS=0;
#80 clr=0;STS=1;#160 DB=12'b101111000010;
#160 STS=0;#240 DB=12'bzzzzzzzzzzzz;#80 STS=1;
#160 DB=12'b111111111111;
#160 STS=0;#240 DB=12'bzzzzzzzzzzzz;#80 STS=1;
#160 DB=12'b000000000000;
#160 STS=0;#320 $stop;
$display("Running testbench");
end always
begin
#40 clk=~clk;
end  

仿真结果

Verilog实现AD574驱动(有限状态机)相关推荐

  1. 【Verilog】FPGA驱动Ov7670/Ov7725搭建视频通路(RGB565、灰度图)

    一.课题功能指标要求 (一)课程目的 • 加深对数字电路时序的理解: • 掌握 OV 系列摄像头输出时序: • 掌握 I2C 总线时序,以及使用 verilog 驱动三态门的方法: • 掌握数字系统设 ...

  2. linux 薄膜键盘驱动,有限状态机的嵌入式Linux按键驱动设计

    0  引言 一般的按键驱动程序通常非常简单.在程序中一旦检测到按键输入口为低电平时,就采用软件延时10 ms后再次检测按键输入口.如果仍然是低电平则表示有按键按下,便转入执行按键处理程序:否则,当按键 ...

  3. 用verilog实现L293D 驱动板接口

    课程实验做了一个蓝牙智能小车,nexys4开发板,MIPSfpga(一个在 FPGA 上实现的商业 MIPS 处理器软核,Imagination Technologies公司提供给高校免费使用),再加 ...

  4. Verilog语法_3(同步有限状态机)

    September 21, 2016 作者:dengshuai_super 出处:http://blog.csdn.net/dengshuai_super/article/details/525713 ...

  5. FOC:【3】精品必看!利用Python实现System Verilog多字节UART串口有限状态机自动生成脚本

    碎碎念: 向关注的朋友们道个歉,不好意思这一期鸽了这么久.( ̄(工) ̄) 这是一个懒狗不想写1000行的状态机,所以写了1000行的脚本的故事. 虽然本期内容与FOC的直接相关度并不大,由于是在整个项 ...

  6. 带七段式数码显示管的自动售卖机设计(verilog自学笔记之有限状态机的设计)

    采用三段式的方法写一个自动售卖机,功能如下: 共有三种纸币入口,分别支持10元,20元,50元.货物售价80元.需要支持找钱功能(注意,找钱有两种情况,90元和100元:110元和120元的情况不符合 ...

  7. 【Verilog】FPGA驱动WS2812B点阵

    目录 1.整体框架 2.器件选择 WS2812B-64 8x8点阵: 3.手册解读 灯珠引脚: 连接方式: 数据传输方式: 数据波形构成: 数据波形持续时间: 4.模块设计 数据处理模块设计: 控制模 ...

  8. 有限状态机(FSM)设计原理

    1 概述 2 状态机的描述方法 3 FSM的状态编码 4 FSM的Verilog HDL 设计的基本准则及有限状态机设计的一般步骤 基本准则 一般步骤 5 设计举例 51一段式one alwaysFS ...

  9. FPGA驱动24C04实现读写操作,提供工程源码和技术支持

    目录 1.24c04芯片手册解读 2.纯verilog的i2c驱动 3.24c04读写状态机设计 4.上板调试验证 5.福利:工程源码获取 1.24c04芯片手册解读 24c04芯片手册很简单,原理图 ...

最新文章

  1. 安卓开发|自定义监听器的三个步骤
  2. 魔幻!2021年,6种将死的编程语言?
  3. android消除app卡顿,为什么你的app会出现卡顿?Android开发:关于性能需要考虑的...
  4. python引入redis_redis 删除大key集合的方法
  5. 洛谷P1462 通往奥格瑞玛的道路 二分答案+最短路SPFA
  6. usb接口驱动_乾坤合一~Linux设备驱动之USB主机和设备驱动
  7. 搜索公网上所有使用了SAP BSP技术的网站
  8. cas单点登录系统:客户端(client)详细配置(包含统一单点注销配置)
  9. 从程序员到项目经理(9):程序员加油站 -- 再牛也要合群【转载】
  10. BZOJ 3033 太鼓达人
  11. jsencrypt代码分析——openssl的rsa加密解密在js的实现
  12. 狂神说Linux学习笔记
  13. 如何下载安装fireBug
  14. 关于安装VS2005后‘找不到visual studio模板信息’的解决方法
  15. doc 问卷调查模板表_问卷调查Word模板.doc
  16. 互联网晚报 | 06月08日 星期三 | ​教育部回应高考试题疑泄露;​上海落户新规;字节跳动考虑出售得物少数股份...
  17. 使用python把普通图片生成ico图标
  18. Android开发前景及现状分析,高级android工程师
  19. 遥感图像场景分类数据集
  20. 给新一代IT人的分享

热门文章

  1. 5.ring3-PEID详细用法
  2. Hexo博客优化:在Next主题中设置进阶版Live2D看板娘————拒绝踩坑!!!!
  3. mvn test 指定suit
  4. 阿里云盘的几个资源搜索平台(应有尽有)
  5. HTTPS 工作流程梳理
  6. Cocos2dx WebSocket的使用
  7. 如何升级手机android系统,安卓手机系统怎么升级,安卓手机系统升级教程
  8. “学而不思则罔,思而不学则殆”在实施工作中的思考
  9. 论文阅读笔记:CcNet: A cross-connected convolutional network for segmenting retinal vessels using 多尺度特征
  10. python正则表达式取中间字符串_正则表达式如何获取中间字符串