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

Блин, они ж закоментированы! - как они могут влиять на что-то?

В этом вся фишка. За счет применения "synthesis read_comments_as_HDL on/off" этот код видит только квартус.

 

это желание перехода от FPGA к ASIC,

Флаг в руки:). Слов нет : "Сходи туда, не знаю куда. Сделай то, не знаю что."

Вам необходимо выделить из схемы необходимые для работы синхронной памяти сигналы. Память обязательно вынести из схемы в самостоятельные единицы для синтеза!

Элемент LCELL необходимо использовать только для управления упаковкой логических элементов в LUT, и НИКАКИХ задержек. Т.е LCELL(и ему подобных) в вашей схеме вообще не должно быть.

Источником сигналов, используемых в качестве тактовых должны быть триггеры.

 

 

а вот у меня тут вопрос организовался:)... а что такое ЛЦЕЛЛ в данном контексте? как управлять им упаковкой в ЛУТ, и как на нем организовывать задержки?

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


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

а вот у меня тут вопрос организовался:)... а что такое ЛЦЕЛЛ в данном контексте? как управлять им упаковкой в ЛУТ, и как на нем организовывать задержки?

 

LCELL - это такой стандартный компонент в кварусе, который никакой логики в себе не несет. Просто вход передает на выход, но, так как в железе на прохождение сигнала в любом компоненте требуется какое-то время, то, следовательно, выходной сиганла сдвигается относительно входного на небольшое время (порядка 3нс вроде). В нашем исходном проекте, чтоб организовать большую задержку, используется несколько последовательно соединенных lcell'ов (соответсвенно общая задержка будет равна 3нс*N, N-кол-во lcell'ов). А про ЛУТ я ничего не знаю:)

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


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

а вот у меня тут вопрос организовался:)... а что такое ЛЦЕЛЛ в данном контексте? как управлять им упаковкой в ЛУТ, и как на нем организовывать задержки?

 

LCELL - это такой стандартный компонент в кварусе, который никакой логики в себе не несет. Просто вход передает на выход, но, так как в железе на прохождение сигнала в любом компоненте требуется какое-то время, то, следовательно, выходной сиганла сдвигается относительно входного на небольшое время (порядка 3нс вроде). В нашем исходном проекте, чтоб организовать большую задержку, используется несколько последовательно соединенных lcell'ов (соответсвенно общая задержка будет равна 3нс*N, N-кол-во lcell'ов). А про ЛУТ я ничего не знаю:)

 

 

что то мне подсказывает что это хороший стиль разработки...

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


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

что то мне подсказывает что это хороший стиль разработки...

Ну да, странновато слегка :) . Однако, нам что дали - с тем и приходится работать...

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


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

LCELL primitives provide the most control. Analysis & Synthesis minimizes all logic that drives an LCELL primitive so that the logic fits into a single logic cell. LCELL primitives are always implemented in a logic cell, and they are never removed from the project even if they are fed by a single input. If the project is minimized so that an LCELL primitive is fed by a single input, you can use a SOFT primitive instead of an LCELL primitive so that the SOFT primitive is removed during logic synthesis.

Это основное назначение.

 

А задержка "порядка 3нс вроде" - побочный эффект. Цифра с потолка?

У меня средняя задержка получилась примерно 2.534нс/LCELL для цепочки из 100 LCELL. Разнизца с вашей цифрой указавает на то, что эти данные зависят от результатов разводки на кристалле и пр. факторов. Причем эта задержка может быть и меньше, т.к. средства временного анализа дают наихудший результат, которй будет меняться от температуры, напряжения питания и пр. физ. воздействий.

 

Добавлено:

По документации задержка на LCELL может составлять примерно : tLUT+tCOMB=1.7+0.6=2.3. И как уже отмечалось выше - нормируется только верхний предел.

Если Altera в очередной партии "ускорит" микросхему , а ваше устройство не сможет работать, то в этом будет виноват разработчик, потому что паспортные данные микросхемы не нарушаются.

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


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

Прошу прощения.

 

Скажите пожалуйста, мне тоже необходимо описать SRAM желательно асинхронную, хотя синхронная тоже подойдёт. У меня таже проблема с нераспознованием памяти от логических элементов. Юзаю синтезатор Leonardo Spectrum. В отличие от проекта товарища badwm, я абсолютно ничем не ограничен, в плане использования других библиотек в своем проекте.

 

Был бы очен признателен вам за информацию о LMP_RAM_DQ. Что это такое и с чем его едят и может ли он помочь мне в описании статического ОЗУ?

 

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

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


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

Я думаю, вам будет полезно почитать этот pdf, раздел VHDL SRAM Design. Там и пример должен быть, но по моему асинхронной памяти. Удачи :)

 

vhdl__.pdf

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


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

Был бы очен признателен вам за информацию о LMP_RAM_DQ. Что это такое и с чем его едят и может ли он помочь мне в описании статического ОЗУ?

 

LPM_RAM_DQ - библиотечный тип памяти. Присутсвует в Quartus'е.

 

Имеет входы:

data - данные,

address - адрес ячейки памяти,

we - write enable - разрешение записи.

Выход один - q -читаемые данные.

 

На VHDL с использованием библиотеки lmp, описывается так(пример асинхъронной памяти 128 слов по 32 бита):

 

library lpm;
use lpm.lpm_components.lpm_ram_dq;
------------
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;

ENTITY RAM_DQ IS
   GENERIC( 
      ADDRESS_WIDTH : integer := 7;      
      DATA_WIDTH    : integer := 32      
   );
   PORT( 
      data    : IN     std_logic_vector (DATA_WIDTH-1 DOWNTO 0);
      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_DQ;


ARCHITECTURE logic OF RAM_DQ IS
begin
    my_ram:lpm_ram_dq
     generic map (
     LPM_WIDTH => DATA_WIDTH,
     LPM_WIDTHAD => ADDRESS_WIDTH,
     lpm_indata => "UNREGISTERED",
     lpm_address_control => "UNREGISTERED",
     lpm_outdata => "UNREGISTERED",
     LPM_TYPE => "LPM_RAM_DQ"
     ) port map (
     data => data,
     address => address,
     we => we,
     q => q
     );
END ARCHITECTURE logic;

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


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

Еще один интересный момент: в моем проекте описано 17 констант, каждая из них представляет собой матрицу 6х8(итого 816 бит :)). При компеляции проект занимает очень много пространства( кристалл Ацекс1К) - 33%, хотя сам проект не очень большой. Скорее всего для представления этих констант Квартус использует внутренние триггера плиса. А можно ли не переписывая много кода сделать так, чтоб при конфигурации плиса все эти константы записывались в память на борту Ацекса? Исходники прилагаются :)

 

LCD_con.txt

LCD_inf.txt

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


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

даже не смотря на ваш код, ручками, ручками переписываем обращения к константам как к регистровому файлу например

 

а вот ваша фраза

Скорее всего для представления этих констант Квартус использует внутренние триггера плиса

 

меня вообще убивает :cranky: а посмотреть отчеты мапера и глянут RTL ?

что это за программисткое скорее всего

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


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

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

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

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

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

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

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

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

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

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