微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > ad0809转换调试2天没有结果大家帮忙

ad0809转换调试2天没有结果大家帮忙

时间:10-02 整理:3721RD 点击:
ad0809转换调试2天没有结果大家帮忙仿真可以的,但是下载后fpga控制adc0809的信号ale和start都不能产生,是状态机的问题还是其他什么问题。大家帮忙
 ADC0809 工作时序分析
ADC0809 的工作时序START是转换启动信号,高电平有效; ALE是3 位通道选择地址(ADDC、ADDB、ADDA) 信号的锁存信号. 当模拟量送至某一输入端,由3 位地址信号选择,而地址信号由ALE锁存; EOC是转换情况状态信号,当启动转换约100μs后,EOC产生一个负脉冲,以示转换结束;在EOC的上升沿后,若使输出使能信号OE为高电平,则控制
打开三态缓冲器,把转换好的8 位数据结果输送至数据总线.至此ADC0809的一次转换结束了.

   状态机的程序
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity adc0809 is
port(
  reset    : in std_logic;
  clk   : in std_logic;
  eoc   : in std_logic;
  D    : in std_logic_vector(7 downto 0);
  lock  : out  std_logic;
  ale   : out std_logic;
  start  : out std_logic;
  oe    : out std_logic;
--  st   : out  integer range 7 downto 0;
  adda  : out std_logic;
  addb  : out std_logic;
  addc  : out std_logic;  
  data  : out std_logic_vector(7 downto 0)
);
end entity;
architecture func of adc0809 is
    type state_type is (st0, st1, st2, st3, st4, st5, st6);
signal current_state,next_state : state_type:=st0;
    signal lock1 : std_logic;
    signal reg : std_logic_vector(7 downto 0);
begin
adda<='1';
lock<=lock1;
process (current_state, eoc)
begin
   case current_state is
    when st0=>
        ale<='0';
        start<='0';
        oe<='0';
        lock1<='0';
        next_state<=st1;
    when st1=>
     ale<='1';
        start<='0';
        oe<='0';
        lock1<='0';
        next_state<=st2;
    when st2=>
     ale<='0';
        start<='1';
        oe<='0';
     lock1<='0';
        next_state<=st3;
    when st3=>
     ale<='0';
        start<='0';
        oe<='0';
     lock1<='0';
        if(eoc='0')then
        next_state<=st4;
        else
     next_state<=st3;
     end if;
    when st4=>
     ale<='0';
        start<='0';
        oe<='0';
     lock1<='0';
        if(eoc='1')then
        next_state<=st5;
        else
     next_state<=st4;
     end if;
    when st5=>
     ale<='0';
        start<='0';
        oe<='1';
        lock1<='0';
        next_state<=st6;
    when st6=>
     ale<='0';
        start<='0';
        oe<='1';
     lock1<='1';
        next_state<=st0;
    when others=>
        next_state<=st0;
   end case;
end process;
   
    process (clk,reset)
    begin
if(reset='1')then
     current_state<=st0;
elsif (clk'event and clk='1') then
  current_state<=next_state;
  end if;
end process;
process (lock1)
begin
  if (lock1='1' and lock1'event) then
     reg<=D;
  end if;
end process;
data<=reg;
end func;

我也在做这个。过不去- -

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top