Golikov 0 22 декабря, 2016 Опубликовано 22 декабря, 2016 · Жалоба Всем привет! Как стандартизованно описание и реализация этих функций? Интересует поведение этих функций в длинных выражениях типа 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) и только так будет получен верный результат... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lexx 0 30 декабря, 2016 Опубликовано 30 декабря, 2016 · Жалоба Как то так, вы правы, как только появляется один беззнаковый операнд, все остальное бесполезно. Можно только добавить, что синопсис рекомендует знаковые использовать при наличии знака, так они смогут лучше оптимизировать синтез. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться