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

 
 
> 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
 
Start new topic
Ответов
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
zombi
сообщение Sep 28 2015, 23:18
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 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



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

 


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


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