Estoy intentando capturar la ejecución de la adición de dos números de N bits con una transferencia. Mi código es:
module alu(a, b, f, cOut, z);
parameter size = 8; // how many bits is each input
parameter n = size - 1;
input a; // operand a
input b; // operand b
input f;
wire [n:0] a;
wire [n:0] b;
wire [2:0] f;
wire [n:0] sum;
assign {cOut,sum} = {(n+1){a + b + {n{f[2]}}}};
En mi replicador interno, estoy tratando de extender en cero el bit en f [2] para que sea el tamaño de los operandos (f [2] es el arrastre). Con el replicador externo, estoy tratando de extender a cero la adición para que quepa en n + 1 bits. Luego, cOut se establecerá en el MSB, que representará la ejecución.
Aquí está el error que Verilator informa:
% verilator -cc alu.v
%Warning-WIDTH: alu.v:22: Operator ASSIGNW expects 9 bits on the Assign RHS, but Assign RHS's REPLICATE generates 64 bits.
%Warning-WIDTH: Use "/* verilator lint_off WIDTH */" and lint_on around source to disable this message.
%Error: Exiting due to 1 warning(s)
%Error: Command Failed /usr/bin/verilator_bin -cc alu.
¿Alguien sabe por qué Verilator piensa que el RHS será de 64 bits? ¿Y hay una mejor manera de escribir esto sin replicadores anidados en Verilog?