Перейти к содержанию
    

Помогите с блочной памятью

Сдаеться мне что афтор путает пведенческое описание и синтезируемой подмножество.

Да еще и пытаеться сделать все с "наскока". Настоятельно рекомендую все забросить взять книгу HDL Chip Design и пока ее не изучите (3-5 дней) к работе не прикасаться.

Узнаете много нового и критически оцените ваш дезайн

Абсолютно согласен с des00. Уважаемый Duke, ну один, ну два листинга ещё проанализировать можно, а дальше, Вы что же будете продолжать нас кормить этими исходниками, да ещё всё большего и большего размера? Действительно почитайте книги. У нас на форуме, в соответствующем разделе, я выложил достаточное количество книг по VHDL в открытом виде, причём некоторые на русском языке - не ленитесь, потратьте пару дней и почитайте их - это полезно. А уже потом, если остануться вопросы - пишите, поможем.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

COMPONENT alg

PORT (

y : in std_logic_vector (11 DOWNTO 0);

clkk : in std_logic;

x1 : out std_logic_vector (11 DOWNTO 0);

x2 : out std_logic_vector (11 DOWNTO 0)

);

END COMPONENT;

 

Откуда взялись Х1 и Х2.

 

Компонент alg был ранее описан как

 

entity alg is
       Port ( y : in std_logic_vector(11 downto 0);
       clkk: in std_logic;
       x : out std_logic_vector(11 downto 0)
       );
end alg;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за разъяснения! понял свои ошибки, просто не так всё быстро понимаю как надо т.к. по специальность я механик а тут на тебе для дела с этим надо рабираться, тяжело когда не электрик, а пытаюсь решить исходя из знаний программирования!

Ошибки в коде до просто опечатка т.к. код модернизировал и проверял и забыл вернуть обратно.

Больше кода и листингов таких не будет!

 

Вот вопрос

код для инициализации значений ячеек памяти

--synopsys translate_off

generic(

init_00: bit_vector:=X"1111111111111111";

init_01: bit_vector:=X"1111111111111111";

);

--synopsys translate_on

 

располагать в ентити или где (у меня Ксилинкс 5.2 и загрузку данных из файла не поддерживает)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уважаемый Duke, вся инициализация должна проходить по сигналу RESET, надеюсь он у Вас есть в системе. Инициализация в каком-то другом месте, кроме области действия сигнала RESET, является плохим стилем проектирования, и может вызвать ошибки при синтезе и/или разводки схемы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

evgeniy_s в теле модуля памяти я его написал правда на схеме у отвда памяти RST ничего не подведено, т.е. я так понял что в коде писать не надо система сама сбрасывает её.

добавление кода --

generic (

INIT_00 : bit_vector := X"11111111111111111111111111";

INIT_01 : bit_vector := X"11111111111111111111111111";

INIT_02 : bit_vector := X"11111111111111111111111111";

INIT_03 : bit_vector := X"11111111111111111111111111");

--

не выдаёт ошибок всё синтезируется а вот в модел симе я сразу пытаюсь считать занчения начиная с 0-го адреса и выдаёт все нули.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уважаемый Duke, Вы бы почитали какой-нибудь мануальчик по работе с блочной памятью или хотябы просто с памятью, можно даже что-нибудь из документации к вашему Xilinx'у, а то у Вас какое-то странное представление о памяти. Это регистры надо "обресечивать", а динамическую память не надо. Вообще под ресетом памяти подразумевается всего лишь перевод внутреннего выходного мультиплексора в определённое состояние (например, на Virtex II Pro на выходе Block SelectRAM появляется значение константы SRVAL="0101"), при этом содержимое памяти не меняется. Поэтому и сигнала "RESET" как такового в памяти нет, а есть сигнал Synchronous Set/Reset (SSR) - синхронный сброс, по активному уровню которого при наличие фронта тактового сигнала, происходит описанное выше действие.

Не знаю, что за память у Вас, но думаю, что она должна работать примерно также. Если Вы конечно не путаете её с каким-нибудь регистровым файлом, который действительно надо обресечивать.

P.S. Поскольку всё вышесказанное является стандартом при работе с оперативной памятью (да и не только с ней), то Вам следует знать, что для определения состояния памяти существует механизм флагов. В самом простом случае это один флаг V (Valid) - действительность данных, который выставляется в случае записи блока данных в соответствующую ячейку памяти и информирует всех, что данный блок можно использовать (естественно количество флагов зависит от вашего разбиения памяти на ячейки).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уважаемый evgeniy_s

В тех примерах что вы давали я полностью разобрался и в теории тоже немного. Всё работает записываю и считываю из памяти нормально. Просто щас я пытаюсь утановить значения ячеек памяти как указанов в книге (Основы ПЛИС Xillinx Зотов В.Ю.) и там сказано что для инициализации содержимого памяти нужно указать параметр

generic (

INIT_00 : bit_vector := X"11111111111111111111111111");

Просто чем дольше я с ней работаю тем больше пухнет голова уже.

Мнебы просто пример рабочий память с выставленными начальными значениями её ячеек (любые значения) и вопросов у меня не будет точно. Я наверно просто не правильно выражаюсь т.к. пытаюсь выразится с точки зрения программирования а не электроники.

Заранее спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

О ввеликий метод тыка!

Спасибо всем за консультации хоть я и не научился вручную инициализировать память! Зато случайно вместо того что я ломал голову как присоединить VHDL файл корегена сгенерированного оказалось что просто надо присоединять к проекто .xco файл и пока всё работает как надо! Но если посоветуете как вручную без корегена инициализировать значения памяти то буду очень признателен!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если память (моя а не ПЛИС :) ) не изменяет, то помимо прописанного generic(INIT_00...) в entity необходимо прописать еще generic map(...) вместе с port map при подключении компонента памяти.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...