Перейти к содержанию
    

lermontov

Участник
  • Постов

    7
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный
  1. мы отбрасываем минимальное количество нулей то-есть в этой паре 0010_0000 и 0001_1000 у обоих чисел будут отброшены только два нуля в результате получится 10_0000 и 01_1000
  2. почему не всегда ? привожу пример : 0000_1010 > 0000_0101 в большем числе нулей слева меньше чем в меньшем 0000_1010 < 0000_1111 соответственно нулей одинаковое количество !! что вы наверное и имели ввиду! но по сути отнимая эти нули мы ничего не теряем.
  3. Про линейность согласен ! но ситуация чуть шире: имеется 4 числа (29разрядов ) среди которых мы находим максимальное (с минимальным количеством нулей) и проделываем отбрасывание этих нулей во всех числах в результате получаем как выше упомянул XVR нормализацию этих чисел.(нам важно в основном соотношение этих чисел ) Вопрос зачем такие заморочки , потому что результат (16 битное число) потом делится и, чтобы при делении не получать сплошные нули при малых значениях исходных чисел приходится "нормализировать".
  4. К сожелению так не подойдет так как, так как все исходные числа больше 32767 будут равны 32767 . вся фишка в том ччто вопервых мы не знаем сколько нулей в старших битах. сейчас пример приведу как это на мой взгляд выглядет есть число 29 разрядов 0_0000_0101_0000_1011_1111_1111_0001 хотим получить выделенную часть Находим например старший единичный бит исходного числа =к , и тогда получим R1[15:0]={r1[28],r1[k:k-14]}; на что компилятор ругается что к не константа. о точняк , Спасибо !!! Щас проверим !
  5. Ок еще раз. На входе 29 разрядное число r1 на выходе 16 разрядное число R1 . R1 получаем убрав все нули в старших разрядах и итог обрезав до 16 (младшие разряды)
  6. Просто отсекать старшие разряды не получится потому как например есть число 000000101010101000 из него хочется получить число без нулей в начале чтобы старший бит был 1 , но количества нулей в начале мы не знаем соответственно мы не знаем откуда до куда вырезать , для этого нужно найти старшую 1 . и оставить от вправо 16 разрядов это если число большое , если маленькое тут проще, тут можно сдвигать пока на станет больше какого-то числа. Со знаковостью я сейчас подумал что если будет отрицательное число то его из дополнительного кода надо будет преобразовать !! ладно сейчас знаками пренебрегаем предпологая что все ччисла положительны.
  7. Сори за может глупый вопрос только начал ччтото делать на veriloge . есть число 29 разрядов из него нужно получить число 16 разрядов лежащее в пределах 32767 16384 , соответственно чтобы старший разряд был 1. на входе двоичные числа в дополнительном коде. что получилось у меня input signed [28:0] r1 output reg signed [15:0] R1 integer i,k; always @(r1) begin for(i=0; i<27; i=i+1)begin k <=i;end if( k > 14 ) //соответственно для значений выше 32767 R1[15:0]<={r11[28],r11[k:k-14]}; if( k <=14 ) //соответственно для значений ниже 16384 ................... при компилировании выдыет ошибку что k - не константа . ччто можно сделать ? Проблема тут R1[15:0]<={r11[28],r11[k:k-14]}; Вариант родившийся у меня это вручную пробежать все значения к но это глупо и долго . неправильно написал пропустил иф input signed [28:0] r1 output reg signed [15:0] R1 integer i,k; always @(r1) begin for(i=0; i<27; i=i+1)begin if(r11[i])begin //строчка которую пропустил k <=i;end end if( k > 14 ) //соответственно для значений выше 32767 R1[15:0]<={r11[28],r11[k:k-14]}; if( k <=14 ) //соответственно для значений ниже 16384
×
×
  • Создать...