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. [转] 理解RESTful架构
  2. 自定义ArcGIS JavaScript 工具条样式
  3. Oracle数据库升级与补丁
  4. FacetWP 筛选与多条件搜索 WordPress插件
  5. App列表之拖拽ListView(上)
  6. 【离散数学】集合论 第三章 集合与关系(5) 集合的笛卡尔积、笛卡尔积对交/并的分配律、集合计数的乘法原理
  7. python数据爬虫代码_python如何示例爬虫代码
  8. 知识图谱构建技术综述与实践
  9. STM32系统结构图理解及GPIO学习笔记
  10. php 简繁体,php实现简体转繁体
  11. java框架难吗_java框架难学吗?怎样才能学好java框架?
  12. ipa安装失败,以及安装办法
  13. 电商运营数据分析常用分析指标--概述及流量指标
  14. Excel-DATEDIF函数计算两日期天数差
  15. java io closed_java.io.IOException: Stream closed 异常的原因和处理
  16. win10锁屏壁纸文件夹位置
  17. BFS 巡逻机器人
  18. C++:子类与父类构造与析构的调用时机
  19. Point1:STM32根据BRR反推波特率
  20. 基于S12ZVM的无感FOC失步检测

热门文章

  1. django练习——博客系统优化
  2. doxygen无法使用dot简单解决方法
  3. app屡次停止运行怎么解决_吸尘电动清扫车不运行怎么解决?
  4. 关于Windows10屡次更新都撤销问题解决方案
  5. 2021-2027全球与中国皮肤美白产品市场现状及未来发展趋势
  6. Real-Time Rendering-附录B 三角函数
  7. 2021年杭州云栖大会,最IoT的有料峰会报名了!
  8. 小妞会装机 -- 一个装机软件的开发笔记(六)
  9. P/Invoke with SWIG
  10. android 自定义饼图半径不定,【Android】仿支付宝账单统计饼状图的自定义view