Ошибка в окне вывода Xilinx, как показано на диаграмме ниже для 32-битной логики c с использованием уровня шлюза - PullRequest
0 голосов
/ 03 апреля 2020

Ниже приведен код для 32-битного модуля logi c с нижеприведенной функцией logi c на диаграмме. Я не уверен, где я иду не так. Я попытался внести изменения в функцию logi c бита выбора 's', но она, похоже, не работает.

module ALU_unit(output out, input x, input y, input [1:0] s);
wire ns0, ns1;
wire w0,w1,w2,w3;
wire t1,t2,t3,t4;

and (t1,x,y);
or (t2,x,y);
xor (t3,x,y);
nor (t4,x,y);

not (ns0, s[0]);
not (ns1, s[1]);
and (w0, t1, ns0, ns1);
and (w1, t2, s[0], ns1);
and (w2, t3, ns0, s[1]);
and (w3, t4, s[0], s[1]);
or (out, w0, w1, w2, w3);
endmodule

module stimulus;

reg [31:0] x, y;
reg [1:0] s;
wire [31:0] out;

ALU_unit m0(out[0], x[0], y[0], s[0]);
ALU_unit m1(out[1], x[1], y[1], s[1]);
ALU_unit m2(out[2], x[2], y[2], s[2]);
ALU_unit m3(out[3], x[3], y[3], s[3]);
ALU_unit m4(out[4], x[4], y[4], s[4]);
ALU_unit m5(out[5], x[5], y[5], s[5]);
ALU_unit m6(out[6], x[6], y[6], s[6]);
ALU_unit m7(out[7], x[7], y[7], s[7]);
ALU_unit m8(out[8], x[8], y[8], s[8]);
ALU_unit m9(out[9], x[9], y[9], s[9]);
ALU_unit m10(out[10], x[10], y[10], s[10]);
ALU_unit m11(out[11], x[11], y[11], s[11]);
ALU_unit m12(out[12], x[12], y[12], s[12]);
ALU_unit m13(out[13], x[13], y[13], s[13]);
ALU_unit m14(out[14], x[14], y[14], s[14]);
ALU_unit m15(out[15], x[15], y[15], s[15]);
ALU_unit m16(out[16], x[16], y[16], s[16]);
ALU_unit m17(out[17], x[17], y[17], s[17]);
ALU_unit m18(out[18], x[18], y[18], s[18]);
ALU_unit m19(out[19], x[19], y[19], s[19]);
ALU_unit m20(out[20], x[20], y[20], s[20]);
ALU_unit m21(out[21], x[21], y[21], s[21]);
ALU_unit m22(out[22], x[22], y[22], s[22]);
ALU_unit m23(out[23], x[23], y[23], s[23]);
ALU_unit m24(out[24], x[24], y[24], s[24]);
ALU_unit m25(out[25], x[25], y[25], s[25]);
ALU_unit m26(out[26], x[26], y[26], s[26]);
ALU_unit m27(out[27], x[27], y[27], s[27]);
ALU_unit m28(out[28], x[28], y[28], s[28]);
ALU_unit m29(out[29], x[29], y[29], s[29]);
ALU_unit m30(out[30], x[30], y[30], s[30]);
ALU_unit m31(out[31], x[31], y[31], s[31]);

initial
begin
$monitor("Input is %d %d, output is %d \n\n", x, y, out);
x = 32'd111; y = 32'd222;

#1 s= 2'b00;
#1 s= 2'b01;
#1 s= 2'b10;
#1 s= 2'b11;

end
endmodule

Ниже приведено изображение модуля logi c, Ошибка и выше упомянутый код в уровне ворот Verilog. enter image description here

enter image description here

Ответы [ 2 ]

1 голос
/ 03 апреля 2020

вы не создаете экземпляр 32-битного ALU в Design, вместо этого вы кодировали для 1-битного ALU и делаете его несколько экземпляров в Test-bench.now, приходя к проблеме из блока стимулов, для которого вы не проходите 2-битный При выборе операции logi c вместо этого вы отправляете 1-битный код для выбора, поэтому код будет оптимизирован, поэтому предупреждения отображаются в инструменте EDA.

module alu_unit(
   output      out
  ,input       x,y
  ,input [1:0] s
);

  wire ns0, ns1;
  wire w0,w1,w2,w3;
  wire t1,t2,t3,t4;

  and  u_gate_inst_0(t1,x,y);
  or   u_gate_inst_1(t2,x,y);
  xor  u_gate_inst_2(t3,x,y);
  nor  u_gate_inst_3(t4,x,y);

  not u_mux_inst_0 (ns0, s[0]);
  not u_mux_inst_1 (ns1, s[1]);
  and u_mux_inst_2 (w0 , t1, ns0 , ns1   );
  and u_mux_inst_3 (w1 , t2, ns1 , s[0]  );
  and u_mux_inst_4 (w2 , t3, ns0 , s[1]  );
  and u_mux_inst_5 (w3 , t4, s[0], s[1]  );
  or  u_mux_inst_6 (out, w0, w1  , w2, w3);

endmodule

module alu_top(
    output [31:0] out
   ,input  [31:0] x,y
   ,input  [1:0]  s
);

 alu_unit u_alu_unit [31:0] (out,x,y,s);

endmodule

module stimulus;

 reg  [31:0] x, y;
 reg  [1:0]  s;
 wire [31:0] out;

 alu_top u_alu_top (out,x,y,s);

 initial begin
    $monitor("Input is %d %d, output is %d \n\n", x, y, out);
    x = 32'd111; y = 32'd222;

    #1 s= 2'b00;
    #1 s= 2'b01;
    #1 s= 2'b10;
    #1 s= 2'b11;

 end
endmodule
0 голосов
/ 03 апреля 2020

Ошибка, которую вы получаете, состоит в том, что вы объявляете сигнал выбора как двухбитное регистр, а затем пытаетесь получить доступ к 32-битному его. Вы должны использовать оба бита сигнала выбора для каждого экземпляра ALU_unit, чтобы получить поведение, указанное в спецификации c.

...