数电课程设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;