blob: 473418f79d01bca52267faa27a0eaf3cca1129ca [file] [log] [blame]
`timescale 1ns / 1ps
module el_adder_linked#(
parameter WIDTH = 32,
parameter RAIL_NUM = 2,
parameter IN_NUM = 3,
parameter OUT_NUM = 2
)
(
//---------CTRL-----------------------
input rst,
//---------LINK-A-IN------------------
output ack_a_o,
input [RAIL_NUM*WIDTH-1 : 0] in_a,
//---------LINK-B-IN------------------
output ack_b_o,
input [RAIL_NUM*WIDTH-1 : 0] in_b,
//---------LINK-C-IN------------------
output ack_c_o,
input [RAIL_NUM-1 : 0] in_c,
//---------LINK-S-OUT-----------------
output [RAIL_NUM*WIDTH-1 : 0] out_s,
//---------LINK-C-OUT-----------------
output [RAIL_NUM-1 : 0] out_c,
//------------------------------------
input ack_i
);
wire [WIDTH : 0] ack_i_link;
assign ack_i_link = {(WIDTH + 1){ack_i}};
wire [WIDTH-1 : 0] ack_add_s;
assign ack_add_s = {WIDTH{ack_add}};
wire ack_add;
wire [WIDTH-1 : 0] ack_a;
wire [WIDTH-1 : 0] ack_b;
wire [RAIL_NUM*WIDTH-1 : 0] out_s_add;
wire [RAIL_NUM-1 : 0] out_c_add;
el_adder #
(
.WIDTH(WIDTH)
)
adder
(
//---------CTRL----------------
.rst(rst),
//---------LINK-A-IN-----------
.ack_a_o(ack_a),
.in_a(in_a),
//---------LINK-B-IN-----------
.ack_b_o(ack_b),
.in_b(in_b),
//---------LINK-C-IN-----------
.ack_c_o(ack_c_o),
.in_c(in_c),
//---------LINK-S-OUT----------
.ack_s_i(ack_add_s),
.out_s(out_s_add),
//---------LINK-C-OUT----------
.ack_c_i(ack_add),
.out_c(out_c_add)
//-----------------------------
);
wire ack_l;
wire [RAIL_NUM*(WIDTH + 1)-1 : 0] dat_l;
el_link#
(
.LINK_WIDTH(WIDTH + 1),
.RAIL_NUM(RAIL_NUM)
)
link_1
(
.rst(rst),
.ack_o(ack_add),
.in({out_c_add,out_s_add}),
.ack_i(ack_l),
.out(dat_l)
);
el_link#
(
.LINK_WIDTH(WIDTH + 1),
.RAIL_NUM(RAIL_NUM)
)
link_2
(
.rst(rst),
.ack_o(ack_l),
.in(dat_l),
.ack_i(ack_i),
.out({out_c,out_s})
);
c_elem#
(
.IN_NUM(WIDTH)
)
c_join_a
(
.rst(rst),
.in(ack_a),
.out(ack_a_o)
);
c_elem#
(
.IN_NUM(WIDTH)
)
c_join_b
(
.rst(rst),
.in(ack_b),
.out(ack_b_o)
);
endmodule