пытается загрузить нулевые биты в регистр - PullRequest
0 голосов
/ 07 июня 2018

Я использую modelsim с verilog. В настоящее время я пытаюсь построить 32-битный множитель, используя 8-битный множитель.Я делю умножение на 16 этапов, где на каждом этапе я умножаю 8 бит из одного числа на 8 бит другого числа, таким образом, в целом покрывая 2 целых 32-битных числа.я столкнулся с проблемой при попытке загрузить «нулевой байт» (8 битов нулей, которые находятся в определенном месте в числе), регистр, который отвечает за сохранение этих битов, не загружает нули и вместо этого сохраняет последние8-битное число, которое не равно нулю.как заставить этот регистр хранить нули.Я добавляю свой код.Большое спасибо.

reg [8:0] outmuxa,outmuxb;
always @(a_sel or b_sel) begin
    case(a_sel) 
        00:outmuxa={1'b0,a[7:0]};
        01:outmuxa={1'b0,a[15:8]};
        10:outmuxa={1'b0,a[23:16]};
        11:outmuxa={1'b0,a[31:24]};
        endcase
    case(b_sel) 
        00:outmuxb={1'b0,b[7:0]};
        01:outmuxb={1'b0,b[15:8]};
        10:outmuxb={1'b0,b[23:16]};
        11:outmuxb={1'b0,b[31:24]};
        endcase
    end

1 Ответ

0 голосов
/ 08 июня 2018

Здесь я вижу две проблемы:

  1. Ваше заявление о чувствительности:

    always @(a_sel or b_sel) begin
    

    не включает сигналы a или b, на которые есть ссылки вalways блок.Это приведет к тому, что мультиплексор будет обновлять свой выход только при изменении a_sel или b_sel, а не при изменении входа.(Это вряд ли можно синтезировать на аппаратном уровне!)

    Все современные версии Verilog поддерживают always @(*), который чувствителен ко всем сигналам, на которые есть ссылки в блоке.Используйте это вместо этого.

  2. Ваши case утверждения относятся к 10 и 11.Числа в Verilog по умолчанию интерпретируются как десятичные, поэтому ваш case интерпретируется как охватывающий ноль, один, десять и одиннадцать, и использует поведение по умолчанию (еще один фиксатор!) Для всех других значений.

    Если выхотите, чтобы ваш case покрыл четыре возможных значения 2-битного сигнала - что я вполне уверен, что вы делаете!- префикс значений регистра с 'b (например, 2'b10).В противном случае добавьте кейс default:.

...