sonycman 0 9 сентября, 2021 Опубликовано 9 сентября, 2021 · Жалоба Так этот код: outdata_reg <= ((indata + (32'd1<<31)) >> 16) - (16'd1<<15); для входного значения - 1 даст на выходе ту же - 1, а не 0. Это будет не indata/65536. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Halfback 0 9 сентября, 2021 Опубликовано 9 сентября, 2021 · Жалоба 52 минуты назад, sonycman сказал: Так этот код: outdata_reg <= ((indata + (32'd1<<31)) >> 16) - (16'd1<<15); для входного значения - 1 даст на выходе ту же - 1, а не 0. Это будет не indata/65536. Да, Вы правы. чтобы был "0" надо прибавить "1". outdata_reg <= ((indata + (32'd1<<31)) >> 16) - (16'd1<<15)+1; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 0 9 сентября, 2021 Опубликовано 9 сентября, 2021 · Жалоба 18 minutes ago, Halfback said: Да, Вы правы. чтобы был "0" надо прибавить "1". outdata_reg <= ((indata + (32'd1<<31)) >> 16) - (16'd1<<15)+1; А тогда при входном 0 результат будет 1 :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Halfback 0 9 сентября, 2021 Опубликовано 9 сентября, 2021 · Жалоба 4 часа назад, sonycman сказал: А тогда при входном 0 результат будет 1 :) тогда так ;) outdata_reg <= ((indata + (32'd1<<31)) >> 16) - (16'd1<<15)+indata[31]; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
misyachniy 0 19 сентября, 2021 Опубликовано 19 сентября, 2021 · Жалоба On 9/7/2021 at 10:35 AM, Halfback said: Надо по сути 32-разрядное знаковое число сократить до 16-разрядного знакового. по сути это будет outdata_reg <= indata/65536; По правилам "С" при преобразовании, просто отбрасывается старшие 16 бит. Априори программист должен быть уверен что значение числа занимает 15 бит плюс знаковый. Для Verilog аналогично. Или нужно заменить деление на сдвиг? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться