为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

EDA_VHDL_数据采集电路和简易存储示波器设计

2019-04-20 7页 doc 22KB 66阅读

用户头像

is_477730

暂无简介

举报
EDA_VHDL_数据采集电路和简易存储示波器设计EDA数据采集电路和简易存储示波器设计 (1) 实验目的:掌握LPM RAM模块VHDL元件定制、调用和使用方法;熟悉A/D和D/A与FPGA接口电路设计;了解HDL文本描述与原理图混合设计方法。 先用文本输入方式分别完成对元件ADCINT、元件CNT10B的VHDL的源程序设计,然后采用图形输入方式将元件ADCINT、元件CNT10B、元件RAM8B连接起来,绘制出符合要求的原理图,如图1所示。 (2) 实验原理:本设计项目是利用FPGA直接控制0809对模拟信号进行采样,然后将转换好的8位二进制数据迅速存储到存储器中,在...
EDA_VHDL_数据采集电路和简易存储示波器设计
EDA数据采集电路和简易存储示波器 (1) 实验目的:掌握LPM RAM模块VHDL元件定制、调用和使用;熟悉A/D和D/A与FPGA接口电路设计;了解HDL文本描述与原理图混合设计方法。 先用文本输入方式分别完成对元件ADCINT、元件CNT10B的VHDL的源程序设计,然后采用图形输入方式将元件ADCINT、元件CNT10B、元件RAM8B连接起来,绘制出符合要求的原理图,如图1所示。 (2) 实验原理:本设计项目是利用FPGA直接控制0809对模拟信号进行采样,然后将转换好的8位二进制数据迅速存储到存储器中,在完成对模拟信号一个或数个周期的采样后,由外部电路系统(如单片机)将存储器中的采样数据读出处理。采样存储器可以有多种方式实现: 1、外部随机存储器RAM。其优点是存储量大,缺点是需要外接芯片,且常用的RAM读写速度较低;与FPGA间的连接线过长;特别是在存储数据时需要对地址进行加1操作,进一步影响数据写入速度。 2、FPGA内部EAB/ESB等。在Altera的大部分FPGA器件中都含有类似于EAB的模块。 3、由EAB等模块构成高速FIFO。FIFO比较适合于用作A/D采样数据高速存储。 基于以上讨论,A/D采样电路系统可以绘成图1所示的电路原理图。其中元件功能描述如下: 1. 元件ADCINT。见程序1,ADCINT是控制0809的采样状态机,其VHDL描述以及其输入输出信号的含义与26完全相同。 2. 元件CNT10B。见程序2,CNT10B中有一个用于RAM的9位地址计数器,此计数器的工作时钟CLK0由WE控制:当WE=’1’时,CLK0=LOCK0;LOCK0来自0809采样控制器的LOCK0(每一采样周期产生一个锁存脉冲),这时处于采样允许阶段,RAM的地址锁存时钟inclock=CLKOUT=LOCK0;每一个LOCK0的脉冲通过0809采到一个数据,同时将此数据锁入RAM(RAM8B模块)中。 当WE=’0’时,处于采样禁止阶段,此时允许读出RAM中的数据,此时CLKOUT=CLK0=CLK=采样状态机的工作时钟(一般取65536Hz),由于CLK的频率比较高,所以扫描RAM地址的速度就高,这时在RAM数据输出口Q[7..0]接上DAC0832,就能从示波器上看到刚才通过0809采入的波形数据。 3. 元件RAM8B。这是一个LPM_RAM,8位数据线,9位地址线。WREN是写使能,高电平有效。 (3) 实验内容1:设ADDA=‘1’;即模拟信号来自0809的IN1口(可用实验系统右下角的电位器产生被测模拟信号)完成此项设计,给出仿真波形及其,将设计结果在Cyclone中硬件实现,用QuartusII的在系统RAM/ROM数据编辑器了解采入RAM中的数据。 (4) 实验内容2:优化设计。仿真设计电路图1,检查此项设计得START信号是否有毛刺,如果有,改进ADCINT的设计(也可用其他方法),排除START的毛刺。 (5) 实验内容3:对电路图1完成设计和仿真后锁定引脚,进行硬件测试。参考实验8-2和7-1对0809和0832的引脚锁定:元件“ADCINT”引脚锁定参考试题26。WE用键1控制;为了实验方便,CLK接clock0,频率先选择64Hz(选择较慢的采样时钟),作状态机工作时钟。硬件实验中,建议选择电路模式No.5,打开+/-12V电源,首先使WE=’1’,即键1置高电平,允许采样,由于这时的程序中设置ADDA <= '1',模拟信号来自AIN1,即可通过调协实验板上的电位器(此时的模拟信号是手动产生的),将转换好的数据采入RAM中;然后按键1,使WE=’0’,clock0的频率选择16384Hz(选择较高时钟),即能从示波器中看见被存于RAM中的数据(可以首先通过QuartusII的RAM在系统读写器观察已采入RAM中的数据)。 图1 ADC0809采样电路系统:RSV.bdf (6) 实验内容4:程序中设置ADDA <= '0',模拟信号将由AIN0进入,即AIN0的输入信号来自外部信号源的模拟连续信号。外部模拟信号可来自实验箱,方法如下: 首先打开+/-12V电源,将GW48主系统板右侧的“JL11”跳线座短路“L_F”端;跳线座“JP18”的“INPUT”端与系统右下角的时钟64Hz相接;并用一插线将插座“JP17”的“OUTPUT”端与实验箱最左侧的“JL10”坐的“AIN0”端相接,这样就将64Hz待采样的模拟信号接入了0809的IN0端(注意,这时例8-2/12程序中设置ADDA <= '0')。试调节“JP18”上方的电位器,使得主系统右侧的“WAVE OUT”端输出正常信号波形(用示波器监视,峰值调在4V以下)。 注意,如果要将采入(用CLK=64采样)RAM中的数据扫描显示到示波器上观察,必须用高频率时钟才行(clock0接16384Hz)。 可以使键1高电平是对模拟信号采样,低电平时示波器显示已存入RAM的波形数据。 (7) 实验内容5:仅按照以上方法,会发现示波器显示的波形并不理想,原因是从RAM中扫出的数据都不是一个完整的波形周期。试设计一个状态机,结合被锁入RAM中的某些数据,改进元件CNT10B,使之存入RAM中的数据和通过D/A在示波器上扫出的数据都是一个或数个完整波形数据。 (8) 实验内容6:在图8-15的电路中增加一个锯齿波发生器,扫描时钟与地址发生器的时钟一致。锯齿波数据通过另一个D/A输出,控制示波器的X端(不用示波器内的锯齿波信号),而Y端由原来的D/A给出RAM中的采样信息,由此完成一个比较完整的存储示波器的显示控制。 【程序1】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY ADCINT IS PORT(D  : IN STD_LOGIC_VECTOR(7 DOWNTO 0);  --来自0809转换好的8位数据 CLK  : IN STD_LOGIC;                          --状态机工作时钟 EOC  : IN STD_LOGIC;                  --转换状态指示,低电平示正在转换 ALE  : OUT STD_LOGIC;                --8个模拟信号通道地址锁存信号 START  : OUT STD_LOGIC;                --转换开始信号 OE  : OUT STD_LOGIC;                --数据输出3态控制信号 ADDA  : OUT STD_LOGIC;                --信号通道最低位控制信号 LOCK0  : OUT STD_LOGIC;              --观察数据锁存时钟 Q  : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); --8位数据输出 END ADCINT; ARCHITECTURE behav OF ADCINT 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';--当ADDA<='0',模拟信号进入通道IN0;当ADDA<='1',则进入通道IN1 Q <= REGL; LOCK0 <= LOCK ; COM: PROCESS(current_state,EOC)  BEGIN  --规定各状态转换方式 CASE current_state IS          WHEN st0=>ALE<='0';START<='0';LOCK<='0';OE<='0';  next_state <= st1; --0809初始化 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;  END IF ;    --转换未结束,继续等待 WHEN st3=> ALE<='0';START<='0';LOCK<='0';OE<='1'; next_state <= st4;--开启OE,输出转换好的数据 WHEN st4=> ALE<='0';START<='0';LOCK<='1';OE<='1'; next_state <= st0; WHEN OTHERS => next_state <= st0;  END CASE ; END PROCESS COM ; REG: PROCESS (CLK)  BEGIN IF (CLK'EVENT AND CLK='1') THEN current_state<=next_state; END IF; END PROCESS REG ;      -- 由信号current_state将当前状态值带出此进程:REG LATCH1: PROCESS (LOCK) -- 此进程中,在LOCK的上升沿,将转换好的数据锁入 BEGIN IF LOCK='1' AND LOCK'EVENT THEN  REGL <= D ; END IF;
/
本文档为【EDA_VHDL_数据采集电路和简易存储示波器设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索