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

 
 
 
Reply to this topicStart new topic
> Quartus and Ram, EAB?
Vain
сообщение Jun 21 2006, 14:56
Сообщение #1





Группа: Участник
Сообщений: 9
Регистрация: 24-02-06
Пользователь №: 14 644



Джентельмены! Кто подскажет?
Есть своя память, написаная на VHDL без использования параметризированных модулей. Как заставить Quartus разместить эту память в ячейках EAB? Использование параметризированных модулей не предлагать.
Go to the top of the page
 
+Quote Post
Rundll
сообщение Jun 23 2006, 11:36
Сообщение #2


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

Группа: Свой
Сообщений: 181
Регистрация: 24-05-06
Из: Россия, Таганрог
Пользователь №: 17 409



Я ищу ответ на этот вопрос около 4 дней и никто мне так внятно и не ответил на него!
Ув. знатоки, вылажите побольше инфы на эту тему, уж больно распространённой она становится. Как правильно и грамматно создать VHDL-описание SRAM, так чтобы, ну не все конечно, а хотя бы самые распрастранённые САПР видели её как встроенную в ПЛИС память,а не как LUT. У меня получалось делать такое описание, и действительно такие САПР как Xilinx, MAX, FPGAadv. видели её как EAB пример такого описания я могу дать:

Код
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;

ENTITY mem_test IS
        generic (DATA_WIDTH: natural:=16;  
                     ADRESS_WIDTH: natural:=8);
        port(DATA:     in std_logic_vector(DATA_WIDTH-1 downto 0);
        WRADRESS:        in std_logic_vector(ADRESS_WIDTH-1 downto 0);
        RDADRESS:        in std_logic_vector(ADRESS_WIDTH-1 downto 0);
        WRITE_EN:        in std_logic;
        CLK:            in std_logic;
        QUIT:            out std_logic_vector(DATA_WIDTH-1 downto 0));

END mem_test;
ARCHITECTURE memory_ram OF mem_test IS
type MEMORY_BLOCK_1 is array ((2**ADRESS_WIDTH)-1 downto 0) of std_logic_vector(DATA_WIDTH-1 downto 0); --MEMORY TYPE

SIGNAL    SIG_DATA:     std_logic_vector(DATA_WIDTH-1 downto 0);
SIGNAL    SIG_WRADR:    std_logic_vector(ADRESS_WIDTH-1 downto 0);    
SIGNAL    SIG_RDADR:    std_logic_vector(ADRESS_WIDTH-1 downto 0);
SIGNAL    SIG_WE:        std_logic;
BEGIN

process (CLK) begin
    if CLK'event and CLK='1' then
        SIG_DATA<=DATA;
        SIG_WRADR<=WRADRESS;
        SIG_RDADR<=RDADRESS;
        SIG_WE<=WRITE_EN;
    end if;
end process;


process (SIG_DATA,SIG_WRADR,SIG_RDADR,SIG_WE)
variable SRAM: MEMORY_BLOCK_1;
begin    
    if    SIG_WE='1' then
        SRAM(conv_integer(SIG_WRADR)):=SIG_DATA;
    end if;
    QUIT<=SRAM(conv_integer(SIG_RDADR));
end process;
END memory_ram;
[/quote]


Память синхронная, дуал порт, как я понимаю. Но результаты моделирования, увы, огорчают! Хотя ИМХО с точки зрения логики всё верно. Если во 2-ом процессе пихнуть клок, память тут-же пихается на триггерах sad.gif При временном моделировании возникают проблемы, над решением которых собственно и встает вопрос. Если есть желание помочь мне и многим другим, я могу выложить результаты моделирования (кому интересно). Многие могут меня закритиковать за такое описание, но покрайней мере это видится как EAB!

Буду очень благодарен за всю полученную информацию! Очень нуждаюсь в помощи профессионалов!

С уважением Никита


--------------------
Не сломаешь - не поймешь!
Go to the top of the page
 
+Quote Post
des00
сообщение Jun 23 2006, 12:37
Сообщение #3


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Чуваки че вы х...й маетесь, сложно взять документацию на синтезатор и прочтать как правильно описывать память ?

Более того сложно пройтись поискаом по теме описания памяти на этом форуме ?

еще более того сложно посмотреть на описание блочной памяти вашего семейства фпга и описать память правильно ? (это в первую очередь к вам Rundll относиться )

