Я сталкиваюсь с "Ошибка несоответствия размера" в Verilog
parameter N1 = 5;
parameter N2 = 5;
wire [(N1+N2-1):0] seckey [8:1];
shiftreg #(.depth(N1+N2-1)) sr1( .clk(clk), .reset(reset), .data_in(muxout[1]), .data_out(seckey[0]));
// ------------------------------------------------ -------------------------- //
module shiftreg(
input clk,
input reset,
input data_in,
output data_out
);
parameter depth = 9;
wire [depth:0] connect_wire;
wire [depth:0] data_out;
//wire [depth:0] data_out;
assign connect_wire[0] = data_in;
assign data_out[depth:0] = connect_wire[depth:0];
genvar i;
generate
for(i=1; i<=depth; i=i+1) begin: loop1
ff dff(.d(connect_wire[i-1]), .clk(clk), .reset(reset), .q(connect_wire[i]));
end
endgenerate
endmodule
// ------------------------------------------------ -------------------- //
module ff(
input d,
input clk,
input reset,
output reg q
);
always @ (posedge clk or posedge reset)
begin
if (reset) begin
q <= 1'b0;
end
else begin
q <= d;
end
end
endmodule
// ------------------------------------------------ ------------------------ //
Значения N1 и N2 - 5. Я получаю сообщение об ошибке "Несоответствие размера в соединении порта (data_out). Формальный размер порта 10-битный, а фактический размер сигнала 1-битный"
Я установил размер порта data_out равным 10 битам, но он по-прежнему показывает размер сигнала равным 1 биту.
1 ответ
Чтобы установить размер data_out, вам нужно установить размер, в котором вы объявляете параметр. Попробуй шапку ниже
module shiftreg(clk, reset, data_in, data_out);
parameter depth = 9;
input clk;
input reset;
input data_in;
input [depth:0] data_out;
Также:
assign data_out[depth:0] = connect_wire[depth:0];
можно заменить на
assign data_out = connect_wire;