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

Сумматор с ovfl на VHDL

Подскажите как описать на VHDL в поведенческом стиле сумматор или аккумулятор со знаковым переполнение, так что бы синтезатор (ISE) правильно его распознал как сумматор или аккумулятор.

Проблема заключается в том, что при всех моих попытках реализации в FPGA (Spartan-3) структурного описания сумматора со знаковым переполнением не используются цепи переноса и на один разряд сумматора расходуются 2 LUT, в то время как в правильно опознаном аккумуляторе (без переполнения) на один разряд сумматора тратиться только 1 LUT и цепи переноса.

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


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

Подскажите как описать на VHDL в поведенческом стиле сумматор или аккумулятор со знаковым переполнение, так что бы синтезатор (ISE) правильно его распознал как сумматор или аккумулятор.

Проблема заключается в том, что при всех моих попытках реализации в FPGA (Spartan-3) структурного описания сумматора со знаковым переполнением не используются цепи переноса и на один разряд сумматора расходуются 2 LUT, в то время как в правильно опознаном аккумуляторе (без переполнения) на один разряд сумматора тратиться только 1 LUT и цепи переноса.

 

хмм ....Xilinx\doc\usenglish\books\docs\xst\xst.pdf

-> HDL Coding Techniques -> Arithmetic Operations

-> HDL Coding Techniques -> Accumulators

там вы были ?

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


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

хмм ....Xilinx\doc\usenglish\books\docs\xst\xst.pdf

-> HDL Coding Techniques -> Arithmetic Operations

-> HDL Coding Techniques -> Accumulators

там вы были ?

 

был, только к сожалению сумматоров и аккумуляторов со знаковым переполнением там нет.

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


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

был, только к сожалению сумматоров и аккумуляторов со знаковым переполнением там нет.

хмм ну тогда код в студию

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


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

overflow = (перенос из знакового разряда)  xor (перенос из старшего бита данных)

 

Это всё понятно, вопрос в том, как объяснить синтезатору, что это сумматор, а не просто комбинационная схема.

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


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

xapp215:

 

 

Example:

VHDL: sum <= (a(7)&a) + (b(7)&b); -- sum is a 9-bit value

 

Verilog: sum = {a[7],a} + {b[7],b}; // sum is a 9-bit value

 

A carry-out of a function is accessed in the same manner. Extend the inputs and use the MSB of the function output (in the above example, "sum") as the carry out.

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


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

overflow = (перенос из знакового разряда)  xor (перенос из старшего бита данных)

 

Это всё понятно, вопрос в том, как объяснить синтезатору, что это сумматор, а не просто комбинационная схема.

 

Вы код категорически не хотите показать ?

может быть вы описали не так, здесь же не телепаты

:)

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


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

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

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


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

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

Наверное он имел в виду использование хардварного суматора в слайсе

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


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

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

Наверное он имел в виду использование хардварного суматора в слайсе

 

Совершенно верно. В слайсе содержатся доп. элементы для построения сумматора. При описании:

 

A <= B + C;

 

синтезируется схема с расходом 1 LUT на 1 разряд сумматора. Но как отсюда вывести знаковое переполнение я так и не придумал.

 

При описании:

 

A(n) <= B(n) xor C(n) xor CARRY(n-1);

CARRY(N) <= (B(n) and C(n)) or (CARRY(N-1) and (B(n) or C(n));

 

или ему подобном, каждому A(n) и CARRY(n) соответствует отделная LUT. В результате расход слайсов в два раза больше.

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


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

Совершенно верно. В слайсе содержатся доп. элементы для построения сумматора. При описании:

 

A <= B + C;

 

синтезируется схема с расходом 1 LUT на 1 разряд сумматора. Но как отсюда вывести знаковое переполнение я так и не придумал.

 

При описании:

 

A(n) <= B(n) xor C(n) xor CARRY(n-1);

CARRY(N) <= (B(n) and C(n)) or (CARRY(N-1) and (B(n) or C(n));

 

или ему подобном, каждому A(n) и CARRY(n) соответствует отделная LUT. В результате расход слайсов в два раза больше.

Хмм ну результат закономерен, т.е. вы используете 2 LUt для 2х функций 4-х перемененных.

Хотя мне вот что непонятно

положим все числа 8 бит, берем -128 - 0х80 и -1 0хFF

0x80 + 0xFF = 0x17F,

так что бы проверирить переполнение нужно сделать обычный суматор на 9 бит

и проверить (ес-но на +1ом люте) 9 ый и 8 бит.

но при этом суматор будет суматором и все цепи быстрого переноса будут задйствваны

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


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

Очень советую создать схему и поместить туда какой нибудь сумматор и заглянуть в него как он сделан...

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


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

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

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

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

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

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

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

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

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

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