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

 
 
 
Reply to this topicStart new topic
> MAXII + SRAM, Помогите реализовать
zombi
сообщение Sep 28 2015, 17:48
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



К EPM570 подключены три внешние шины адреса ARA,ARB,AWA, одна шина данных DW и внешняя SRAM со своими шинами адреса, данных и управления WRRAM,OERAM.

Нужно циклически выполнять следующее:

1. прочитать содержимое SRAM по адресу ARA и выдать на пины DA
2. прочитать содержимое SRAM по адресу ARB и выдать на пины DB
3. состояние на шине DW записать по адресу AWA.

Всё это нужно сделать за три такта входной частоты 100 MHz.

Нарисовал схему в граф редакторе.
А в симуляторе вижу что это работать точно не будет.
Шина адреса sram (ARAM) пляшет во время переключения.
Сигналы OERAM и WRRAM имеют разную задержку.
Задний фронт WRRAM вообще появляется на пине позже чем переключается шина данных DRAM на ввод.

Посоветуйте что исправить. Или вообще всё переделать.
Время доступа SRAM 8 нс.
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Corner
сообщение Sep 28 2015, 19:19
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 072
Регистрация: 11-12-12
Пользователь №: 74 815



Цитата(zombi @ Sep 28 2015, 21:48) *
К EPM570 подключены три внешние шины адреса ARA,ARB,AWA, одна шина данных DW и внешняя SRAM со своими шинами адреса, данных и управления WRRAM,OERAM.

Нужно циклически выполнять следующее:

1. прочитать содержимое SRAM по адресу ARA и выдать на пины DA
2. прочитать содержимое SRAM по адресу ARB и выдать на пины DB
3. состояние на шине DW записать по адресу AWA.

Всё это нужно сделать за три такта входной частоты 100 MHz.

Нарисовал схему в граф редакторе.
А в симуляторе вижу что это работать точно не будет.
Шина адреса sram (ARAM) пляшет во время переключения.
Сигналы OERAM и WRRAM имеют разную задержку.
Задний фронт WRRAM вообще появляется на пине позже чем переключается шина данных DRAM на ввод.

Посоветуйте что исправить. Или вообще всё передать.
Время доступа SRAM 8 нс.

Абсолютно справедливо-работать не будет. Задержка между клоком и данными на выход 6... 10 нс, задержка в памяти 8 нс, задержка на вход 3... 5 нс. Итого, для чтения нужно минимум 3 такта на один адрес. И это если разводка точка-точка и на шине только ОЗУ. Для записи приблизительно 5 из похожих соображений. Нужна стейт машина для фиксации нахождения в режиме и куча флагов типа готов-поехали-принял. Иначе никак.

Сообщение отредактировал Corner - Sep 28 2015, 19:19
Go to the top of the page
 
+Quote Post
Iptash
сообщение Sep 28 2015, 19:32
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 613
Регистрация: 2-09-08
Из: г.Набережные Челны
Пользователь №: 39 936



Может шина адреса одну, с выбором чипа. По переднему фронту CLK выставляешь адрес с выбором чипа, по заднему фронту считываешь данные
Go to the top of the page
 
+Quote Post
zombi
сообщение Sep 28 2015, 23:18
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(Corner @ Sep 28 2015, 22:19) *
...Итого, для чтения нужно минимум 3 такта на один адрес.

Спасибо. Понятно. Думал за 1 такт можно ухитриться, но видать нет (
Go to the top of the page
 
+Quote Post
EvgenyNik
сообщение Sep 29 2015, 06:51
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 597
Регистрация: 24-05-06
Из: г. Чебоксары
Пользователь №: 17 402



Цитата(zombi @ Sep 29 2015, 02:18) *
Спасибо. Понятно. Думал за 1 такт можно ухитриться, но видать нет (

Попытка - не пытка.
Прикрепленное изображение

Код
module sram
#(    parameter wdata = 8,
    parameter waddr = 10    )
(    input clk,
    input    [waddr-1:0]    ara_i, arb_i, awa_i,
    input    [wdata-1:0] dw_i,
    output    reg    [wdata-1:0]    da_or, db_or,
    inout    [wdata-1:0]    dram_io,
    output    reg    [waddr-1:0]    aram_or,
    output    oeram_o,
    output    wram_o,
    output    reg    dataready_or
);
    assign    oeram_o = 0;
    assign    dram_io = (we_r ? rwram : {waddr{1'bz}});
    assign    wram_o = (we_r ? ~clk | wramag_r : 1'b1);

    reg    [wdata-1:0] rwram;
    reg    we_r;
    reg    wramag_r;
    reg    [1:0]    stage_r;
    
    always @ (posedge clk)
        begin
        if (stage_r == 2'b10)    stage_r <= 0;
        else    stage_r <= stage_r + 1;
        
        case    (stage_r)
            2'b00:    begin
                    aram_or <= ara_i;
                    we_r <= 0;
                    dataready_or <= 0;
                    end
            2'b01:    begin
                    aram_or <= arb_i;
                    da_or <= dram_io;
                    rwram <= dw_i;
                    end
            2'b10:    begin
                    aram_or    <= awa_i;
                    db_or <= dram_io;
                    we_r <= 1;
                    dataready_or <= 1;
                    end
        endcase
        end    
        
    always    @ (negedge clk)
        begin
        if (stage_r == 0)    wramag_r <= 1; // это нужно, чтобы избавиться от глитча при возврате из режима записи (см. формирование wram_o)
        else    wramag_r <= 0;
        end
endmodule

С времянками, конечно, получается вольно и лишь бы сама ОЗУшка успевала.


--------------------
Почему разработчики систем повышенной надёжности плохо справляются с простыми проектами? :)
Go to the top of the page
 
+Quote Post
zombi
сообщение Sep 29 2015, 08:58
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(EvgenyNik @ Sep 29 2015, 09:51) *
Попытка - не пытка.


Спасибо. В языках не силён (.
Если бы это в виде блок-схемы изобразить.
Может кто то помочь?
Go to the top of the page
 
+Quote Post
EvgenyNik
сообщение Sep 29 2015, 09:12
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 597
Регистрация: 24-05-06
Из: г. Чебоксары
Пользователь №: 17 402



Создайте графический символ этому файлу и вставьте в свой проект. Может, ещё и не заработает. Чего зря рисовать то?


--------------------
Почему разработчики систем повышенной надёжности плохо справляются с простыми проектами? :)
Go to the top of the page
 
+Quote Post
zombi
сообщение Sep 29 2015, 16:01
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(EvgenyNik @ Sep 29 2015, 12:12) *
Создайте графический символ этому файлу и вставьте в свой проект. Может, ещё и не заработает. Чего зря рисовать то?

Сделал. Все вроде работает но на чипе с speed grade 4.
Понятно что для speed grade 5 тактовую понижать нужно.

Код
    always    @ (negedge clk)
        begin
        if (stage_r == 0)    wramag_r <= 1; // это нужно, чтобы избавиться от глитча при возврате из режима записи (см. формирование wram_o)
        else    wramag_r <= 0;
        end

Подскажите вот это как в граф редакторе на триггере реализовать?
Так как на прикреплённой картинке или как то иначе?
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 29 2015, 17:07
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



вы можете код синтезнуть, а потом в технологик схем вьювере поглядеть как оно реализуется, на каких элементах и как соединено%)
Go to the top of the page
 
+Quote Post
EvgenyNik
сообщение Sep 30 2015, 08:39
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 597
Регистрация: 24-05-06
Из: г. Чебоксары
Пользователь №: 17 402



Цитата(zombi @ Sep 29 2015, 19:01) *
Код
    always    @ (negedge clk)
         begin
         if (stage_r == 0)    wramag_r <= 1; // это нужно, чтобы избавиться от глитча при возврате из режима записи (см. формирование wram_o)
         else    wramag_r <= 0;
         end

Подскажите вот это как в граф редакторе на триггере реализовать?

Фактически, здесь написано: всегда при отрицательном фронте clk присваивать wramag=1, если stage равен 0 и, если иначе, то обнулять этот wramag.
Так и делаем:
1. инвертируем clk (надо же по отрицательному фронту защёлкивать) и подаём на тактовый вход DFF
2. биты stage заводим на ИЛИ-НЕ и подаём на вход данных D
3. защёлкивам в DFF
4. снимаем результат с Q
Прикрепленное изображение

p.s. А зачем Вам манипуляции с OE и CS? Если используется один чип памяти и его порты работают через ПЛИС, то пусть по умолчанию всегда будет выбран и всегда в режиме выдачи данных с текущего адреса. Ему (чипу ОЗУ) всё равно, а Вам - экономия ресурсов на ПЛИСке.


--------------------
Почему разработчики систем повышенной надёжности плохо справляются с простыми проектами? :)
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 14:38
Рейтинг@Mail.ru


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