数电课程设计报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数电课程设计报告

姓名:李鹏鹏

学号:04113063 指导老师:董瑞军

目录

1.概述 ---------------------------------------------------3

2.原理图 --------------------------------------------------3

3.FPGA与ADC0809VHDL控制程序 ------------------------------3

4.FPGA中储存模块 -----------------------------------------7

5.储存器控制模块 ----------------------------------------8

6.FPGA与DAC0832的连接和控制 ------------------------------11

7.分频模块 ---------------------------------------14

8.顶层模块设计 ----------------------------------------15

9.RTL视图 ----------------------------------------------18

10.研究体会 -----------------------------------------------19

一.概述

课题要求通过FPGA对A/D和D/A转换的控制,使得FPGA的输入量和输出量一致,根据原理设计出如下框架图。本报告主要内容从A/D转换器(ADC0809)前端的测温电路开始,经过取样保持电路,详细介绍了A/D转换器与FPGA芯片VHDL控制程序,以及FPGA的对数据的储存和控制模块,之后说明D/A转换器(DAC0832)控制程序和转换器后端的电路图,并完成顶层模块设计以各模块,主要过程在计算机上进行仿真,报告中附以详尽说明的仿真波形和统计报告。

二.原理图

若模拟信号变化速度较快,需要在A/D之前加入采样保持电路,以保证转换精度。在这里选择LF398(LF398是一个专用的采样保持芯片,它具有很高的直流精度和较高的采样速率,器件的动态性能和保持性能可以通过合适的外接保持电容达到最佳。)模拟输入量U0(t)从IP进入,采样输出量从OP口输出至ADC0809的IN口(IN0-IN7的选择由ADDA-ADDC决定),逻辑输入控制端与START连接。ADC0809和FPGA的连接和FPGA和DAC0832的连接如图,而在DAC0832后端,由于输出的为模拟电流量,若需输出电压量,则可加入如图电路。

三.FPGA与ADC0809VHDL控制程序

ADC0809的引脚图如下

IN0-IN7模拟量输入通道

ADDA,ADDB,ADDC---输入通道选择地址,按其状态选择输入通道。

START---A/D转换启动信号。高电平有效。

ALE---地址锁存允许信号。当ALE上升沿时,把ADDA-ADDC的地址状态

传给地址锁存器。

CLK---时钟信号。因本芯片中无时钟电路,所以需由外部提供。

EOC---转换结束信号。EOC为低电平表示转换正在进行,当EOC变为高

电平,表示转换结束。

OE---输出允许信号。当oe=1时,将转换完成的数据输出。

分析ADC0809的工作原理后,得到其工作时序图:

于是将整个转换过程分为5个状态,并用状态图表示:

根据设定的状态图,写出VHDL控制程序如下:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL; --库和程序包的调用

ENTITY ADC0809 IS

PORT( --定义端口参数

D:IN STD_LOGIC_VECTOR(7 DOWNTO 0); --由ADC0809 输出的已转换完成的8 位数据CLK:IN STD_LOGIC; --工作时钟

EOC:IN STD_LOGIC; --转换结束输出信号;转换过程中为低电平,转换结束后为高电平ALE:OUT STD_LOGIC; --地址锁存允许信号,高有效

START:OUT STD_LOGIC; --A/D转换启动信号,在其下降沿开始A/D转换过程

OE:OUT STD_LOGIC; --输出允许信号,高有效。当OE=1时,将数据送出

ADDA:OUT STD_LOGIC; --信号通道控制信号

ADDB:OUT STD_LOGIC;

ADDC:OUT STD_LOGIC;

LOCK0:OUT STD_LOGIC; --观察数据锁存时钟

Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));--8 位数据输出

END ADC0809;

ARCHITECTURE behave OF ADC0809 IS

TYPE states IS(st0,st1,st2,st3,st4); --用枚举类型进行状态定义

SIGNAL current_state,next_state:states:=st0; --状态信号定义

SIGNAL REGL:STD_LOGIC_VECTOR(7 DOWNTO 0);

SIGNAL LOCK:STD_LOGIC; --转换后数据输出锁存时钟信号

BEGIN

ADDA<='1'; ADDB<='0';ADDC<='0'; --选取信号通道,这里选择“111”,可按需更改

Q<=REGL;LOCK0<=LOCK;

COMBIN:PROCESS(current_state,EOC)BEGIN --组合逻辑进程,规定各状态转换方式

CASE current_state IS

WHEN st0=>ALE<='0';START<='0';LOCK<='0';OE<='0';

next_state<=st1; --对ADC0809进行初始化

WHEN st1=>ALE<='1';START<='1';LOCK<='0';OE<='0';

next_state<=st2; --启动转换过程

WHEN st2=>ALE<='0';START<='0';LOCK<='0';OE<='0';

IF(EOC='1')THEN next_state<=st3; --EOC=1 表明转换结束

ELSE next_state<=st2; ---EOC=0,表示转换未结束,继续转换过程

END IF;

WHEN st3=>ALE<='0';START<='0';LOCK<='0';OE<='1';

next_state<=st4; --打开输出锁存器的三态门,将数据送入FPGA

WHEN st4=>ALE<='0';START<='0';LOCK<='1';OE<='1';next_state<=st0; --返回状态o,继续下一次转换

WHEN OTHERS=>next_state<=st0;

END CASE;

END PROCESS COMBIAN;

REG:PROCESS(CLK) --时序进程

BEGIN

IF(CLK'EVENT AND CLK='1')THEN current_state<=next_state;

END IF;

END PROCESS REG;

SA VE:PROCESS(LOCK) --锁存进程,在此进程中,在LOCK 转为高电平时,把已转换好的数据锁入

BEGIN

IF LOCK='1'AND LOCK'EVENT THEN REGL<=D;

END IF;

相关文档
最新文档