实验七 状态机设计ADC0809采样控制电路
一、实验目的
学习用状态机实现A/D转换器ADC0809的采样控制电路。
二、实验内容
利用QuartusⅡ实现A/D转换器ADC0809的采样控制电路状态机设计;给出仿真波形。最后进行引脚锁定并进行测试,硬件验证设计电路对ADC0809的控制功能。
三、实验仪器与器材
计算机1台,GW48-PK2S实验箱1台,QuartusⅡ6.0 1套。
四、实验
用VHDL 设计的状态机的一般结构有以下几部分组成:
1. 说明部分
说明部分中有新数据类型TYPE 的定义及其状态类型(状态名)和在此新数据类型下定义的状态变量。状态类型一般用枚举类型,其中每一个状态名可任意选取。但为了便于辨认和含义明确,状态名最好有明显的解释性意义。状态变量应定义为信号,便于信息传递。说明部分一般放在ARCHITECTURE 和BEGIN之间。
2. 主控时序进程:
状态机是随外部时钟信号以同步时序方式工作的,因此状态机中必须包含一个对工作时钟信号敏感的进程作为状态机的“驱动泵”。当时钟发生有效跳变时,状态机的状态才发生变化。状态机的下一状态(包括再次进入本状态)仅仅取决于时钟信号的到来。一般地,主控时序进程不负责进入的下一状态的具体状态取值。当时钟的有效跳变到来时,时序进程只是机械地将代表下一状态的信号next_state 中的内容送入代表本状态的信current_state 中,而信号next_state 中的内容完全由其它的进程根据实际情况来决定。当然此进程中也可以放置一些同步或异步清零、置位方面的控制信号。总体来说,主控时序进程的设计比较固定、单一和简单。
3. 主控组合进程:
主控组合进程的任务是根据外部输入的控制信号(包括来自状态机外部的信号和来自状态机内部其它非主控的组合或时序进程的信号),或(和)当前状态的状态值确定下一状态(next_state)的取向,即next_state的取值内容,以及确定对外输出或对内部其它组合或时序进程输出控制信号的内容。
4. 普通组合进程
用于配合状态机工作的其它组合进程,如为了完成某种算法的进程。
5. 普通时序进程
用于配合状态机工作的其它时序进程,如为了稳定输出设置的数据锁存器等。一个状态机的最简结构应至少由两个进程构成(也有单进程状态机,但并不常用)即一个主控时序进程和一个主控组合进程,一个进程作“驱动泵”,描述时序逻辑,包括状态寄存器的工作和寄存器状态的输出;另一个进程描述组合逻辑,包括进程间状态值的传递逻辑以及状态转换值的输出。当然必要时还可以引入第3 个和第4 个进程,以完成其它的逻辑功能。
从一般意义上说进程间是并行运行的,但由于敏感信号的设置不同以及电路的延迟,在时序上进程间的动作是有先后的。在设计中,如果希望输出的信号具有寄存器锁存功能,则需要为此输出写第3 个进程,并把clk 和reset信号放入敏感信号表中。用于进程间信息传递的信号current_state 和next_state ,在状态机设计中称为反馈信号。状态机运行中,信号传递的反馈机制的作用是实现当前状态的存储和下一个状态的译码设定等功能。在VHDL中可以有两种方式来创建反馈机制,即使用信号的方式和使用变量的方式,通常倾向于使用信号的方式。附图8-1为一般状态机结构图。
图8-1 一般状态机结构框图工作示意图
附图8-2和8-3为控制ADC0809采样状态机结构图和状态转换图
图8-2 采样状态机结构框图
设计提示:
设目标器件是EP1C6Q240C8,建议选择实验电路结构图No.5(即结构图No.5A,附图1-14,由该图可见,ADC0809的转换时钟CLK已经事先接有750KHz的频率),将实验系统左下角选择插针处的“转换结束”和“A/D使能”用跳线帽短接。下载目标文件后,可用螺丝刀旋转实验系统左下角的电位器,以便为ADC0809提供变化的待测模拟信号,这时数码管8和7将显示ADC0809采样输出并被锁存的数字值(16进制)。
图8-3 控制ADC0809采样状态图
图8-4 控制ADC0809采样时序图
五、实验要求
根据以上的实验内容写出实验报告,包括程序设计、软件编译、仿真分析、硬件测试和实验过程;设计程序、程序分析报告、仿真波形图及其分析报告。
1. 设计思路
6. 由题意知,我们要设计一个电路与A/D转换器ADC0809相连,通过接受时钟输入来决定状态,通过对不同状态输出不同的控制信号,实现对ADC0809的采样控制,最终输出稳定的采样电压。本实验中将设计如下进程。
设置两个信号Current_State、Next_State,以便实现状态的通知。
① 主控时序进程REG
总体设计思想:用REG控制整个采样控制电路的状态,是整个电路的总指挥。
通过监测ADC0809输出的信号,实现不同状态的转换,进而控制不同不同的进程Process。
主控时序进程REG只输出状态,只接收ST1。
当状态为ST0的时候,开始新一轮的采样;
当接收ST1的时候,通知COM2将采样数据锁存,输出。
进程REG对信号:CLK、Next_State信号敏感
② 组合进程COM1
总体设计思想:用COM1实现COM2对REG的通知,是整个电路的传令兵;用COM2控制整个电路,是整个电路状态改变的具体执行者。
。
当EOC=1的时候,通知REG,以便改变电路状态。
进程COM1对信号Current_State和EOC敏感
③ 进程LATCH
总体设计思想:用LATCH来锁存转换好的数据,并控制数据的输出。
进程LATCH对信号LOCK,REGL敏感
程序设计
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITY ADCINT IS
转换好的8位数据
CLK:INSTD_LOGIC; --状态机工作时钟
EOC:INSTD_LOGIC; --转换状态指示,低电平表示正在转换
ALE:OUTSTD_LOGIC; --8个模拟信号通道地址锁存信号
START:OUTSTD_LOGIC; --转换开始信号
OE态控制信号
ADDA:OUTSTD_LOGIC; --信号通道最低位控制信号
LOCK0:OUTSTD_LOGIC; --观察数据锁存时钟
LED:OUTSTD_LOGIC; --用来指示仿真程序是否正确
-- LED2: OUT STD_LOGIC; --2用来指示仿真程序是否正确
Q )--8位数据输出
);
END ADCINT;
ARCHITECTURE behav OF ADCINT IS
TYPE states IS(st0,st1,st2,st3,st4); --定义各状态子类型
SIGNAL current_state , next_state : states := st0;
);
SIGNAL LOCK :STD_LOGIC; --转换后数据输出锁存时钟信号
BEGIN
ADDA ';--当ADDA<='0',模拟信号进入通道IN0,当ADDA<='1',则进入通道IN1
Q <= REGL; LOCK0 <= LOCK;
------------------进程REG---------------------
--用REG控制整个采样控制电路的状态,是整个电路的总指挥。
PROCESS(CLK)
BEGIN
' and CLK'eventTHEN -- 检测时钟上升沿
--LED<='0';
IF next_state=st0 THEN -- 初始化状态机
current_state<=st0;
ELSIF next_state=st1 THEN --开始转换(st1)
current_state<=st1;
ELSIF next_state=st2 THEN --等待转化完毕,检测EOC是否为高电平
current_state<=st2;
ELSIF next_state=st3 THEN
-- LED<='1';
current_state<=st3;
ELSIF next_state=st4 THEN
current_state<=st4;
ENDIF;
ENDIF;
ENDPROCESS;
------------------进程COM2---------------------
--用COM2控制整个电路,是整个电路状态改变的具体执行者。
PROCESS(current_state,EOC)
VARIABLE First_EOC :STD_LOGIC;
BEGIN
--LED2<='0';
IF current_state=st0 THEN -- 初始化状态机
ALE';
START';
OE';
LOCK';
next_state<=st1;
ELSIF current_state=st1 THEN --开始转换(st1)
START';
ALE';
--IF EOC='0' THEN -- 转换结束
next_state<=st2;
First_EOC记录EOC,以便后面判断AD是否开始转换
--END IF;
ELSIF current_state=st2 THEN --等待转化完毕,检测EOC是否为高电平
START';
OE';
'=(First_EOC XOR EOC)then
' THEN
-- IF EOC='1' THEN
next_state<=st3;
-- END IF;
-- else
-- next_state<=st2;
ENDIF;
else
next_state<=st2;
ENDIF;
ELSIF current_state=st3 THEN
--LED2<='1';
' THEN -- 转换结束
OE';
next_state<=st4;
ELSE
OE';
ENDIF;
ELSIF current_state=st4 THEN
OE';
LOCK';
next_state<=st0; --开启下一轮新的转换
ENDIF;
ENDPROCESS;
------------------进程LATCH---------------------
--用来控制电路的输出
PROCESS(LOCK,REGL)
);--用来保存数值
BEGIN
' THEN
cq:=D;
' THEN
REGL<=cq;
ENDIF;
ENDPROCESS;
ENDARCHITECTURE behav;
2. 仿真分析
图8-5 仿真波形图
由8-5可知,仿真波形和图8-4控制ADC0809采样时序图一致。
3. 硬件测试和实验过程
表1-1 ADCINT在GWAC6板上目标芯片EP1C6Q240C8的引脚锁定信息
端口名称 |
端口符号 |
GWAC6板输入输出元件 |
GWAC6板接口 |
目标器件引脚 |
备注 |
8位数字量输入引脚D |
D |
数码管1~2 |
PIO31,PIO26, PIO27,PIO28, PIO29,PIO30, PIO39,PIO38, |
136,128, 132,133, 134,135, 160,159 |
模式No.5 |
主频率 |
CLK |
时钟Clock0 |
Clck0 |
28 |
|
转换状态标志 |
EOC |
PIO22 |
19 |
||
地址锁存允许信号输入端 |
ALE |
PIO35 |
140 |
||
A/D转换启动信号输入端 |
START |
PIO24 |
21 |
||
输出允许控制端 |
OE |
PIO23 |
20 |
||
地址输入端A |
ADDA |
ADC0809--P14 |
PIO37 |
158 |
|
8位数字量输出引脚 |
Q |
数码管7~8\ |
PIO40~47 |
161-168 |
图8-6引脚的配置
六、一些实验过程中的思考
怎么控制电路状态的思考:在高级的程序设计语言中,如C语言可以使用大量的计算让CPU忙等待,以便让状态持续一段时间。但是在硬件电路中,想要让电路状态持续一段时间的办法只能通过Clock,通过对Clock上升/下降沿(或高低电平)的检测,即将Clock设置为敏感信息。Clock就相当于一个鼓点,控制着整个电路的节奏(运行状态)。
实验七 状态机设计ADC0809采样控制电路的更多相关文章
- 08-FPGA状态机设计实例——小梅哥FPGA设计思想与验证方法视频教程配套文档
芯航线--普利斯队长精心奉献 实验目的:1.学习状态机的相关概念 2.理解一段式.两段式以及三段式状态机的区别以及优缺点 实验平台:芯航线FPGA核心板 实验原理: 状态机全称是有限状态机(fin ...
- FPGA 状态机设计
数字系统有两大类有限状态机(Finite State Machine,FSM):Moore状态机和Mealy状态机. Moore状态机 其最大特点是输出只由当前状态确定,与输入无关.Moore状态机的 ...
- 【C++ 流类库与输入输出 】实验七
1. 基础练习 (1)教材习题 11-7 (2)教材习题 11-3 (3)教材习题 11-4 2. 应用练习 (1)已知有班级名单文件 list.txt(见实验 7 附件包).编写一个应用程序实现随机 ...
- 20145215&20145307《信息安全系统设计基础》实验二 固件设计
20145215&20145307<信息安全系统设计基础>实验二 固件设计 实验目的与要求 了解多线程程序设计的基本原理,学习 pthread 库函数的使用. 了解在 linux ...
- 20145218&20145240 《信息安全系统设计基础》实验二 固件设计
20145218&20145240 <信息安全系统设计基础>实验二 固件设计 实验报告链接:http://www.cnblogs.com/20145240lsj/p/6035512 ...
- 20145221高其&20145326蔡馨熠《信息安全系统设计基础》实验二 固件设计
20145221高其&20145326蔡馨熠<信息安全系统设计基础>实验二 固件设计 实验目的与要求 了解多线程程序设计的基本原理,学习 pthread 库函数的使用. 了解在 l ...
- 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验七:PS/2模块① — 键盘
实验七:PS/2模块① — 键盘 实验七依然也是熟烂的PS/2键盘.相较<建模篇>的PS/2键盘实验,实验七实除了实现基本的驱动以外,我们还要深入解PS/2时序,还有PS/2键盘的行为.不 ...
- C#七种设计原则
在C#中有七种设计原则 分别是 1.开闭原则(Open-Closed Principle, OCP) 2.单一职责原则(Single Responsibility Principle) 3.里氏替换原 ...
- 《数据挖掘导论》实验课——实验七、数据挖掘之K-means聚类算法
实验七.数据挖掘之K-means聚类算法 一.实验目的 1. 理解K-means聚类算法的基本原理 2. 学会用python实现K-means算法 二.实验工具 1. Anaconda 2. skle ...
随机推荐
- HTTP返回值
100 Continue:初始的请求已经接受,客户应当继续发送请求的其余部分. 101 Switching Protocols:服务器将遵从客户的请求转换到另外一种协议. 200 OK:一切正常,对G ...
- 3.Mybatis全局配置文件属性详解(SqlMapConfig.xml)
首先我们要知道一点,该配置文件的中属性的存放是有顺序的,没有办法随意的乱放.如果你属性的配置位置出错,会有如下错误提示: The content of element type "confi ...
- 1.Mybatis原理
Mybatis是一个持久层框架,Apache底下的一个项目,它的前身是ibatis,它支持普通的SQL查询,存储过程和高级映射的优秀框架.Mybatis消除了几乎所有的JDBC代码和参数的手工设置以及 ...
- device tree 生成device node 到 platform_device
http://blog.csdn.net/lichengtongxiazai/article/details/38942033 http://blog.csdn.net/mcgrady_tracy/a ...
- Servlet 利用Cookie实现一周内不重复登录
import java.io.IOException;import java.io.PrintWriter; import javax.servlet.ServletException;import ...
- LightOJ 1094 - Farthest Nodes in a Tree(树的直径)
http://acm.hust.edu.cn/vjudge/contest/121398#problem/H 不是特别理解,今天第一次碰到这种问题.给个链接看大神的解释吧 http://www.cnb ...
- linux 下部署 redis
Redis是一种高级key-value数据库.它跟memcached类似,不过数据 可以持久化,而且支持的数据类型很丰富.有字符串,链表,集 合和有序集合.支持在服务器端计算集合的并,交和补集(dif ...
- 持续获取可访问谷歌的hosts(已证实可用)
@echo off REM 欢迎圈我,在顶栏的"查找人员"处输入Felix Hsu即可 REM Patched by logicmd REM 准备工作,先清一下DNS缓存,再备份h ...
- strace命令介绍(转)
原文链接:http://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316692.html 简介 strace常用来跟踪进程执行时的系统调用和所接收的信 ...
- Centos7 php 5.6.19编译安装
0x01 前言 在php官网下载php-5.6.19.tar.gz源代码(php7虽然说性能提升很大,但是小菜菜还是先用着这个先吧),解压后根目录有个INSTALL文件,里面有安装教程了,目录如下: ...