|
|
  |
проблема со знаковыми числами, помогите плиз срочно нужно |
|
|
|
Mar 12 2009, 12:33
|
Частый гость
 
Группа: Участник
Сообщений: 142
Регистрация: 3-07-08
Пользователь №: 38 716

|
проектирую цифровой фильтр в ISE от xilinx. пробовал в схематике и на vhdl. проблема общего плана: допустим, первый коэффициент фильтра равен -20(возьмем ких-фильтр), допустим выход фильтра 10-разрядный. В симуляторе я подаю на вход единичный импульс, по идее на выходе я должен получить импульсную характеристику, но первый отсчет выходного сигнала мне выдает не -20, что в двоичном знаковом представлении при числе разрядов = 10 должно быть равно 1000010100(старший разряд - знак), а 1111101100, что соотвествует 1024-20. то есть полная лажа какая то , на выходе в итоге я получаю громадное число, уже при единичном сигнале... Может сталкивался кто с подобной проблемой? заранее благодарен за участие
|
|
|
|
|
Mar 12 2009, 12:45
|
Профессионал
    
Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757

|
Цитата(Виталий_Ж @ Mar 12 2009, 15:33)  но первый отсчет выходного сигнала мне выдает не -20, что в двоичном знаковом представлении при числе разрядов = 10 должно быть равно 1000010100(старший разряд - знак) Вы что-то путаете. Цитата а 1111101100, что соотвествует 1024-20. то есть полная лажа какая то Всё правильно. Это в двоично-дополнительном коде. Вся математика делается в нём.
|
|
|
|
|
Mar 12 2009, 12:50
|
Частый гость
 
Группа: Участник
Сообщений: 142
Регистрация: 3-07-08
Пользователь №: 38 716

|
Цитата(andrew_b @ Mar 12 2009, 15:45)  Вы что-то путаете. Всё правильно. Это в двоично-дополнительном коде. Вся математика делается в нём. тогда как быть с громадностью выходного сигнала? я ведь получаю 1024-20=1004 Цитата(Виталий_Ж @ Mar 12 2009, 15:49)  тогда как быть с громадностью выходного сигнала? я ведь получаю 1024-20=1004 точнее как перейти обратно к "беззнаковому" варианту?
|
|
|
|
|
Mar 12 2009, 13:15
|
Профессионал
    
Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757

|
Цитата(Виталий_Ж @ Mar 12 2009, 15:50)  тогда как быть с громадностью выходного сигнала? я ведь получаю 1024-20=1004 Вы знаете, что такое двоично-дополнительный код? Цитата точнее как перейти обратно к "беззнаковому" варианту?точнее как перейти обратно к "беззнаковому" варианту? У вас же отрицательные числа. Куда вы собрались переходить? P.S. http://telesys.ru/wwwboards/fpga/323/messages/41674.shtml
|
|
|
|
|
Mar 12 2009, 14:25
|
Знающий
   
Группа: Свой
Сообщений: 552
Регистрация: 29-02-08
Пользователь №: 35 481

|
Цитата(Виталий_Ж @ Mar 12 2009, 15:33)  проектирую цифровой фильтр в ISE от xilinx. пробовал в схематике и на vhdl. проблема общего плана: допустим, первый коэффициент фильтра равен -20(возьмем ких-фильтр), допустим выход фильтра 10-разрядный. В симуляторе я подаю на вход единичный импульс, по идее на выходе я должен получить импульсную характеристику, но первый отсчет выходного сигнала мне выдает не -20, что в двоичном знаковом представлении при числе разрядов = 10 должно быть равно 1000010100(старший разряд - знак), а 1111101100, что соотвествует 1024-20. то есть полная лажа какая то , на выходе в итоге я получаю громадное число, уже при единичном сигнале... Может сталкивался кто с подобной проблемой? заранее благодарен за участие Вы путаете прямой код и дополнительный код. Xilinx, как и другие производит вычисления в дополнительном коде, где 1111101100 и есть -20
|
|
|
|
|
Mar 12 2009, 14:28
|

Частый гость
 
Группа: Свой
Сообщений: 86
Регистрация: 22-03-07
Из: Санкт-Петербург
Пользователь №: 26 406

|
Цитата(Виталий_Ж @ Mar 12 2009, 15:33)  проектирую цифровой фильтр в ISE от xilinx. пробовал в схематике и на vhdl. проблема общего плана: допустим, первый коэффициент фильтра равен -20(возьмем ких-фильтр), допустим выход фильтра 10-разрядный. В симуляторе я подаю на вход единичный импульс, по идее на выходе я должен получить импульсную характеристику, но первый отсчет выходного сигнала мне выдает не -20, что в двоичном знаковом представлении при числе разрядов = 10 должно быть равно 1000010100(старший разряд - знак), а 1111101100, что соотвествует 1024-20. то есть полная лажа какая то , на выходе в итоге я получаю громадное число, уже при единичном сигнале... Может сталкивался кто с подобной проблемой? заранее благодарен за участие Код 0000010100 + // 10 1111101100 = // -10 (1)0000000000 // 0
|
|
|
|
|
Apr 6 2009, 09:25
|
Участник

Группа: Участник
Сообщений: 62
Регистрация: 22-10-07
Пользователь №: 31 601

|
Двоичная арифметика выполняется в дополнительном коде, что связано с некоторыми особенностями АЛУ. Вообще отрицательные числа можно представить в: - прямом коде: пишется то же число, только в старший (знаковый) разряд записывается "1", что соответствует отрицательному числу. -(0000010100) = 1000010100(пр.код) - это наиболее естественная с точки зрения арифметики форма представления отрицательных чисел; - обратном коде: все разряды числа инвертируются, в знаковый разряд пишется "1". -(0000010100) = 1111101011(обр.код); - дополнительном коде: к обратному коду отрицательного числа прибавляется единица. -(0000010100) = 1111101100(доп.код);
Отрицательное число, представленное в дополнительном коде, в прямой код можно преобразовать через обратный код: - из числа в дополнительном коде вычесть "1" (или, если нужно выполнить преобразование аппаратно в дополнительном коде, а не просто "в уме для себя" то прибавить 1111111111 - доп.код минус единицы); - полученное число в обратном коде проинвертировать поразрядно, не трогая старший. знаковый разряд - получите отрицательное число в прямом коде. P.S.: понимаю, что автор темы, заглохшей месяц назад, вряд ли нуждается в ответе, но ведь кто-то может и через поиск наткнуться на эту страничку.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|