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

verilog функции $signed, $unsigned

Всем привет!

 

Как стандартизованно описание и реализация этих функций?

Интересует поведение этих функций в длинных выражениях типа

data <= $unsigned($signed(a) + $unsigned(B)) - $signed©.....

 

столкнулся с некоторым непониманием со стороны каденса

 

module my_module(.... input [26:0] in ....);

localparam CONSTANT = 'd4_000_000;
....
always @(posedge clk)
   begin
     if($signed(in) > $unsigned(CONSTANT))
         .....
   end
   ....
endmodule

 

в приведенном выше коде при значении in равном -2_000_000 выполнялось условие if($signed(in) > $unsigned(CONSTANT)),

если написать if($signed(in) > $signed(CONSTANT)), то все становится нормально. При этом даже если константе граничить размер в размер in будет то же самое.

 

Или

 

reg [7:0] Data1;
reg [5:0] Data2;
....
Data1 <= $usnigned($unsigned(Data1) - $signed(Data2));
.....

 

 

при Data1 = 125 (0x7D) и Data2 = -1 (0x3F), результат был не ожидаемые 126, а 62(0x3E), то есть как прямое без знаковое вычитание 0x7D-0x3F=0x3E....

 

 

Я как-то не так истолковал работу этих функций? Если последний случай я могу объяснить тем что размер был различным, но как объяснить первый случай?

 

-----------------------

Ну в общем пока формулировал вопрос, смог правильно понять место стандарта где искать ответ.

 

На самом деле не важно что там signed, unsigned написано в выражении, как только появиться хоть один ансигнед операнд, все сразу станет без знаковым... так что правильно писать не $unsigned(a) + $signed(z), а все приводить к сигнед типу, дополняя а старшим нулем.

$signed({1'b0, a}) + $signed(z) и только так будет получен верный результат...

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


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

Как то так, вы правы, как только появляется один беззнаковый операнд, все остальное бесполезно.

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

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


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

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

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

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

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

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

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

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

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

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