OSDev

для всех
Текущее время: 28 апр 2024, 08:00

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 23 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Re: ПЛИС
СообщениеДобавлено: 22 янв 2014, 19:27 
Аватара пользователя

Зарегистрирован: 20 апр 2011, 10:54
Сообщения: 145
Никакой практической разницы между Verilog и VHDL нет. Это просто два разных синтаксиса для одного и того же.

_________________
Found a CPU. LAPIC ID: 00


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ПЛИС
СообщениеДобавлено: 22 янв 2014, 23:40 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Никак не найду ответ на вопрос.
Вот есть у нас регистр. Как его правильно обновить?
Как сделать чтобы одновременно было чтение и запись.
К примеру надо сделать add r0,r1 ?
Мы должны прочитать из r0 сложить с r1 и заместить результат в r0.

Как можно гарантировано записать значение в регистр? Как можно гарантировать что пока мы запоминали с 0 по 31 бит логика не успела отработать изменения с нулевого бита и не поправить результат сложения скажем последнего 31 бита?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ПЛИС
СообщениеДобавлено: 23 янв 2014, 09:58 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
В VHDL никаких регистров нет, есть сигналы и переменные, что в первом приближении одно и то же (они различаются в некоторых вопросах). У них есть типы, в т.ч. предназначенные для хранения целых чисел либо "логической" информации о состоянии сигнала (либо просто 0 или 1, либо несколько значений, чтоб обозначать ещё высокий импеданс, безразличное состояние и т.д.). Можно создавать массивы и записи (таким путём можно описать регистровый файл, например).

Схемы делятся на комбинаторные и последовательные. Память имеется только у вторых. В VHDL они описываются в т.н. процессах, например:

Код:
signal Clock : STD_LOGIC;
signal Reset : STD_LOGIC;
signal Reg   : INTEGER range 0 to 255;
.....
process (Reset, Clock) is
begin
  if Reset = '1' then
    Reg <= (others => '0');
  elsif RISING_EDGE(Clock) then
    Reg <= Reg + 1;
  end if;
end process;


Здесь описан 8-разрядный счётчик, сбрасываемый в 0 при поступлении сигнала Reset, а в его отсутствие увеличивающийся на 1 по каждому фронту Clock.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ПЛИС
СообщениеДобавлено: 23 янв 2014, 10:56 
Аватара пользователя

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 970
Откуда: Дагоба
pavia писал(а):
К примеру надо сделать add r0,r1 ?
Мы должны прочитать из r0 сложить с r1 и заместить результат в r0.

Не знаю, как в VHDL, с ним не работал, а в Верилоге делается просто:

Код:
module test (
  input clk,   // Input clock
  input R1,   // Input data
  output out   // Output data
);

reg R0=0;
assign out = R0;

always @(posedge clk) begin
  R0 <= R0+R1;
end

endmodule


pavia писал(а):
Как можно гарантировано записать значение в регистр? Как можно гарантировать что пока мы запоминали с 0 по 31 бит логика не успела отработать изменения с нулевого бита и не поправить результат сложения скажем последнего 31 бита?

Гарантировать - никак. Только подбирать тактовую частоту, на которой схема успеет отработать сложение.

SII писал(а):
В VHDL никаких регистров нет...
Схемы делятся на комбинаторные и последовательные. Память имеется только у вторых.

Как же нет регистров, если это всё RTL? Вот те, которые с памятью и есть регистры. В твоём примере Reg будет назначен на регистр.

_________________
Yet Other Developer of Architecture.
The mistery of Yoda’s speech uncovered is:
Just an old Forth programmer Yoda was.

<<< OS Boot Tools. >>>


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ПЛИС
СообщениеДобавлено: 23 янв 2014, 11:15 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
Yoda писал(а):
Как же нет регистров, если это всё RTL?


Нет в том смысле, что нигде явно не пишется, что вот это -- регистр, а вот это -- просто сигнал. Есть для сигнала память или нет, определяется транслятором на основании того, что он увидит в использовании сигнала.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ПЛИС
СообщениеДобавлено: 23 янв 2014, 13:17 
Аватара пользователя

Зарегистрирован: 20 апр 2011, 10:54
Сообщения: 145
pavia писал(а):
Как можно гарантировано записать значение в регистр? Как можно гарантировать что пока мы запоминали с 0 по 31 бит логика не успела отработать изменения с нулевого бита и не поправить результат сложения скажем последнего 31 бита?

Если писать сумматор вручную - нужно использовать неблокирующие присваивания.

_________________
Found a CPU. LAPIC ID: 00


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ПЛИС
СообщениеДобавлено: 23 янв 2014, 18:40 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
418ImATeapot
418ImATeapot писал(а):
Если писать сумматор вручную - нужно использовать неблокирующие присваивания.

Это ещё почему?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ПЛИС
СообщениеДобавлено: 23 янв 2014, 18:51 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Для SII Я так и подумал.
Сохранение в регистре делаем по фронту. Это гарантированно нас обезопасит от автогенерации по обратной связи.
Пока мы сохраняем состояние только только закончит вычисление АЛУ. Поэтому входное состояние измениться не успеет.

А вот по поводу битов это понятно что надо смотреть тайминги. Но вроде как таких средств нет. Ещё раз опишу в чём проблема. Фронт клока распространяется по битом регистра не мгновенно. А следовательно возможен вариант что есть второй путь.
Для примера
Путь 1. Распространение клока от 0 к 31 биту через все биты.
Распространение идёт с задержкой так как клок передаём через транзисторы с поднятием напряжения.
Путь 2. 0 бит инверсия 31 бит.

Явно второй путь короче и регистр не успеет сохранить все биты.
Т.е я хочу сказать что такое возможно. А как тут бороться с этим? Понятно что на практике такое мало вероятно но вдруг как отследить такое и если что подкорректировать?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ПЛИС
СообщениеДобавлено: 23 янв 2014, 18:52 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
SII писал(а):
Yoda писал(а):
Как же нет регистров, если это всё RTL?


Нет в том смысле, что нигде явно не пишется, что вот это -- регистр, а вот это -- просто сигнал. Есть для сигнала память или нет, определяется транслятором на основании того, что он увидит в использовании сигнала.

Это VHDL не пишется, а вот в Virilog как раз пишется reg.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ПЛИС
СообщениеДобавлено: 23 янв 2014, 19:10 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
pavia писал(а):
А вот по поводу битов это понятно что надо смотреть тайминги. Но вроде как таких средств нет...


Ещё раз: за этим следят компилятор и синтезатор. После того, как описание скомпилировано и размещено в ПЛИС, рассчитываются задержки всех сигналов, и из этого определяется максимально возможная частота.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 23 ]  На страницу Пред.  1, 2, 3  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB