4 instr_r, instr_a_, instr_d,
5 fabric_in_r, fabric_in_a_, fabric_in_d,
6 fabric_out_r_, fabric_out_a, fabric_out_d_,
7 ship_r, ship_a_, ship_d,
8 kill_r, kill_a_, kill_d,
9 recycle_r_, recycle_a, recycle_d_
17 reg parse_instruction;
19 reg [(`COUNT_BITS-1):0] kill_count;
20 reg [(`INSTRUCTION_WIDTH-1):0] instruction;
22 `input(instr_r, instr_a, instr_a_, [(`INSTRUCTION_WIDTH-1):0], instr_d)
23 `input(fabric_in_r, fabric_in_a, fabric_in_a_, [(`PACKET_WIDTH-1):0], fabric_in_d)
24 `output(fabric_out_r, fabric_out_r_, fabric_out_a, [(`PACKET_WIDTH-1):0], fabric_out_d_)
25 `defreg(fabric_out_d_, [(`PACKET_WIDTH-1):0], fabric_out_d)
26 `input(ship_r, ship_a, ship_a_, [(`DATAWIDTH-1):0], ship_d)
27 `input(kill_r, kill_a, kill_a_, [(`COUNT_WIDTH-1):0], kill_d)
28 `output(recycle_r, recycle_r_, recycle_a, [(`INSTRUCTION_WIDTH-1):0], recycle_d_)
29 assign recycle_d_ = instruction;
31 always @(posedge clk) begin
34 `onwrite(recycle_r, recycle_a)
40 if (!have_instruction && !parse_instruction) begin
41 `onread(instr_r, instr_a)
42 instruction = instr_d;
43 parse_instruction = 1;
48 // FIXME: actually don't want to kill partway through an instruction
49 `onread(kill_r, kill_a)
53 if (have_instruction && (kill_count > 0)) begin
54 kill_count = kill_count - 1;
59 if (parse_instruction) begin
60 have_token = !`instruction_bit_tokenin(instruction);
61 have_data = !`instruction_bit_datain(instruction);
62 `packet_dest(fabric_out_d) = `instruction_bit_dest(instruction);
63 send_data = !`instruction_bit_dataout(instruction);
64 send_token = !`instruction_bit_tokenout(instruction);
66 parse_instruction = 0;
69 if (have_instruction && !have_token) begin
70 `onread(fabric_in_r, fabric_in_a)
75 if (have_instruction && !have_data) begin
76 `onread(ship_r, ship_a)
77 if (`instruction_bit_latch(instruction)) begin
78 `packet_data(fabric_out_d) = ship_d;
84 if (have_instruction && have_data && have_token) begin
85 if (!send_data || !send_token) begin
86 `onwrite(fabric_out_r, fabric_out_a)
93 if (have_instruction && have_data && have_token && send_data && send_token) begin
94 if (`instruction_count(instruction)==1) begin
98 if (`instruction_count(instruction)>0) begin
99 `instruction_count(instruction) = `instruction_count(instruction) - 1;
101 if (`instruction_bit_recycle(instruction)) begin
102 have_instruction = 0;
105 parse_instruction = 1;