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

Здравствуйте!!!

Написал в ISE программу для ПЛИС XILINX на VHDL, программа состоит из одного процесса.

Скажите пожалуйста, можно средствами ISE посмотреть за сколько тактов выполнится программа, тоесть процесс?

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

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


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

Здравствуйте!!!

Скажите пожалуйста, можно средствами ISE посмотреть за сколько тактов выполнится программа?

 

О какой программе Вы говорите?

Если Вы имеете в виду получение результата на выходе Вашего модуля (проекта), то ISE этим не занимается, т.к. не знает логики работы модуля и воздействий, которые будут производиться на модуль. Но Вы можете воспользоваться встроенным в ISE симулятором или каким-нибудь внешним симулятором, чтобы промоделировать проект и узнать, за какое время появляется требуемый результат при заданных входных воздействиях.

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


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

Спасибо. За совет.

 

makc

Программа такая, по последовательной шине принимаю данные, накапливаю их до 16-ти бит и выбрасываю по параллельной 16-ти разрядной шине.

Мне нужно за 16 тактов: накопить 16 бит и выбросить из в параллельную шину(я хочу главным генератором ПЛИС назначить генератор последовательной шины.).

Вот интересно при обращении к переменным: сложение, вычитание сколько тактов тратится? :05:

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


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

Написал в ISE программу для ПЛИС XILINX на VHDL, программа состоит из одного процесса.

 

Если весь модуль состоит из одного процесса, то, понимая логику его работы (ведь Вы его создатель), не составит большого труда посчитать время его выполнения.

 

 

makc

Программа такая, по последовательной шине принимаю данные, накапливаю их до 16-ти бит и выбрасываю по параллельной 16-ти разрядной шине.

Мне нужно за 16 тактов: накопить 16 бит и выбросить из в параллельную шину(я хочу главным генератором ПЛИС назначить генератор последовательной шины.).

Вот интересно при обращении к переменным: сложение, вычитание сколько тактов тратится? :05:

 

Приведите пример кода.

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


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

Если весь модуль состоит из одного процесса, то, понимая логику его работы (ведь Вы его создатель), не составит большого труда посчитать время его выполнения.

 

Я вот новичок, может глупости спрашиваю :)

 

С логикой понятно, а вот например на присвоение значения переменной сколько тактов тратится?

 

С кодом чуть позже, мне его восстановить надо :crying:

 

например :

....
I,x,b:integer;
...
I:=100;
b:=300;
x:=65;
...

 

за один такт выполнится?

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

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


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

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

 

На примере это выглядит так:

....
variable a,b,c:integer;
...
a:=1;
b:=2;
c:=a+b;
...

 

с станет равной 3 в том же такте, что и будет выполнено присвоение a и b.

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


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

А если такой случай где будет счетчик например:

 variable a,b,c:integer;
...
a:=1;
b:=b+1;   --счетчик
c:=a+b;

 

Тоже за один такт выполнится? :05:

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

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


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

А если такой случай где будет счетчик например:

 variable a,b,c:integer;
...
a:=1;
b:=b+1;   --счетчик
c:=a+b;

 

Тоже за один такт выполнится? :05:

 

Да. Но это только в случае, если a и b - variables. Если они signals, то будет по-другому. Почитайте любую книгу по VHDL. Все возможные варианты на примерах не рассмотришь, нужно понимание общих принципов.

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


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

А если такой случай где будет счетчик например:

 variable a,b,c:integer;
...
a:=1;
b:=b+1;   --счетчик
c:=a+b;

 

Тоже за один такт выполнится? :05:

 

Только здесь вместо счетчика у Вас будет 32 разрядный сумматор :(

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


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

Maverick, хорошо я запомню :) .

Есть вопрос

Пример:

..........
..........
Port ( LED_1,LED_2: out  STD_LOGIC:='1'); 
..........
..........
Process
  begin
  ...........
  ...........
  if i=10 then
    LED_1<='0';         --
    LED_2<='0';
  end if;
  ............
  ............
  end process;

В примере сначала изменится порт LED_1 на '0', затем изменится LED_2 на '0', а

можно как нибудь прописать чтобы в процессе LED_1 и LED_2 изменились одновременно?

Если можно напишите примерчик :05:

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

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


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

В примере сначала изменится порт LED_1 на '0', затем изменится LED_2 на '0', а

можно как нибудь прописать чтобы в процессе LED_1 и LED_2 изменились одновременно?

Если можно напишите примерчик :05:

 

Что значит одновременно в Вашем понимании? Если "одновременно", значит "по какому-то событию", то соответствующий сигнал должен быть указан в списке чувствительности процесса. И тогда активация процесса будет привязана к конкретным событиям в модуле. Но, в любом случае, в приведенном примере изменение произойдет в один и тот же момент времени.

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


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

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

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


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

makc

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

Так как у меня в примере LED_1 и LED_2 находятся в процессе и выполняются по одному событию, но сначала изменится состояние LED_1 а затем изменится состояние LED_2 - так как в процессе команды выполняются последовательно.

А если нужно чтобы они выполнились параллельно, как выполняются команды в теле модуля?

Может можно написать что-то вроде :LED_1,LED_2<='0' , чтобы сигнал одновременно полетел на 2 порта сразу LED_1 и LED_2.

 

PS: ушел читать VHDL :05:

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

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


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

Вот к чему приводит непонимание основ...

"Программа для ПЛИС на VHDL"...

Никакая это на самом деле не программа, а конфигурация железа, записанная алгоритмическим языком. И то, что "команды" записаны друг за другом, совсем не определяет порядок их "выполнения".

Может, лучше начать со схемного ввода, пока ясность не наступит?

Основная идея - ПЛИС - это не процессор, и "программу" не "выполняет". А функционирует как цифровой автомат, логика которого задаётся конфигурацией.

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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