Прежде всего разбиритесь что вы пишете, и только, если вы уверены что у вас все правильно и источники информации говорят об этом пишите вопросы на форум!!!

PS. Если кого обидел приношу извинения.


--------------------
Go to the top of the page
 
+Quote Post
Rundll
сообщение Jun 23 2006, 15:18
Сообщение #4


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

Группа: Свой
Сообщений: 181
Регистрация: 24-05-06
Из: Россия, Таганрог
Пользователь №: 17 409



Цитата(des00 @ Jun 23 2006, 16:37) *
PS. Если кого обидел приношу извинения.


Можно было бы немного помягче cool.gif

Я обчитался этой документации! Грёбаный LPM я юзать не хочу, в ксилинсе использовать кор ген тоже. Остальная документация сторонних авторов, представляет описание, которое ну уж точно никуда не годится и является примитивной, например это с сайта Алтеры:

Код
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;

ENTITY ram IS
    GENERIC
    (
        ADDRESS_WIDTH    : integer := 4;
        DATA_WIDTH    : integer := 8
    );
    PORT
    (
        clock            : IN  std_logic;
        data            : IN  std_logic_vector(DATA_WIDTH - 1 DOWNTO 0);
        write_address            : IN  std_logic_vector(ADDRESS_WIDTH - 1 DOWNTO 0);
        read_address            : IN  std_logic_vector(ADDRESS_WIDTH - 1 DOWNTO 0);
        we            : IN  std_logic;
        q            : OUT std_logic_vector(DATA_WIDTH - 1 DOWNTO 0)
    );
END ram;

ARCHITECTURE rtl OF ram IS
    TYPE RAM IS ARRAY(0 TO 2 ** ADDRESS_WIDTH - 1) OF std_logic_vector(DATA_WIDTH - 1 DOWNTO 0);

    SIGNAL ram_block : RAM;
BEGIN
    PROCESS (clock)
    BEGIN
        IF (clock'event AND clock = '1') THEN
            IF (we = '1') THEN
                ram_block(to_integer(unsigned(write_address))) <= data;
            END IF;

            q <= ram_block(to_integer(unsigned(read_address)));
        END IF;
    END PROCESS;
END rtl;



Вот вы, des00, сами как SRAM описываете или вы используете мегафункции?


P.S. поиск по форуму выдал мне 40 топиков из них 3 близко тему, которая так и нераскрыта до конца smile.gif


--------------------
Не сломаешь - не поймешь!
Go to the top of the page
 
+Quote Post
des00
сообщение Jun 23 2006, 15:57
Сообщение #5


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Rundll @ Jun 23 2006, 10:18) *
P.S. поиск по форуму выдал мне 40 топиков из них 3 близко тему, которая так и нераскрыта до конца smile.gif


соседняя ветка 4-ый топик сверху

http://electronix.ru/forum/index.php?showtopic=16946&st=15

там приведен пример асинхронной двухпортовки на переменных (не совсем корректный конечно, но для тех кто гордо несет флаг чистого ВХДЛ)

7 ой топик на той же странице под великолепным названием, который НИКАКОГО отношения к описанию памяти в квартусе не имеет.

память в VHDL, VHDL - Quartus
http://electronix.ru/forum/index.php?showt...%E0%EC%FF%F2%FC

все это ищеться даже без поиска

затем xilinx/doc/useenglish/books/docs/xst.pdf -> HDL Coding Techniques -> RAMs/ROMs -> и тут все что душе угодно
synplicity/fpga_8x/doc/reference.pdf -> VHDL Language Support-> RAM Inference

подозреваю что подобное есть и в доках на квартус

Желаю удачи


--------------------
Go to the top of the page
 
+Quote Post
Rundll
сообщение Jun 23 2006, 17:44
Сообщение #6


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

Группа: Свой
Сообщений: 181
Регистрация: 24-05-06
Из: Россия, Таганрог
Пользователь №: 17 409



Примите мои искренние благодарности, за необходимую информацию! cheers.gif


ссылка на доки ксилинса великолепна, и несёт в себе интереснейшую документацию! Спасибо!

Сообщение отредактировал Rundll - Jun 23 2006, 17:55


--------------------
Не сломаешь - не поймешь!
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 07:03
Рейтинг@Mail.ru


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