реклама на сайте
подробности

 
 
> ПЛИС + SRAM, посоветуйте
%-)
сообщение Nov 27 2009, 00:49
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 118
Регистрация: 13-09-09
Пользователь №: 52 331



есть порт для ввода данных из хост-процессора в ПЛИС (запись в ПЛИС)

к ПЛИС подключена SRAM

нужно организовать запись в SRAM через ПЛИС.
при этом адрес на память выставляет сама ПЛИС.

сделано вот так:

Код
SRAM_D<=Port_D;      --линии данных порта ПЛИС соединяем с линиями данных SRAM
SRAM_A<=Address;    --линии адреса SRAM соединены со счётчиком ПЛИС
SRAM_CS<=Port_CS;  --линия выбора SRAM соединена с линией порта ПЛИС
SRAM_OE<='1';          --чтение не используется
SRAM0_WE<=Port_WE; --линия разрешения записи SRAM соединена с линией порта ПЛИС

process(Port_WE) --увеличение адреса на 1
begin
if falling_edge(Port_WE) then
  if Port_CS='0' then
   if Address=1000 then
    Address<=(others => '0');
   else
    Address<=Address+1;
   end if;
  end if;
end if;
end process;


По времянкам.

Tsetup=20нс
Thold=20нс
Twrite=20нс

Тем не менее, в силу каких-то обстоятельств(возможно когда на линии данных 0xFFFF) ИНОГДА происходит пропуск увеличения адреса - он как бы тот же.

Прошу покритиковать и обсудить код. А также причины, вызвавшие сей эффект

Сообщение отредактировал %-) - Nov 27 2009, 01:24
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
%-)
сообщение Dec 7 2009, 02:06
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 118
Регистрация: 13-09-09
Пользователь №: 52 331



сделал синхронную нарезку от внешнего кварцевого генератора 50мгц

автомат дышит, но по-прежнему иногда ложно срабатывают регистры.

Код
process(Clk)
begin
if rising_edge(Clk) then
  CE<=Port_CE;
  WE<=Port_WE;
  A<=Port_A;
  D<=Port_D;
end if;
end if;

process(Clk)
begin
if rising_edge(Clk) then
  if State='0' then
   if CE='0' and WE='0' then
    if A='0' then --запись в регистры
     case D(15 downto 12) is
      when "0000" =>
       Register0<=D(7 downto 0);
. . .
      when "0111" =>
       Register7<=D(7 downto 0);
     end case;
    else --увеличение адреса
     WriteAddr<=WriteAddr+1;
    end if;
    State<='1'; --следующее состояние - дождёмся завершения передачи
   end if;
  else
   if CS='0' and WE='1' then
    State<='0';
   end if;
  end if;
end if;
end process;    

process(Clk)
begin
if rising_edge(Clk) then
  SRAM_CE<=CE;
  SRAM_WE<=WE;
  SRAM_A<=WriteAddr;
  SRAM_D<=D;
end if;
end process;


Это позволило исключить ложные записи в память, но регистры глючат - к ним не обращаются, а они срабатывают

Чего ещё не хватает в коде? 1111493779.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- %-)   ПЛИС + SRAM   Nov 27 2009, 00:49
- - Builder   Цитата(%-) @ Nov 27 2009, 04:49)...   Nov 27 2009, 02:22
|- - %-)   Цитата(Builder @ Nov 27 2009, 05:22) Врем...   Nov 27 2009, 03:25
|- - Builder   Цитата(%-) @ Nov 27 2009, 06:25)...   Nov 27 2009, 08:15
- - BSV   Нужно в каждом цикле обращения выполнять операции ...   Nov 27 2009, 05:08
|- - %-)   Цитата(BSV @ Nov 27 2009, 08:08) Нужно в ...   Nov 27 2009, 06:14
- - sazh   Цитата(%-) @ Nov 27 2009, 03:49)...   Nov 27 2009, 06:56
- - %-)   проблема почти выявлена. инкремент адреса иногда ...   Nov 27 2009, 09:02
|- - des00   Цитата(%-) @ Nov 27 2009, 03:02)...   Nov 28 2009, 10:01
|- - alevnew   Цитата(%-) @ Nov 27 2009, 15:02)...   Dec 1 2009, 07:06
|- - %-)   Цитата(alevnew @ Dec 1 2009, 11:06) По мо...   Dec 1 2009, 07:11
|- - sazh   Цитата(%-) @ Dec 1 2009, 10:11) ...   Dec 1 2009, 12:02
- - %-)   значит так. 1) буфер чисто на данные ставить нель...   Nov 29 2009, 04:25
|- - sazh   Цитата(%-) @ Nov 29 2009, 07:25)...   Nov 29 2009, 09:28
- - %-)   Решил вникнуть в синхронный дизайн и сделать обраб...   Dec 1 2009, 02:28
- - %-)   я в стадии крайнего офонарения!!! про...   Dec 1 2009, 13:47
- - des00   Цитата(%-) @ Dec 6 2009, 20:06) ...   Dec 7 2009, 04:23
- - %-)   Цитата(des00 @ Dec 7 2009, 08:23) для шин...   Dec 7 2009, 05:08


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 15:00
Рейтинг@Mail.ru


Страница сгенерированна за 0.01435 секунд с 7
ELECTRONIX ©2004-2016