Verilog实现AD574驱动(有限状态机)
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驱动(有限状态机)相关推荐
- 【Verilog】FPGA驱动Ov7670/Ov7725搭建视频通路(RGB565、灰度图)
一.课题功能指标要求 (一)课程目的 • 加深对数字电路时序的理解: • 掌握 OV 系列摄像头输出时序: • 掌握 I2C 总线时序,以及使用 verilog 驱动三态门的方法: • 掌握数字系统设 ...
- linux 薄膜键盘驱动,有限状态机的嵌入式Linux按键驱动设计
0 引言 一般的按键驱动程序通常非常简单.在程序中一旦检测到按键输入口为低电平时,就采用软件延时10 ms后再次检测按键输入口.如果仍然是低电平则表示有按键按下,便转入执行按键处理程序:否则,当按键 ...
- 用verilog实现L293D 驱动板接口
课程实验做了一个蓝牙智能小车,nexys4开发板,MIPSfpga(一个在 FPGA 上实现的商业 MIPS 处理器软核,Imagination Technologies公司提供给高校免费使用),再加 ...
- Verilog语法_3(同步有限状态机)
September 21, 2016 作者:dengshuai_super 出处:http://blog.csdn.net/dengshuai_super/article/details/525713 ...
- FOC:【3】精品必看!利用Python实现System Verilog多字节UART串口有限状态机自动生成脚本
碎碎念: 向关注的朋友们道个歉,不好意思这一期鸽了这么久.( ̄(工) ̄) 这是一个懒狗不想写1000行的状态机,所以写了1000行的脚本的故事. 虽然本期内容与FOC的直接相关度并不大,由于是在整个项 ...
- 带七段式数码显示管的自动售卖机设计(verilog自学笔记之有限状态机的设计)
采用三段式的方法写一个自动售卖机,功能如下: 共有三种纸币入口,分别支持10元,20元,50元.货物售价80元.需要支持找钱功能(注意,找钱有两种情况,90元和100元:110元和120元的情况不符合 ...
- 【Verilog】FPGA驱动WS2812B点阵
目录 1.整体框架 2.器件选择 WS2812B-64 8x8点阵: 3.手册解读 灯珠引脚: 连接方式: 数据传输方式: 数据波形构成: 数据波形持续时间: 4.模块设计 数据处理模块设计: 控制模 ...
- 有限状态机(FSM)设计原理
1 概述 2 状态机的描述方法 3 FSM的状态编码 4 FSM的Verilog HDL 设计的基本准则及有限状态机设计的一般步骤 基本准则 一般步骤 5 设计举例 51一段式one alwaysFS ...
- FPGA驱动24C04实现读写操作,提供工程源码和技术支持
目录 1.24c04芯片手册解读 2.纯verilog的i2c驱动 3.24c04读写状态机设计 4.上板调试验证 5.福利:工程源码获取 1.24c04芯片手册解读 24c04芯片手册很简单,原理图 ...
最新文章
- 安卓开发|自定义监听器的三个步骤
- 魔幻!2021年,6种将死的编程语言?
- android消除app卡顿,为什么你的app会出现卡顿?Android开发:关于性能需要考虑的...
- python引入redis_redis 删除大key集合的方法
- 洛谷P1462 通往奥格瑞玛的道路 二分答案+最短路SPFA
- usb接口驱动_乾坤合一~Linux设备驱动之USB主机和设备驱动
- 搜索公网上所有使用了SAP BSP技术的网站
- cas单点登录系统:客户端(client)详细配置(包含统一单点注销配置)
- 从程序员到项目经理(9):程序员加油站 -- 再牛也要合群【转载】
- BZOJ 3033 太鼓达人
- jsencrypt代码分析——openssl的rsa加密解密在js的实现
- 狂神说Linux学习笔记
- 如何下载安装fireBug
- 关于安装VS2005后‘找不到visual studio模板信息’的解决方法
- doc 问卷调查模板表_问卷调查Word模板.doc
- 互联网晚报 | 06月08日 星期三 | ​教育部回应高考试题疑泄露;​上海落户新规;字节跳动考虑出售得物少数股份...
- 使用python把普通图片生成ico图标
- Android开发前景及现状分析,高级android工程师
- 遥感图像场景分类数据集
- 给新一代IT人的分享
热门文章
- 5.ring3-PEID详细用法
- Hexo博客优化:在Next主题中设置进阶版Live2D看板娘————拒绝踩坑!!!!
- mvn test 指定suit
- 阿里云盘的几个资源搜索平台(应有尽有)
- HTTPS 工作流程梳理
- Cocos2dx WebSocket的使用
- 如何升级手机android系统,安卓手机系统怎么升级,安卓手机系统升级教程
- “学而不思则罔,思而不学则殆”在实施工作中的思考
- 论文阅读笔记:CcNet: A cross-connected convolutional network for segmenting retinal vessels using 多尺度特征
- python正则表达式取中间字符串_正则表达式如何获取中间字符串