Jump to content

    
Halfback

преобразование int32 в int16 на verilog

Recommended Posts

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;

 

Share this post


Link to post
Share on other sites
18 minutes ago, Halfback said:

 Да, Вы правы.

чтобы был "0" надо прибавить "1".


outdata_reg <= ((indata + (32'd1<<31)) >> 16) - (16'd1<<15)+1;

 

А тогда при входном 0 результат будет 1 :) 

Share this post


Link to post
Share on other sites
On 9/7/2021 at 10:35 AM, Halfback said:

Надо по сути 32-разрядное знаковое число сократить до 16-разрядного знакового.

по сути это будет 

outdata_reg <= indata/65536; 

По правилам "С" при преобразовании, просто отбрасывается старшие 16 бит.

Априори программист должен быть уверен что значение числа занимает 15 бит плюс знаковый.

Для Verilog аналогично.

Или нужно заменить деление на сдвиг?  

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.