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

Оптимизатор выбрасывает часть схемы

Добрый день. Я делаю простой процессор. Пока что я просто забиваю программы прямо в VHDL код так:

signal program : PROGRAM_MEMORY := 
(
0    =>    x"02010400", -- add    R[1],    R[4]
1    =>    x"04020100", -- mul    R[2],    R[1]
2    =>    x"00000000", -- nop 
3    =>    x"05010300", -- cmp    R[1],    R[3]
4    =>    x"e2000000", -- jle 0
5    =>    x"00000000", -- nop 
6    =>    x"00000000", -- nop 
7    =>    x"21020500", -- store    R[2], *(R[5] + 0)
8    =>    x"66000000", -- hlt 
9    =>    x"66000000", -- hlt 
10    =>    x"66000000", -- hlt 
others    =>    x"00000000"  --
);

Это относительно удобно на симуляторе чтоб гонять.

Но у меня такая проблема возникла. Квартус при синтезе оптимизирует схему в зависимости от программы.

Например, если не будет команд обращения в память, то модуля работы с памятью в конечной схеме просто не будет. Квартус его выбрасывает.

Причем, в RTL Viewer-е модуль работы с памятью присутствует, а вот уже в Post Mapping его нет.

 

Я ставил attribute noprune of memory : signal is true; на память где хранится программа, на регистры и на память для данных.

Но это не помогает. Мне бы хотелось, чтобы характеристики схемы не зависели от того, какую программу я изначально зашил в память.

И еще мне бы хотелось иметь возможность просто перезалить программу, не выполняя синтез заново. Я помню, мне говорили что есть аттрибут, который это позволяет, но я что-то не могу найти эту тему уже.

Знаю, что можно через мегавизард создать компоненту памяти, но хочу именно атрибут найти такой. Сейчас читаю про разные аттрибуты в квартусе, но как-то много непонятно много там для меня.

 

Например, я не понял, обязательно ли вставлять

LIBRARY altera;
USE altera.altera_syn_attributes.all;

 

Я вставил перед каждой сущностью на всякий случай, но у меня такое ощущение что атрибуты просто не работают.

Например на encoding кода операции я хочу отвести ровно 7 бит, и пишу:

attribute syn_encoding : string;
attribute syn_encoding of OPERATION_CODE : type is "gray";

Но если посмотреть в RTL Viewer-е получающуюся схему, то там встречаются элементы, как на скриншоте (и так все 128 команд).

То есть как будто используется "one_hot" encoding. Что-то у меня явно не так, мне кажется)

 

Спасибо!

 

post-59274-1297601303_thumb.jpg

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


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

а зачем симулировать в квартусе? чего не хватает в том же моделсиме?

Я не говорил что в квартусе симулирую, конечно я использую моделсим для симуляции. Просто у меня исходник один и тот же.

Квартус собственно для синтеза, уже хочу зашить в железку проект, посмотреть что получится на реальной схеме.

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


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

Квартус собственно для синтеза, уже хочу зашить в железку проект, посмотреть что получится на реальной схеме.

а что, ждете отличий в результатах? :) если сильно хочется, то можно сделать так: сгенерить корку памяти с возможностью редактирования содержимого (не помню точное название фичи), посмотрите отклик процессора на разные команды

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


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

а что, ждете отличий в результатах? :) если сильно хочется, то можно сделать так: сгенерить корку памяти с возможностью редактирования содержимого (не помню точное название фичи), посмотрите отклик процессора на разные команды

Да не, ну не отличий :)

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

Потому что у меня в зависимости от каких-то мистических событий, то 500 то 12K лутов используется.

Вот я и хочу понять, сколько же на самом деле требует моя схема, если требует 12K, то почему так много.

 

Но собственно цель-то сделать железку, сделать процессор, чтобы я мог заливать в него разные программы и прогонять их. Посмотреть, что все лампочки мигают так как надо.

А не только одну какую-то программу. Понятно что можно просто КА какой-то сделать чтобы лампочки мигали, цель не в этом.

Цель в том, чтобы я точно знал, что внутри FPGA у меня схема именно с той функциональностью, с какой я хочу. И чтобы я знал ее ограничения и требования по ресурсам.

 

Конечно можно использовал библиотечную компоненту, слава богу я могу теперь с ними работать в симуляторе :)

Просто я хотел иметь версию процессора, которая существует вообще без каких-либо библиотечных компонент и конкретных привязок к вендору. Чистый VHDL.

Изменено пользователем FROL_256

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


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

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

 

да, если выбрасывается при оптимизации именно память - сделайте ее 2-портовой, второй порт выведите наружу, синтезатор не сможет ее выкинуть

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


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

Ясно, Спасибо! Буду внимательно изучать отчет. Попробую на сложных программах погонять.

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


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

...

Просто я хотел иметь версию процессора, которая существует вообще без каких-либо библиотечных компонент и конкретных привязок к вендору. Чистый VHDL.

 

"Чистый VHDL" хорош только теоретически для отладки\моделирования алгоритма или структуры.

Для эффективного использования архитектуры того или иного чипа все равно придется переделывать.

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


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

"Чистый VHDL" хорош только теоретически для отладки\моделирования алгоритма или структуры.

Для эффективного использования архитектуры того или иного чипа все равно придется переделывать.

 

Нужно понимать, что есть модули кросс-платформенные и нет. Например математические узлы кросс - платформенные, а память, схемы генерации клока приходится делать под конкретную ПЛИС даже в рамках одного вендора.

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


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

Например математические узлы кросс - платформенные....

 

Не факт, например есть у Xilinx DSP48 Slice, а у Altera DSP Blocks

для математики.

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


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

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

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

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

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

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

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

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

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

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