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

Помогите реализовать формулу

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

 

Подскажите как реализовать заданную формулу с минимальным использованием ресурсов.

 

лучше если А и В буду регистрами, С тоже,все остальное комбинационно.

 

С=((-А/(abs(A)+abs(B)))+1)/4;

 

A и В знаковые 9 битные регистровые переменные, С-8 битное беззнаковое число (8 разрядов после запятой, так как оно всегда меньше 1).

 

 

Сейчас это реализовано с применением пакета на fixed_point_c на VHDL, как сделать это на Veriloge без использования арифметики с фиксированной точкой??

 

 

Спасибо.

Изменено пользователем -=Vitaly=-

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


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

Сейчас это реализовано с применением пакета на fixed_point_c на VHDL, как сделать это на Veriloge без использования арифметики с фиксированной точкой??

 

Никак нельзя без использования арифметики с фикс. точкой. Так как в верилоге вся встроенная арифметика (+-*/) именно такая, и другой нету. Масштабируете "-А"

(сдвигаете влево) перед делителем так, чтобы частное содержало нужное кол-во разрядов после запятой. И всех делов на этом. Операция деления в верилоге синтезируемая, и именно в комбинаторный блок.

 

Примерно как-то так, могу где-то с кол-вом бит или нулей обшибится.

 

И еще - C явно не беззнаковое, так как "-A" будет определять знак C. Это учтено в последнем always, где я восстанавливаю знак.

 

reg [8:0] a,b;
reg [7:0] c;

wire [7:0] absa, absb;
wire signa;

assign signa = a[8];
assign absa = (a ^ {9{a[8]}}) + a[8];
assign absb = (b ^ {9{b[8]}}) + b[8];

wire [7:0] tmp_a;
assign tmp_a = ( {absa, 6'b0} / (absa+absb) ) + 7'b1000000 );

always (@posedge  clock)
  c <= (tmp_a ^ {8{signa}}) + signa;

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


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

Никак нельзя без использования арифметики с фикс. точкой. Так как в верилоге вся встроенная арифметика (+-*/) именно такая, и другой нету. Масштабируете "-А"

(сдвигаете влево) перед делителем так, чтобы частное содержало нужное кол-во разрядов после запятой. И всех делов на этом. Операция деления в верилоге синтезируемая, и именно в комбинаторный блок.

 

Примерно как-то так, могу где-то с кол-вом бит или нулей обшибится.

 

И еще - C явно не беззнаковое, так как "-A" будет определять знак C. Это учтено в последнем always, где я восстанавливаю знак.

 

reg [8:0] a,b;
reg [7:0] c;

wire [7:0] absa, absb;
wire signa;

assign signa = a[8];
assign absa = (a ^ {9{a[8]}}) + a[8];
assign absb = (b ^ {9{b[8]}}) + b[8];

wire [7:0] tmp_a;
assign tmp_a = ( {absa, 6'b0} / (absa+absb) ) + 7'b1000000 );

always (@posedge  clock)
  c <= (tmp_a ^ {8{signa}}) + signa;

 

Спасибо большой :a14: , сделал все заработало, еще вопрос -мне кажется или в vhdl операция деления не синтезируемая за исключением степени 2

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


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

Чем синтезировали ?

Из Xilinx XST User Guide, Verilog Language Support:

Arithmetic / : Supported only if second operand is a power of 2.

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


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

Угу, и сколько ресурсов и какого кристалла это заняло и на какой частоте запустилось :o) Деление всегда было самой ресурсоемкой и медленной операцией во всех FPGA, майнстрим процессорах, ASIC'ах и других цифровых устройствах. Как обстоит дело в этом случае ?

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


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

Эт реализуется например в Квартусе. Ложиться на мегафункцию. Причем тут ресурсы и время.

Чтотесть то и есть.

Единственное что я бы подправил

wire [7:0] absa, absb; на wire [8:0] absa, absb;

Код 1_0000_0000 выпадает.

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


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

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

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

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

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

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

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

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

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

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