редактирование арифметики в Verilog (расширение знака)

(отредактировано) Я работаю над проектом Verilog Arithmetic, и я застрял в части расширения знака (предполагая, что это проблема). У меня есть 4-битный вход A, B и должен быть 8-битный выход. для некоторых из процессов (сумма, подпрограмма ...) мне нужно использовать знак расширения, чтобы сделать 8-битный вывод. так что для основной части арифметики у меня есть этот код. это половина кода. я не включил половину, потому что она длинная ..

module arithmetic(A, B, AN0, DP, sum, sub, mult, div, comp, shiftLeft, 
shiftRight, signExtend);

   input signed [3:0] A, B;

   output [7:0] sum, sub, mult, div, comp, shiftLeft, shiftRight, 
   signExtend;

   output AN0, DP;

   //sum
   reg [4:0] qsum;   
   always@ (A, B)
      qsum = A+B;

   assign sum = {{3{qsum[4]}},qsum};

   //sub
   reg [4:0] qsub;

   always@ (A, B)
      qsub = A-B;

   assign sub = {{3{qsub[4]}},qsub};

   //mult
   reg [7:0] qmult;
   always@ (A, B)
      qmult = A * B;

   assign mult = qmult;

и когда я проверил свою симуляцию, у нее нет никаких значений, кроме Z и Xs. он даже не показывает никаких входных значений. почему это происходит ?? Спасибо

(отредактировано) это мой код тестового стенда. есть 8 операций (сумма, вычитание, умножение, деление, компаратор, сдвиг, сдвиг вправо, расширение знака)

module lap3_top_tb();
reg signed [3:0] A, B;
reg [2:0] Operation;
wire [7:0] Result;
wire DP, AN0;

lab3_top ulap3_top(
  .A(A),
  .B(B),
  .Operation(Operation),
  .Result(Result),
  .DP(DP),
  .AN0(AN0)
);

initial begin
   A = 6; B = 7; Operation = 0;
   #20;
   A = -6; B = -7; Operation = 0;
   #20;      
   A = 6; B = 7; Operation = 1;
   #20;
   A = -6; B = -7; Operation = 1;
   #20;
   A = 6; B = 7; Operation = 2;
   #20;
   A = -6; B = 7; Operation = 2;
   #20;
   A = 7; B = 4; Operation = 3;
   #20;
   A = 7; B = 0; Operation = 3;
   #20;
   A = 6; B = 7; Operation = 4;
   #20;
   A = -6; B = -7; Operation = 4;
   #20;
   A = 1; B = 6; Operation = 5;
   #20;
   A = 1; B = -6; Operation = 5;
   #20;
   A = 1; B = 6; Operation = 6;
   #20;
   A = 1; B = -6; Operation = 6;
   #20;
   A = 6; B = 0; Operation = 7;
   #20;
   A = -5; B = 0; Operation = 7;
   #20;
end

endmodule

файл lap3_top находится здесь. (mux_8_1 выберет вывод и выведет его через Result. Если вам нужен код, дайте мне знать! но я думаю, что мультиплексор работает нормально)

module lap3_top(A, B, Operation, Result, AN0, DP);
   input signed [3:0] A, B;
   input [2:0] Operation;
   output AN0, DP;

   output [7:0] Result;
   wire a, b, c, d, e, f, g, h;

   arithmetic uarithmetic(
   .A(A), 
   .B(B), 
   .AN0(AN0), 
   .DP(DP), 
   .sum(a), 
   .sub(b), 
   .mult(c), 
   .div(d), 
   .comp(e), 
   .shiftLeft(f), 
   .shiftRight(g), 
   .signExtend(h)
   );

   mux_8_1 umux8_1(
   .A(a), 
   .B(b), 
   .C(c), 
   .D(d), 
   .E(e), 
   .F(f), 
   .G(g), 
   .H(h), 
   .Operation(Operation), 
   .Result(Result)
   );

endmodule

спасибо вам огромное, ребята!


person Jake    schedule 14.04.2017    source источник
comment
Привет, Джейк, не могли бы вы поделиться своим кодом тестовой среды?   -  person Alper Kucukkomurler    schedule 14.04.2017
comment
Не могли бы вы также опубликовать свой lab3_top модуль, который видит все подключения от testbench к модулю sum?   -  person Roman    schedule 14.04.2017


Ответы (1)


Я пытаюсь смоделировать ваш код и обнаружил в нем следующую ошибку: когда вы создаете экземпляр верхнего модуля в модуле testbench, вы используете lab3_top ulap3_top(...); la b 3_top имя модуля, но модуль, который вы хотели бы иметь, имеет другое name module lap3_top(...); la p 3_top.

Я изменил имя, и все работает хорошо (на осциллограмме вы можете видеть состояние ZZ, потому что у меня нет модуля mux_8_1 в коде, а некоторые операции не имеют описания)  введите описание изображения здесь

P.S. Кстати, я предполагаю, что вы используете Vivado, когда добавляете этот тег. И если это так, есть подсказка, как проверять такие ошибки (с разными именами в модуле и в экземпляре, или когда у вас есть ошибки в модуле, которые не могут быть скомпилированы в библиотеке). Если вы развернете все свои модули в иерархии, вы найдете ? модуль входа в систему с ошибкой. введите здесь описание изображения

person Roman    schedule 15.04.2017
comment
@Jake Я также добавил дополнительную информацию, которая, надеюсь, поможет вам в будущей работе с Vivado. - person Roman; 15.04.2017