Проблемы с доступом к оперативной памяти сотовой связи на Nexys 3 FPGA

Я пытаюсь использовать Cellular RAM на Nexys 3 FPGA. На данный момент у меня есть 8-битный файл .wav, хранящийся в ОЗУ (я несколько раз проверял, что ОЗУ работает с Adept). Другие части конструкции FPGA работают, поскольку я получаю другие выходные данные, но никаких данных. Я не понимаю, почему это происходит, потому что данные должны храниться в байтовом формате, поэтому именно так к ним следует обращаться, а затем обрабатывать.

Ниже приведены фрагменты моего кода, используемого для доступа и чтения данных из ОЗУ. Программа доступа к памяти обращается к ОЗУ, а затем возвращает два 8-битных числа для другой обработки, которая происходит (которая работает сейчас).

--Toplevel Buses    
MemAdr              :    out std_logic_vector (26 downto 1); -- memory address
MemDB               : in     std_logic_vector (15 downto 0)  -- memory address

--Memory Access
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

library UNISIM;
use UNISIM.VComponents.all;

entity mem_access is

    port(
    o_datain_r        :    out std_logic_vector (7 downto 0); -- 8 bit from memory
    o_datain_l        :    out std_logic_vector (7 downto 0); -- 8 bit from memory
    o_addressbus      :    out std_logic_vector (26 downto 1);

    i_databus         : in     std_logic_vector (15 downto 0);
    i_sampleclock     : in     std_logic;
    i_clock           : in     std_logic;
    i_reset           : in     std_logic    

    );
end mem_access;

architecture Behavioral of mem_access is

    signal clockpulses       : integer ;
    signal counter           : std_logic_vector (24 downto 0);
    signal channel_select    : std_logic; 

begin

--*******************************************************--
data_access: process (i_sampleclock, i_reset, clockpulses)
begin
    if (i_reset = '1') then
        channel_select <= '0';
        o_addressbus   <= (others => '0');
        o_datain_r     <= X"00";
        o_datain_l     <= X"00";
        counter        <= (others => '0');

    elsif (clockpulses = 0) then
        channel_select <= '0';
        o_addressbus   <= channel_select & counter;

    elsif (clockpulses = 75) then
        o_datain_r     <= i_databus (7 downto 0);

    elsif (clockpulses = 100) then
        channel_select <= '1';
        o_addressbus   <= channel_select & counter;

    elsif (clockpulses = 175) then  
        channel_select <= '0';
        o_addressbus   <= channel_select & counter;

    elsif (clockpulses = 275) then 
        o_datain_l     <= i_databus (7 downto 0);

    elsif (rising_edge(i_sampleclock)) then
        counter <= counter + '1';

    elsif (counter = "1111111111111111111111111") then
        counter <= (others => '0');

    end if;

end process;
--*******************************************************--
clkpulses_counter: process (i_clock, i_reset, i_sampleclock)
begin

    if (i_reset = '1') then 
        clockpulses <= 0;
    elsif (rising_edge(i_clock)) then
        clockpulses <= clockpulses + 1;     
    end if;

    if (rising_edge(i_sampleclock)) then
        clockpulses <= 0;
    end if;

end process;
--*******************************************************--

end Behavioral;

person srohrer32    schedule 20.09.2013    source источник
comment
См. КАК мне записать из Spartan6 во внешнюю сотовую память Micron на плате Nexys3 FPGA? То, что никто не оказал помощь LuckyLuc, означает, что вы вряд ли найдете здесь помощь. Здесь есть те, кто мог бы помочь, но, вероятно, не имеет доступа к аппаратной платформе. Попробуйте посмотреть контроллер памяти по ссылке в комментарии там. В противном случае помощь потребует непосредственного опыта или анализа конструкции.   -  person    schedule 20.09.2013
comment
Я нашел здесь пример со схемами и исходным кодом: embsi.blogspot.com/2013/01/ Однако это для асинхронного режима, поэтому я не знаю, будет ли он достаточно быстрым.   -  person LuckyLuc    schedule 27.09.2013


Ответы (1)


Я не смог заставить это работать. Вероятно, это связано с тем, что я не смог найти правильный способ включения Cellular RAM. Для будущей работы обязательно изучите все контакты включения, необходимые для работы Cellular RAM, поскольку это внешний компонент.

person srohrer32    schedule 02.04.2014