From 5d3a9cfc3eca07ffe30919b036f04c8d22c7557a Mon Sep 17 00:00:00 2001 From: adam Date: Thu, 8 Feb 2007 04:48:53 +0100 Subject: [PATCH] reorganization of benkobox code to fix a few quirks --- src/edu/berkeley/fleet/slipway/box.inc | 141 +++++++++++++------------------- 1 file changed, 55 insertions(+), 86 deletions(-) diff --git a/src/edu/berkeley/fleet/slipway/box.inc b/src/edu/berkeley/fleet/slipway/box.inc index 7542246..19ca0c2 100644 --- a/src/edu/berkeley/fleet/slipway/box.inc +++ b/src/edu/berkeley/fleet/slipway/box.inc @@ -1,10 +1,11 @@ reg have_instruction; - reg have_token; - reg have_data; - reg send_token; - reg send_data; + reg need_to_read_token; + reg need_to_read_data; + reg need_to_send_token; + reg need_to_send_data; reg parse_instruction; reg do_recycle; + reg fire_ok; reg [(`COUNT_BITS-1):0] kill_count; reg [(`INSTRUCTION_WIDTH-1):0] instruction; @@ -67,15 +68,38 @@ parse_instruction = 0; end - end else begin + end else if (fire_ok) begin + if (need_to_send_data) begin + `onwrite(`data_out_r, `data_out_a) + need_to_send_data = 0; + end - if (!have_instruction && !parse_instruction) begin - `onread(instr_r2, instr_a2) - instruction = instr_d2; - parse_instruction = 1; + end else if (need_to_send_token) begin + `onwrite(`token_out_r, `token_out_a) + need_to_send_token = 0; end + + end else begin + fire_ok = 0; + case (`instruction_count(instruction)) + 0: begin end + 1: have_instruction = 0; + default: `instruction_count(instruction) = `instruction_count(instruction) - 1; + endcase + if (have_instruction && `instruction_bit_recycle(instruction)) begin + do_recycle = 1; + end else begin + parse_instruction = have_instruction; + end + end + + end else if (!have_instruction && !parse_instruction) begin + `onread(instr_r2, instr_a2) + instruction = instr_d2; + parse_instruction = 1; end + end else begin // FIXME: actually don't want to kill partway through an instruction `onread(kill_r, kill_a) kill_count = kill_count + kill_d; @@ -88,92 +112,37 @@ end if (parse_instruction) begin - have_token = !`instruction_bit_tokenin(instruction); - have_data = !`instruction_bit_datain(instruction); - `packet_dest(`data_out_d) = `instruction_bit_dest(instruction); - send_data = !`instruction_bit_dataout(instruction); - send_token = !`instruction_bit_tokenout(instruction); + need_to_read_token = `instruction_bit_tokenin(instruction); + need_to_read_data = `instruction_bit_datain(instruction); + `packet_dest(`data_out_d) = `instruction_bit_dest(instruction); + `packet_dest(`token_out_d) = `instruction_bit_dest(instruction); + need_to_send_data = `instruction_bit_dataout(instruction); + need_to_send_token = `instruction_bit_tokenout(instruction); have_instruction = 1; parse_instruction = 0; end -/* - if (!`token_in_r && `token_in_a) `token_in_a = 0; - if (!`data_in_r && `data_in_a) `data_in_a = 0; - if (`token_out_r && `token_out_a) `token_out_r = 0; - if (`data_out_r && `data_out_a) `data_out_r = 0; + + // return to zero + if (!`token_in_r && `token_in_a) `token_in_a = 0; + if (!`data_in_r && `data_in_a) `data_in_a = 0; + if (have_instruction && - (have_token || `token_in_r) && - (have_data || `data_in_r) && - (send_data || !`data_out_a) && - (send_token || !`token_out_a) && + (!need_to_read_token || (`token_in_r && !`token_in_a)) && + (!need_to_read_data || (`data_in_r && !`data_in_a)) ) begin - if (!have_token) begin - token_in_a = 1; - have_token = 1; - end - if (!have_data) begin - data_in_a = 1; - have_data = 1; - end - fire_ok = 1; - end - - if (fire_ok) begin - if (send_data) begin - `onwrite(`data_out_r, `data_out_a) - send_data = 0; - end + if (need_to_read_token) begin + `token_in_a = 1; + need_to_read_token = 0; end - if (send_token) begin - `onwrite(`token_out_r, `token_out_a) - send_token = 0; - end + if (need_to_read_data) begin + `data_in_a = 1; + need_to_read_data = 0; end - if (!send_data && !send_token) begin - fire_ok = false; -// die here - end - end -*/ - if (have_instruction && !have_token) begin - `onread(`token_in_r, `token_in_a) - have_token = 1; - end - end - - if (have_instruction && !have_data) begin - `onread(`data_in_r, `data_in_a) - if (`instruction_bit_latch(instruction)) begin - `packet_data(`data_out_d) = `data_in_d; - end - have_data = 1; - end - end - - if (have_instruction && have_data && have_token) begin - // FIXME: add token send on diff port - if (!send_data || !send_token) begin - `onwrite(`data_out_r, `data_out_a) - send_data = 1; - send_token = 1; - end + if (`instruction_bit_latch(instruction)) begin + `packet_data(`data_out_d) = `data_in_d; end + fire_ok = 1; end - if (have_instruction && have_data && have_token && send_data && send_token) begin - - case (`instruction_count(instruction)) - 0: begin end - 1: have_instruction = 0; - default: `instruction_count(instruction) = `instruction_count(instruction) - 1; - endcase - - if (have_instruction && `instruction_bit_recycle(instruction)) begin - do_recycle = 1; - end else begin - parse_instruction = have_instruction; - end - - end end end -- 1.7.10.4