`include "macros.v" module outbox(clk, instr_r, instr_a_, instr_d, fabric_in_r, fabric_in_a, fabric_in_d, fabric_out_r, fabric_out_a, fabric_out_d, ship_r, ship_a, ship_d); input clk; input instr_r; output instr_a_; reg instr_a; assign instr_a_ = instr_a; input [(`INSTRUCTION_WIDTH-1):0] instr_d; wire [(`INSTRUCTION_WIDTH-1):0] instr_d2; wire [(`INSTRUCTION_WIDTH-1):0] instr_d0; wire [(`INSTRUCTION_WIDTH-1):0] recycle_d; input ship_r; output ship_a; input [(`DATAWIDTH-1):0] ship_d; input fabric_in_r; output fabric_in_a; input [(`PACKET_WIDTH-1):0] fabric_in_d; wire [(`PACKET_WIDTH-1):0] fabric_in_d2; output fabric_out_r; input fabric_out_a; output [(`PACKET_WIDTH-1):0] fabric_out_d; reg kill_r; wire kill_a; reg [(`COUNT_WIDTH-1):0] kill_d; reg [(`INSTRUCTION_WIDTH-1):0] instruction; reg instr_rx; wire instr_ax; reg ifull; always @(posedge clk) begin if (!ifull) begin `onread(instr_r, instr_a) ifull = 1; instruction = instr_d; end end else begin if (`instruction_is_kill(instruction)) begin kill_d = `instruction_count(instruction); `onwrite(kill_r, kill_a) ifull = 0; end end else begin `onwrite(instr_rx, instr_ax) ifull = 0; end end end end fifo4 dfifo(clk, fabric_in_r, fabric_in_a, fabric_in_data, fabric_in_r2, fabric_in_a2, fabric_in_data2); funnel ifunnel(clk, instr_r0, instr_a0, instr_d0, instr_rx, instr_ax, instruction, recycle_r, recycle_a, recycle_d); fifo4 ififo(clk, instr_r0, instr_a0, instr_d0, instr_r2, instr_a2, instr_d2); outboxcore ob(clk, instr_r2, instr_a2, instr_d2, fabric_in_r2, fabric_in_a2, fabric_in_d2, fabric_out_r, fabric_out_a, fabric_out_d, ship_r, ship_a, ship_d, kill_r, kill_a, kill_d, recycle_r, recycle_a, recycle_d); endmodule