在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3014|回复: 2

{S-O-S}FPGA控制ADC0809??

[复制链接]
发表于 2008-3-18 08:29:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
利用FPGA控制ADC0809完成采样,有问题结果,下面是程序:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity adc is
port (   d   : in  std_logic_vector(7 downto 0) ; ----ADc0809的结果输入FPGA
        fuwei : in  std_logic;                     ----复位信号
        adclk : in  std_logic;                     ---时钟   
          ale : out std_logic;                     ---地址锁存   
        start : out std_logic;                     ---开始信号  
          eoc : in  std_logic;                     ---转换信号   
          oe  : out std_logic;                     --oe是输出使能信号,
        lock0 : out std_logic;                     ---lock和lock0是oe的copy,用于下一级的
         adda : out std_logic;                     --地址信号
          q   : out std_logic_vector(7 downto 0) );----ADC转换结果
end adc;
architecture str of adc is
   signal lock:std_logic;
   signal current_state:std_logic_vector(4 downto 0);
   constant st0:std_logic_vector(4 downto 0):="00000";
   constant st1:std_logic_vector(4 downto 0):="01100";
   constant st2:std_logic_vector(4 downto 0):="10000";
   constant st3:std_logic_vector(4 downto 0):="00011";
begin
   adda<='0';                 ----在调试是应使用 way0(addb,addc已接地)
   ale<=current_state(3);start<=current_state(2);    --ale是地址锁存信号
   oe<=current_state(1);lock <=current_state(0);lock0<=current_state(0);
                                                         
------state控制进程
com: process(eoc,adclk,fuwei)
     BEGIN
       if fuwei='1' then current_state<=st0;     ----复位状态
       elsif( adclk'event  and adclk='1') then
          case current_state is                  ---判断current_state
          when st0 => current_state<=st1;
          when st1 => current_state<=st2;
          when st2 =>  if eoc='1' then  
                          current_state<=st3;
                       else current_state<=st2;
                       end if;
          when st3 => current_state<=st0;
          when  others=>current_state<=st0;
          end case;
      end if;
      end process com;
latch:process(lock)                           ----输出转换结果
       begin
        if lock'event and lock='1' then
          q<=d;
        end if;
     end process latch;
end  str;
 楼主| 发表于 2008-3-18 08:38:21 | 显示全部楼层

上一帖的图片

这是用SignaltapII仿真得到的图片,错误点就是四个状态位执行了两次,ale,start,oe也有两个高脉冲,找了好久,不知道错误原因啊.大家帮忙侃侃!
未命名.JPG
发表于 2009-8-11 16:15:15 | 显示全部楼层
好!!!!!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-23 01:23 , Processed in 0.026359 second(s), 11 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表