Jump to content

Математические формулы с знаковыми числами


Plisovik
 Share

Recommended Posts

Здравствуйте! Подскажите пж. как правильно работать (складывать, вычитать делить  и т. д.) с числами многобитными, знаковыми (signed) если входное число имеет битность одну, допустим [13:0] , а выходное, сильно его больше, допустим раз в 100.

Подробнее. Мне нужно сигнал 14-битный с АЦП, входящий с частотой "clock", пересчитывать в другое число по формуле. И вход формулы и выход могут быть как отрицательным так и положительным числом. При этом выходное число раз в 100 может превышать входное (симуляция усилителя), т.е. его битность должна быть как минимум на 7 битов больше.  Выходной сигнал на данном такте зависит как от входного на данном такте, так и от входного и выходного на предыдущих тактах.

Далее мой код (частично:

...

input signed [13:0] signal_in,

output  signed [13+7:0] signal_out,

...

reg signed [13:0] inputsig [2:0];
reg signed [13+7:0] outputsig [2:0];

always @ (posedge clock) begin
    inputsig[2]<=inputsig[1];
    inputsig[1]<=signal_in; / / Входной сигнал сбрасываю в память, чтоб хранить его за 2 предыдущих такта

    outputsig[2]<=outputsig[1];
    outputsig[1]<=signal_out; / / вЫходной сигнал сбрасываю в память, чтоб хранить его за 2 предыдущих такта

end    

assign    y1B = (outputsig[1])*2'd2*alpha/12'd100;                    // alpha - по идее дробное число (0,98), поэтому я его делаю целым (98), а потом делю   
assign    y2B = (outputsig[2])*alpha/12'd100*alpha/12'd100;    //слагаемое на сто
assign    X0A = signal_in;
assign    X1A = (inputsig[1])*alpha/12'd100 + (inputsig[1])*alpha/tau*T/12'd100; // задал 4 слагаемых, определяющих выходной сигнал
    
assign    signal_out = (y1B - y2B + X0A - X1A); // полный выходной сигнал, складываю слагаемые , которые ранее задал

...

Вопрос, как правильно перейти из 14-битного числа в (7+14) битное (тоже +/- знаковое), чтобы формула работала? Правильно ли я умножаю на альфу и делю на 100? А то что я ни делаю, какая-то кракозябла получается...Буду благодарен за помощь!

Link to comment
Share on other sites

  • 2 weeks later...

@Plisovik Подход нормальный, но все составляющие выражения надо сделать знаковыми. И константы тоже. Так как если одно из чисел в выражении попадётся беззнаковое, то и результат будет таким же.
Число 100 проще в двоичном виде записать, приклеив к нему нулевой бит слева как знаковый, и обернув директивой $signed({1'b0, A}). 

Разрядность для результирующего сигнала надо сделать соответствующей. В худшем случае при сложении +1 разряд добавляется, а при умножении количество разрядов равно сумме разрядностей перемножаемых чисел (если правильно помню). 

Полезная статья - http://www.labfor.ru/articles/arithmetic_verilog

3D модели радиодеталей + макросы

С уважением, Михаил.

Link to comment
Share on other sites

LED-драйверы MEAN WELL – выбор больше, стоимость ниже

Компэл расширил и существенно пополнил склад LED-драйверами компании MEAN WELL, одновременно снизив цену на них. В настоящий момент на складе представлена широкая линейка продукции для наружного (семейства HLG, ELG, XLG, LPC, LPV), и для внутреннего (APC, LCM, SLD, APV) освещения.

Имеется большой выбор моделей с различными режимами стабилизации выходных параметров. Кроме того, есть в наличии и линейка DC/DC-драйверов, как понижающих (семейство LDD), так и повышающих (семейство LDH).

Подробнее>>

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  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.

Loading...
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...