diff --git a/vtr_flow/benchmarks/verilog/LU32PEEng.v b/vtr_flow/benchmarks/verilog/LU32PEEng.v index 25d12149554..b0e604dcd2d 100644 --- a/vtr_flow/benchmarks/verilog/LU32PEEng.v +++ b/vtr_flow/benchmarks/verilog/LU32PEEng.v @@ -508,7 +508,7 @@ begin end end -always @ (cur_state) +always @ (*) begin case (cur_state) `MODE1: @@ -1064,7 +1064,7 @@ begin end // connections to top block memory ports -always @ (topSourceSel or topWriteSel or curReadDataLU or addResult31 or addResult30 or addResult29 or addResult28 or addResult27 or addResult26 or addResult25 or addResult24 or addResult23 or addResult22 or addResult21 or addResult20 or addResult19 or addResult18 or addResult17 or addResult16 or addResult15 or addResult14 or addResult13 or addResult12 or addResult11 or addResult10 or addResult9 or addResult8 or addResult7 or addResult6 or addResult5 or addResult4 or addResult3 or addResult2 or addResult1 or addResult0) +always @ (*) begin if (topSourceSel == 1'b0) case (topWriteSel) @@ -1765,7 +1765,7 @@ else if (waitCycles >7'b0000000) end // determining next state of main FSM -always @ (currentState or start or mode or m or n or counter or mdivk or topIdxCounter or doneFetchRow or divCounter or j or stop2 or waitCycles or stop or i1) +always @ (*) begin case (currentState) `cSETUP: @@ -1957,7 +1957,7 @@ begin endcase end -always @ (currentRowState or currentState or nextState or i1 or topIdxCounter or mdivk or msIdxCounter or readRowCounter or j or n or mode) +always @ (*) begin if (currentRowState == `cDONE_FETCH_ROW) doneFetchRow = 1; @@ -1975,7 +1975,7 @@ begin end // second FSM that controls the control signals to temp_top block -always @ (currentRowState or nextTopIdxCounter or n or startFetchRow or loadRow or topIdx or mdivk or nextState) +always @ (*) begin case (currentRowState) `cFETCH_ROW: @@ -2606,9 +2606,9 @@ assign j = |byteena_a; assign q = subwire | dummy; assign dummy = value_out & 1024'b0; -defparam inst1.ADDR_WIDTH = `rRAMSIZEWIDTH; -defparam inst1.DATA_WIDTH = `RAMWIDTH; -dual_port_ram inst1( +dual_port_ram + # (.ADDR_WIDTH(`rRAMSIZEWIDTH), .DATA_WIDTH(`RAMWIDTH)) +inst1( .clk (clk), .we1(wren), .we2(1'b0), @@ -2650,9 +2650,9 @@ assign j = |byteena_a; assign q = subwire | dummy; assign dummy = value_out & 1024'b0; -defparam inst1.ADDR_WIDTH = `rRAMSIZEWIDTH; -defparam inst1.DATA_WIDTH = `RAMWIDTH; -dual_port_ram inst1( +dual_port_ram + # (.ADDR_WIDTH(`rRAMSIZEWIDTH), .DATA_WIDTH(`RAMWIDTH)) +inst1( .clk (clk), .we1(wren), .we2(1'b0), @@ -2694,9 +2694,9 @@ assign j = |byteena_a; assign q = subwire | dummy; assign dummy = value_out & 1024'b0; -defparam inst1.ADDR_WIDTH = `rRAMSIZEWIDTH; -defparam inst1.DATA_WIDTH = `RAMWIDTH; -dual_port_ram inst1( +dual_port_ram + # (.ADDR_WIDTH(`rRAMSIZEWIDTH), .DATA_WIDTH(`RAMWIDTH)) +inst1( .clk (clk), .we1(wren), .we2(1'b0), @@ -2737,9 +2737,9 @@ assign j = |byteena_a; assign q = subwire | dummy; assign dummy = value_out & 1024'b0; -defparam inst1.ADDR_WIDTH = `rRAMSIZEWIDTH; -defparam inst1.DATA_WIDTH = `RAMWIDTH; -dual_port_ram inst1( +dual_port_ram + # (.ADDR_WIDTH(`rRAMSIZEWIDTH), .DATA_WIDTH(`RAMWIDTH)) +inst1( .clk (clk), .we1(wren), .we2(1'b0), @@ -2779,9 +2779,9 @@ module top_ram ( assign q = sub_wire0 | dummy; assign dummy = junk_output & 32'b0; - defparam inst2.ADDR_WIDTH = 12; - defparam inst2.DATA_WIDTH = 32; - dual_port_ram inst2( +dual_port_ram + # (.ADDR_WIDTH(12), .DATA_WIDTH(32)) +inst2( .clk (clk), .we1(wren), .we2(1'b0), @@ -3324,9 +3324,10 @@ begin // : STATUS_COUNTER else if ((wrreq) && (!rdreq) && (status_cnt != 64 )) status_cnt <= status_cnt + 1'b1; end - defparam ram_addr.ADDR_WIDTH = `rFIFORSIZEWIDTH; - defparam ram_addr.DATA_WIDTH = `rFIFOINPUTWIDTH; - dual_port_ram ram_addr( + + dual_port_ram + # (.ADDR_WIDTH(`rFIFORSIZEWIDTH), .DATA_WIDTH(`rFIFOINPUTWIDTH)) +ram_addr( .we1 (wrreq) , // write enable .we2 (rdreq) , // Read enable .addr1 (wr_pointer) , // address_0 input @@ -3454,9 +3455,9 @@ begin // : STATUS_COUNTER end assign usedw = status_cnt[`wFIFOSIZEWIDTH-1:0]; - defparam ram_addr.ADDR_WIDTH = `wFIFOSIZEWIDTH; - defparam ram_addr.DATA_WIDTH = `wFIFOINPUTWIDTH; - dual_port_ram ram_addr( + dual_port_ram + # (.ADDR_WIDTH(`wFIFOSIZEWIDTH), .DATA_WIDTH(`wFIFOINPUTWIDTH)) +ram_addr( .we1 (wrreq) , // write enable .we2 (rdreq) , // Read enable .addr1 (wr_pointer) , // address_0 input @@ -3531,9 +3532,9 @@ begin // : STATUS_COUNTER status_cnt <= status_cnt + 1; end - defparam ram_addr.ADDR_WIDTH = `aFIFOSIZEWIDTH; - defparam ram_addr.DATA_WIDTH = `aFIFOWIDTH; - dual_port_ram ram_addr( + dual_port_ram + # (.ADDR_WIDTH(`aFIFOSIZEWIDTH), .DATA_WIDTH(`aFIFOWIDTH)) +ram_addr( .we1 (wrreq) , // write enable .we2 (rdreq) , // Read enable .addr1 (wr_pointer) , // address_0 input @@ -3603,9 +3604,10 @@ begin // : STATUS_COUNTER else if ((wrreq) && (!rdreq) && (status_cnt != 16 )) status_cnt <= status_cnt + 1'b1; end - defparam ram_addr.ADDR_WIDTH = `mFIFOSIZEWIDTH; - defparam ram_addr.DATA_WIDTH = `mFIFOWIDTH; - dual_port_ram ram_addr( + + dual_port_ram + # (.ADDR_WIDTH(`mFIFOSIZEWIDTH), .DATA_WIDTH(`mFIFOWIDTH)) + ram_addr( .we1 (wrreq) , // write enable .we2 (rdreq) , // Read enable .addr1 (wr_pointer) , // address_0 input @@ -3676,7 +3678,7 @@ module fpu_add (clock, a1, b1, sum); reg smaller; //smaller is 1 if a < b, 0 otherwise //Shift mantissa's to have the same exponent - always @ (a or b) begin + always @ (*) begin //a_exp = a[30:23]; //b_exp = b[30:23]; //a_man = {1'b1, a[22:0]}; @@ -3861,7 +3863,7 @@ module fpu_add (clock, a1, b1, sum); end //Perform the addition operation - always @ (a_man or b_man or a or b) begin + always @ (*) begin if (a_man < b_man) begin smaller = 1'b1; end else begin @@ -3906,7 +3908,7 @@ module fpu_add (clock, a1, b1, sum); //Store the number // we already have the sign. - always @ (sum_man or a_exp) begin + always @ (*) begin if (sum_man[24])begin //shif sum >> by 1, add 1 to the exponent. sum[22:0] = sum_man[23:1]; sum[30:23] = a_exp + 8'b00000001; @@ -4044,7 +4046,7 @@ module fpu_div(clock, n, d, div); end //Find the exponent, store in div_exp. - always @ (n_exp or d_exp) begin + always @ (*) begin if (n_exp >= d_exp) begin div_exp = 8'b01111111 + (n_exp - d_exp); end else begin @@ -4057,12 +4059,12 @@ module fpu_div(clock, n, d, div); //Store the result. Shift exponents appropriately. Store sign. //Sign - always @ (n_sign or d_sign) begin + always @ (*) begin div[31] = n_sign ^ d_sign; end //Mantissa and Exponent - always @ (div_man or div_exp) begin + always @ (*) begin if (div_man[23]) begin //do nothing div[22:0] = div_man[22:0]; div[30:23] = div_exp; @@ -4209,7 +4211,7 @@ module div_24b(numer, denom, res); // end //res[23] - always @ (denom_pad or numer23) begin + always @ (*) begin if (denom_pad[23:0] <= numer23[46:23]) begin res[23] = 1'b1; @@ -4854,7 +4856,7 @@ assign shiftb = b[23 - 1] ? 1 : // If number is denorm, shift the significand the appropriate amount // assign shifteda = a[`WSIG-1:0] << shifta; //Must have constant shifts for ODIN - always @ (shifta or a) begin + always @ (*) begin case (shifta) 5'b00001: begin shifteda = a[`WSIG-1:0] << 5'b00001; @@ -4957,7 +4959,7 @@ assign shiftb = b[23 - 1] ? 1 : assign norma = aisdenorm ? shifteda : {1'b1, a[`WSIG-1:0]}; // assign shiftedb = b[`WSIG-1:0] << shiftb; - always @ (shiftb or b) begin + always @ (*) begin case (shiftb) 5'b00001: begin shiftedb = b[`WSIG-1:0] << 5'b00001; @@ -5170,7 +5172,7 @@ module shift(normalized, selectedexp, shiftprod, shiftexp, shiftloss); // shift significand //assign postshift = preshift >> actualshiftamt; //We can only have constant shifts for ODIN: - always @ (actualshiftamt or preshift) begin + always @ (*) begin case (actualshiftamt) 5'b00001: begin postshift = preshift >> 5'b00001; diff --git a/vtr_flow/benchmarks/verilog/LU64PEEng.v b/vtr_flow/benchmarks/verilog/LU64PEEng.v index e561bb89369..860e433da58 100644 --- a/vtr_flow/benchmarks/verilog/LU64PEEng.v +++ b/vtr_flow/benchmarks/verilog/LU64PEEng.v @@ -508,7 +508,7 @@ begin end end -always @ (cur_state) +always @ (*) begin case (cur_state) `MODE1: @@ -1224,7 +1224,7 @@ begin end // connections to top block memory ports -always @ (topSourceSel or topWriteSel or curReadDataLU or addResult63 or addResult62 or addResult61 or addResult60 or addResult59 or addResult58 or addResult57 or addResult56 or addResult55 or addResult54 or addResult53 or addResult52 or addResult51 or addResult50 or addResult49 or addResult48 or addResult47 or addResult46 or addResult45 or addResult44 or addResult43 or addResult42 or addResult41 or addResult40 or addResult39 or addResult38 or addResult37 or addResult36 or addResult35 or addResult34 or addResult33 or addResult32 or addResult31 or addResult30 or addResult29 or addResult28 or addResult27 or addResult26 or addResult25 or addResult24 or addResult23 or addResult22 or addResult21 or addResult20 or addResult19 or addResult18 or addResult17 or addResult16 or addResult15 or addResult14 or addResult13 or addResult12 or addResult11 or addResult10 or addResult9 or addResult8 or addResult7 or addResult6 or addResult5 or addResult4 or addResult3 or addResult2 or addResult1 or addResult0) +always @ (*) begin if (topSourceSel == 1'b0) case (topWriteSel) @@ -2149,7 +2149,7 @@ else if (waitCycles >8'b00000000) end // determining next state of main FSM -always @ (currentState or start or mode or m or n or counter or mdivk or topIdxCounter or doneFetchRow or divCounter or j or stop2 or waitCycles or stop or i1) +always @ (*) begin case (currentState) `cSETUP: @@ -2341,7 +2341,7 @@ begin endcase end -always @ (currentRowState or currentState or nextState or i1 or topIdxCounter or mdivk or msIdxCounter or readRowCounter or j or n or mode) +always @ (*) begin if (currentRowState == `cDONE_FETCH_ROW) doneFetchRow = 1; @@ -2359,7 +2359,7 @@ begin end // second FSM that controls the control signals to temp_top block -always @ (currentRowState or nextTopIdxCounter or n or startFetchRow or loadRow or topIdx or mdivk or nextState) +always @ (*) begin case (currentRowState) `cFETCH_ROW: @@ -3077,17 +3077,20 @@ module ram ( output [`RAMWIDTH-1:0] q; wire [`RAMWIDTH-1:0] value_out; wire [`RAMWIDTH-1:0] subwire; - assign q = subwire | dummy; + wire [`RAMWIDTH-1:0] dummy; wire [`RAMWIDTH-1:0] uselessdata; - assign uselessdata = 2048'b0; -wire j; -assign j = |byteena_a; - wire [`RAMWIDTH-1:0]dummy; - assign dummy = value_out & 2048'b0; - -defparam inst1.ADDR_WIDTH = `rRAMSIZEWIDTH; -defparam inst1.DATA_WIDTH = `RAMWIDTH; -dual_port_ram inst1( + wire j; + assign q = subwire | dummy; + + assign uselessdata = 2048'b0; + + assign j = |byteena_a; + + assign dummy = value_out & 2048'b0; + +dual_port_ram + # (.ADDR_WIDTH(`rRAMSIZEWIDTH), .DATA_WIDTH(`RAMWIDTH)) +inst1( .clk (clk), .we1(wren), .we2(1'b0), @@ -3120,17 +3123,18 @@ module ram1 ( output [`RAMWIDTH-1:0] q; wire [`RAMWIDTH-1:0] value_out; wire [`RAMWIDTH-1:0] subwire; - assign q = subwire | dummy; wire [`RAMWIDTH-1:0] uselessdata; - assign uselessdata = 2048'b0; -wire j; -assign j = |byteena_a; - wire [`RAMWIDTH-1:0]dummy; - assign dummy = value_out & 2048'b0; - -defparam inst1.ADDR_WIDTH = `rRAMSIZEWIDTH; -defparam inst1.DATA_WIDTH = `RAMWIDTH; -dual_port_ram inst1( + wire j; + wire [`RAMWIDTH-1:0]dummy; + + assign q = subwire | dummy; + assign uselessdata = 2048'b0; + assign j = |byteena_a; + assign dummy = value_out & 2048'b0; + +dual_port_ram + # (.ADDR_WIDTH(`rRAMSIZEWIDTH), .DATA_WIDTH(`RAMWIDTH)) +inst1( .clk (clk), .we1(wren), .we2(1'b0), @@ -3163,17 +3167,18 @@ module ram2 ( output [`RAMWIDTH-1:0] q; wire [`RAMWIDTH-1:0] value_out; wire [`RAMWIDTH-1:0] subwire; - assign q = subwire | dummy; wire [`RAMWIDTH-1:0] uselessdata; - assign uselessdata = 2048'b0; -wire j; -assign j = |byteena_a; - wire [`RAMWIDTH-1:0]dummy; - assign dummy = value_out & 2048'b0; - -defparam inst1.ADDR_WIDTH = `rRAMSIZEWIDTH; -defparam inst1.DATA_WIDTH = `RAMWIDTH; -dual_port_ram inst1( + wire j; + wire [`RAMWIDTH-1:0] dummy; + + assign q = subwire | dummy; + assign uselessdata = 2048'b0; + assign j = |byteena_a; + assign dummy = value_out & 2048'b0; + +dual_port_ram + # (.ADDR_WIDTH(`rRAMSIZEWIDTH), .DATA_WIDTH(`RAMWIDTH)) +inst1( .clk (clk), .we1(wren), .we2(1'b0), @@ -3206,17 +3211,18 @@ module ram3 ( output [`RAMWIDTH-1:0] q; wire [`RAMWIDTH-1:0] value_out; wire [`RAMWIDTH-1:0] subwire; - assign q = subwire | dummy; wire [`RAMWIDTH-1:0] uselessdata; - assign uselessdata = 2048'b0; -wire j; -assign j = |byteena_a; - wire [`RAMWIDTH-1:0]dummy; - assign dummy = value_out & 2048'b0; - -defparam inst1.ADDR_WIDTH = `rRAMSIZEWIDTH; -defparam inst1.DATA_WIDTH = `RAMWIDTH; -dual_port_ram inst1( + wire j; + wire [`RAMWIDTH-1:0]dummy; + + assign q = subwire | dummy; + assign uselessdata = 2048'b0; + assign j = |byteena_a; + assign dummy = value_out & 2048'b0; + +dual_port_ram + # (.ADDR_WIDTH(`rRAMSIZEWIDTH), .DATA_WIDTH(`RAMWIDTH)) +inst1( .clk (clk), .we1(wren), .we2(1'b0), @@ -3252,13 +3258,14 @@ module top_ram ( wire [32-1:0] sub_wire0; wire [32-1:0] q; wire [32-1:0] junk_output; - assign q = sub_wire0 | dummy; wire[32-1:0] dummy; + assign q = sub_wire0 | dummy; assign dummy = junk_output & 32'b0; - defparam inst2.ADDR_WIDTH = 14; - defparam inst2.DATA_WIDTH = 32; - dual_port_ram inst2( + + dual_port_ram + # (.ADDR_WIDTH(14), .DATA_WIDTH(32)) +inst2( .clk (clk), .we1(wren), .we2(1'b0), @@ -3850,9 +3857,9 @@ begin // : STATUS_COUNTER status_cnt <= status_cnt + 1'b1; end - defparam ram_addr.ADDR_WIDTH = `rFIFORSIZEWIDTH; - defparam ram_addr.DATA_WIDTH = `rFIFOINPUTWIDTH; - dual_port_ram ram_addr( + dual_port_ram + # (.ADDR_WIDTH(`rFIFORSIZEWIDTH), .DATA_WIDTH(`rFIFOINPUTWIDTH)) +ram_addr( .we1 (wrreq) , // write enable .we2 (rdreq) , // Read enable .addr1 (wr_pointer) , // address_0 input @@ -3994,9 +4001,9 @@ begin // : STATUS_COUNTER end assign usedw = status_cnt[`wFIFOSIZEWIDTH-1:0]; - defparam ram_addr.ADDR_WIDTH = `wFIFOSIZEWIDTH; - defparam ram_addr.DATA_WIDTH = `wFIFOINPUTWIDTH; - dual_port_ram ram_addr( + dual_port_ram + # (.ADDR_WIDTH(`wFIFORSIZEWIDTH), .DATA_WIDTH(`wFIFOINPUTWIDTH)) +ram_addr( .we1 (wrreq) , // write enable .we2 (rdreq) , // Read enable .addr1 (wr_pointer) , // address_0 input @@ -4071,9 +4078,9 @@ begin // : STATUS_COUNTER status_cnt <= status_cnt + 1; end - defparam ram_addr.ADDR_WIDTH = `aFIFOSIZEWIDTH; - defparam ram_addr.DATA_WIDTH = `aFIFOWIDTH; - dual_port_ram ram_addr( + dual_port_ram + # (.ADDR_WIDTH(`aFIFOSIZEWIDTH), .DATA_WIDTH(`aFIFOWIDTH)) +ram_addr( .we1 (wrreq) , // write enable .we2 (rdreq) , // Read enable .addr1 (wr_pointer) , // address_0 input @@ -4143,9 +4150,10 @@ begin // : STATUS_COUNTER else if ((wrreq) && (!rdreq) && (status_cnt != 16 )) status_cnt <= status_cnt + 1'b1; end - defparam ram_addr.ADDR_WIDTH = `mFIFOSIZEWIDTH; - defparam ram_addr.DATA_WIDTH = `mFIFOWIDTH; - dual_port_ram ram_addr( + + dual_port_ram + # (.ADDR_WIDTH(`mFIFOSIZEWIDTH), .DATA_WIDTH(`mFIFOWIDTH)) + ram_addr( .we1 (wrreq) , // write enable .we2 (rdreq) , // Read enable .addr1 (wr_pointer) , // address_0 input @@ -4216,7 +4224,7 @@ module fpu_add (clock, a1, b1, sum); reg smaller; //smaller is 1 if a < b, 0 otherwise //Shift mantissa's to have the same exponent - always @ (a or b) begin + always @ (*) begin //a_exp = a[30:23]; //b_exp = b[30:23]; //a_man = {1'b1, a[22:0]}; @@ -4401,7 +4409,7 @@ module fpu_add (clock, a1, b1, sum); end //Perform the addition operation - always @ (a_man or b_man or a or b) begin + always @ (*) begin if (a_man < b_man) begin smaller = 1'b1; end else begin @@ -4446,7 +4454,7 @@ module fpu_add (clock, a1, b1, sum); //Store the number // we already have the sign. - always @ (sum_man or a_exp) begin + always @ (*) begin if (sum_man[24])begin //shif sum >> by 1, add 1 to the exponent. sum[22:0] = sum_man[23:1]; sum[30:23] = a_exp + 8'b00000001; @@ -4584,7 +4592,7 @@ module fpu_div(clock, n, d, div); end //Find the exponent, store in div_exp. - always @ (n_exp or d_exp) begin + always @ (*) begin if (n_exp >= d_exp) begin div_exp = 8'b01111111 + (n_exp - d_exp); end else begin @@ -4597,12 +4605,12 @@ module fpu_div(clock, n, d, div); //Store the result. Shift exponents appropriately. Store sign. //Sign - always @ (n_sign or d_sign) begin + always @ (*) begin div[31] = n_sign ^ d_sign; end //Mantissa and Exponent - always @ (div_man or div_exp) begin + always @ (*) begin if (div_man[23]) begin //do nothing div[22:0] = div_man[22:0]; div[30:23] = div_exp; @@ -4749,7 +4757,7 @@ module div_24b(numer, denom, res); // end //res[23] - always @ (denom_pad or numer23) begin + always @ (*) begin if (denom_pad[23:0] <= numer23[46:23]) begin res[23] = 1'b1; @@ -5394,7 +5402,7 @@ assign shiftb = b[23 - 1] ? 1 : // If number is denorm, shift the significand the appropriate amount // assign shifteda = a[`WSIG-1:0] << shifta; //Must have constant shifts for ODIN - always @ (shifta or a) begin + always @ (*) begin case (shifta) 5'b00001: begin shifteda = a[`WSIG-1:0] << 5'b00001; @@ -5497,7 +5505,7 @@ assign shiftb = b[23 - 1] ? 1 : assign norma = aisdenorm ? shifteda : {1'b1, a[`WSIG-1:0]}; // assign shiftedb = b[`WSIG-1:0] << shiftb; - always @ (shiftb or b) begin + always @ (*) begin case (shiftb) 5'b00001: begin shiftedb = b[`WSIG-1:0] << 5'b00001; @@ -5710,7 +5718,7 @@ module shift(normalized, selectedexp, shiftprod, shiftexp, shiftloss); // shift significand //assign postshift = preshift >> actualshiftamt; //We can only have constant shifts for ODIN: - always @ (actualshiftamt or preshift) begin + always @ (*) begin case (actualshiftamt) 5'b00001: begin postshift = preshift >> 5'b00001; diff --git a/vtr_flow/benchmarks/verilog/LU8PEEng.v b/vtr_flow/benchmarks/verilog/LU8PEEng.v index 9db3fd8dcf9..6283e42517a 100755 --- a/vtr_flow/benchmarks/verilog/LU8PEEng.v +++ b/vtr_flow/benchmarks/verilog/LU8PEEng.v @@ -508,7 +508,7 @@ begin end end -always @ (cur_state) +always @ (*) begin case (cur_state) `MODE1: @@ -944,7 +944,7 @@ begin end // connections to top block memory ports -always @ (topSourceSel or topWriteSel or curReadDataLU or addResult7 or addResult6 or addResult5 or addResult4 or addResult3 or addResult2 or addResult1 or addResult0) +always @ (*) begin if (topSourceSel == 1'b0) case (topWriteSel) @@ -1477,7 +1477,7 @@ else if (waitCycles >5'b00000) end // determining next state of main FSM -always @ (currentState or start or mode or m or n or counter or mdivk or topIdxCounter or doneFetchRow or divCounter or j or stop2 or waitCycles or stop or i1) +always @ (*) begin case (currentState) `cSETUP: @@ -1669,7 +1669,7 @@ begin endcase end -always @ (currentRowState or currentState or nextState or i1 or topIdxCounter or mdivk or msIdxCounter or readRowCounter or j or n or mode) +always @ (*) begin if (currentRowState == `cDONE_FETCH_ROW) doneFetchRow = 1; @@ -1687,7 +1687,7 @@ begin end // second FSM that controls the control signals to temp_top block -always @ (currentRowState or nextTopIdxCounter or n or startFetchRow or loadRow or topIdx or mdivk or nextState) +always @ (*) begin case (currentRowState) `cFETCH_ROW: @@ -2237,17 +2237,19 @@ module ram ( output [`RAMWIDTH-1:0] q; wire [`RAMWIDTH-1:0] value_out; wire [`RAMWIDTH-1:0] subwire; - assign q = subwire | dummy; wire [`RAMWIDTH-1:0] uselessdata; - assign uselessdata = 256'b0; -wire j; -assign j = |byteena_a; - wire [`RAMWIDTH-1:0]dummy; - assign dummy = value_out & 256'b0; - -defparam inst1.ADDR_WIDTH = `rRAMSIZEWIDTH; -defparam inst1.DATA_WIDTH = `RAMWIDTH; -dual_port_ram inst1( + + wire j; + wire [`RAMWIDTH-1:0]dummy; + + assign uselessdata = 256'b0; + assign q = subwire | dummy; + assign j = |byteena_a; + assign dummy = value_out & 256'b0; + +dual_port_ram + #( .ADDR_WIDTH(`rRAMSIZEWIDTH), .DATA_WIDTH(`RAMWIDTH)) +inst1( .clk (clk), .we1(wren), .we2(1'b0), @@ -2280,17 +2282,18 @@ module ram1 ( output [`RAMWIDTH-1:0] q; wire [`RAMWIDTH-1:0] value_out; wire [`RAMWIDTH-1:0] subwire; - assign q = subwire | dummy; wire [`RAMWIDTH-1:0] uselessdata; - assign uselessdata = 256'b0; -wire j; -assign j = |byteena_a; - wire [`RAMWIDTH-1:0]dummy; - assign dummy = value_out & 256'b0; - -defparam inst1.ADDR_WIDTH = `rRAMSIZEWIDTH; -defparam inst1.DATA_WIDTH = `RAMWIDTH; -dual_port_ram inst1( + wire j; + wire [`RAMWIDTH-1:0]dummy; + + assign q = subwire | dummy; + assign uselessdata = 256'b0; + assign j = |byteena_a; + assign dummy = value_out & 256'b0; + +dual_port_ram + #( .ADDR_WIDTH(`rRAMSIZEWIDTH), .DATA_WIDTH(`RAMWIDTH)) +inst1( .clk (clk), .we1(wren), .we2(1'b0), @@ -2323,17 +2326,18 @@ module ram2 ( output [`RAMWIDTH-1:0] q; wire [`RAMWIDTH-1:0] value_out; wire [`RAMWIDTH-1:0] subwire; - assign q = subwire | dummy; wire [`RAMWIDTH-1:0] uselessdata; - assign uselessdata = 256'b0; -wire j; -assign j = |byteena_a; - wire [`RAMWIDTH-1:0]dummy; - assign dummy = value_out & 256'b0; - -defparam inst1.ADDR_WIDTH = `rRAMSIZEWIDTH; -defparam inst1.DATA_WIDTH = `RAMWIDTH; -dual_port_ram inst1( + wire j; + wire [`RAMWIDTH-1:0] dummy; + + assign q = subwire | dummy; + assign uselessdata = 256'b0; + assign j = |byteena_a; + assign dummy = value_out & 256'b0; + +dual_port_ram + #( .ADDR_WIDTH(`rRAMSIZEWIDTH), .DATA_WIDTH(`RAMWIDTH)) +inst1( .clk (clk), .we1(wren), .we2(1'b0), @@ -2366,17 +2370,18 @@ module ram3 ( output [`RAMWIDTH-1:0] q; wire [`RAMWIDTH-1:0] value_out; wire [`RAMWIDTH-1:0] subwire; - assign q = subwire | dummy; wire [`RAMWIDTH-1:0] uselessdata; - assign uselessdata = 256'b0; -wire j; -assign j = |byteena_a; - wire [`RAMWIDTH-1:0]dummy; - assign dummy = value_out & 256'b0; - -defparam inst1.ADDR_WIDTH = `rRAMSIZEWIDTH; -defparam inst1.DATA_WIDTH = `RAMWIDTH; -dual_port_ram inst1( + wire j; + wire [`RAMWIDTH-1:0]dummy; + + assign q = subwire | dummy; + assign uselessdata = 256'b0; + assign j = |byteena_a; + assign dummy = value_out & 256'b0; + +dual_port_ram + #( .ADDR_WIDTH(`rRAMSIZEWIDTH), .DATA_WIDTH(`RAMWIDTH)) +inst1( .clk (clk), .we1(wren), .we2(1'b0), @@ -2412,13 +2417,13 @@ module top_ram ( wire [32-1:0] sub_wire0; wire [32-1:0] q; wire [32-1:0] junk_output; - assign q = sub_wire0 | dummy; wire[32-1:0] dummy; + assign q = sub_wire0 | dummy; assign dummy = junk_output & 32'b0; - defparam inst2.ADDR_WIDTH = 8; - defparam inst2.DATA_WIDTH = 32; - dual_port_ram inst2( + dual_port_ram + #( .ADDR_WIDTH(8), .DATA_WIDTH(32)) +inst2( .clk (clk), .we1(wren), .we2(1'b0), @@ -2898,9 +2903,9 @@ begin // : STATUS_COUNTER status_cnt <= status_cnt + 1'b1; end - defparam ram_addr.ADDR_WIDTH = `rFIFORSIZEWIDTH; - defparam ram_addr.DATA_WIDTH = `rFIFOINPUTWIDTH; - dual_port_ram ram_addr( + dual_port_ram + #( .ADDR_WIDTH(`rFIFORSIZEWIDTH), .DATA_WIDTH(`rFIFOINPUTWIDTH)) +ram_addr( .we1 (wrreq) , // write enable .we2 (rdreq) , // Read enable .addr1 (wr_pointer) , // address_0 input @@ -2986,9 +2991,9 @@ begin // : STATUS_COUNTER end assign usedw = status_cnt[`wFIFOSIZEWIDTH-1:0]; - defparam ram_addr.ADDR_WIDTH = `wFIFOSIZEWIDTH; - defparam ram_addr.DATA_WIDTH = `wFIFOINPUTWIDTH; - dual_port_ram ram_addr( + dual_port_ram + #( .ADDR_WIDTH(`wFIFORSIZEWIDTH), .DATA_WIDTH(`wFIFOINPUTWIDTH)) +ram_addr( .we1 (wrreq) , // write enable .we2 (rdreq) , // Read enable .addr1 (wr_pointer) , // address_0 input @@ -3063,9 +3068,9 @@ begin // : STATUS_COUNTER status_cnt <= status_cnt + 1; end - defparam ram_addr.ADDR_WIDTH = `aFIFOSIZEWIDTH; - defparam ram_addr.DATA_WIDTH = `aFIFOWIDTH; - dual_port_ram ram_addr( + dual_port_ram + #( .ADDR_WIDTH(`aFIFOSIZEWIDTH), .DATA_WIDTH(`aFIFOWIDTH)) +ram_addr( .we1 (wrreq) , // write enable .we2 (rdreq) , // Read enable .addr1 (wr_pointer) , // address_0 input @@ -3135,9 +3140,10 @@ begin // : STATUS_COUNTER else if ((wrreq) && (!rdreq) && (status_cnt != 16 )) status_cnt <= status_cnt + 1'b1; end - defparam ram_addr.ADDR_WIDTH = `mFIFOSIZEWIDTH; - defparam ram_addr.DATA_WIDTH = `mFIFOWIDTH; - dual_port_ram ram_addr( + + dual_port_ram + #( .ADDR_WIDTH(`mFIFOSIZEWIDTH), .DATA_WIDTH(`mFIFOWIDTH)) + ram_addr( .we1 (wrreq) , // write enable .we2 (rdreq) , // Read enable .addr1 (wr_pointer) , // address_0 input @@ -3208,7 +3214,7 @@ module fpu_add (clock, a1, b1, sum); reg smaller; //smaller is 1 if a < b, 0 otherwise //Shift mantissa's to have the same exponent - always @ (a or b) begin + always @ (*) begin //a_exp = a[30:23]; //b_exp = b[30:23]; //a_man = {1'b1, a[22:0]}; @@ -3393,7 +3399,7 @@ module fpu_add (clock, a1, b1, sum); end //Perform the addition operation - always @ (a_man or b_man or a or b) begin + always @ (*) begin if (a_man < b_man) begin smaller = 1'b1; end else begin @@ -3438,7 +3444,7 @@ module fpu_add (clock, a1, b1, sum); //Store the number // we already have the sign. - always @ (sum_man or a_exp) begin + always @ (*) begin if (sum_man[24])begin //shif sum >> by 1, add 1 to the exponent. sum[22:0] = sum_man[23:1]; sum[30:23] = a_exp + 8'b00000001; @@ -3576,7 +3582,7 @@ module fpu_div(clock, n, d, div); end //Find the exponent, store in div_exp. - always @ (n_exp or d_exp) begin + always @ (*) begin if (n_exp >= d_exp) begin div_exp = 8'b01111111 + (n_exp - d_exp); end else begin @@ -3589,12 +3595,12 @@ module fpu_div(clock, n, d, div); //Store the result. Shift exponents appropriately. Store sign. //Sign - always @ (n_sign or d_sign) begin + always @ (*) begin div[31] = n_sign ^ d_sign; end //Mantissa and Exponent - always @ (div_man or div_exp) begin + always @ (*) begin if (div_man[23]) begin //do nothing div[22:0] = div_man[22:0]; div[30:23] = div_exp; @@ -3741,7 +3747,7 @@ module div_24b(numer, denom, res); // end //res[23] - always @ (denom_pad or numer23) begin + always @ (*) begin if (denom_pad[23:0] <= numer23[46:23]) begin res[23] = 1'b1; @@ -4386,7 +4392,7 @@ assign shiftb = b[23 - 1] ? 1 : // If number is denorm, shift the significand the appropriate amount // assign shifteda = a[`WSIG-1:0] << shifta; //Must have constant shifts for ODIN - always @ (shifta or a) begin + always @ (*) begin case (shifta) 5'b00001: begin shifteda = a[`WSIG-1:0] << 5'b00001; @@ -4489,7 +4495,7 @@ assign shiftb = b[23 - 1] ? 1 : assign norma = aisdenorm ? shifteda : {1'b1, a[`WSIG-1:0]}; // assign shiftedb = b[`WSIG-1:0] << shiftb; - always @ (shiftb or b) begin + always @ (*) begin case (shiftb) 5'b00001: begin shiftedb = b[`WSIG-1:0] << 5'b00001; @@ -4702,7 +4708,7 @@ module shift(normalized, selectedexp, shiftprod, shiftexp, shiftloss); // shift significand //assign postshift = preshift >> actualshiftamt; //We can only have constant shifts for ODIN: - always @ (actualshiftamt or preshift) begin + always @ (*) begin case (actualshiftamt) 5'b00001: begin postshift = preshift >> 5'b00001; diff --git a/vtr_flow/benchmarks/verilog/and_latch.v b/vtr_flow/benchmarks/verilog/and_latch.v index 2c9ef7207fa..17f9c1e8865 100644 --- a/vtr_flow/benchmarks/verilog/and_latch.v +++ b/vtr_flow/benchmarks/verilog/and_latch.v @@ -10,7 +10,7 @@ module and_latch( input a_in; input b_in; - output out; + output reg out; // ASSIGN STATEMENTS always @(posedge clock) @@ -18,4 +18,4 @@ module and_latch( out <= a_in & b_in; end -endmodule \ No newline at end of file +endmodule diff --git a/vtr_flow/benchmarks/verilog/arm_core.v b/vtr_flow/benchmarks/verilog/arm_core.v index 907bc64202d..52dad585472 100644 --- a/vtr_flow/benchmarks/verilog/arm_core.v +++ b/vtr_flow/benchmarks/verilog/arm_core.v @@ -200,7 +200,7 @@ parameter WORD_SEL_LSB = 2; // = 2 input i_clk; input i_core_stall; -output o_stall; +output reg o_stall; // Read / Write requests from core input i_select; @@ -1197,7 +1197,7 @@ localparam [4:0] RST_WAIT1 = 5'd0, // Internal signals // ======================================================== wire [31:0] instruction; -wire [3:0] type; // regop, mem access etc. +wire [3:0] instruction_type; // regop, mem access etc. wire instruction_iabt; // abort flag, follows the instruction wire instruction_adex; // address exception flag, follows the instruction wire [31:0] instruction_address; // instruction virtual address, follows @@ -1429,7 +1429,7 @@ assign instruction = instruction_sel == 2'd0 ? fetch_instruction_r instruction_sel == 2'd3 ? hold_instruction : pre_fetch_instruction ; -assign type = instruction_sel == 2'd0 ? fetch_instruction_type_r : +assign instruction_type = instruction_sel == 2'd0 ? fetch_instruction_type_r : instruction_sel == 2'd1 ? saved_current_instruction_type : instruction_sel == 2'd3 ? hold_instruction_type : pre_fetch_instruction_type ; @@ -1467,16 +1467,16 @@ assign condition_nxt = instruction[31:28]; assign rm_sel_nxt = instruction[3:0]; assign rn_sel_nxt = branch ? 4'd15 : instruction[19:16]; // Use PC to calculate branch destination assign rs_sel_nxt = control_state == SWAP_WRITE ? instruction[3:0] : // Rm gets written out to memory - type == MTRANS ? mtrans_reg1 : + instruction_type == MTRANS ? mtrans_reg1 : branch ? 4'd15 : // Update the PC rds_use_rs ? instruction[11:8] : instruction[15:12] ; // Load from memory into registers -assign ldm_user_mode = type == MTRANS && {instruction[22:20],instruction[15]} == 4'b1010; -assign ldm_flags = type == MTRANS && rs_sel_nxt == 4'd15 && instruction[20] && instruction[22]; -assign ldm_status_bits = type == MTRANS && rs_sel_nxt == 4'd15 && instruction[20] && instruction[22] && i_execute_status_bits[1:0] != USR; -assign load_rd_byte = (type == TRANS || type == SWAP) && instruction[22]; +assign ldm_user_mode = instruction_type == MTRANS && {instruction[22:20],instruction[15]} == 4'b1010; +assign ldm_flags = instruction_type == MTRANS && rs_sel_nxt == 4'd15 && instruction[20] && instruction[22]; +assign ldm_status_bits = instruction_type == MTRANS && rs_sel_nxt == 4'd15 && instruction[20] && instruction[22] && i_execute_status_bits[1:0] != USR; +assign load_rd_byte = (instruction_type == TRANS || instruction_type == SWAP) && instruction[22]; assign load_rd_nxt = {ldm_flags, ldm_status_bits, ldm_user_mode, load_rd_byte, rs_sel_nxt}; @@ -1488,8 +1488,8 @@ assign offset24 = {{6{instruction[23]}}, instruction[23:0], 2'd0 }; assign imm8 = instruction[7:0]; assign immediate_shift_op = instruction[25]; -assign rds_use_rs = (type == REGOP && !instruction[25] && instruction[4]) || - (type == MULT && +assign rds_use_rs = (instruction_type == REGOP && !instruction[25] && instruction[4]) || + (instruction_type == MULT && (control_state == MULT_PROC1 || control_state == MULT_PROC2 || // instruction_valid && !interrupt )) ; @@ -1498,25 +1498,25 @@ assign rds_use_rs = (type == REGOP && !instruction[25] && instruction[ (instruction_valid && !interrupt_or_conflict))) ; -assign branch = type == BRANCH; +assign branch = instruction_type == BRANCH; assign opcode_compare = opcode == CMP || opcode == CMN || opcode == TEQ || opcode == TST ; -assign mem_op = type == TRANS; +assign mem_op = instruction_type == TRANS; assign load_op = mem_op && instruction[20]; assign store_op = mem_op && !instruction[20]; assign write_pc = (pc_wen_nxt && pc_sel_nxt != 3'd0) || load_pc_r || load_pc_nxt; assign current_write_pc = (pc_wen_nxt && pc_sel_nxt != 3'd0) || load_pc_nxt; -assign regop_set_flags = type == REGOP && instruction[20]; +assign regop_set_flags = instruction_type == REGOP && instruction[20]; assign mem_op_pre_indexed = instruction[24] && instruction[21]; assign mem_op_post_indexed = !instruction[24]; assign imm32_nxt = // add 0 to Rm - type == MULT ? { 32'd0 } : //MULT = 4'h1, + instruction_type == MULT ? { 32'd0 } : //MULT = 4'h1, // 4 x number of registers - type == MTRANS ? { mtrans_base_reg_change } : //MTRANS = 4'h4 - type == BRANCH ? { offset24 } : //BRANCH = 4'h5 - type == TRANS ? { offset12 } : //TRANS = 4'h3 + instruction_type == MTRANS ? { mtrans_base_reg_change } : //MTRANS = 4'h4 + instruction_type == BRANCH ? { offset24 } : //BRANCH = 4'h5 + instruction_type == TRANS ? { offset12 } : //TRANS = 4'h3 instruction[11:8] == 4'h0 ? { 24'd0, imm8[7:0] } : instruction[11:8] == 4'h1 ? { imm8[1:0], 24'd0, imm8[7:2] } : instruction[11:8] == 4'h2 ? { imm8[3:0], 24'd0, imm8[7:4] } : @@ -1551,11 +1551,11 @@ assign alu_function_nxt = { alu_swap_sel_nxt, // ======================================================== // Register Conflict Detection // ======================================================== -assign rn_valid = type == REGOP || type == MULT || type == SWAP || type == TRANS || type == MTRANS || type == CODTRANS; -assign rm_valid = type == REGOP || type == MULT || type == SWAP || (type == TRANS && immediate_shift_op); +assign rn_valid = instruction_type == REGOP || instruction_type == MULT || instruction_type == SWAP || instruction_type == TRANS || instruction_type == MTRANS || instruction_type == CODTRANS; +assign rm_valid = instruction_type == REGOP || instruction_type == MULT || instruction_type == SWAP || (instruction_type == TRANS && immediate_shift_op); assign rs_valid = rds_use_rs; -assign rd_valid = (type == TRANS && store_op) || (type == REGOP || type == SWAP); -assign stm_valid = type == MTRANS && !instruction[20]; // stm instruction +assign rd_valid = (instruction_type == TRANS && store_op) || (instruction_type == REGOP || instruction_type == SWAP); +assign stm_valid = instruction_type == MTRANS && !instruction[20]; // stm instruction assign rn_conflict1 = instruction_execute && rn_valid && ( load_rd_d1_nxt[4] && rn_sel_nxt == load_rd_d1_nxt[3:0] ); @@ -1771,15 +1771,15 @@ assign mtrans_base_reg_change = {25'd0, mtrans_num_registers, 2'd0}; assign firq_request = firq && !i_execute_status_bits[26]; assign irq_request = irq && !i_execute_status_bits[27]; -assign swi_request = type == SWI; +assign swi_request = instruction_type == SWI; assign dabt_request = dabt_reg; // copro15 and copro13 only supports reg trans opcodes // all other opcodes involving co-processors cause an // undefined instrution interrupt -assign und_request = type == CODTRANS || - type == COREGOP || - ( type == CORTRANS && instruction[11:8] != 4'd15 ); +assign und_request = instruction_type == CODTRANS || + instruction_type == COREGOP || + ( instruction_type == CORTRANS && instruction[11:8] != 4'd15 ); // in order of priority !! @@ -1832,7 +1832,7 @@ always @* begin if ( instruction_valid && !interrupt && !conflict ) begin - if ( type == SWI || und_request ) + if ( instruction_type == SWI || und_request ) status_bits_mode_nxt = interrupt_mode; else status_bits_mode_nxt = i_execute_status_bits[1:0]; @@ -1854,7 +1854,7 @@ always @* begin if ( instruction_valid && !interrupt && !conflict ) begin - if ( type == SWI || und_request ) + if ( instruction_type == SWI || und_request ) status_bits_irq_mask_nxt = 1'd1; else status_bits_irq_mask_nxt = o_status_bits_irq_mask; @@ -1881,7 +1881,7 @@ always @* always @* begin - if ( instruction_valid && !interrupt && !conflict &&(type == SWAP)) + if ( instruction_valid && !interrupt && !conflict &&(instruction_type == SWAP)) decode_exclusive_nxt = 1'd1; else decode_exclusive_nxt = 1'd0; @@ -1894,9 +1894,9 @@ always @* begin if ( mem_op ) decode_daccess_nxt = 1'd1; - else if ( type == MTRANS ) + else if ( instruction_type == MTRANS ) decode_daccess_nxt = 1'd1; - else if ( type == SWAP ) + else if ( instruction_type == SWAP ) decode_daccess_nxt = 1'd1; else decode_daccess_nxt = 1'd0; @@ -1915,7 +1915,7 @@ always @* always @* begin - if ( instruction_valid && !interrupt && !conflict && type == SWAP) + if ( instruction_valid && !interrupt && !conflict && instruction_type == SWAP) decode_iaccess_nxt = 1'd0; else if ( control_state == MTRANS_EXEC1 && !conflict && instruction_execute &&( mtrans_num_registers > 4'd2 )) @@ -1936,7 +1936,7 @@ always @* begin if ( instruction_valid && !interrupt && !conflict ) begin - if ( type == CORTRANS && !und_request ) + if ( instruction_type == CORTRANS && !und_request ) begin if ( instruction[20] ) copro_operation_nxt = 2'd1; @@ -1961,13 +1961,13 @@ always @* begin if ( mem_op && (load_op && instruction[15:12] == 4'd15)) saved_current_instruction_wen = 1'd1; - else if ( type == MTRANS ) + else if ( instruction_type == MTRANS ) saved_current_instruction_wen = 1'd1; - else if ( type == MULT ) + else if ( instruction_type == MULT ) saved_current_instruction_wen = 1'd1; - else if ( type == SWAP ) + else if ( instruction_type == SWAP ) saved_current_instruction_wen = 1'd1; - else if ( type == CORTRANS && !und_request ) + else if ( instruction_type == CORTRANS && !und_request ) saved_current_instruction_wen = 1'd1; else saved_current_instruction_wen = 1'd0; @@ -2004,7 +2004,7 @@ always @* always @* begin - if ( instruction_valid && !interrupt && !conflict && type == MTRANS) + if ( instruction_valid && !interrupt && !conflict && instruction_type == MTRANS) // restore_base_address_nxt <= instruction[20] && // (instruction[15:0] & (1'd1 << instruction[19:16])); restore_base_address_nxt = instruction[20] && @@ -2033,7 +2033,7 @@ always @* begin if ( instruction_valid && !interrupt && !conflict ) begin - if ( type == REGOP ) + if ( instruction_type == REGOP ) begin if ( !immediate_shift_op && instruction[4] ) barrel_shift_amount_sel_nxt = 2'd1; @@ -2042,7 +2042,7 @@ always @* else barrel_shift_amount_sel_nxt = 2'd0; end - else if ( mem_op && ( type == TRANS && instruction[25] && shift_imm != 5'd0 ) ) + else if ( mem_op && ( instruction_type == TRANS && instruction[25] && shift_imm != 5'd0 ) ) barrel_shift_amount_sel_nxt = 2'd2; else barrel_shift_amount_sel_nxt = 2'd0; @@ -2055,12 +2055,12 @@ always @* begin if ( instruction_valid && !interrupt && !conflict ) begin - if(type == REGOP && !immediate_shift_op) + if(instruction_type == REGOP && !immediate_shift_op) barrel_shift_data_sel_nxt = 2'd2; - else if (mem_op && instruction[25] && type == TRANS) + else if (mem_op && instruction[25] && instruction_type == TRANS) barrel_shift_data_sel_nxt = 2'd2; - else if ( type == SWAP ) + else if ( instruction_type == SWAP ) barrel_shift_data_sel_nxt = 2'd2; else barrel_shift_data_sel_nxt = 2'd0; @@ -2075,9 +2075,9 @@ always @* begin if ( instruction_valid && !interrupt && !conflict ) begin - if ( type == REGOP && !immediate_shift_op) + if ( instruction_type == REGOP && !immediate_shift_op) barrel_shift_function_nxt = instruction[6:5]; - else if ( mem_op && type == TRANS && instruction[25] && shift_imm != 5'd0 ) + else if ( mem_op && instruction_type == TRANS && instruction[25] && shift_imm != 5'd0 ) barrel_shift_function_nxt = instruction[6:5]; else barrel_shift_function_nxt = 2'd0; @@ -2088,7 +2088,7 @@ always @* always @* begin - if ( instruction_valid && !interrupt && !conflict && type == MULT) + if ( instruction_valid && !interrupt && !conflict && instruction_type == MULT) begin multiply_function_nxt[0] = 1'd1; if( instruction[21] ) @@ -2114,15 +2114,15 @@ always @* begin if ( instruction_valid && !interrupt && !conflict ) begin - if( type == REGOP && !opcode_compare && instruction[15:12] == 4'd15) + if( instruction_type == REGOP && !opcode_compare && instruction[15:12] == 4'd15) iaddress_sel_nxt = 4'd1; - else if ( type == BRANCH ) + else if ( instruction_type == BRANCH ) iaddress_sel_nxt = 4'd1; - else if ( type == MTRANS && mtrans_num_registers > 4'd1) + else if ( instruction_type == MTRANS && mtrans_num_registers > 4'd1) iaddress_sel_nxt = 4'd3; - else if ( type == CORTRANS && !und_request ) + else if ( instruction_type == CORTRANS && !und_request ) iaddress_sel_nxt = 4'd3; - else if ( type == SWI || und_request ) + else if ( instruction_type == SWI || und_request ) iaddress_sel_nxt = 4'd2; else iaddress_sel_nxt = 4'd0; @@ -2134,8 +2134,8 @@ always @* else if ( control_state == MEM_WAIT1 && !conflict &&instruction_execute) iaddress_sel_nxt = 4'd3; - else if ( control_state == MEM_WAIT2 && !dabt && (( type == TRANS && instruction[15:12] == 4'd15 ) || - ( type == MTRANS && instruction[20] && mtrans_reg1 == 4'd15 ))) + else if ( control_state == MEM_WAIT2 && !dabt && (( instruction_type == TRANS && instruction[15:12] == 4'd15 ) || + ( instruction_type == MTRANS && instruction[20] && mtrans_reg1 == 4'd15 ))) iaddress_sel_nxt = 4'd3; @@ -2169,7 +2169,7 @@ always @* else daddress_sel_nxt = 4'd1; // alu out end - else if ( type == MTRANS ) + else if ( instruction_type == MTRANS ) if ( instruction[23] ) begin if ( instruction[24] ) // increment before @@ -2184,7 +2184,7 @@ always @* else daddress_sel_nxt = 4'd1; // alu out end - else if ( type == SWAP ) + else if ( instruction_type == SWAP ) daddress_sel_nxt = 4'd4; else daddress_sel_nxt = 4'd0; @@ -2204,21 +2204,21 @@ always @* begin if ( instruction_valid && !interrupt && !conflict ) begin - if ( type == REGOP && !opcode_compare && instruction[15:12] == 4'd15 ) + if ( instruction_type == REGOP && !opcode_compare && instruction[15:12] == 4'd15 ) pc_sel_nxt = 3'd1; else if ( mem_op && (mem_op_pre_indexed || mem_op_post_indexed) && rn_sel_nxt == 4'd15 ) pc_sel_nxt = 3'd1; - else if ( type == BRANCH ) + else if ( instruction_type == BRANCH ) pc_sel_nxt = 3'd1; - else if ( type == SWI || und_request ) + else if ( instruction_type == SWI || und_request ) pc_sel_nxt = 3'd2; else pc_sel_nxt = 3'd0; end else if ( instruction_valid && interrupt && next_interrupt != 3'd6 ) pc_sel_nxt = 3'd2; - else if ( control_state == MEM_WAIT2 && !dabt && (( type == TRANS && instruction[15:12] == 4'd15 ) || - ( type == MTRANS && instruction[20] && mtrans_reg1 == 4'd15 ))) + else if ( control_state == MEM_WAIT2 && !dabt && (( instruction_type == TRANS && instruction[15:12] == 4'd15 ) || + ( instruction_type == MTRANS && instruction[20] && mtrans_reg1 == 4'd15 ))) pc_sel_nxt = 3'd3; else if ( control_state == SWAP_WAIT1 && !dabt && instruction[15:12] == 4'd15 ) @@ -2235,15 +2235,15 @@ always @* begin if ( mem_op && ( load_op && instruction[15:12] == 4'd15 )) load_pc_nxt = 1'd1; - else if ( type == MTRANS && ( instruction[20] && mtrans_reg1 == 4'd15 )) + else if ( instruction_type == MTRANS && ( instruction[20] && mtrans_reg1 == 4'd15 )) load_pc_nxt = 1'd1; else load_pc_nxt = 1'd0; end else if ( control_state == MEM_WAIT1 && !conflict && instruction_execute) load_pc_nxt = load_pc_r; - else if ( control_state == MEM_WAIT2 && !dabt && (( type == TRANS && instruction[15:12] == 4'd15 ) || - ( type == MTRANS && instruction[20] && mtrans_reg1 == 4'd15 ))) + else if ( control_state == MEM_WAIT2 && !dabt && (( instruction_type == TRANS && instruction[15:12] == 4'd15 ) || + ( instruction_type == MTRANS && instruction[20] && mtrans_reg1 == 4'd15 ))) load_pc_nxt = load_pc_r; else if ( control_state == MTRANS_EXEC1 && !conflict && instruction_execute && ( instruction[20] && mtrans_reg1 == 4'd15 )) @@ -2262,7 +2262,7 @@ always @* begin if ( instruction_valid && !interrupt && !conflict ) begin - if ( mem_op && store_op && type == TRANS && instruction[22] ) + if ( mem_op && store_op && instruction_type == TRANS && instruction[22] ) byte_enable_sel_nxt = 2'd1; else byte_enable_sel_nxt = 2'd0; @@ -2290,9 +2290,9 @@ always @* begin if ( instruction_valid && !interrupt && !conflict ) begin - if ( type == BRANCH && instruction[24] ) + if ( instruction_type == BRANCH && instruction[24] ) reg_write_sel_nxt = 3'd1; - else if ( type == SWI || und_request ) + else if ( instruction_type == SWI || und_request ) reg_write_sel_nxt = 3'd1; else reg_write_sel_nxt = 3'd0; @@ -2318,7 +2318,7 @@ always @* always @* begin - if ( instruction_valid && !interrupt && !conflict && type == MTRANS && instruction[22:20] == 3'b100 ) + if ( instruction_valid && !interrupt && !conflict && instruction_type == MTRANS && instruction[22:20] == 3'b100 ) o_user_mode_regs_store_nxt = 1'd1; else if ( control_state == MTRANS_EXEC1 && !conflict && instruction_execute && instruction[22:20] == 3'b100 ) o_user_mode_regs_store_nxt = 1'd1; @@ -2331,7 +2331,7 @@ always @* always @* begin - if ( instruction_valid && !interrupt && !conflict && type == REGOP ) + if ( instruction_valid && !interrupt && !conflict && instruction_type == REGOP ) begin if ( opcode == RSB ) alu_swap_sel_nxt = 1'd1; @@ -2348,7 +2348,7 @@ always @* begin if ( instruction_valid && !interrupt && !conflict ) begin - if( type == REGOP ) + if( instruction_type == REGOP ) begin if ( opcode == SUB || opcode == CMP ) alu_not_sel_nxt = 1'd1; @@ -2367,7 +2367,7 @@ always @* end else if ( mem_op && !instruction[23]) alu_not_sel_nxt = 1'd1; - else if ( type == MTRANS && !instruction[23]) + else if ( instruction_type == MTRANS && !instruction[23]) alu_not_sel_nxt = 1'd1; else alu_not_sel_nxt = 1'd0; @@ -2381,7 +2381,7 @@ always @* begin if ( instruction_valid && !interrupt && !conflict ) begin - if( type == REGOP ) + if( instruction_type == REGOP ) begin if ( opcode == ADC ) alu_cin_sel_nxt = 2'd2; @@ -2398,7 +2398,7 @@ always @* end else if ( mem_op && !instruction[23]) alu_cin_sel_nxt = 2'd1; - else if ( type == MTRANS && !instruction[23]) + else if ( instruction_type == MTRANS && !instruction[23]) alu_cin_sel_nxt = 2'd1; else alu_cin_sel_nxt = 2'd0; @@ -2409,7 +2409,7 @@ always @* always @* begin - if ( instruction_valid && !interrupt && !conflict && type == REGOP ) + if ( instruction_valid && !interrupt && !conflict && instruction_type == REGOP ) begin if ( opcode == AND || opcode == TST ) alu_cout_sel_nxt = 1'd1; @@ -2435,7 +2435,7 @@ always @* begin if ( instruction_valid && !interrupt && !conflict ) begin - if( type == REGOP ) + if( instruction_type == REGOP ) begin if ( opcode == ADD || opcode == CMN ) alu_out_sel_nxt = 4'd1; @@ -2462,9 +2462,9 @@ always @* end else if ( mem_op ) alu_out_sel_nxt = 4'd1; - else if ( type == BRANCH ) + else if ( instruction_type == BRANCH ) alu_out_sel_nxt = 4'd1; - else if ( type == MTRANS ) + else if ( instruction_type == MTRANS ) alu_out_sel_nxt = 4'd1; else alu_out_sel_nxt = 4'd0; @@ -2479,7 +2479,7 @@ always @* begin if ( mem_op && store_op ) write_data_wen_nxt = 1'd1; - else if ( type == MTRANS && !instruction[20] ) + else if ( instruction_type == MTRANS && !instruction[20] ) write_data_wen_nxt = 1'd1; else write_data_wen_nxt = 1'd0; @@ -2496,7 +2496,7 @@ always @* always @* begin - if(instruction_valid && !interrupt && !conflict && (type == CORTRANS && !und_request) && ! instruction[20]) + if(instruction_valid && !interrupt && !conflict && (instruction_type == CORTRANS && !und_request) && ! instruction[20]) copro_write_data_wen_nxt = 1'd1; else copro_write_data_wen_nxt = 1'd0; @@ -2504,7 +2504,7 @@ always @* always @* begin - if(instruction_valid && !interrupt && !conflict && type == MTRANS) + if(instruction_valid && !interrupt && !conflict && instruction_type == MTRANS) base_address_wen_nxt = 1'd1; else base_address_wen_nxt = 1'd0; @@ -2516,7 +2516,7 @@ always @* begin if ( mem_op &&(load_op && instruction[15:12] == 4'd15) ) pc_wen_nxt = 1'd0; - else if ( type == MTRANS ) + else if ( instruction_type == MTRANS ) begin if ( mtrans_num_registers > 4'd1 ) pc_wen_nxt = 1'd0; @@ -2525,11 +2525,11 @@ always @* else pc_wen_nxt = 1'd1; end - else if ( type == MULT ) + else if ( instruction_type == MULT ) pc_wen_nxt = 1'd0; - else if ( type == SWAP ) + else if ( instruction_type == SWAP ) pc_wen_nxt = 1'd0; - else if ( type == CORTRANS && !und_request ) + else if ( instruction_type == CORTRANS && !und_request ) pc_wen_nxt = 1'd0; else pc_wen_nxt = 1'd1; @@ -2574,7 +2574,7 @@ always @* begin if ( instruction_valid && !interrupt && !conflict ) begin - if ( type == REGOP && !opcode_compare && instruction[15:12] != 4'd15) + if ( instruction_type == REGOP && !opcode_compare && instruction[15:12] != 4'd15) //reg_bank_wen_nxt = decode (instruction[15:12]); reg_bank_wen_nxt = instruction[15:12] == 4'h0 ? 15'h0001: instruction[15:12] == 4'h1 ? 15'h0002: @@ -2610,10 +2610,10 @@ always @* rn_sel_nxt == 4'hd ? 15'h2000: rn_sel_nxt == 4'he ? 15'h4000: 15'h0000; - else if ( type == BRANCH && instruction[24]) + else if ( instruction_type == BRANCH && instruction[24]) //reg_bank_wen_nxt = decode (4'd14); reg_bank_wen_nxt = 15'h4000; - else if ( type == MTRANS && instruction[21] ) + else if ( instruction_type == MTRANS && instruction[21] ) //reg_bank_wen_nxt = decode (rn_sel_nxt); reg_bank_wen_nxt = rn_sel_nxt == 4'h0 ? 15'h0001: rn_sel_nxt == 4'h1 ? 15'h0002: @@ -2631,7 +2631,7 @@ always @* rn_sel_nxt == 4'hd ? 15'h2000: rn_sel_nxt == 4'he ? 15'h4000: 15'h0000; - else if ( type == SWI || und_request ) + else if ( instruction_type == SWI || und_request ) //reg_bank_wen_nxt = decode (4'd14); reg_bank_wen_nxt = 15'h4000; else @@ -2660,7 +2660,7 @@ always @* 15'h0000; else if ( control_state == MULT_STORE ) begin - if ( type == MULT ) + if ( instruction_type == MULT ) //reg_bank_wen_nxt = decode ( instruction[19:16] ); reg_bank_wen_nxt = instruction[19:16] == 4'h0 ? 15'h0001: instruction[19:16] == 4'h1 ? 15'h0002: @@ -2736,7 +2736,7 @@ always @* begin if ( instruction_valid && !interrupt && !conflict) begin - if ( type == SWI || und_request ) + if ( instruction_type == SWI || und_request ) begin status_bits_mode_wen_nxt = 1'd1; status_bits_irq_mask_wen_nxt = 1'd1; @@ -2848,19 +2848,19 @@ always @* control_state_nxt = INT_WAIT1; else begin - if ( type == MTRANS && instruction[20] && mtrans_reg1 == 4'd15 ) // Write to PC + if ( instruction_type == MTRANS && instruction[20] && mtrans_reg1 == 4'd15 ) // Write to PC control_state_nxt = MEM_WAIT1; - else if ( type == MTRANS && !conflict && mtrans_num_registers != 5'd0 && mtrans_num_registers != 5'd1 ) + else if ( instruction_type == MTRANS && !conflict && mtrans_num_registers != 5'd0 && mtrans_num_registers != 5'd1 ) control_state_nxt = MTRANS_EXEC1; - else if ( type == MULT && !conflict ) + else if ( instruction_type == MULT && !conflict ) control_state_nxt = MULT_PROC1; - else if ( type == SWAP && !conflict ) + else if ( instruction_type == SWAP && !conflict ) control_state_nxt = SWAP_WRITE; - else if ( type == CORTRANS && !und_request && !conflict ) + else if ( instruction_type == CORTRANS && !und_request && !conflict ) control_state_nxt = COPRO_WAIT; else begin @@ -3075,10 +3075,10 @@ always @ ( posedge i_clk ) // to the pre-fetch instruction register // then when its decoded, a copy is saved to the saved_current_instruction // register - if ( type == MTRANS ) + if ( instruction_type == MTRANS ) begin saved_current_instruction <= mtrans_instruction_nxt; - saved_current_instruction_type <= type; + saved_current_instruction_type <= instruction_type; saved_current_instruction_iabt <= instruction_iabt; saved_current_instruction_adex <= instruction_adex; saved_current_instruction_address <= instruction_address; @@ -3087,7 +3087,7 @@ always @ ( posedge i_clk ) else if ( saved_current_instruction_wen ) begin saved_current_instruction <= instruction; - saved_current_instruction_type <= type; + saved_current_instruction_type <= instruction_type; saved_current_instruction_iabt <= instruction_iabt; saved_current_instruction_adex <= instruction_adex; saved_current_instruction_address <= instruction_address; @@ -3107,7 +3107,7 @@ always @ ( posedge i_clk ) // TODO possible to use saved_current_instruction instead and save some regs? hold_instruction <= instruction; - hold_instruction_type <= type; + hold_instruction_type <= instruction_type; hold_instruction_iabt <= instruction_iabt; hold_instruction_adex <= instruction_adex; hold_instruction_address <= instruction_address; @@ -3196,15 +3196,15 @@ assign xCONTROL_STATE = // "Fast_Interrupt" ; assign xTYPE = - type == REGOP ? "REGOP" : - type == MULT ? "MULT" : - type == SWAP ? "SWAP" : - type == TRANS ? "TRANS" : - type == MTRANS ? "MTRANS" : - type == BRANCH ? "BRANCH" : - type == CODTRANS ? "CODTRANS" : - type == COREGOP ? "COREGOP" : - type == CORTRANS ? "CORTRANS" : + instruction_type == REGOP ? "REGOP" : + instruction_type == MULT ? "MULT" : + instruction_type == SWAP ? "SWAP" : + instruction_type == TRANS ? "TRANS" : + instruction_type == MTRANS ? "MTRANS" : + instruction_type == BRANCH ? "BRANCH" : + instruction_type == CODTRANS ? "CODTRANS" : + instruction_type == COREGOP ? "COREGOP" : + instruction_type == CORTRANS ? "CORTRANS" : "SWI" ; @@ -3777,7 +3777,7 @@ input [1:0] i_function; output [31:0] o_out; output o_carry_out; -output o_stall; +output reg o_stall; /************************* IO Declarations *********************/ wire [31:0] quick_out; @@ -7080,7 +7080,7 @@ module a25_write_back( o_wb_read_data_valid, o_wb_load_rd, - i_daddress, + i_daddress // i_daddress_valid ); @@ -7372,10 +7372,10 @@ input i_wb_ack; // Signals // ---------------------------------------------------- -reg o_wb_adr = 32'd0; -reg o_wb_sel = 16'd0; +reg [31:0] o_wb_adr = 32'd0; +reg [15:0] o_wb_sel = 16'd0; reg o_wb_we = 1'd0; -reg o_wb_dat = 128'd0; +reg [127:0] o_wb_dat = 128'd0; reg o_wb_cyc = 1'd0; reg o_wb_stb = 1'd0; wire [WBUF-1:0] wbuf_valid; diff --git a/vtr_flow/benchmarks/verilog/bgm.v b/vtr_flow/benchmarks/verilog/bgm.v index dbb32256a62..edc1c3f3898 100755 --- a/vtr_flow/benchmarks/verilog/bgm.v +++ b/vtr_flow/benchmarks/verilog/bgm.v @@ -716,7 +716,7 @@ always @(posedge clk) opa_r1 <= opa_r[30:0]; //always @(fpu_op_r3 or prod) -always @(prod) +always @(*) fract_denorm = prod; always @(posedge clk) @@ -1141,7 +1141,7 @@ always @(posedge clk) // // sign: 0=Posetive Number; 1=Negative Number -always @(signa or signb) +always @(*) case({signa, signb}) // synopsys full_case parallel_case 2'b00: sign_d = 0; 2'b01: sign_d = 1; @@ -1526,7 +1526,7 @@ module post_norm( fpu_op, opas, sign, rmode, fract_in, exp_in, exp_ovf, // Choose rounding mode - always @(rmode or exp_out_rnd0 or exp_out_rnd1 or exp_out_rnd2) + always @(*) case(rmode) // synopsys full_case parallel_case 2'b00: exp_out_rnd = exp_out_rnd0; 2'b01: exp_out_rnd = exp_out_rnd1; @@ -1534,7 +1534,7 @@ module post_norm( fpu_op, opas, sign, rmode, fract_in, exp_in, exp_ovf, 2'b11: exp_out_rnd = exp_out_rnd2; endcase - always @(rmode or fract_out_rnd0 or fract_out_rnd1 or fract_out_rnd2) + always @(*) case (rmode) // synopsys full_case parallel_case 2'b00: fract_out_rnd = fract_out_rnd0; 2'b01: fract_out_rnd = fract_out_rnd1; @@ -1684,7 +1684,7 @@ reg [5:0] fi_ldz_r0; assign fi_ldz = fi_ldz_r0; -always @(fract_in) +always @(*) begin if (fract_in[47:47] == 1'b1) fi_ldz_r0 = 6'd1; @@ -1784,6 +1784,7 @@ begin fi_ldz_r0 = 6'd48; else if (fract_in[47:0] == 48'b000000000000000000000000000000000000000000000000) fi_ldz_r0 = 6'd48; + else fi_ldz_r0 = 6'd0; end endmodule @@ -1800,7 +1801,7 @@ input [5:0] shift_value; output [47:0] shift_out; reg [47:0] shift_out; -always @(shift_value) +always @(*) begin case (shift_value) 6'b000000: shift_out = shift_in; @@ -1852,8 +1853,8 @@ begin 6'b101110: shift_out = shift_in >> 46; 6'b101111: shift_out = shift_in >> 47; 6'b110000: shift_out = shift_in >> 48; - - endcase + default: shift_out = shift_in; + endcase end //assign shift_out = shift_in >> shift_value; @@ -1871,7 +1872,7 @@ input [5:0] shift_value; output [47:0] shift_out; reg [47:0] shift_out; -always @(shift_value) +always @(*) begin case (shift_value) 6'b000000: shift_out = shift_in; @@ -1923,7 +1924,7 @@ begin 6'b101110: shift_out = shift_in << 46; 6'b101111: shift_out = shift_in << 47; 6'b110000: shift_out = shift_in << 48; - + default: shift_out = shift_in; endcase end @@ -1941,7 +1942,7 @@ input [5:0] shift_value; output [55:0] shift_out; reg [55:0] shift_out; -always @(shift_value) +always @(*) begin case (shift_value) 6'b000000: shift_out = shift_in; @@ -2000,7 +2001,8 @@ begin 6'b110101: shift_out = shift_in << 53; 6'b110110: shift_out = shift_in << 54; 6'b110111: shift_out = shift_in << 55; - 6'b111000: shift_out = shift_in << 56; + 6'b111000: shift_out = shift_in << 56; + default: shift_out = shift_in; endcase end @@ -2459,7 +2461,7 @@ assign adj_op_out[26:0] = {adj_op_out_sft[26:1], temp2 }; // --------------------------------------------------------------------- // Get truncated portion (sticky bit) -always @(exp_diff_sft or adj_op_tmp) +always @(*) case(exp_diff_sft) // synopsys full_case parallel_case 5'd00: sticky = 1'h0; 5'd01: sticky = adj_op_tmp[0]; @@ -2489,6 +2491,7 @@ always @(exp_diff_sft or adj_op_tmp) 5'd25: sticky = |adj_op_tmp[24:0]; 5'd26: sticky = |adj_op_tmp[25:0]; 5'd27: sticky = |adj_op_tmp[26:0]; + default: sticky = 1'h0; endcase // --------------------------------------------------------------------- @@ -2514,7 +2517,7 @@ always @(posedge clk) // Determine sign for the output // sign: 0=Positive Number; 1=Negative Number -always @(signa or signb or add or fractb_lt_fracta) +always @(*) case({signa, signb, add}) // synopsys full_case parallel_case // Add @@ -2567,7 +2570,7 @@ always @(posedge clk) // // add: 1=Add; 0=Subtract -always @(signa or signb or add) +always @(*) case({signa, signb, add}) // synopsys full_case parallel_case // Add @@ -2599,7 +2602,7 @@ input [4:0] shift_value; output [26:0] shift_out; reg [26:0] shift_out; -always @(shift_value) +always @(*) begin case (shift_value) 5'b00000: shift_out = shift_in; @@ -2630,7 +2633,8 @@ begin 5'b11001: shift_out = shift_in >> 25; 5'b11010: shift_out = shift_in >> 26; 5'b11011: shift_out = shift_in >> 27; - endcase + default: shift_out = shift_in; + endcase end diff --git a/vtr_flow/benchmarks/verilog/blob_merge.v b/vtr_flow/benchmarks/verilog/blob_merge.v index e7b8365331b..57edc27cf4b 100755 --- a/vtr_flow/benchmarks/verilog/blob_merge.v +++ b/vtr_flow/benchmarks/verilog/blob_merge.v @@ -1447,7 +1447,7 @@ module divider(//clk, reg [10:0] divider_copy8; wire [10:0] remainder8; -always @ (opa or opb) +always @ (*) begin //stage initial quotient0 = 11'b00000000000; diff --git a/vtr_flow/benchmarks/verilog/boundtop_nolatches.v b/vtr_flow/benchmarks/verilog/boundtop_nolatches.v new file mode 100644 index 00000000000..bac522503f9 --- /dev/null +++ b/vtr_flow/benchmarks/verilog/boundtop_nolatches.v @@ -0,0 +1,3053 @@ + module paj_boundtop_hierarchy_no_mem (triIDvalid, triID, wanttriID, raydata, rayaddr, raywe, resultready, resultdata, globalreset, want_braddr, braddr_ready, braddrin, want_brdata, brdata_ready, brdatain, want_addr2, addr2_ready, addr2in, want_data2, data2_ready, data2in, pglobalreset, tm3_clk_v0, tm3_sram_data_in, tm3_sram_data_out, tm3_sram_addr, tm3_sram_we, tm3_sram_oe, tm3_sram_adsp, raygroup01, raygroupvalid01, busy01, raygroup10, raygroupvalid10, busy10, rgData, rgAddr, rgWE, rgAddrValid, rgDone, rgResultData, rgResultReady, rgResultSource, input1); + + + output triIDvalid; + wire triIDvalid; + output[15:0] triID; + wire[15:0] triID; + input wanttriID; + output[31:0] raydata; + wire[31:0] raydata; + output[3:0] rayaddr; + wire[3:0] rayaddr; + output[2:0] raywe; + wire[2:0] raywe; + input resultready; + input[31:0] resultdata; + output globalreset; + wire globalreset; + output want_braddr; + wire want_braddr; + input braddr_ready; + input[9:0] braddrin; + output want_brdata; + wire want_brdata; + input brdata_ready; + input[31:0] brdatain; + output want_addr2; + wire want_addr2; + input addr2_ready; + input[17:0] addr2in; + output want_data2; + wire want_data2; + input data2_ready; + input[63:0] data2in; + input pglobalreset; + input tm3_clk_v0; + input[63:0] tm3_sram_data_in; + wire[63:0] tm3_sram_data_in; + output[63:0] tm3_sram_data_out; + wire[63:0] tm3_sram_data_out; + wire[63:0] tm3_sram_data_xhdl0; + output[18:0] tm3_sram_addr; + wire[18:0] tm3_sram_addr; + output[7:0] tm3_sram_we; + wire[7:0] tm3_sram_we; + output[1:0] tm3_sram_oe; + wire[1:0] tm3_sram_oe; + output tm3_sram_adsp; + wire tm3_sram_adsp; + input[1:0] raygroup01; + input raygroupvalid01; + output busy01; + wire busy01; + input[1:0] raygroup10; + input raygroupvalid10; + output busy10; + wire busy10; + input[31:0] rgData; + input[3:0] rgAddr; + input[2:0] rgWE; + input rgAddrValid; + output rgDone; + wire rgDone; + output[31:0] rgResultData; + wire[31:0] rgResultData; + output rgResultReady; + wire rgResultReady; + output[1:0] rgResultSource; + wire[1:0] rgResultSource; + input input1; + wire raygroupwe; + wire raygroupwe01; + wire raygroupwe10; + wire[1:0] raygroupout; + wire[1:0] raygroupout01; + wire[1:0] raygroupout10; + wire[1:0] raygroupid; + wire[1:0] raygroupid01; + wire[1:0] raygroupid10; + reg[1:0] oldresultid; + wire[1:0] resultid; + wire[31:0] t1i; + wire[31:0] t2i; + wire[31:0] t3i; + wire[15:0] u1i; + wire[15:0] u2i; + wire[15:0] u3i; + wire[15:0] v1i; + wire[15:0] v2i; + wire[15:0] v3i; + wire[15:0] id1i; + wire[15:0] id2i; + wire[15:0] id3i; + wire hit1i; + wire hit2i; + wire hit3i; + wire newresult; + wire write; + reg reset; + wire reset01; + wire reset10; + wire[103:0] peekdata; + reg[103:0] peeklatch; + wire commit01; + wire commit10; + wire[1:0] baseaddress01; + wire[1:0] baseaddress10; + wire[1:0] done; + wire cntreset; + wire cntreset01; + wire cntreset10; + wire passCTS01; + wire passCTS10; + wire triIDvalid01; + wire triIDvalid10; + wire[15:0] triID01; + wire[15:0] triID10; + reg[9:0] boundNodeID; + wire[9:0] BoundNodeID01; + wire[9:0] BoundNodeID10; + wire enablenear; + wire enablenear01; + wire enablenear10; + wire ack01; + wire ack10; + wire empty01; + wire dataready01; + wire empty10; + wire dataready10; + wire lhreset01; + wire lhreset10; + wire[9:0] boundnodeIDout01; + wire[9:0] boundnodeIDout10; + wire[1:0] level01; + wire[1:0] level10; + wire[2:0] hitmask01; + wire[2:0] hitmask10; + // Offset Block Ram Read Signals + wire[9:0] ostaddr; + wire[9:0] addrind01; + wire[9:0] addrind10; + wire ostaddrvalid; + wire addrindvalid01; + wire addrindvalid10; + wire ostdatavalid; + wire[31:0] ostdata; + // Tri List Ram Read Signals + wire[17:0] tladdr; + wire[17:0] tladdr01; + wire[17:0] tladdr10; + wire tladdrvalid; + wire tladdrvalid01; + wire tladdrvalid10; + wire tldatavalid; +wire[63:0] tldata; + // Final Result Signals + wire[31:0] t1_01; + wire[31:0] t2_01; + wire[31:0] t3_01; + wire[31:0] t1_10; + wire[31:0] t2_10; + wire[31:0] t3_10; + wire[15:0] v1_01; + wire[15:0] v2_01; + wire[15:0] v3_01; + wire[15:0] v1_10; + wire[15:0] v2_10; + wire[15:0] v3_10; + wire[15:0] u1_01; + wire[15:0] u2_01; + wire[15:0] u3_01; + wire[15:0] u1_10; + wire[15:0] u2_10; + wire[15:0] u3_10; + wire[15:0] id1_01; + wire[15:0] id2_01; + wire[15:0] id3_01; + wire[15:0] id1_10; + wire[15:0] id2_10; + wire[15:0] id3_10; + wire hit1_01; + wire hit2_01; + wire hit3_01; + wire hit1_10; + wire hit2_10; + wire hit3_10; + wire bcvalid01; + wire bcvalid10; + wire[2:0] peekoffset1a; + wire[2:0] peekoffset1b; + wire[2:0] peekoffset0a; + wire[2:0] peekoffset0b; + wire[2:0] peekoffset2a; + wire[2:0] peekoffset2b; + wire[4:0] peekaddressa; + wire[4:0] peekaddressb; + wire doutput; + wire dack; + wire[4:0] state01; + wire[4:0] state10; + wire[2:0] junk1; + wire[2:0] junk1b; + wire junk2; + wire junk2a; + wire[1:0] junk3; + wire[1:0] junk4; + wire[13:0] debugcount01; + wire[13:0] debugcount10; + wire[1:0] debugsubcount01; + wire[1:0] debugsubcount10; + wire[2:0] statesram; + + onlyonecycle oc (input1, doutput, pglobalreset, tm3_clk_v0); + // Real Stuff Starts Here + assign ostaddr = addrind01 | addrind10 ; + assign ostaddrvalid = addrindvalid01 | addrindvalid10 ; + + vblockramcontroller offsettable(want_braddr, braddr_ready, braddrin, want_brdata, brdata_ready, brdatain, ostaddr, ostaddrvalid, ostdata, ostdatavalid, pglobalreset, tm3_clk_v0); + assign tladdr = tladdr01 | tladdr10 ; + assign tladdrvalid = tladdrvalid01 | tladdrvalid10 ; + sramcontroller trilist (want_addr2, addr2_ready, addr2in, want_data2, data2_ready, data2in, tladdr, tladdrvalid, tldata, tldatavalid, tm3_sram_data_in, tm3_sram_data_out, tm3_sram_addr, tm3_sram_we, tm3_sram_oe, tm3_sram_adsp, pglobalreset, tm3_clk_v0, statesram); + resultinterface ri (t1i, t2i, t3i, u1i, u2i, u3i, v1i, v2i, v3i, id1i, id2i, id3i, hit1i, hit2i, hit3i, resultid, newresult, resultready, resultdata, pglobalreset, tm3_clk_v0); + rayinterface rayint (raygroupout, raygroupwe, raygroupid, enablenear, rgData, rgAddr, rgWE, rgAddrValid, rgDone, raydata, rayaddr, raywe, pglobalreset, tm3_clk_v0); + boundcontroller boundcont01(raygroupout01, raygroupwe01, raygroupid01, enablenear01, raygroup01, raygroupvalid01, busy01, triIDvalid01, triID01, wanttriID, reset01, baseaddress01, newresult, BoundNodeID01, resultid, hitmask01, dataready01, empty01, level01, boundnodeIDout01, ack01, lhreset01, addrind01, addrindvalid01, ostdata, ostdatavalid, tladdr01, tladdrvalid01, tldata, tldatavalid, t1i, t2i, t3i, u1i, u2i, u3i, v1i, v2i, v3i, id1i, id2i, id3i, hit1i, hit2i, hit3i, t1_01, t2_01, t3_01, u1_01, u2_01, u3_01, v1_01, v2_01, v3_01, id1_01, id2_01, id3_01, hit1_01, hit2_01, hit3_01, bcvalid01, done, cntreset01, passCTS01, passCTS10, pglobalreset, tm3_clk_v0, state01, debugsubcount01, debugcount01); + boundcontroller boundcont10(raygroupout10, raygroupwe10, raygroupid10, enablenear10, raygroup10, raygroupvalid10, busy10, triIDvalid10, triID10, wanttriID, reset10, baseaddress10, newresult, BoundNodeID10, resultid, hitmask10, dataready10, empty10, level10, boundnodeIDout10, ack10, lhreset10, addrind10, addrindvalid10, ostdata, ostdatavalid, tladdr10, tladdrvalid10, tldata, tldatavalid, t1i, t2i, t3i, u1i, u2i, u3i, v1i, v2i, v3i, id1i, id2i, id3i, hit1i, hit2i, hit3i, t1_10, t2_10, t3_10, u1_10, u2_10, u3_10, v1_10, v2_10, v3_10, id1_10, id2_10, id3_10, hit1_10, hit2_10, hit3_10, bcvalid10, done, cntreset10, passCTS10, passCTS01, pglobalreset, tm3_clk_v0, state10, debugsubcount10, debugcount10); + resulttransmit restransinst (bcvalid01, bcvalid10, id1_01, id2_01, id3_01, id1_10, id2_10, id3_10, hit1_01, hit2_01, hit3_01, hit1_10, hit2_10, hit3_10, u1_01, u2_01, u3_01, v1_01, v2_01, v3_01, u1_10, u2_10, u3_10, v1_10, v2_10, v3_10, rgResultData, rgResultReady, rgResultSource, pglobalreset, tm3_clk_v0); + +assign raygroupout = raygroupout01 | raygroupout10 ; + assign raygroupwe = raygroupwe01 | raygroupwe10 ; + assign raygroupid = raygroupid01 | raygroupid10 ; + assign triIDvalid = triIDvalid01 | triIDvalid10 ; + assign enablenear = enablenear01 | enablenear10 ; + assign triID = triID01 | triID10 ; + assign cntreset = cntreset01 | cntreset10 ; + + // reset <= reset01 or reset10; + always @(*) + begin + if (resultid == 2'b01) + begin + boundNodeID = BoundNodeID01 ; + end + else if (resultid == 2'b10) + begin + boundNodeID = BoundNodeID10 ; + end + else + begin + boundNodeID = 10'b0000000000 ; + end + end + assign write = ((newresult == 1'b1) & (resultid != 0) & ((hit1i == 1'b1) | (hit2i == 1'b1) | (hit3i == 1'b1))) ? 1'b1 : 1'b0 ; + + sortedstack st(t1i, {hit3i, hit2i, hit1i, boundNodeID}, write, reset, peekdata, pglobalreset, tm3_clk_v0); + assign commit01 = (done == 2'b01) ? 1'b1 : 1'b0 ; + assign commit10 = (done == 2'b10) ? 1'b1 : 1'b0 ; + assign dack = doutput | ack01 ; + listhandler lh01 (peeklatch, commit01, hitmask01, dack, boundnodeIDout01, level01, empty01, dataready01, lhreset01, pglobalreset, tm3_clk_v0, peekoffset0a, peekoffset1a, peekoffset2a, junk2a, junk4); + listhandler lh02 (peeklatch, commit10, hitmask10, ack10, boundnodeIDout10, level10, empty10, dataready10, lhreset10, pglobalreset, tm3_clk_v0, junk1, junk1b, peekoffset2b, junk2, junk3); + + always @(posedge tm3_clk_v0) + begin + if (pglobalreset == 1'b1) + begin + peeklatch <= 0; + reset <= 1'b0 ; + oldresultid <= 2'b00 ; + end + else + begin + oldresultid <= resultid ; + // The reset is only for debugging + if (resultid != oldresultid) + begin + reset <= 1'b1 ; + end + else + begin + reset <= 1'b0 ; + end + if (done != 0) + begin + peeklatch <= peekdata ; + end + end + end + + resultcounter rc (resultid, newresult, done, cntreset, pglobalreset, tm3_clk_v0); + + // global reset as an output should be driven! + assign globalreset = pglobalreset; + + endmodule + + + + + + + + + + + + + + +module resulttransmit (valid01, valid10, id01a, id01b, id01c, id10a, id10b, id10c, hit01a, hit01b, hit01c, hit10a, hit10b, hit10c, u01a, u01b, u01c, v01a, v01b, v01c, u10a, u10b, u10c, v10a, v10b, v10c, rgResultData, rgResultReady, rgResultSource, globalreset, clk); + + input valid01; + input valid10; + input[15:0] id01a; + input[15:0] id01b; + input[15:0] id01c; + input[15:0] id10a; + input[15:0] id10b; + input[15:0] id10c; + input hit01a; + input hit01b; + + input hit01c; + input hit10a; + input hit10b; + input hit10c; + input[15:0] u01a; + input[15:0] u01b; + input[15:0] u01c; + input[15:0] v01a; + input[15:0] v01b; + input[15:0] v01c; + input[15:0] u10a; + input[15:0] u10b; + + input[15:0] u10c; + input[15:0] v10a; + input[15:0] v10b; + input[15:0] v10c; + output[31:0] rgResultData; + reg[31:0] rgResultData; + output rgResultReady; + reg rgResultReady; + output[1:0] rgResultSource; + reg[1:0] rgResultSource; + input globalreset; + input clk; + + reg[3:0] state; + reg[3:0] next_state; + + reg hit01al; + reg hit01bl; + reg hit01cl; + reg hit10al; + reg hit10bl; + reg hit10cl; + reg pending01; + reg pending10; + reg valid01d; + reg valid10d; + +reg[31:0] temp_rgResultData; + reg temp_rgResultReady; + reg[1:0] temp_rgResultSource; + + always @(posedge clk) + begin + if (globalreset == 1'b1) + begin + state <= 0 ; + pending01 <= 1'b0 ; + pending10 <= 1'b0 ; + rgResultData <= 32'b00000000000000000000000000000000 ; + rgResultSource <= 2'b00 ; + + rgResultReady <= 1'b0 ; + end + else + begin + valid01d <= valid01 ; + valid10d <= valid10 ; + if (valid01 == 1'b1) + begin + pending01 <= 1'b1 ; + end + if (valid01d == 1'b1) + begin + hit01al <= hit01a ; + hit01bl <= hit01b ; + hit01cl <= hit01c ; + end + if (valid10 == 1'b1) + begin + pending10 <= 1'b1 ; + end + if (valid10d == 1'b1) + begin + hit10al <= hit10a ; + hit10bl <= hit10b ; + hit10cl <= hit10c ; + end + state <= next_state ; + + rgResultData <= temp_rgResultData; + rgResultReady <= temp_rgResultReady; + rgResultSource <= temp_rgResultSource; + end + end + + always @(*) + begin + case (state) + 0 : + begin + if (pending01 == 1'b1) + begin + next_state = 1 ; + end + else if (pending10 == 1'b1) + begin + next_state = 5 ; + end + else + + begin + next_state = 0 ; + end + temp_rgResultReady = rgResultReady; + temp_rgResultData = rgResultData; + temp_rgResultSource = rgResultSource; + end + 1 : + begin + next_state = 2 ; + temp_rgResultData = {id01a, id01b} ; + temp_rgResultReady = 1'b1 ; + temp_rgResultSource = 2'b01 ; + end + 2 : + begin + next_state = 3 ; + temp_rgResultData = {13'b0000000000000, hit01al, hit01bl, hit01cl, id01c} ; + temp_rgResultReady = 1'b0 ; + temp_rgResultSource = 2'b01 ; + end + + 3 : + begin + next_state = 4 ; + temp_rgResultData = {8'b00000000, u01a[15:8], u01b[15:8], u01c[15:8]} ; + temp_rgResultReady = 1'b0 ; + temp_rgResultSource = 2'b01 ; + end + 4 : + begin + next_state = 0 ; + temp_rgResultData = {8'b00000000, v01a[15:8], v01b[15:8], v01c[15:8]} ; + temp_rgResultReady = 1'b0 ; + temp_rgResultSource = 2'b01 ; + end + 5 : + begin + next_state = 6 ; + temp_rgResultData = {id10a, id10b} ; + temp_rgResultReady = 1'b1 ; + temp_rgResultSource = 2'b10 ; + end + 6 : + begin + next_state = 7 ; + temp_rgResultData = {13'b0000000000000, hit10al, hit10bl, hit10cl, id10c} ; + temp_rgResultReady = 1'b0 ; + temp_rgResultSource = 2'b10 ; + end + 7 : + begin + next_state = 8 ; + temp_rgResultData = {8'b00000000, u10a[15:8], u10b[15:8], u10c[15:8]} ; + temp_rgResultReady = 1'b0 ; + temp_rgResultSource = 2'b10 ; + end + 8 : + begin + next_state = 0 ; + temp_rgResultData = {8'b00000000, v10a[15:8], v10b[15:8], v10c[15:8]} ; + temp_rgResultReady = 1'b0 ; + temp_rgResultSource = 2'b10 ; + end + default: + begin + next_state = state; + temp_rgResultReady = u01a || u01b || u01c || v01a || v01b || v01c || u10a || u10b || u10c || v10a || v10b || v10c; + temp_rgResultData = rgResultData; + temp_rgResultSource = rgResultSource; + end + endcase + end + endmodule + + + + + + + + + + + + + + + + + + + + + + + + + +module boundcontroller (raygroupout, raygroupwe, raygroupid, enablenear, raygroup, validraygroup, busy, triIDvalid, triID, wanttriID, l0reset, baseaddress, newdata, boundNodeIDout, resultID, hitmask, ldataready, lempty, llevel, lboundNodeID, lack, lhreset, addrind, addrindvalid, dataind, dataindvalid, tladdr, tladdrvalid, tldata, tldatavalid, t1in, t2in, t3in, u1in, u2in, u3in, v1in, v2in, v3in, id1in, id2in, id3in, hit1in, hit2in, hit3in, t1, t2, t3, u1, u2, u3, v1, v2, v3, id1, id2, id3, hit1, hit2, hit3, bcvalid, done, resetcnt, passCTSout, passCTSin, globalreset, clk, statepeek, debugsubcount, debugcount); + + output[1:0] raygroupout; + wire[1:0] raygroupout; + output raygroupwe; + reg raygroupwe; + output[1:0] raygroupid; + reg[1:0] raygroupid; + output enablenear; + reg enablenear; + input[1:0] raygroup; + input validraygroup; + output busy; + reg busy; + reg temp_busy; + output triIDvalid; + reg triIDvalid; + output[15:0] triID; + reg[15:0] triID; + input wanttriID; + output l0reset; + reg l0reset; + output[1:0] baseaddress; + reg[1:0] baseaddress; + input newdata; + output[9:0] boundNodeIDout; + reg[9:0] boundNodeIDout; + input[1:0] resultID; + output[2:0] hitmask; + reg[2:0] hitmask; + input ldataready; + input lempty; + input[1:0] llevel; + input[9:0] lboundNodeID; + output lack; + reg lack; + output lhreset; + reg lhreset; + output[9:0] addrind; + reg[9:0] addrind; + output addrindvalid; + reg addrindvalid; + input[31:0] dataind; + input dataindvalid; + output[17:0] tladdr; + reg[17:0] tladdr; + output tladdrvalid; + reg tladdrvalid; + input[63:0] tldata; + input tldatavalid; + input[31:0] t1in; + input[31:0] t2in; + input[31:0] t3in; + input[15:0] u1in; + input[15:0] u2in; + input[15:0] u3in; + input[15:0] v1in; + input[15:0] v2in; + input[15:0] v3in; + input[15:0] id1in; + input[15:0] id2in; + input[15:0] id3in; + input hit1in; + input hit2in; + input hit3in; + output[31:0] t1; + reg[31:0] t1; + output[31:0] t2; + reg[31:0] t2; + output[31:0] t3; + reg[31:0] t3; + output[15:0] u1; + reg[15:0] u1; + output[15:0] u2; + reg[15:0] u2; + output[15:0] u3; + reg[15:0] u3; + output[15:0] v1; + reg[15:0] v1; + output[15:0] v2; + reg[15:0] v2; + output[15:0] v3; + reg[15:0] v3; + output[15:0] id1; + reg[15:0] id1; + output[15:0] id2; + reg[15:0] id2; + output[15:0] id3; + reg[15:0] id3; + output hit1; + reg hit1; + output hit2; + reg hit2; + output hit3; + reg hit3; + output bcvalid; + reg bcvalid; + input[1:0] done; + output resetcnt; + reg resetcnt; + output passCTSout; + reg passCTSout; + input passCTSin; + input globalreset; + input clk; + output[4:0] statepeek; + reg[4:0] statepeek; + output[1:0] debugsubcount; + wire[1:0] debugsubcount; + output[13:0] debugcount; + wire[13:0] debugcount; + + reg[4:0] state; + reg[4:0] next_state; + reg cts; + reg[11:0] addr; + reg[11:0] startAddr; + reg[2:0] resetcount; + reg[1:0] raygroupoutl; + // Leaf Node Signals + reg[13:0] count; + reg[63:0] triDatalatch; + reg[1:0] subcount; + reg[1:0] maskcount; + + reg[4:0] temp_statepeek; + reg [1:0]temp_raygroupoutl ; + reg temp_cts ; + reg temp_passCTSout ; + reg [2:0]temp_resetcount ; + reg temp_l0reset ; + reg [11:0]temp_addr ; + reg [11:0]temp_startAddr ; + reg [9:0]temp_boundNodeIDout ; + reg [1:0]temp_baseaddress ; + reg [2:0]temp_hitmask ; + reg temp_hit1 ; + reg temp_hit2 ; + reg temp_hit3 ; + reg temp_triIDvalid ; + reg [15:0]temp_triID ; + reg temp_lack ; + reg [9:0]temp_addrind ; + reg temp_addrindvalid ; + reg temp_tladdrvalid ; + reg [17:0]temp_tladdr ; + reg [13:0]temp_count ; + reg [1:0]temp_subcount ; + reg [1:0]temp_maskcount ; + reg [63:0]temp_triDatalatch ; + reg [31:0]temp_t1 ; + reg [15:0]temp_u1 ; + reg [15:0]temp_v1 ; + reg [15:0]temp_id1 ; + reg [31:0]temp_t2 ; + reg [15:0]temp_u2 ; + reg [15:0]temp_v2 ; + reg [15:0]temp_id2 ; + reg [31:0]temp_t3 ; + reg [15:0]temp_u3 ; + reg [15:0]temp_v3 ; + reg [15:0]temp_id3 ; + + assign debugsubcount = subcount ; + assign debugcount = count ; + assign raygroupout = (cts == 1'b1 & state != 8 & state != 19 & state != 1) ? raygroupoutl : 2'b00 ; + + always @(posedge clk) + begin + if (globalreset == 1'b1) + begin + state <= 0 ; + raygroupoutl <= 0; + cts <= 1'b0 ; + passCTSout <= 1'b0 ; + addr <= 0; + startAddr <= 0; + boundNodeIDout <= 0; + resetcount <= 0; + hitmask <= 1; + lack <= 1'b0 ; + baseaddress <= 0; + l0reset <= 1'b0 ; + resetcnt <= 1'b0 ; + triIDvalid <= 1'b0 ; + triID <= 0; + addrind <= 0; + addrindvalid <= 1'b0 ; + tladdrvalid <= 1'b0 ; + tladdr <= 0; + triDatalatch <= 0; + maskcount <= 0; + subcount <= 0; + count <= 0; + hit1 <= 1'b0 ; + hit2 <= 1'b0 ; + hit3 <= 1'b0 ; + t1 <= 0; + t2 <= 0; + t3 <= 0; + u1 <= 0; + u2 <= 0; + u3 <= 0; + v1 <= 0; + v2 <= 0; + v3 <= 0; + id1 <= 0; + id2 <= 0; + id3 <= 0; + busy <= 1'b0 ; + end + else + begin + state <= next_state ; + busy <= temp_busy; + if ((done == 2'b00) | (state == 15 & newdata == 1'b1 & resultID == 2'b00)) + begin + resetcnt <= 1'b1 ; + end + else + begin + resetcnt <= 1'b0 ; + end + + statepeek <= temp_statepeek; + raygroupoutl <= temp_raygroupoutl ; + cts <= temp_cts ; + passCTSout <= temp_passCTSout ; + resetcount <= temp_resetcount ; + l0reset <= temp_l0reset ; + addr <= temp_addr ; + startAddr <= temp_startAddr ; + boundNodeIDout <= temp_boundNodeIDout ; + baseaddress <= temp_baseaddress ; + hitmask <= temp_hitmask ; + hit1 <= temp_hit1 ; + hit2 <= temp_hit2 ; + hit3 <= temp_hit3 ; + triIDvalid <= temp_triIDvalid ; + triID <= temp_triID ; + lack <= temp_lack ; + addrind <= temp_addrind ; + addrindvalid <= temp_addrindvalid ; + tladdr <= temp_tladdr ; + tladdrvalid <= temp_tladdrvalid ; + count <= temp_count ; + subcount <= temp_subcount ; + maskcount <= temp_maskcount ; + triDatalatch <= temp_triDatalatch ; + t1 <= temp_t1 ; + u1 <= temp_u1 ; + v1 <= temp_v1 ; + id1 <= temp_id1 ; + t2 <= temp_t2 ; + u2 <= temp_u2 ; + v2 <= temp_v2 ; + id2 <= temp_id2 ; + t3 <= temp_t3 ; + u3 <= temp_u3 ; + v3 <= temp_v3 ; + id3 <= temp_id3 ; + end + end + + // Refactoring this with better style like resulttransmit and listhandler blocks would be very + // time consuming, so instead apply an old trick where we initialize the value to previous state and + // then let the case statement simply superimpose updates on top of that. + always @* + begin + next_state = state ; + temp_busy = busy; + temp_statepeek = statepeek; + temp_raygroupoutl = raygroupoutl ; + temp_cts = cts ; + temp_passCTSout = passCTSout ; + temp_resetcount = resetcount ; + temp_l0reset = l0reset ; + temp_addr = addr ; + temp_startAddr = startAddr ; + temp_boundNodeIDout = boundNodeIDout ; + temp_baseaddress = baseaddress ; + temp_hitmask = hitmask ; + temp_hit1 = hit1 ; + temp_hit2 = hit2 ; + temp_hit3 = hit3 ; + temp_triIDvalid = triIDvalid ; + temp_triID = triID ; + temp_lack = lack ; + temp_addrind = addrind ; + temp_addrindvalid = addrindvalid ; + temp_tladdr = tladdr ; + temp_tladdrvalid = tladdrvalid ; + temp_count = count ; + temp_subcount = subcount ; + temp_maskcount = maskcount ; + temp_triDatalatch = triDatalatch ; + temp_t1 = t1 ; + temp_u1 = u1 ; + temp_v1 = v1 ; + temp_id1 = id1 ; + temp_t2 = t2 ; + temp_u2 = u2 ; + temp_v2 = v2 ; + temp_id2 = id2 ; + temp_t3 = t3 ; + temp_u3 = u3 ; + temp_v3 = v3 ; + temp_id3 = id3 ; + // For the unregistered values, we have to pick default behavior; + // these values are used in enough other defined states to appear to + // be reasonable fallbacks, but putting this here does change design + // intent: + raygroupid = 0; + enablenear = 1'b0 ; + raygroupwe = 1'b0 ; + bcvalid = 1'b0 ; + lhreset = 1'b1 ; + case (state) + 0 : + begin + raygroupid = 0; + enablenear = 1'b0 ; + raygroupwe = 1'b0 ; + bcvalid = 1'b0 ; + + lhreset = 1'b1 ; + if (validraygroup == 1'b1 & cts == 1'b1) + begin + next_state = 2 ; + temp_busy = 1'b1 ; + end + else if (validraygroup == 1'b1 & cts == 1'b0) + begin + next_state = 1 ; + temp_busy = 1'b0 ; + end + else if (validraygroup == 1'b0 & passCTSin == 1'b1 & cts == 1'b1) + begin + next_state = 1 ; + temp_busy = 1'b0 ; + end + else + begin + next_state = 0 ; + temp_busy = 1'b0 ; + end + + temp_statepeek = 5'b00001 ; + // + temp_raygroupoutl = raygroup ; + if (validraygroup == 1'b1 & cts == 1'b0) + begin + temp_cts = 1'b1 ; + temp_passCTSout = 1'b1 ; + end + else if (validraygroup == 1'b0 & cts == 1'b1 & passCTSin == 1'b1) + begin + temp_cts = 1'b0 ; + temp_passCTSout = 1'b1 ; + end + + end + 1 : + begin + if ((passCTSin == cts) & (cts == 1'b1)) + begin + next_state = 2 ; + temp_busy = 1'b1 ; + end + else if (passCTSin == cts) + begin + next_state = 0 ; + temp_busy = 1'b0 ; + end + else + begin + next_state = 1 ; + temp_busy = 1'b0 ; + end + + temp_statepeek = 5'b00010 ; + // + if (passCTSin == cts) + begin + temp_passCTSout = 1'b0 ; + end + + end + 2 : + begin + if (wanttriID == 1'b1) + begin + next_state = 3 ; + temp_busy = 1'b1 ; + end + else + begin + next_state = 2 ; + temp_busy = 1'b1 ; + end + + temp_statepeek = 5'b00011 ; + // + temp_resetcount = 3'b100 ; + temp_l0reset = 1'b1 ; + temp_addr = 0; + temp_startAddr = 0; + temp_boundNodeIDout = 0; + temp_baseaddress = 0; + temp_hitmask = 1; + temp_hit1 = 1'b0 ; + temp_hit2 = 1'b0 ; + temp_hit3 = 1'b0 ; + end + 3 : + begin + if ((addr - startAddr >= 1) & (addr - startAddr != 49)) + begin + raygroupid = 2'b00 ; + end + next_state = 4 ; + temp_busy = 1'b1 ; + if (resetcount == 5) + begin + raygroupwe = 1'b1 ; + end + enablenear = 1'b1 ; + temp_statepeek = 5'b00100 ; + // + if ((addr - startAddr != 48) & (addr - startAddr != 49)) + begin + temp_triIDvalid = 1'b1 ; + end + temp_triID = {4'b0000, addr} ; + end + 4 : + begin + if (addr - startAddr == 49) + begin + next_state = 6 ; + temp_busy = 1'b1 ; + end + else + begin + next_state = 5 ; + temp_busy = 1'b1 ; + end + + temp_statepeek = 5'b00101 ; + end + 5 : + begin + next_state = 3 ; + temp_busy = 1'b1 ; + + temp_statepeek = 5'b00111 ; + // + temp_addr = addr + 1 ; + if (resetcount == 5) + begin + temp_resetcount = 3'b000 ; + end + else + begin + temp_resetcount = resetcount + 1 ; + end + + end + 6 : + begin + if (passCTSin == 1'b1 & cts == 1'b1) + begin + next_state = 7; + temp_busy = 1'b1 ; + end + else if (done == 2'b00 & cts == 1'b0) + begin + next_state = 8; + temp_busy = 1'b1 ; + end + else if (done == 2'b00 & cts == 1'b1) + begin + next_state = 9; + temp_busy = 1'b1 ; + end + else + begin + next_state = 6; + temp_busy = 1'b1 ; + end + + temp_statepeek = 5'b01001 ; + // + if (passCTSin == 1'b1 & cts == 1'b1) + begin + temp_cts = 1'b0 ; + temp_passCTSout = 1'b1 ; + end + else if (done == 2'b00 & cts == 1'b0) + begin + temp_cts = 1'b1 ; + temp_passCTSout = 1'b1 ; + end + + end + 7 : + begin + if (passCTSin == 0) + begin + next_state = 6; + temp_busy = 1'b1 ; + end + else + begin + next_state = 7; + temp_busy = 1'b1 ; + end + + temp_statepeek = 5'b01001 ; + // + if (passCTSin == 1'b0) + begin + temp_passCTSout = 1'b0 ; + end + + end + 8 : + begin + if (passCTSin == 1) + begin + next_state = 9; + temp_busy = 1'b1 ; + end + else + begin + next_state = 8 ; + temp_busy = 1'b1 ; + end + + temp_statepeek = 5'b01010 ; + // + if (passCTSin == 1'b1) + begin + temp_passCTSout = 1'b0 ; + end + end + 9 : + begin + if (lempty == 1'b1) + begin + next_state = 0 ; + temp_busy = 1'b0 ; + bcvalid = 1'b1 ; + end + else if (ldataready == 1'b1 & llevel == 2'b10) + begin + next_state = 10 ; + temp_busy = 1'b1 ; + end + else if (ldataready == 1'b1 & wanttriID == 1'b1) + begin + next_state = 3 ; + temp_busy = 1'b1 ; + end + else + begin + next_state = 9 ; + temp_busy = 1'b1 ; + end + + temp_statepeek = 5'b01011 ; + // + temp_resetcount = 3'b100 ; + temp_baseaddress = llevel + 1 ; + // boundNodeIDout = (lBoundNodeID+1)(6 downto 0) & "000"; + //boundNodeIDout = {(lboundNodeID + 1)[6:0], 3'b000} ; + temp_boundNodeIDout = {lboundNodeID[6:0], 3'b000} ; + // temp_addr = (((lBoundNodeID+1)(7 downto 0) & "0000")+ + // ((lBoundNodeID+1)(6 downto 0) & "00000")) (11 downto 0); + //temp_addr = (({(lboundNodeID + 1)[7:0], 4'b0000}) + ({(lboundNodeID + 1)[6:1], 5'b00000}))[11:0] ; + temp_addr = (({lboundNodeID[7:0], 4'b0000}) + ({lboundNodeID[6:1], 5'b00000})); + // startaddr = (((lBoundNodeID+1)(7 downto 0) & "0000")+ + // ((lBoundNodeID+1)(6 downto 0) & "00000")) (11 downto 0); + //startAddr = (({(lboundNodeID + 1), 4'b0000}) + ({(lboundNodeID + 1), 5'b00000})) ; + temp_startAddr = (({lboundNodeID, 4'b0000}) + ({lboundNodeID, 5'b00000})) ; + if (ldataready == 1'b1 & (wanttriID == 1'b1 | llevel == 2'b10)) + begin + temp_lack = 1'b1 ; + temp_l0reset = 1'b1 ; + end + + if (ldataready == 1'b1 & llevel == 2'b10) + begin + temp_addrind = lboundNodeID - 72 ; + temp_addrindvalid = 1'b1 ; + end + end + 10 : + begin + if (dataindvalid == 1'b1) + begin + next_state = 11 ; + temp_busy = 1'b1 ; + end + else + begin + next_state = 10 ; + temp_busy = 1'b1 ; + end + + temp_statepeek = 5'b01100 ; + // + + temp_tladdr = dataind[17:0] ; + temp_count = dataind[31:18] ; + if (dataindvalid == 1'b1) + begin + temp_addrindvalid = 1'b0 ; + temp_tladdrvalid = 1'b1 ; + end + + end + 11 : + begin + if (count == 0 | count == 1) + begin + next_state = 9 ; + temp_busy = 1'b1 ; + end + else if (wanttriID == 1'b1 & tldatavalid == 1'b1) + begin + next_state = 12 ; + temp_busy = 1'b1 ; + end + else + begin + next_state = 11 ; + temp_busy = 1'b1 ; + end + + temp_statepeek = 5'b01101 ; + // + + temp_triDatalatch = tldata ; + temp_subcount = 2'b10 ; + temp_maskcount = 2'b00 ; + if ((wanttriID == 1'b1 & tldatavalid == 1'b1) | (count == 0 | count == 1)) + begin + temp_tladdr = tladdr + 1 ; + temp_tladdrvalid = 1'b0 ; + end + + end + 12 : + begin + if (count != 0) + begin + next_state = 13 ; + temp_busy = 1'b1 ; + end + else + begin + next_state = 15 ; + temp_busy = 1'b1 ; + end + if (subcount == 2'b01) + begin + raygroupid = 2'b00 ; + end + else + begin + raygroupid = 2'b00 ; + end + enablenear = 1'b0 ; + if (subcount == 2'b01 | count == 0) + begin + raygroupwe = 1'b1 ; + end + + temp_statepeek = 5'b01110 ; + // + + if (maskcount == 2'b11) + begin + // triID = triDataLatch(15 downto 0); + temp_triID = triDatalatch[15:0] ; + end + else if (maskcount == 2'b10) + begin + // triID = triDataLatch(31 downto 16); + temp_triID = triDatalatch[31:16] ; + end + else if (maskcount == 2'b01) + begin + // triID = triDataLatch(47 downto 32); + temp_triID = triDatalatch[47:32] ; + end + else + begin + // triID = triDataLatch(63 downto 48); + temp_triID = triDatalatch[63:48] ; + end + if (count != 0) + begin + temp_count = count - 1 ; + if (count != 1) + begin + temp_triIDvalid = 1'b1 ; + end + + if (maskcount == 2'b01) + begin + temp_tladdrvalid = 1'b1 ; + end + end + + end + 13 : + begin + next_state = 14 ; + temp_busy = 1'b1 ; + + temp_statepeek = 5'b01111 ; + end + 14 : + begin + next_state = 12 ; + temp_busy = 1'b1 ; + temp_statepeek = 5'b10000 ; + // + + if (subcount != 0) + begin + temp_subcount = subcount - 1 ; + end + if (maskcount == 2'b11) + begin + temp_tladdr = tladdr + 1 ; + temp_tladdrvalid = 1'b0 ; + temp_triDatalatch = tldata ; + end + temp_maskcount = maskcount + 1 ; + + end + 15 : + begin + if ((newdata == 1'b0 | resultID != 2'b00) & cts == 1'b1 & passCTSin == 1'b1) + begin + next_state = 16 ; + temp_busy = 1'b1 ; + end + else if (newdata == 1'b1 & resultID == 2'b00) + begin + next_state = 18 ; + temp_busy = 1'b1 ; + end + else + begin + next_state = 15 ; + temp_busy = 1'b1 ; + end + temp_statepeek = 5'b10001 ; + // + temp_tladdr = 0; + temp_tladdrvalid = 0; + if ((newdata == 0) | (resultID < 2'b00) & (passCTSin == 1)) + begin + temp_cts = 0; + temp_passCTSout = 1; + end + + end + 16 : + begin + if (newdata == 1'b1 & resultID == 2'b00) + begin + next_state = 17 ; + temp_busy = 1'b1 ; + end + else if (passCTSin == 1'b0) + begin + next_state = 15 ; + temp_busy = 1'b1 ; + end + else + begin + next_state = 16 ; + temp_busy = 1'b1 ; + end + temp_statepeek = 5'b10010 ; + // + if ((passCTSin == 0) & ((newdata == 0) | (resultID == 1))) + begin + temp_passCTSout = 0; + end + + end + 17 : + begin + if (passCTSin == 1'b0) + begin + next_state = 18 ; + temp_busy = 1'b1 ; + end + else + begin + next_state = 17 ; + temp_busy = 1'b1 ; + end + temp_statepeek = 5'b10011 ; + // + if (passCTSin == 0) + begin + temp_passCTSout = 0; + end + + + end + 18 : + begin + if (cts == 1'b0 & (((hitmask[0]) == 1'b1 & hit1in == 1'b0) | ((hitmask[1]) == 1'b1 & hit2in == 1'b0) | ((hitmask[2]) == 1'b1 & hit3in == 1'b0))) + begin + next_state = 19 ; + temp_busy = 1'b1 ; + end + else if (cts == 1'b1 & (((hitmask[0]) == 1'b1 & hit1in == 1'b0) | ((hitmask[1]) == 1'b1 & hit2in == 1'b0) | ((hitmask[2]) == 1'b1 & hit3in == 1'b0))) + begin + next_state = 9 ; + temp_busy = 1'b1 ; + end + else + begin + next_state = 0 ; + temp_busy = 1'b0 ; + bcvalid = 1'b1 ; + end + temp_statepeek = 5'b10100 ; + // + + + + if (hit1in == 1'b1 & (hitmask[0]) == 1'b1) + begin + temp_t1 = t1in; + temp_u1 = u1in; + temp_v1 = v1in; + temp_id1 = id1in; + temp_hit1 = 1'b1; + temp_hitmask[0] = 1'b0 ; + end + if (hit2in == 1'b1 & (hitmask[1]) == 1'b1) + begin + temp_t2 = t2in ; + temp_u2 = u2in ; + temp_v2 = v2in ; + temp_id2 = id2in ; + temp_hit2 = 1'b1 ; + temp_hitmask[1] = 1'b0 ; + end + if (hit3in == 1'b1 & (hitmask[2]) == 1'b1) + begin + temp_t3 = t3in ; + temp_u3 = u3in ; + temp_v3 = v3in ; + temp_id3 = id3in ; + temp_hit3 = 1'b1 ; + temp_hitmask[2] = 1'b0 ; + end + if (cts == 1'b0 & (((hitmask[0]) == 1'b1 & hit1in == 1'b0) | ((hitmask[1]) == 1'b1 & hit2in == 1'b0) | ((hitmask[2]) == 1'b1 & hit3in == 1'b0))) + begin + temp_passCTSout = 1'b1 ; + temp_cts = 1'b1 ; + end + + end + 19 : + begin + if (passCTSin == 1'b0) + begin + next_state = 19 ; + temp_busy = 1'b1 ; + end + else + begin + next_state = 9 ; + temp_busy = 1'b1 ; + end + temp_statepeek = 5'b10101 ; + // + if (passCTSin == 1'b1) + begin + temp_passCTSout = 1'b0 ; + end + + end + endcase + end +endmodule + + + + + + // A debugging circuit that allows a single cycle pulse to be + // generated by through the ports package + module onlyonecycle (trigger, output_xhdl0, globalreset, clk); + + input trigger; + output output_xhdl0; + reg output_xhdl0; + input globalreset; + input clk; + + reg[1:0] state; + reg[1:0] next_state; + reg[0:0] count; + reg[0:0] temp_count; + + always @(posedge clk) + begin + if (globalreset == 1'b1) + begin + state <= 0 ; + count <= 0 ; + + end + else + begin + state <= next_state ; + count <= temp_count; + end + end + + always @(*) + begin + case (state) + 0 : + begin + output_xhdl0 = 1'b0 ; + if (trigger == 1'b1) + begin + next_state = 1 ; + end + else + begin + next_state = 0 ; + end + temp_count = 1 - 1 ; + end + 1 : + begin + output_xhdl0 = 1'b1 ; + if (count == 0) + begin + next_state = 2 ; + end + else + + begin + + next_state = 1 ; + end + temp_count = count - 1 ; + end + 2 : + begin + output_xhdl0 = 1'b0 ; + if (trigger == 1'b0) + begin + next_state = 0 ; + end + else + begin + next_state = 2 ; + + end + end + //Before adding default this could infer latches, so + //defaulting to holding previous state preserves deisgn intent + default: next_state = state; + + endcase + end + endmodule + + + + + + + + + + + module vblockramcontroller (want_addr, addr_ready, addrin, want_data, data_ready, datain, addr, addrvalid, data, datavalid, globalreset, clk); + + + output want_addr; + reg want_addr; + input addr_ready; + input[10 - 1:0] addrin; + output want_data; + reg want_data; + input data_ready; + input[32 - 1:0] datain; + + input[10 - 1:0] addr; + input addrvalid; + output[32 - 1:0] data; + reg[32 - 1:0] data; + output datavalid; + reg datavalid; + input globalreset; + input clk; + + reg[2:0] state; + reg[2:0] next_state; + reg[10 - 1:0] waddr; + wire[10 - 1:0] saddr; + wire[32 - 1:0] dataout; + reg we; +reg [32 - 1:0]temp_data; +reg [10 - 1:0]temp_waddr ; +reg temp_datavalid; + + assign saddr = (state != 0) ? waddr : addr ; + + spramblock ramblock(we, saddr, datain, dataout, clk); + + always @(posedge clk) + begin + if (globalreset == 1'b1) + begin + state <= 0 ; + waddr <= 0; + data <= 0; + datavalid <= 1'b0 ; + end + else + + begin + state <= next_state ; + data <= temp_data; + waddr <= temp_waddr ; + datavalid <= temp_datavalid; + end + end + + always @(*) + + begin + next_state = state; + temp_data = data; + temp_waddr = waddr; + temp_datavalid = datavalid; + // For the unregistered values, we have to pick default behavior; + // these values are used in enough other defined states to appear to + // be reasonable fallbacks, but putting this here does change design + // intent: + we = 1'b0 ; + want_addr = 1'b1 ; + want_data = 1'b0 ; + case (state) + 0 : + begin + we = 1'b0 ; + want_addr = 1'b1 ; + want_data = 1'b0 ; + if (addr_ready == 1'b1) + begin + next_state = 1 ; + end + + else if (addrvalid == 1'b1 & datavalid == 1'b0) + begin + next_state = 5 ; + end + else + begin + next_state = 0 ; + end + if (addr_ready == 1'b1) + begin + temp_waddr = addrin ; + end + if (addrvalid == 1'b0) + begin + temp_datavalid = 1'b0 ; + + end + + end + 5 : + begin + we = 1'b0 ; + want_addr = 1'b1 ; + want_data = 1'b0 ; + next_state = 0 ; + + temp_data = dataout ; + + temp_datavalid = 1'b1 ; + + end + 1 : + begin + we = 1'b0 ; + want_addr = 1'b0 ; + want_data = 1'b1 ; + if (addr_ready == 1'b1) + begin + next_state = 1 ; + end + else + begin + next_state = 2 ; + + end + end + 2 : + begin + want_addr = 1'b1 ; + want_data = 1'b1 ; + if (addr_ready == 1'b1) + begin + next_state = 4 ; + end + else if (data_ready == 1'b1) + begin + we = 1'b1 ; + + next_state = 3 ; + end + else + begin + next_state = 2 ; + end + if (data_ready == 1'b1) + begin + temp_waddr = waddr + 1 ; + end + + end + 3 : + begin + we = 1'b0 ; + want_addr = 1'b1 ; + want_data = 1'b0 ; + if (data_ready == 1'b1) + begin + next_state = 3 ; + + end + else + begin + next_state = 2 ; + end + end + 4 : + begin + we = 1'b0 ; + want_data = 1'b0 ; + want_addr = 1'b0 ; + if (addr_ready == 1'b1) + begin + next_state = 4 ; + + end + else + begin + next_state = 0 ; + end + end + endcase + end + endmodule + //----------------------------------------------------- + // Single Ported Ram Modual w/Registered Output -- + // - Synpify should infer ram from the coding style -- + // - Depth is the number of bits of address -- + // the true depth is 2**depth -- + + //----------------------------------------------------- + + //modifying this to black box ram implementation + + + module spramblock (we, addr, datain, dataout, clk); + + input we; + input[10 - 1:0] addr; + input[32 - 1:0] datain; + output[32 - 1:0] dataout; + wire[32 - 1:0] dataout; + input clk; + + + +single_port_ram + # (.ADDR_WIDTH(10), .DATA_WIDTH(32)) +new_ram( + .clk (clk), + .we(we), + .data(datain), + .out(dataout), + .addr(addr) + ); + + + endmodule + + + + + + + + + module sramcontroller (want_addr, addr_ready, addrin, want_data, data_ready, datain, addr, addrvalid, data, datavalid, tm3_sram_data_in, tm3_sram_data_out, tm3_sram_addr, tm3_sram_we, tm3_sram_oe, tm3_sram_adsp, globalreset, clk, statepeek); + + output want_addr; + reg want_addr; + input addr_ready; + input[17:0] addrin; + output want_data; + reg want_data; + input data_ready; + input[63:0] datain; + input[17:0] addr; + input addrvalid; + + output[63:0] data; + reg[63:0] data; + reg[63:0] temp_data; + output datavalid; + reg datavalid; + reg temp_datavalid; + input[63:0] tm3_sram_data_in; + wire[63:0] tm3_sram_data_in; + output[63:0] tm3_sram_data_out; + wire[63:0] tm3_sram_data_out; + reg[63:0] tm3_sram_data_xhdl0; + output[18:0] tm3_sram_addr; + reg[18:0] tm3_sram_addr; + output[7:0] tm3_sram_we; + reg[7:0] tm3_sram_we; + output[1:0] tm3_sram_oe; + + reg[1:0] tm3_sram_oe; + output tm3_sram_adsp; + reg tm3_sram_adsp; + input globalreset; + input clk; + output[2:0] statepeek; + reg[2:0] statepeek; + reg[2:0] temp_statepeek; + + reg[2:0] state; + reg[2:0] next_state; + reg[17:0] waddress; + reg[17:0] temp_waddress; + + assign tm3_sram_data_out = tm3_sram_data_xhdl0; + + always @(posedge clk) + begin + if (globalreset == 1'b1) + + begin + state <= 0 ; + waddress <= 0; + data <= 0; + datavalid <= 1'b0 ; + end + else + begin + state <= next_state ; + statepeek <= temp_statepeek; + data <=temp_data; + datavalid <=temp_datavalid; + waddress <= temp_waddress; + end + end + + always @(*) + begin + next_state = state; + temp_statepeek = statepeek; + temp_data = data; + temp_datavalid = datavalid; + temp_waddress = waddress; + // For the unregistered values, we have to pick default behavior; + // these values are used in enough other defined states to appear to + // be reasonable fallbacks, but putting this here does change design + // intent: + tm3_sram_we = 8'b11111111 ; + tm3_sram_oe = 2'b11 ; + tm3_sram_adsp = 1'b1 ; + tm3_sram_data_xhdl0 = 0; + tm3_sram_addr = 0; + want_addr = 1'b1 ; + want_data = 1'b0 ; + case (state) + 0 : + begin + tm3_sram_we = 8'b11111111 ; + tm3_sram_data_xhdl0 = 0; + want_addr = 1'b1 ; + want_data = 1'b0 ; + if (addr_ready == 1'b1) + begin + next_state = 1 ; + end + else if (addrvalid == 1'b1 & datavalid == 1'b0) + begin + next_state = 5 ; + + tm3_sram_addr = {1'b0, addr} ; + tm3_sram_adsp = 1'b0 ; + tm3_sram_oe = 2'b01 ; + end + + else + begin + next_state = 0 ; + end + + temp_statepeek = 3'b001 ; + if (addr_ready == 1'b1) + begin + temp_waddress = addrin ; + end + if (addrvalid == 1'b0) + begin + temp_datavalid = 1'b0 ; + end + + end + 1 : + begin + tm3_sram_we = 8'b11111111 ; + tm3_sram_oe = 2'b11 ; + tm3_sram_adsp = 1'b1 ; + tm3_sram_data_xhdl0 = 0; + tm3_sram_addr = 0; + want_addr = 1'b0 ; + want_data = 1'b1 ; + if (addr_ready == 1'b1) + begin + next_state = 1 ; + end + else + begin + next_state = 2 ; + end + + temp_statepeek = 3'b010 ; + end + 2 : + begin + tm3_sram_oe = 2'b11 ; + want_addr = 1'b1 ; + want_data = 1'b1 ; + tm3_sram_addr = {1'b0, waddress} ; + tm3_sram_data_xhdl0 = datain ; + if (addr_ready == 1'b1) + begin + next_state = 4 ; + end + else if (data_ready == 1'b1) + begin + + tm3_sram_we = 8'b00000000 ; + tm3_sram_adsp = 1'b0 ; + next_state = 3 ; + end + else + begin + next_state = 2 ; + end + temp_statepeek = 3'b011 ; + if (data_ready == 1'b1) + + begin + temp_waddress = waddress + 1 ; + end + + end + 3 : + begin + tm3_sram_we = 8'b11111111 ; + tm3_sram_oe = 2'b11 ; + tm3_sram_adsp = 1'b1 ; + tm3_sram_data_xhdl0 = 0; + tm3_sram_addr = 0; + want_addr = 1'b1 ; + want_data = 1'b0 ; + if (data_ready == 1'b1) + + begin + next_state = 3 ; + end + else + begin + next_state = 2 ; + end + temp_statepeek = 3'b100 ; + end + 4 : + begin + tm3_sram_we = 8'b11111111 ; + tm3_sram_oe = 2'b11 ; + tm3_sram_adsp = 1'b1 ; + tm3_sram_data_xhdl0 = 0; + tm3_sram_addr = 0; + want_data = 1'b0 ; + want_addr = 1'b0 ; + if (addr_ready == 1'b1) + + begin + next_state = 4 ; + end + else + begin + next_state = 0 ; + end + temp_statepeek = 3'b101 ; + end + 5 : + begin + tm3_sram_we = 8'b11111111 ; + tm3_sram_oe = 2'b11 ; + tm3_sram_adsp = 1'b1 ; + tm3_sram_data_xhdl0 = 0; + tm3_sram_addr = 0; + want_addr = 1'b1 ; + want_data = 1'b0 ; + next_state = 0 ; + temp_statepeek = 3'b110 ; + temp_data = tm3_sram_data_in ; + temp_datavalid = 1'b1 ; + + end + + + endcase + end + endmodule + + + + + + + + + + + + + +module resultinterface (t1b, t2b, t3b, u1b, u2b, u3b, v1b, v2b, v3b, id1b, id2b, id3b, hit1b, hit2b, hit3b, resultID, newdata, resultready, resultdata, globalreset, clk); + + output[31:0] t1b; + reg[31:0] t1b; + output[31:0] t2b; + reg[31:0] t2b; + output[31:0] t3b; + reg[31:0] t3b; + output[15:0] u1b; + reg[15:0] u1b; + output[15:0] u2b; + reg[15:0] u2b; + + output[15:0] u3b; + reg[15:0] u3b; + output[15:0] v1b; + reg[15:0] v1b; + output[15:0] v2b; + reg[15:0] v2b; + output[15:0] v3b; + reg[15:0] v3b; + output[15:0] id1b; + reg[15:0] id1b; + output[15:0] id2b; + reg[15:0] id2b; + + output[15:0] id3b; + reg[15:0] id3b; + output hit1b; + reg hit1b; + output hit2b; + reg hit2b; + output hit3b; + reg hit3b; + output[1:0] resultID; + reg[1:0] resultID; + output newdata; + reg newdata; + + reg[31:0] temp_t1b; + reg[31:0] temp_t2b; + reg[31:0] temp_t3b; + reg[15:0] temp_u1b; + reg[15:0] temp_u2b; + reg[15:0] temp_u3b; + reg[15:0] temp_v1b; + reg[15:0] temp_v2b; + reg[15:0] temp_v3b; + reg[15:0] temp_id1b; + reg[15:0] temp_id2b; + reg[15:0] temp_id3b; + reg temp_hit1b; + reg temp_hit2b; + reg temp_hit3b; + reg[1:0] temp_resultID; + reg temp_newdata; + + input resultready; + input[31:0] resultdata; + input globalreset; + input clk; + + reg[3:0] state; + reg[3:0] next_state; + + always @(posedge clk) + begin + if (globalreset == 1'b1) + begin + state <= 0 ; + t1b <= 0; + t2b <= 0; + t3b <= 0; + u1b <= 0; + u2b <= 0; + u3b <= 0; + v1b <= 0; + + v2b <= 0; + v3b <= 0; + id1b <= 0; + id2b <= 0; + id3b <= 0; + hit1b <= 1'b0 ; + hit2b <= 1'b0 ; + hit3b <= 1'b0 ; + resultID <= 0; + newdata <= 1'b0 ; + end + else + begin + state <= next_state ; + + t1b <= temp_t1b; + newdata <= temp_newdata; + u1b <= temp_u1b; + v1b <= temp_v1b; + id1b <= temp_id1b; + hit1b <= temp_hit1b; + resultID <= temp_resultID; + t2b <= temp_t2b; + u2b <= temp_u2b; + id2b <= temp_id2b; + t3b <= temp_t3b; + u3b <= temp_u3b; + v3b <= temp_v3b; + id3b <= temp_id3b; + hit3b <= temp_hit3b; + v2b <= temp_v2b; + hit2b <= temp_hit2b; + end + end + + always @(*) + begin + next_state = state ; + temp_t1b = t1b; + temp_newdata = newdata; + temp_u1b = u1b; + temp_v1b = v1b; + temp_id1b = id1b; + temp_hit1b = hit1b; + temp_resultID = resultID; + temp_t2b = t2b; + temp_u2b = u2b; + temp_id2b = id2b; + temp_t3b = t3b; + temp_u3b = u3b; + temp_v3b = v3b; + temp_id3b = id3b; + temp_hit3b = hit3b; + temp_v2b = v2b; + temp_hit2b = hit2b; + case (state) + 0 : + begin + + if (resultready == 1'b1) + begin + next_state = 1 ; + end + else + begin + next_state = 0 ; + end + temp_newdata = 1'b0 ; + if (resultready == 1'b1) + begin + temp_t1b = resultdata ; + end + + end + 1 : + begin + next_state = 2 ; + temp_newdata = 1'b0 ; + temp_u1b = resultdata[31:16] ; + temp_v1b = resultdata[15:0] ; + end + 2 : + begin + next_state = 3 ; + temp_newdata = 1'b0 ; + temp_id1b = resultdata[15:0] ; + temp_hit1b = resultdata[16] ; + temp_resultID = resultdata[18:17] ; + end + 3 : + begin + + next_state = 4 ; + temp_newdata = 1'b0 ; + temp_t2b = resultdata ; + end + 4 : + begin + next_state = 5 ; + temp_newdata = 1'b0 ; + temp_u2b = resultdata[31:16] ; + temp_v2b = resultdata[15:0] ; + end + 5 : + begin + next_state = 6 ; + temp_newdata = 1'b0 ; + temp_id2b = resultdata[15:0] ; + temp_hit2b = resultdata[16] ; + end + 6 : + begin + + next_state = 7 ; + temp_newdata = 1'b0 ; + temp_t3b = resultdata ; + end + 7 : + begin + next_state = 8 ; + temp_newdata = 1'b0 ; + temp_u3b = resultdata[31:16] ; + temp_v3b = resultdata[15:0] ; + end + 8 : + begin + next_state = 0 ; + temp_id3b = resultdata[15:0] ; + temp_hit3b = resultdata[16] ; + temp_newdata = 1'b1 ; + end + endcase + end + + endmodule + module rayinterface (raygroup, raygroupwe, raygroupid, enablenear, rgData, rgAddr, rgWE, rgAddrValid, rgDone, raydata, rayaddr, raywe, globalreset, clk); + + input[1:0] raygroup; + input raygroupwe; + input[1:0] raygroupid; + input enablenear; + input[31:0] rgData; + input[3:0] rgAddr; + input[2:0] rgWE; + + input rgAddrValid; + output rgDone; + reg rgDone; + output[31:0] raydata; + reg[31:0] raydata; + output[3:0] rayaddr; + reg[3:0] rayaddr; + output[2:0] raywe; + reg[2:0] raywe; + input globalreset; + input clk; + + + reg[31:0] rgDatal; + reg[3:0] rgAddrl; + reg[2:0] rgWEl; + reg rgAddrValidl; + + always @(posedge clk) + begin + if (globalreset == 1'b1) + begin + raydata <= 0; + rayaddr <= 0; + raywe <= 0; + + rgDone <= 1'b0 ; + rgDatal <= 0; + rgAddrl <= 0; + rgWEl <= 0; + rgAddrValidl <= 1'b0 ; + end + else + begin + rgDatal <= rgData ; // Latch interchip signals + rgAddrl <= rgAddr ; // To Meet Timing + rgWEl <= rgWE ; + + rgAddrValidl <= rgAddrValid ; + + if (raygroupwe == 1'b1) + begin + raydata[0] <= enablenear ; + raydata[31:1] <= 0; + raywe <= 3'b111 ; + rayaddr <= {raygroupid, raygroup} ; + if (rgAddrValidl == 1'b0) + rgDone <= 1'b0 ; + end + else if (rgAddrValidl == 1'b1 & rgDone == 1'b0) + begin + raydata <= rgDatal ; + raywe <= rgWEl ; + rayaddr <= rgAddrl ; + rgDone <= 1'b1 ; + end + else + begin + raywe <= 0; + end + end + end + endmodule + + + + +module sortedstack (keyin, datain, write, reset, peekdata, globalreset, clk); + + input[32 - 1:0] keyin; + input[13 - 1:0] datain; + input write; + input reset; + output[13 * 8 - 1:0] peekdata; + + wire[13 * 8 - 1:0] peekdata; + wire big_reset; + input globalreset; + input clk; + + reg[32 - 1:0] key0; + reg[32 - 1:0] key1; + reg[32 - 1:0] key2; + reg[32 - 1:0] key3; + reg[32 - 1:0] key4; + reg[32 - 1:0] key5; + reg[32 - 1:0] key6; + reg[32 - 1:0] key7; + reg[13 - 1:0] data0; + reg[13 - 1:0] data1; + reg[13 - 1:0] data2; + reg[13 - 1:0] data3; + reg[13 - 1:0] data4; + reg[13 - 1:0] data5; + reg[13 - 1:0] data6; + reg[13 - 1:0] data7; + reg full0; + reg full1; + reg full2; + reg full3; + reg full4; + reg full5; + reg full6; + reg full7; + reg[2:0] location; + + assign peekdata[(0 + 1) * (13) - 1:0 * (13)] = ((full0) == 1'b1) ? data0 : 0; + assign peekdata[(1 + 1) * (13) - 1:1 * (13)] = ((full1) == 1'b1) ? data1 : 0; + assign peekdata[(2 + 1) * (13) - 1:2 * (13)] = ((full2) == 1'b1) ? data2 : 0; + assign peekdata[(3 + 1) * (13) - 1:3 * (13)] = ((full3) == 1'b1) ? data3 : 0; + assign peekdata[(4 + 1) * (13) - 1:4 * (13)] = ((full4) == 1'b1) ? data4 : 0; + assign peekdata[(5 + 1) * (13) - 1:5 * (13)] = ((full5) == 1'b1) ? data5 : 0; + assign peekdata[(6 + 1) * (13) - 1:6 * (13)] = ((full6) == 1'b1) ? data6 : 0; + assign peekdata[(7 + 1) * (13) - 1:7 * (13)] = ((full7) == 1'b1) ? data7 : 0; + + // Select the proper insertion point + always @(*) + begin + +/* PAJ -- changed for loops */ + if ((keyin < key0) | ((full0) == 1'b0)) + begin + location = 0 ; + end + else if ((keyin < key1) | ((full1) == 1'b0)) + begin + location = 1 ; + end + else if ((keyin < key2) | ((full2) == 1'b0)) + begin + location = 2 ; + end + else if ((keyin < key3) | ((full3) == 1'b0)) + begin + location = 3 ; + end + else if ((keyin < key4) | ((full4) == 1'b0)) + begin + location = 4 ; + end + else if ((keyin < key5) | ((full5) == 1'b0)) + begin + location = 5 ; + end + else if ((keyin < key6) | ((full6) == 1'b0)) + begin + location = 6 ; + end + else + begin + location = 7; + end + end + + assign big_reset = globalreset | reset; + always @(posedge clk) + begin + if (big_reset == 1'b1) + begin + full0 <= 1'b0 ; + key0 <= 0; + data0 <= 0; + full1 <= 1'b0 ; + key1 <= 0; + data1 <= 0; + full2 <= 1'b0 ; + key2 <= 0; + data2 <= 0; + full3 <= 1'b0 ; + key3 <= 0; + data3 <= 0; + full4 <= 1'b0 ; + key4 <= 0; + data4 <= 0; + full5 <= 1'b0 ; + key5 <= 0; + data5 <= 0; + full6 <= 1'b0 ; + key6 <= 0; + data6 <= 0; + full7 <= 1'b0 ; + key7 <= 0; + data7 <= 0; + end + else + begin + if (write == 1'b1) + begin + if (location == 0) + begin + key0 <= keyin; + data0 <= datain; + full0 <= 1'b1; + key1 <= key0; + data1 <= data0; + full1 <= full0; + key2 <= key1; + data2 <= data1; + full2 <= full1; + key3 <= key2; + data3 <= data2; + full3 <= full2; + key4 <= key3; + data4 <= data3; + full4 <= full3; + key5 <= key4; + data5 <= data4; + full5 <= full4; + key6 <= key5; + data6 <= data5; + full6 <= full5; + key7 <= key6; + data7 <= data6; + full7 <= full6; + end + else if (location == 1) + begin + key1 <= keyin; + data1 <= datain; + full1 <= 1'b1; + key2 <= key1; + data2 <= data1; + full2 <= full1; + key3 <= key2; + data3 <= data2; + full3 <= full2; + key4 <= key3; + data4 <= data3; + full4 <= full3; + key5 <= key4; + data5 <= data4; + full5 <= full4; + key6 <= key5; + data6 <= data5; + full6 <= full5; + key7 <= key6; + data7 <= data6; + full7 <= full6; + end + else if (location == 2) + begin + key2 <= keyin; + data2 <= datain; + full2 <= 1'b1; + key3 <= key2; + data3 <= data2; + full3 <= full2; + key4 <= key3; + data4 <= data3; + full4 <= full3; + key5 <= key4; + data5 <= data4; + full5 <= full4; + key6 <= key5; + data6 <= data5; + full6 <= full5; + key7 <= key6; + data7 <= data6; + full7 <= full6; + end + else if (location == 2) + begin + key3 <= keyin; + data3 <= datain; + full3 <= 1'b1; + data4 <= data3; + full4 <= full3; + key5 <= key4; + data5 <= data4; + full5 <= full4; + key6 <= key5; + data6 <= data5; + full6 <= full5; + key7 <= key6; + data7 <= data6; + full7 <= full6; + end + else if (location == 4) + begin + key4 <= keyin; + data4 <= datain; + full4 <= 1'b1; + key5 <= key4; + data5 <= data4; + full5 <= full4; + key6 <= key5; + data6 <= data5; + full6 <= full5; + key7 <= key6; + data7 <= data6; + full7 <= full6; + end + else if (location == 5) + begin + key5 <= keyin; + data5 <= datain; + full5 <= 1'b1; + key6 <= key5; + data6 <= data5; + full6 <= full5; + key7 <= key6; + data7 <= data6; + full7 <= full6; + end + else if (location == 6) + begin + key6 <= keyin; + data6 <= datain; + full6 <= 1'b1; + key7 <= key6; + data7 <= data6; + full7 <= full6; + end + else if (location == 7) + begin + key7 <= keyin; + data7 <= datain; + full7 <= 1'b1; + end + end + end +end +endmodule + + + + +module listhandler (dataarrayin, commit, hitmask, ack, boundnodeID, level, empty, dataready, reset, globalreset, clk, peekoffset0, peekoffset1, peekoffset2, peekhit, peekstate); + + input[8 * 13 - 1:0] dataarrayin; + input commit; + input[2:0] hitmask; + input ack; + output[9:0] boundnodeID; + wire[9:0] boundnodeID; + output[1:0] level; + wire[1:0] level; + + output empty; + wire empty; + output dataready; + wire dataready; + input reset; + input globalreset; + input clk; + output[2:0] peekoffset0; + wire[2:0] peekoffset0; + output[2:0] peekoffset1; + wire[2:0] peekoffset1; + output[2:0] peekoffset2; + + wire[2:0] peekoffset2; + output peekhit; + wire peekhit; + output[1:0] peekstate; + reg[1:0] peekstate; + reg[1:0] temp_peekstate; + + reg[1:0] next_state; + reg[1:0] state; + reg[1:0] readlevel; + + reg[1:0] writelevel; + reg[2:0] offset0; + reg[2:0] offset1; + reg[2:0] offset2; + reg[4:0] address; + wire we; + reg[12:0] datain; + wire[12:0] dataout; + reg[2:0] lvempty; + reg busy; + reg temp_busy; + reg[2:0] temp_lvempty; + reg[1:0] temp_readlevel; + reg[1:0] temp_writelevel; + reg[2:0] temp_offset0; + reg[2:0] temp_offset1; + reg[2:0] temp_offset2; + + // Debug Stuff + + assign peekoffset0 = offset0 ; + assign peekoffset1 = offset1 ; + assign peekoffset2 = offset2 ; + assign peekhit = ((datain[10]) == 1'b1 | (datain[11]) == 1'b1 | (datain[12]) == 1'b1) ? 1'b1 : 1'b0 ; + + // Real Code + + spram ram(we, dataout, datain, clk); + + assign level = readlevel ; + assign boundnodeID = dataout[9:0] ; + + assign empty = (lvempty == 3'b111 & busy == 1'b0) ? 1'b1 : 1'b0 ; + assign dataready = ((((dataout[10]) == 1'b1 & (hitmask[0]) == 1'b1) | ((dataout[11]) == 1'b1 & (hitmask[1]) == 1'b1) | ((dataout[12]) == 1'b1 & (hitmask[2]) == 1'b1)) & (empty == 1'b0) & (busy == 1'b0)) ? 1'b1 : 1'b0 ; + + always @(*) + begin + address[4:3] = readlevel ; + + if (address[4:3] == 2'b00) + begin + address[2:0] = offset0 ; + end + else if (address[4:3] == 2'b01) + begin + + address[2:0] = offset1 ; + end + else if (address[4:3] == 2'b10) + begin + address[2:0] = offset2 ; + end + else + begin + address[2:0] = 0; + end + end + + always @(posedge clk) + begin + if (globalreset == 1'b1) + begin + state <= 0 ; + lvempty <= 1; + busy <= 1'b0 ; + readlevel <= 2'b00 ; + writelevel <= 2'b00 ; + offset0 <= 3'b000 ; + offset1 <= 3'b000 ; + offset2 <= 3'b000 ; + + end + else + begin + state <= next_state ; + peekstate <= temp_peekstate ; + busy <= temp_busy; + lvempty <= temp_lvempty; + readlevel <= temp_readlevel; + writelevel <= temp_writelevel; + offset0 <= temp_offset0; + offset1 <= temp_offset1; + offset2 <= temp_offset2; + end + end + + //for we and datain we cannot preserve original functionality and stil + //eliminate latches because there were no flops for them in the original + //code. The best we can do is observe that nonzero, valid behavior + //is defined only when state == 2'b01. Since putting these behind flops + //would change their timing, build a mux and set we and datain to zero + //for previously undefined states + assign we = (state == 2'b01); + always @(*) begin + if (state == 2'b01) begin + case(address[2:0]) + 3'b000: datain = dataarrayin[0+:13]; + 3'b001: datain = dataarrayin[13+:13]; + 3'b010: datain = dataarrayin[26+:13]; + 3'b011: datain = dataarrayin[39+:13]; + 3'b100: datain = dataarrayin[52+:13]; + 3'b101: datain = dataarrayin[65+:13]; + 3'b110: datain = dataarrayin[78+:13]; + 3'b111: datain = dataarrayin[91+:13]; + endcase + end + else begin + datain = 'h0; + end + end + + always @(*) + begin + + // Note that throughout this case statement it is necessary to + // add else statements that were not previously present in order + // to prevent latch inference. To preserve previous behavior, + // these else statements should always set the value equal to + // previous state + case (state) + 2'b00 : + begin + temp_peekstate = 2'b01 ; + + if (reset == 1'b1) + begin + temp_busy = 1'b0 ; + temp_lvempty = 1; + temp_readlevel = 2'b00 ; + + temp_writelevel = 2'b00 ; + temp_offset0 = 3'b000 ; + temp_offset1 = 3'b000 ; + temp_offset2 = 3'b000 ; + end + else if (commit == 1'b1) + begin + temp_busy = 1'b1 ; + if (writelevel == 2'b00) + begin + temp_offset0 = 3'b000 ; + temp_offset1 = offset1; + temp_offset2 = offset2; + end + + else if (writelevel == 2'b01) + begin + temp_offset1 = 3'b000 ; + temp_offset0 = offset0; + temp_offset2 = offset2; + end + else if (writelevel == 2'b10) + begin + temp_offset0 = offset0; + temp_offset1 = offset1; + temp_offset2 = 3'b000 ; + end + else begin + temp_offset0 = offset0; + temp_offset1 = offset1; + temp_offset2 = offset2; + end + temp_readlevel = writelevel ; + temp_writelevel = writelevel; + temp_lvempty = lvempty; + end + + else if (ack == 1'b1) + begin + temp_writelevel = readlevel + 1 ; + temp_readlevel = readlevel; + temp_busy = 1'b1 ; // This will ensure that align skips one + temp_lvempty = lvempty; + temp_offset0 = offset0; + temp_offset1 = offset1; + temp_offset2 = offset2; + end + else begin + temp_busy = busy; + temp_lvempty = lvempty; + temp_readlevel = readlevel; + temp_writelevel = writelevel; + temp_offset0 = offset0; + temp_offset1 = offset1; + temp_offset2 = offset2; + temp_readlevel = readlevel; + temp_writelevel = writelevel; + end + end + 2'b01 : + begin + temp_peekstate = 2'b10 ; + + if (readlevel == 2'b00) + begin + temp_offset0 = offset0 + 1 ; + temp_offset1 = offset1; + temp_offset2 = offset2; + end + else if (readlevel == 2'b01) + begin + temp_offset1 = offset1 + 1 ; + temp_offset0 = offset0; + temp_offset2 = offset2; + end + else if (readlevel == 2'b10) + begin + temp_offset2 = offset2 + 1 ; + temp_offset0 = offset0; + temp_offset1 = offset1; + end + else + begin + temp_offset0 = offset0; + temp_offset1 = offset1; + temp_offset2 = offset2; + end + + if (address[2:0] == 3'b111) + begin + temp_busy = 1'b0 ; + end + else begin + temp_busy = busy; + end + + if ((datain[10]) == 1'b1 | (datain[11]) == 1'b1 | (datain[12]) == 1'b1) + begin + if (readlevel == 2'b00) + begin + temp_lvempty[0] = 1'b0 ; + temp_lvempty[1] = lvempty[1] ; + temp_lvempty[2] = lvempty[2] ; + end + else if (readlevel == 2'b01) + begin + temp_lvempty[1] = 1'b0 ; + temp_lvempty[0] = lvempty[0] ; + temp_lvempty[2] = lvempty[2] ; + end + else if (readlevel == 2'b10) + begin + temp_lvempty[2] = 1'b0 ; + temp_lvempty[0] = lvempty[0] ; + temp_lvempty[1] = lvempty[1] ; + end + else begin + temp_lvempty = lvempty; + end + end + else begin + temp_lvempty = lvempty; + end + + temp_readlevel = readlevel; + temp_writelevel = writelevel; + + end + 2'b10 : + begin + if (empty == 1'b0 & dataready == 1'b0) + temp_peekstate = 2'b11 ; + else + temp_peekstate = peekstate; + + temp_busy = 1'b0 ; + + if (empty == 1'b0 & dataready == 1'b0) + begin + if (readlevel == 2'b00) + begin + if (offset0 == 3'b111) + begin + temp_lvempty[0] = 1'b1 ; + temp_lvempty[1] = lvempty[1]; + temp_lvempty[2] = lvempty[2]; + temp_offset0 = offset0; + temp_offset1 = offset1; + temp_offset2 = offset2; + end + else + begin + temp_lvempty = lvempty; + temp_offset0 = offset0 + 1 ; + temp_offset1 = offset1; + temp_offset2 = offset2; + end + temp_readlevel = readlevel; + temp_writelevel = writelevel; + end + else if (readlevel == 2'b01) + begin + if (offset1 == 3'b111) + begin + temp_lvempty[1] = 1'b1 ; + temp_lvempty[0] = lvempty[0]; + temp_lvempty[2] = lvempty[2]; + temp_readlevel = 2'b00 ; + temp_offset0 = offset0; + temp_offset1 = offset1; + temp_offset2 = offset2; + end + else + begin + temp_offset1 = offset1 + 1 ; + temp_offset0 = offset0; + temp_offset2 = offset2; + temp_lvempty = lvempty; + temp_readlevel = readlevel; + end + temp_writelevel = writelevel; + end + else if (readlevel == 2'b10) + begin + if (offset2 == 3'b111) + begin + temp_lvempty[2] = 1'b1 ; + temp_lvempty[1:0] = lvempty[1:0]; + if ((lvempty[1]) == 1'b1) + begin + temp_readlevel = 2'b00 ; + end + else + begin + temp_readlevel = 2'b01 ; + end + temp_offset0 = offset0; + temp_offset1 = offset1; + temp_offset2 = offset2; + end + else + begin + temp_offset0 = offset0; + temp_offset1 = offset1; + temp_offset2 = offset2 + 1 ; + temp_lvempty = lvempty; + temp_readlevel = readlevel; + end + temp_writelevel = writelevel; + end + else + begin + temp_lvempty = lvempty; + temp_offset0 = offset0; + temp_offset1 = offset1; + temp_offset2 = offset2; + temp_readlevel = readlevel; + temp_writelevel = writelevel; + end + end + else + begin + temp_lvempty = lvempty; + temp_offset0 = offset0; + temp_offset1 = offset1; + temp_offset2 = offset2; + temp_readlevel = readlevel; + temp_writelevel = writelevel; + end + end + default: begin + // preserve original design intent by holding state, even if + // this behavior is not really sensical + temp_peekstate = peekstate ; + temp_busy = busy; + temp_lvempty = lvempty; + temp_readlevel = readlevel; + temp_writelevel = writelevel; + temp_offset0 = offset0; + temp_offset1 = offset1; + temp_offset2 = offset2; + end + endcase + + case (state) + 2'b00 : + begin + if (reset == 1'b1) + begin + next_state = 0 ; + end + else if (commit == 1'b1) + begin + next_state = 1 ; + end + else if ((ack == 1'b1) | (dataready == 1'b0 & empty == 1'b0)) + begin + next_state = 2 ; + end + else + begin + next_state = 0 ; + end + end + 2'b01 : + begin + if (address[2:0] == 3'b111) + begin + next_state = 2 ; + end + else + begin + next_state = 1 ; + end + end + 2'b10 : + begin + if (empty == 1'b0 & dataready == 1'b0) + begin + next_state = 2 ; + end + else + next_state = 0 ; + end + default: begin + // preserve original design intent by holding state, even if + // this behavior is not really sensical + next_state = state; + end + endcase +end +endmodule + + + + module spram (we, dataout, datain, clk); + + input we; + output[13 - 1:0] dataout; + wire[13 - 1:0] dataout; + input[13 - 1:0] datain; + input clk; + reg[13 - 1:0] temp_reg; + + reg[13 - 1:0] mem1; + reg[13 - 1:0] mem2; + + assign dataout = mem2 ; + + always @(posedge clk) + begin + temp_reg <= 0; + if (we == 1'b1) + begin + mem1 <= datain + temp_reg; + mem2 <= mem1; + end + end + endmodule + module resultcounter (resultID, newresult, done, reset, globalreset, clk); + + input[1:0] resultID; + input newresult; + output[1:0] done; + wire[1:0] done; + input reset; + input globalreset; + input clk; + + wire big_reset; + + reg[3:0] count; + reg[1:0] curr; + + assign done = (count == 0) ? curr : 2'b00 ; + assign big_reset = globalreset | reset; + + always @(posedge clk) + begin + if (big_reset == 1'b1) + begin + count <= 4'b1000 ; + curr <= 0; + end + else + begin + if ((resultID != 0) & (newresult == 1'b1) & (count != 0)) + begin + count <= count - 1 ; + curr <= resultID ; + end + end + end + endmodule + diff --git a/vtr_flow/benchmarks/verilog/ch_intrinsics_nolatches.v b/vtr_flow/benchmarks/verilog/ch_intrinsics_nolatches.v new file mode 100755 index 00000000000..707eab4a97f --- /dev/null +++ b/vtr_flow/benchmarks/verilog/ch_intrinsics_nolatches.v @@ -0,0 +1,301 @@ + + +`define MEMORY_CONTROLLER_TAGS 1 +`define MEMORY_CONTROLLER_TAG_SIZE 1 +`define TAG__str 1'b0 +`define MEMORY_CONTROLLER_ADDR_SIZE 32 +`define MEMORY_CONTROLLER_DATA_SIZE 32 + + +module memory_controller +( + clk, + memory_controller_address, + memory_controller_write_enable, + memory_controller_in, + memory_controller_out +); +input clk; +input [`MEMORY_CONTROLLER_ADDR_SIZE-1:0] memory_controller_address; +input memory_controller_write_enable; +input [`MEMORY_CONTROLLER_DATA_SIZE-1:0] memory_controller_in; +output [`MEMORY_CONTROLLER_DATA_SIZE-1:0] memory_controller_out; +reg [`MEMORY_CONTROLLER_DATA_SIZE-1:0] memory_controller_out; + + +reg [4:0] str_address; +reg str_write_enable; +reg [7:0] str_in; +wire [7:0] str_out; + +single_port_ram + # (.ADDR_WIDTH(5), .DATA_WIDTH(8)) +_str ( + .clk( clk ), + .addr( str_address ), + .we( str_write_enable ), + .data( str_in ), + .out( str_out ) +); + + +wire tag; + +//must use all wires inside module..... +assign tag = |memory_controller_address & | memory_controller_in; +reg [`MEMORY_CONTROLLER_TAG_SIZE-1:0] prevTag; +always @(posedge clk) + prevTag <= tag; + +always @(*) +begin + if (~tag) + begin + str_address = memory_controller_address[4:0]; + str_write_enable = memory_controller_write_enable; + str_in[7:0] = memory_controller_in[7:0]; + end + else + begin + str_address = 5'h0; + str_write_enable = 1'b0; + str_in[7:0] = 8'h0; + end +end + +always @(*) +begin + if (~prevTag) + memory_controller_out = str_out; + else + memory_controller_out = 'h0; +end + +endmodule + + +module memset + ( + clk, + reset, + start, + finish, + return_val, + m, + c, + n, + memory_controller_write_enable, + memory_controller_address, + memory_controller_in, + memory_controller_out + ); + +output[`MEMORY_CONTROLLER_ADDR_SIZE-1:0] return_val; +reg [`MEMORY_CONTROLLER_ADDR_SIZE-1:0] return_val; +input clk; +input reset; +input start; + +output finish; +reg finish; + +input [`MEMORY_CONTROLLER_ADDR_SIZE-1:0] m; +input [31:0] c; +input [31:0] n; + +output [`MEMORY_CONTROLLER_ADDR_SIZE-1:0] memory_controller_address; +reg [`MEMORY_CONTROLLER_ADDR_SIZE-1:0] memory_controller_address; + +output memory_controller_write_enable; +reg memory_controller_write_enable; + +output [`MEMORY_CONTROLLER_DATA_SIZE-1:0] memory_controller_in; +reg [`MEMORY_CONTROLLER_DATA_SIZE-1:0] memory_controller_in; + +output [`MEMORY_CONTROLLER_DATA_SIZE-1:0] memory_controller_out; + +reg [3:0] cur_state; + +/* +parameter Wait = 4'd0; +parameter entry = 4'd1; +parameter entry_1 = 4'd2; +parameter entry_2 = 4'd3; +parameter bb = 4'd4; +parameter bb_1 = 4'd5; +parameter bb1 = 4'd6; +parameter bb1_1 = 4'd7; +parameter bb_nph = 4'd8; +parameter bb2 = 4'd9; +parameter bb2_1 = 4'd10; +parameter bb2_2 = 4'd11; +parameter bb2_3 = 4'd12; +parameter bb2_4 = 4'd13; +parameter bb4 = 4'd14; +*/ + +memory_controller memtroll (clk,memory_controller_address, memory_controller_write_enable, memory_controller_in, memory_controller_out); + + +reg [31:0] indvar; +reg var1; +reg [31:0] tmp; +reg [31:0] tmp8; +reg var2; +reg [31:0] var0; +reg [`MEMORY_CONTROLLER_ADDR_SIZE-1:0] scevgep; +reg [`MEMORY_CONTROLLER_ADDR_SIZE-1:0] s_07; +reg [31:0] indvar_next; +reg exitcond; + +always @(posedge clk) +if (reset) + cur_state <= 4'b0000; +else +case(cur_state) + 4'b0000: + begin + finish <= 1'b0; + if (start == 1'b1) + cur_state <= 4'b0001; + else + cur_state <= 4'b0000; + end + 4'b0001: + begin + + + + var0 <= n & 32'b00000000000000000000000000000011; + + cur_state <= 4'b0010; + end + 4'b0010: + begin + + var1 <= 1'b0; + var0 <= 32'b00000000000000000000000000000000; + + cur_state <= 4'b0011; + end + 4'b0011: + begin + + + if (|var1) begin + cur_state <= 4'b0110; + end + else + begin + + cur_state <= 4'b0100; + end + end + 4'b0100: + begin + + cur_state <= 4'b0101; + end + 4'b0101: + begin + cur_state <= 4'b0110; + end + 4'b0110: + begin + + var2 <= | (n [31:4]); + + cur_state <= 4'b0111; + end + 4'b0111: + begin + + if (|var2) + begin + cur_state <= 4'b1110; + end + else + begin + cur_state <= 4'b1000; + end + end + 4'b1000: + begin + + tmp <= n ; + + indvar <= 32'b00000000000000000000000000000000; + cur_state <= 4'b1001; + end + 4'b1001: + begin + + cur_state <= 4'b1010; + end + 4'b1010: + begin + tmp8 <= indvar; + indvar_next <= indvar; + cur_state <= 4'b1011; + end + 4'b1011: + begin + + scevgep <= (m & tmp8); + + exitcond <= (indvar_next == tmp); + + cur_state <= 4'b1100; + end + 4'b1100: + begin + + s_07 <= scevgep; + + cur_state <= 4'b1101; + end + 4'b1101: + + begin + + + if (exitcond) + begin + cur_state <= 4'b1110; + end + else + begin + indvar <= indvar_next; + cur_state <= 4'b1001; + end + end + + + 4'b1110: + begin + + return_val <= m; + finish <= 1'b1; + cur_state <= 4'b0000; + end +endcase + +always @(*) +begin + + if (cur_state == 4'b1101) + begin + memory_controller_address = s_07; + memory_controller_write_enable = 1'b1; + memory_controller_in = c; + end + else + begin + memory_controller_address = 'h0; + memory_controller_write_enable = 1'b0; + memory_controller_in = 'h0; + end + +end + +endmodule diff --git a/vtr_flow/benchmarks/verilog/mcml.v b/vtr_flow/benchmarks/verilog/mcml.v index 3959f55bb04..d61cf38e294 100644 --- a/vtr_flow/benchmarks/verilog/mcml.v +++ b/vtr_flow/benchmarks/verilog/mcml.v @@ -489,7 +489,7 @@ PhotonCalculator u_calc ( ); // Mux to read the absorbtion array -always @(r_state or done or r_absorb_read_counter or r_absorb_write_counter or absorb_wraddress or absorb_data or absorb_rdaddress or absorb_data or absorb_wren ) +always @(*) begin if(r_state == RESET_MEM_ST) begin @@ -518,112 +518,7 @@ end // 1. Read constants // 2. Wait for completion // 3. Write data back -always @(r_state or r_absorb_read_counter or r_absorb_write_counter or result or r_toggle or r_counter or read_constants or constants or done - or inc_result or mem_cost or mem_sint or absorb_q - or r_const__103 - or r_const__102 - or r_const__101 - or r_const__100 - or r_const__99 - or r_const__98 - or r_const__97 - or r_const__96 - or r_const__95 - or r_const__94 - or r_const__93 - or r_const__92 - or r_const__91 - or r_const__90 - or r_const__89 - or r_const__88 - or r_const__87 - or r_const__86 - or r_const__85 - or r_const__84 - or r_const__83 - or r_const__82 - or r_const__81 - or r_const__80 - or r_const__79 - or r_const__78 - or r_const__77 - or r_const__76 - or r_const__75 - or r_const__74 - or r_const__73 - or r_const__72 - or r_const__71 - or r_const__70 - or r_const__69 - or r_const__68 - or r_const__67 - or r_const__66 - or r_const__65 - or r_const__64 - or r_const__63 - or r_const__62 - or r_const__61 - or r_const__60 - or r_const__59 - or r_const__58 - or r_const__57 - or r_const__56 - or r_const__55 - or r_const__54 - or r_const__53 - or r_const__52 - or r_const__51 - or r_const__50 - or r_const__49 - or r_const__48 - or r_const__47 - or r_const__46 - or r_const__45 - or r_const__44 - or r_const__43 - or r_const__42 - or r_const__41 - or r_const__40 - or r_const__39 - or r_const__38 - or r_const__37 - or r_const__36 - or r_const__35 - or r_const__34 - or r_const__33 - or r_const__32 - or r_const__31 - or r_const__30 - or r_const__29 - or r_const__28 - or r_const__27 - or r_const__26 - or r_const__25 - or r_const__24 - or r_const__23 - or r_const__22 - or r_const__21 - or r_const__20 - or r_const__19 - or r_const__18 - or r_const__17 - or r_const__16 - or r_const__15 - or r_const__14 - or r_const__13 - or r_const__12 - or r_const__11 - or r_const__10 - or r_const__9 - or r_const__8 - or r_const__7 - or r_const__6 - or r_const__5 - or r_const__4 - or r_const__3 - or r_const__2 - or r_const__1 - or r_const__0) begin +always @(*) begin // Initialize data //for(i = 0; i < 104; i = i + 1) begin // c_const[i] = r_const[i]; @@ -1778,9 +1673,9 @@ assign const_zero = 1'b0; assign const_zero_data = 32'b00000000000000000000000000000000; // assign dont_care_out = 32'b00000000000000000000000000000000; -defparam dpram1.ADDR_WIDTH = 13; -defparam dpram1.DATA_WIDTH = 32; -dual_port_ram dpram1( +dual_port_ram + # (.ADDR_WIDTH(13), .DATA_WIDTH(32)) +dpram1( .clk (clk), .we1(wren), .we2(const_zero), @@ -1815,9 +1710,9 @@ assign const_zero = 1'b0; assign const_zero_data = 32'b00000000000000000000000000000000; // assign dont_care_out = 32'b00000000000000000000000000000000; -defparam dpram1.ADDR_WIDTH = 13; -defparam dpram1.DATA_WIDTH = 32; -dual_port_ram dpram1( +dual_port_ram + # (.ADDR_WIDTH(13), .DATA_WIDTH(32)) +dpram1( .clk (clk), .we1(wren), .we2(const_zero), @@ -1852,9 +1747,9 @@ assign const_zero = 1'b0; assign const_zero_data = 32'b00000000000000000000000000000000; // assign dont_care_out = 32'b00000000000000000000000000000000; -defparam dpram1.ADDR_WIDTH = 13; -defparam dpram1.DATA_WIDTH = 32; -dual_port_ram dpram1( +dual_port_ram + # (.ADDR_WIDTH(13), .DATA_WIDTH(32)) +dpram1( .clk (clk), .we1(wren), .we2(const_zero), @@ -1889,9 +1784,9 @@ assign const_zero = 1'b0; assign const_zero_data = 32'b00000000000000000000000000000000; // assign dont_care_out = 32'b00000000000000000000000000000000; -defparam dpram1.ADDR_WIDTH = 13; -defparam dpram1.DATA_WIDTH = 32; -dual_port_ram dpram1( +dual_port_ram + # (.ADDR_WIDTH(13), .DATA_WIDTH(32)) +dpram1( .clk (clk), .we1(wren), .we2(const_zero), @@ -1925,9 +1820,9 @@ assign const_zero = 1'b0; assign const_zero_data = 36'b000000000000000000000000000000000000; // assign dont_care_out = 36'b000000000000000000000000000000000000; -defparam dpram1.ADDR_WIDTH = 16; -defparam dpram1.DATA_WIDTH = 36; -dual_port_ram dpram1( +dual_port_ram + # (.ADDR_WIDTH(16), .DATA_WIDTH(36)) +dpram1( .clk (clk), .we1(wren), .we2(const_zero), @@ -1961,9 +1856,9 @@ assign const_zero = 1'b0; assign const_zero_data = 18'b000000000000000000; // assign dont_care_out = 18'b000000000000000000; -defparam dpram1.ADDR_WIDTH = 16; -defparam dpram1.DATA_WIDTH = 18; -dual_port_ram dpram1( +dual_port_ram + # (.ADDR_WIDTH(16), .DATA_WIDTH(18)) +dpram1( .clk (clk), .we1(wren), .we2(const_zero), @@ -1997,9 +1892,9 @@ assign const_zero = 1'b0; assign const_zero_data = 8'b00000000; // assign dont_care_out = 8'b00000000; -defparam dpram1.ADDR_WIDTH = 16; -defparam dpram1.DATA_WIDTH = 8; -dual_port_ram dpram1( +dual_port_ram + # (.ADDR_WIDTH(16), .DATA_WIDTH(8)) +dpram1( .clk (clk), .we1(wren), .we2(const_zero), @@ -2429,7 +2324,7 @@ DropSpinWrapper dropSpin ( ); // Determine how many photons left -always @(r_num_photons_left or dead_Roulette or r_done or r_counter) +always @(*) begin //c_num_photons_left = r_num_photons_left; //c_counter = 0; @@ -2455,7 +2350,7 @@ begin end // Only state info is done -always @(r_done or r_counter) +always @(*) begin //c_done = r_done; if(r_counter > `PIPELINE_DEPTH_UPPER_LIMIT) @@ -2467,9 +2362,7 @@ begin end // Create mux to mover -always @(dead_Roulette or initialWeight or r_num_photons_left or x_Roulette or y_Roulette or z_Roulette or - ux_Roulette or uy_Roulette or uz_Roulette or sz_Roulette or sr_Roulette or sleftz_Roulette or - sleftr_Roulette or layer_Roulette or weight_Roulette or dead_Roulette) +always @(*) begin if(dead_Roulette) begin @@ -2674,12 +2567,7 @@ wire reset_new; assign reset_new = reset & bigOr; // multiplex constants -always @(layer_moverMux or OneOver_MutMaxrad_0 or OneOver_MutMaxdep_0 or OneOver_Mut_0 or - OneOver_MutMaxrad_1 or OneOver_MutMaxdep_1 or OneOver_Mut_1 or - OneOver_MutMaxrad_2 or OneOver_MutMaxdep_2 or OneOver_Mut_2 or - OneOver_MutMaxrad_3 or OneOver_MutMaxdep_3 or OneOver_Mut_3 or - OneOver_MutMaxrad_4 or OneOver_MutMaxdep_4 or OneOver_Mut_4 or - OneOver_MutMaxrad_5 or OneOver_MutMaxdep_5 or OneOver_Mut_5) +always @(*) begin case(layer_moverMux) 3'b000: @@ -2728,8 +2616,7 @@ endcase end // Determine move value -always @(sleftz_moverMux or log_rand_num or OneOver_MutMaxrad or OneOver_MutMaxdep or sleftr_moverMux or - OneOver_Mut) +always @(*) begin // Resource sharing for multipliers if(sleftz_moverMux == 32'b0) @@ -2749,7 +2636,7 @@ begin end // Determine move value -always @(sleftz_moverMux or c_r_op0 or c_r_op1 or c_z_op0 or c_z_op1 or sleftr_moverMux) +always @(*) begin c_sr_big = c_r_op0 * c_r_op1; c_sz_big = c_z_op0 * c_z_op1; @@ -5538,12 +5425,7 @@ mult_signed_32_bc mult_u3( .result(sr_big)); // multiplexor to find z1 and z0 -always @(c_layer__0 or z1_0 or z0_0 or mut_0 or - z1_1 or z0_1 or mut_1 or - z1_2 or z0_2 or mut_2 or - z1_3 or z0_3 or mut_3 or - z1_4 or z0_4 or mut_4 or - z1_5 or z0_5 or mut_5) +always @(*) begin case(c_layer__0) 3'b000: @@ -5593,7 +5475,7 @@ end // May have to change block staments on this one for odin // set numerator -always @(c_uz__0 or c_z1__0 or c_z__0 or c_z0__0) +always @(*) begin //c_numer__0 = 63'b0; if(c_uz__0[31] == 1'b0) @@ -5613,10 +5495,7 @@ begin end // initialize uninitialized data in pipeline -always @(x_mover or y_mover or z_mover or - ux_mover or uy_mover or uz_mover or - sz_mover or sr_mover or sleftz_mover or sleftr_mover or - weight_mover or layer_mover or dead_mover) +always @(*) begin c_x__0 = x_mover; c_y__0 = y_mover; @@ -5637,187 +5516,7 @@ begin end // Determine new (x,y,z) coordinates -always @(r_x__0 or r_y__0 or r_z__0 or r_ux__0 or r_uy__0 or r_uz__0 or r_sz__0 or r_sr__0 or r_sleftz__0 or r_sleftr__0 or - r_weight__0 or r_layer__0 or r_dead__0 or r_hit__0 or r_diff__0 or r_dl_b__0 or r_numer__0 or r_z1__0 or r_z0__0 or r_mut__0 or - - r_x__1 or r_y__1 or r_z__1 or r_ux__1 or r_uy__1 or r_uz__1 or r_sz__1 or r_sr__1 or r_sleftz__1 or r_sleftr__1 or - r_weight__1 or r_layer__1 or r_dead__1 or r_hit__1 or r_diff__1 or r_dl_b__1 or r_numer__1 or r_z1__1 or r_z0__1 or r_mut__1 or - - r_x__2 or r_y__2 or r_z__2 or r_ux__2 or r_uy__2 or r_uz__2 or r_sz__2 or r_sr__2 or r_sleftz__2 or r_sleftr__2 or - r_weight__2 or r_layer__2 or r_dead__2 or r_hit__2 or r_diff__2 or r_dl_b__2 or r_numer__2 or r_z1__2 or r_z0__2 or r_mut__2 or - - r_x__3 or r_y__3 or r_z__3 or r_ux__3 or r_uy__3 or r_uz__3 or r_sz__3 or r_sr__3 or r_sleftz__3 or r_sleftr__3 or - r_weight__3 or r_layer__3 or r_dead__3 or r_hit__3 or r_diff__3 or r_dl_b__3 or r_numer__3 or r_z1__3 or r_z0__3 or r_mut__3 or - - r_x__4 or r_y__4 or r_z__4 or r_ux__4 or r_uy__4 or r_uz__4 or r_sz__4 or r_sr__4 or r_sleftz__4 or r_sleftr__4 or - r_weight__4 or r_layer__4 or r_dead__4 or r_hit__4 or r_diff__4 or r_dl_b__4 or r_numer__4 or r_z1__4 or r_z0__4 or r_mut__4 or - - r_x__5 or r_y__5 or r_z__5 or r_ux__5 or r_uy__5 or r_uz__5 or r_sz__5 or r_sr__5 or r_sleftz__5 or r_sleftr__5 or - r_weight__5 or r_layer__5 or r_dead__5 or r_hit__5 or r_diff__5 or r_dl_b__5 or r_numer__5 or r_z1__5 or r_z0__5 or r_mut__5 or - - r_x__6 or r_y__6 or r_z__6 or r_ux__6 or r_uy__6 or r_uz__6 or r_sz__6 or r_sr__6 or r_sleftz__6 or r_sleftr__6 or - r_weight__6 or r_layer__6 or r_dead__6 or r_hit__6 or r_diff__6 or r_dl_b__6 or r_numer__6 or r_z1__6 or r_z0__6 or r_mut__6 or - - r_x__7 or r_y__7 or r_z__7 or r_ux__7 or r_uy__7 or r_uz__7 or r_sz__7 or r_sr__7 or r_sleftz__7 or r_sleftr__7 or - r_weight__7 or r_layer__7 or r_dead__7 or r_hit__7 or r_diff__7 or r_dl_b__7 or r_numer__7 or r_z1__7 or r_z0__7 or r_mut__7 or - - r_x__8 or r_y__8 or r_z__8 or r_ux__8 or r_uy__8 or r_uz__8 or r_sz__8 or r_sr__8 or r_sleftz__8 or r_sleftr__8 or - r_weight__8 or r_layer__8 or r_dead__8 or r_hit__8 or r_diff__8 or r_dl_b__8 or r_numer__8 or r_z1__8 or r_z0__8 or r_mut__8 or - - r_x__9 or r_y__9 or r_z__9 or r_ux__9 or r_uy__9 or r_uz__9 or r_sz__9 or r_sr__9 or r_sleftz__9 or r_sleftr__9 or - r_weight__9 or r_layer__9 or r_dead__9 or r_hit__9 or r_diff__9 or r_dl_b__9 or r_numer__9 or r_z1__9 or r_z0__9 or r_mut__9 or - - r_x__10 or r_y__10 or r_z__10 or r_ux__10 or r_uy__10 or r_uz__10 or r_sz__10 or r_sr__10 or r_sleftz__10 or r_sleftr__10 or - r_weight__10 or r_layer__10 or r_dead__10 or r_hit__10 or r_diff__10 or r_dl_b__10 or r_numer__10 or r_z1__10 or r_z0__10 or r_mut__10 or - - r_x__11 or r_y__11 or r_z__11 or r_ux__11 or r_uy__11 or r_uz__11 or r_sz__11 or r_sr__11 or r_sleftz__11 or r_sleftr__11 or - r_weight__11 or r_layer__11 or r_dead__11 or r_hit__11 or r_diff__11 or r_dl_b__11 or r_numer__11 or r_z1__11 or r_z0__11 or r_mut__11 or - - r_x__12 or r_y__12 or r_z__12 or r_ux__12 or r_uy__12 or r_uz__12 or r_sz__12 or r_sr__12 or r_sleftz__12 or r_sleftr__12 or - r_weight__12 or r_layer__12 or r_dead__12 or r_hit__12 or r_diff__12 or r_dl_b__12 or r_numer__12 or r_z1__12 or r_z0__12 or r_mut__12 or - - r_x__13 or r_y__13 or r_z__13 or r_ux__13 or r_uy__13 or r_uz__13 or r_sz__13 or r_sr__13 or r_sleftz__13 or r_sleftr__13 or - r_weight__13 or r_layer__13 or r_dead__13 or r_hit__13 or r_diff__13 or r_dl_b__13 or r_numer__13 or r_z1__13 or r_z0__13 or r_mut__13 or - - r_x__14 or r_y__14 or r_z__14 or r_ux__14 or r_uy__14 or r_uz__14 or r_sz__14 or r_sr__14 or r_sleftz__14 or r_sleftr__14 or - r_weight__14 or r_layer__14 or r_dead__14 or r_hit__14 or r_diff__14 or r_dl_b__14 or r_numer__14 or r_z1__14 or r_z0__14 or r_mut__14 or - - r_x__15 or r_y__15 or r_z__15 or r_ux__15 or r_uy__15 or r_uz__15 or r_sz__15 or r_sr__15 or r_sleftz__15 or r_sleftr__15 or - r_weight__15 or r_layer__15 or r_dead__15 or r_hit__15 or r_diff__15 or r_dl_b__15 or r_numer__15 or r_z1__15 or r_z0__15 or r_mut__15 or - - r_x__16 or r_y__16 or r_z__16 or r_ux__16 or r_uy__16 or r_uz__16 or r_sz__16 or r_sr__16 or r_sleftz__16 or r_sleftr__16 or - r_weight__16 or r_layer__16 or r_dead__16 or r_hit__16 or r_diff__16 or r_dl_b__16 or r_numer__16 or r_z1__16 or r_z0__16 or r_mut__16 or - - r_x__17 or r_y__17 or r_z__17 or r_ux__17 or r_uy__17 or r_uz__17 or r_sz__17 or r_sr__17 or r_sleftz__17 or r_sleftr__17 or - r_weight__17 or r_layer__17 or r_dead__17 or r_hit__17 or r_diff__17 or r_dl_b__17 or r_numer__17 or r_z1__17 or r_z0__17 or r_mut__17 or - - r_x__18 or r_y__18 or r_z__18 or r_ux__18 or r_uy__18 or r_uz__18 or r_sz__18 or r_sr__18 or r_sleftz__18 or r_sleftr__18 or - r_weight__18 or r_layer__18 or r_dead__18 or r_hit__18 or r_diff__18 or r_dl_b__18 or r_numer__18 or r_z1__18 or r_z0__18 or r_mut__18 or - - r_x__19 or r_y__19 or r_z__19 or r_ux__19 or r_uy__19 or r_uz__19 or r_sz__19 or r_sr__19 or r_sleftz__19 or r_sleftr__19 or - r_weight__19 or r_layer__19 or r_dead__19 or r_hit__19 or r_diff__19 or r_dl_b__19 or r_numer__19 or r_z1__19 or r_z0__19 or r_mut__19 or - - r_x__20 or r_y__20 or r_z__20 or r_ux__20 or r_uy__20 or r_uz__20 or r_sz__20 or r_sr__20 or r_sleftz__20 or r_sleftr__20 or - r_weight__20 or r_layer__20 or r_dead__20 or r_hit__20 or r_diff__20 or r_dl_b__20 or r_numer__20 or r_z1__20 or r_z0__20 or r_mut__20 or - - r_x__21 or r_y__21 or r_z__21 or r_ux__21 or r_uy__21 or r_uz__21 or r_sz__21 or r_sr__21 or r_sleftz__21 or r_sleftr__21 or - r_weight__21 or r_layer__21 or r_dead__21 or r_hit__21 or r_diff__21 or r_dl_b__21 or r_numer__21 or r_z1__21 or r_z0__21 or r_mut__21 or - - r_x__22 or r_y__22 or r_z__22 or r_ux__22 or r_uy__22 or r_uz__22 or r_sz__22 or r_sr__22 or r_sleftz__22 or r_sleftr__22 or - r_weight__22 or r_layer__22 or r_dead__22 or r_hit__22 or r_diff__22 or r_dl_b__22 or r_numer__22 or r_z1__22 or r_z0__22 or r_mut__22 or - - r_x__23 or r_y__23 or r_z__23 or r_ux__23 or r_uy__23 or r_uz__23 or r_sz__23 or r_sr__23 or r_sleftz__23 or r_sleftr__23 or - r_weight__23 or r_layer__23 or r_dead__23 or r_hit__23 or r_diff__23 or r_dl_b__23 or r_numer__23 or r_z1__23 or r_z0__23 or r_mut__23 or - - r_x__24 or r_y__24 or r_z__24 or r_ux__24 or r_uy__24 or r_uz__24 or r_sz__24 or r_sr__24 or r_sleftz__24 or r_sleftr__24 or - r_weight__24 or r_layer__24 or r_dead__24 or r_hit__24 or r_diff__24 or r_dl_b__24 or r_numer__24 or r_z1__24 or r_z0__24 or r_mut__24 or - - r_x__25 or r_y__25 or r_z__25 or r_ux__25 or r_uy__25 or r_uz__25 or r_sz__25 or r_sr__25 or r_sleftz__25 or r_sleftr__25 or - r_weight__25 or r_layer__25 or r_dead__25 or r_hit__25 or r_diff__25 or r_dl_b__25 or r_numer__25 or r_z1__25 or r_z0__25 or r_mut__25 or - - r_x__26 or r_y__26 or r_z__26 or r_ux__26 or r_uy__26 or r_uz__26 or r_sz__26 or r_sr__26 or r_sleftz__26 or r_sleftr__26 or - r_weight__26 or r_layer__26 or r_dead__26 or r_hit__26 or r_diff__26 or r_dl_b__26 or r_numer__26 or r_z1__26 or r_z0__26 or r_mut__26 or - - r_x__27 or r_y__27 or r_z__27 or r_ux__27 or r_uy__27 or r_uz__27 or r_sz__27 or r_sr__27 or r_sleftz__27 or r_sleftr__27 or - r_weight__27 or r_layer__27 or r_dead__27 or r_hit__27 or r_diff__27 or r_dl_b__27 or r_numer__27 or r_z1__27 or r_z0__27 or r_mut__27 or - - r_x__28 or r_y__28 or r_z__28 or r_ux__28 or r_uy__28 or r_uz__28 or r_sz__28 or r_sr__28 or r_sleftz__28 or r_sleftr__28 or - r_weight__28 or r_layer__28 or r_dead__28 or r_hit__28 or r_diff__28 or r_dl_b__28 or r_numer__28 or r_z1__28 or r_z0__28 or r_mut__28 or - - r_x__29 or r_y__29 or r_z__29 or r_ux__29 or r_uy__29 or r_uz__29 or r_sz__29 or r_sr__29 or r_sleftz__29 or r_sleftr__29 or - r_weight__29 or r_layer__29 or r_dead__29 or r_hit__29 or r_diff__29 or r_dl_b__29 or r_numer__29 or r_z1__29 or r_z0__29 or r_mut__29 or - - r_x__30 or r_y__30 or r_z__30 or r_ux__30 or r_uy__30 or r_uz__30 or r_sz__30 or r_sr__30 or r_sleftz__30 or r_sleftr__30 or - r_weight__30 or r_layer__30 or r_dead__30 or r_hit__30 or r_diff__30 or r_dl_b__30 or r_numer__30 or r_z1__30 or r_z0__30 or r_mut__30 or - - r_x__31 or r_y__31 or r_z__31 or r_ux__31 or r_uy__31 or r_uz__31 or r_sz__31 or r_sr__31 or r_sleftz__31 or r_sleftr__31 or - r_weight__31 or r_layer__31 or r_dead__31 or r_hit__31 or r_diff__31 or r_dl_b__31 or r_numer__31 or r_z1__31 or r_z0__31 or r_mut__31 or - - r_x__32 or r_y__32 or r_z__32 or r_ux__32 or r_uy__32 or r_uz__32 or r_sz__32 or r_sr__32 or r_sleftz__32 or r_sleftr__32 or - r_weight__32 or r_layer__32 or r_dead__32 or r_hit__32 or r_diff__32 or r_dl_b__32 or r_numer__32 or r_z1__32 or r_z0__32 or r_mut__32 or - - r_x__33 or r_y__33 or r_z__33 or r_ux__33 or r_uy__33 or r_uz__33 or r_sz__33 or r_sr__33 or r_sleftz__33 or r_sleftr__33 or - r_weight__33 or r_layer__33 or r_dead__33 or r_hit__33 or r_diff__33 or r_dl_b__33 or r_numer__33 or r_z1__33 or r_z0__33 or r_mut__33 or - - r_x__34 or r_y__34 or r_z__34 or r_ux__34 or r_uy__34 or r_uz__34 or r_sz__34 or r_sr__34 or r_sleftz__34 or r_sleftr__34 or - r_weight__34 or r_layer__34 or r_dead__34 or r_hit__34 or r_diff__34 or r_dl_b__34 or r_numer__34 or r_z1__34 or r_z0__34 or r_mut__34 or - - r_x__35 or r_y__35 or r_z__35 or r_ux__35 or r_uy__35 or r_uz__35 or r_sz__35 or r_sr__35 or r_sleftz__35 or r_sleftr__35 or - r_weight__35 or r_layer__35 or r_dead__35 or r_hit__35 or r_diff__35 or r_dl_b__35 or r_numer__35 or r_z1__35 or r_z0__35 or r_mut__35 or - - r_x__36 or r_y__36 or r_z__36 or r_ux__36 or r_uy__36 or r_uz__36 or r_sz__36 or r_sr__36 or r_sleftz__36 or r_sleftr__36 or - r_weight__36 or r_layer__36 or r_dead__36 or r_hit__36 or r_diff__36 or r_dl_b__36 or r_numer__36 or r_z1__36 or r_z0__36 or r_mut__36 or - - r_x__37 or r_y__37 or r_z__37 or r_ux__37 or r_uy__37 or r_uz__37 or r_sz__37 or r_sr__37 or r_sleftz__37 or r_sleftr__37 or - r_weight__37 or r_layer__37 or r_dead__37 or r_hit__37 or r_diff__37 or r_dl_b__37 or r_numer__37 or r_z1__37 or r_z0__37 or r_mut__37 or - - r_x__38 or r_y__38 or r_z__38 or r_ux__38 or r_uy__38 or r_uz__38 or r_sz__38 or r_sr__38 or r_sleftz__38 or r_sleftr__38 or - r_weight__38 or r_layer__38 or r_dead__38 or r_hit__38 or r_diff__38 or r_dl_b__38 or r_numer__38 or r_z1__38 or r_z0__38 or r_mut__38 or - - r_x__39 or r_y__39 or r_z__39 or r_ux__39 or r_uy__39 or r_uz__39 or r_sz__39 or r_sr__39 or r_sleftz__39 or r_sleftr__39 or - r_weight__39 or r_layer__39 or r_dead__39 or r_hit__39 or r_diff__39 or r_dl_b__39 or r_numer__39 or r_z1__39 or r_z0__39 or r_mut__39 or - - r_x__40 or r_y__40 or r_z__40 or r_ux__40 or r_uy__40 or r_uz__40 or r_sz__40 or r_sr__40 or r_sleftz__40 or r_sleftr__40 or - r_weight__40 or r_layer__40 or r_dead__40 or r_hit__40 or r_diff__40 or r_dl_b__40 or r_numer__40 or r_z1__40 or r_z0__40 or r_mut__40 or - - r_x__41 or r_y__41 or r_z__41 or r_ux__41 or r_uy__41 or r_uz__41 or r_sz__41 or r_sr__41 or r_sleftz__41 or r_sleftr__41 or - r_weight__41 or r_layer__41 or r_dead__41 or r_hit__41 or r_diff__41 or r_dl_b__41 or r_numer__41 or r_z1__41 or r_z0__41 or r_mut__41 or - - r_x__42 or r_y__42 or r_z__42 or r_ux__42 or r_uy__42 or r_uz__42 or r_sz__42 or r_sr__42 or r_sleftz__42 or r_sleftr__42 or - r_weight__42 or r_layer__42 or r_dead__42 or r_hit__42 or r_diff__42 or r_dl_b__42 or r_numer__42 or r_z1__42 or r_z0__42 or r_mut__42 or - - r_x__43 or r_y__43 or r_z__43 or r_ux__43 or r_uy__43 or r_uz__43 or r_sz__43 or r_sr__43 or r_sleftz__43 or r_sleftr__43 or - r_weight__43 or r_layer__43 or r_dead__43 or r_hit__43 or r_diff__43 or r_dl_b__43 or r_numer__43 or r_z1__43 or r_z0__43 or r_mut__43 or - - r_x__44 or r_y__44 or r_z__44 or r_ux__44 or r_uy__44 or r_uz__44 or r_sz__44 or r_sr__44 or r_sleftz__44 or r_sleftr__44 or - r_weight__44 or r_layer__44 or r_dead__44 or r_hit__44 or r_diff__44 or r_dl_b__44 or r_numer__44 or r_z1__44 or r_z0__44 or r_mut__44 or - - r_x__45 or r_y__45 or r_z__45 or r_ux__45 or r_uy__45 or r_uz__45 or r_sz__45 or r_sr__45 or r_sleftz__45 or r_sleftr__45 or - r_weight__45 or r_layer__45 or r_dead__45 or r_hit__45 or r_diff__45 or r_dl_b__45 or r_numer__45 or r_z1__45 or r_z0__45 or r_mut__45 or - - r_x__46 or r_y__46 or r_z__46 or r_ux__46 or r_uy__46 or r_uz__46 or r_sz__46 or r_sr__46 or r_sleftz__46 or r_sleftr__46 or - r_weight__46 or r_layer__46 or r_dead__46 or r_hit__46 or r_diff__46 or r_dl_b__46 or r_numer__46 or r_z1__46 or r_z0__46 or r_mut__46 or - - r_x__47 or r_y__47 or r_z__47 or r_ux__47 or r_uy__47 or r_uz__47 or r_sz__47 or r_sr__47 or r_sleftz__47 or r_sleftr__47 or - r_weight__47 or r_layer__47 or r_dead__47 or r_hit__47 or r_diff__47 or r_dl_b__47 or r_numer__47 or r_z1__47 or r_z0__47 or r_mut__47 or - - r_x__48 or r_y__48 or r_z__48 or r_ux__48 or r_uy__48 or r_uz__48 or r_sz__48 or r_sr__48 or r_sleftz__48 or r_sleftr__48 or - r_weight__48 or r_layer__48 or r_dead__48 or r_hit__48 or r_diff__48 or r_dl_b__48 or r_numer__48 or r_z1__48 or r_z0__48 or r_mut__48 or - - r_x__49 or r_y__49 or r_z__49 or r_ux__49 or r_uy__49 or r_uz__49 or r_sz__49 or r_sr__49 or r_sleftz__49 or r_sleftr__49 or - r_weight__49 or r_layer__49 or r_dead__49 or r_hit__49 or r_diff__49 or r_dl_b__49 or r_numer__49 or r_z1__49 or r_z0__49 or r_mut__49 or - - r_x__50 or r_y__50 or r_z__50 or r_ux__50 or r_uy__50 or r_uz__50 or r_sz__50 or r_sr__50 or r_sleftz__50 or r_sleftr__50 or - r_weight__50 or r_layer__50 or r_dead__50 or r_hit__50 or r_diff__50 or r_dl_b__50 or r_numer__50 or r_z1__50 or r_z0__50 or r_mut__50 or - - r_x__51 or r_y__51 or r_z__51 or r_ux__51 or r_uy__51 or r_uz__51 or r_sz__51 or r_sr__51 or r_sleftz__51 or r_sleftr__51 or - r_weight__51 or r_layer__51 or r_dead__51 or r_hit__51 or r_diff__51 or r_dl_b__51 or r_numer__51 or r_z1__51 or r_z0__51 or r_mut__51 or - - r_x__52 or r_y__52 or r_z__52 or r_ux__52 or r_uy__52 or r_uz__52 or r_sz__52 or r_sr__52 or r_sleftz__52 or r_sleftr__52 or - r_weight__52 or r_layer__52 or r_dead__52 or r_hit__52 or r_diff__52 or r_dl_b__52 or r_numer__52 or r_z1__52 or r_z0__52 or r_mut__52 or - - r_x__53 or r_y__53 or r_z__53 or r_ux__53 or r_uy__53 or r_uz__53 or r_sz__53 or r_sr__53 or r_sleftz__53 or r_sleftr__53 or - r_weight__53 or r_layer__53 or r_dead__53 or r_hit__53 or r_diff__53 or r_dl_b__53 or r_numer__53 or r_z1__53 or r_z0__53 or r_mut__53 or - - r_x__54 or r_y__54 or r_z__54 or r_ux__54 or r_uy__54 or r_uz__54 or r_sz__54 or r_sr__54 or r_sleftz__54 or r_sleftr__54 or - r_weight__54 or r_layer__54 or r_dead__54 or r_hit__54 or r_diff__54 or r_dl_b__54 or r_numer__54 or r_z1__54 or r_z0__54 or r_mut__54 or - - r_x__55 or r_y__55 or r_z__55 or r_ux__55 or r_uy__55 or r_uz__55 or r_sz__55 or r_sr__55 or r_sleftz__55 or r_sleftr__55 or - r_weight__55 or r_layer__55 or r_dead__55 or r_hit__55 or r_diff__55 or r_dl_b__55 or r_numer__55 or r_z1__55 or r_z0__55 or r_mut__55 or - - r_x__56 or r_y__56 or r_z__56 or r_ux__56 or r_uy__56 or r_uz__56 or r_sz__56 or r_sr__56 or r_sleftz__56 or r_sleftr__56 or - r_weight__56 or r_layer__56 or r_dead__56 or r_hit__56 or r_diff__56 or r_dl_b__56 or r_numer__56 or r_z1__56 or r_z0__56 or r_mut__56 or - - r_x__57 or r_y__57 or r_z__57 or r_ux__57 or r_uy__57 or r_uz__57 or r_sz__57 or r_sr__57 or r_sleftz__57 or r_sleftr__57 or - r_weight__57 or r_layer__57 or r_dead__57 or r_hit__57 or r_diff__57 or r_dl_b__57 or r_numer__57 or r_z1__57 or r_z0__57 or r_mut__57 or - - r_x__58 or r_y__58 or r_z__58 or r_ux__58 or r_uy__58 or r_uz__58 or r_sz__58 or r_sr__58 or r_sleftz__58 or r_sleftr__58 or - r_weight__58 or r_layer__58 or r_dead__58 or r_hit__58 or r_diff__58 or r_dl_b__58 or r_numer__58 or r_z1__58 or r_z0__58 or r_mut__58 or - - r_x__59 or r_y__59 or r_z__59 or r_ux__59 or r_uy__59 or r_uz__59 or r_sz__59 or r_sr__59 or r_sleftz__59 or r_sleftr__59 or - r_weight__59 or r_layer__59 or r_dead__59 or r_hit__59 or r_diff__59 or r_dl_b__59 or r_numer__59 or r_z1__59 or r_z0__59 or r_mut__59 or - - sr_big or sleftz_big or sleftr_big or quotient_div1) +always @(*) // default // setup standard pipeline @@ -10019,12 +9718,7 @@ mult_signed_32 u2(sr_boundaryChecker, uy_boundaryChecker, c_ymult_big); mult_signed_32 u3(sz_boundaryChecker, uz_boundaryChecker, c_zmult_big); // Determine new (x,y,z) coordinates -always @(c_dead or - c_x_big or c_y_big or c_z_big or - c_x or c_y or c_z or - x_boundaryChecker or y_boundaryChecker or z_boundaryChecker or - c_xmult_big or c_ymult_big or c_zmult_big - or hit_boundaryChecker or dead_boundaryChecker) +always @(*) begin c_x_big = x_boundaryChecker + c_xmult_big[2*`BIT_WIDTH-2:31]; @@ -10169,7 +9863,7 @@ module mult_signed_32(a, b, c); reg [63:0]c_tmp; -always@(a or b or is_neg_a or is_neg_b or a_tmp or b_tmp or c) +always@(*) begin if(a[31] == 1) begin @@ -10198,7 +9892,7 @@ begin end end -always@(c_tmp) +always@(*) begin c = c_tmp; end @@ -10285,7 +9979,7 @@ reg [`LAYER_WIDTH-1:0]layer_Roulette; reg [`BIT_WIDTH-1:0] weight_Roulette; reg dead_Roulette; -always @ (reset or enable or weight_absorber or randBits or randnumber or dead_RouletteMux) begin +always @ (*) begin //Default case moved inside else statements for odin //randBits = randnumber; //Reading from external random num generator //weight_roulette=weight_absorber; //Avoid inferring a latch @@ -10393,7 +10087,7 @@ reg [31:0] r_s1, r_s2, r_s3; assign number_o = r_s1 ^ r_s2 ^ r_s3; -always @(loadseed_i or seed_i or r_s1 or r_s2 or r_s3) +always @(*) begin if(loadseed_i) begin @@ -10468,9 +10162,10 @@ reg [`BIT_WIDTH - 1:0] log_x; wire [31:0]blank; assign blank = 32'b000000000000000000000000000000; -defparam sram_replace0.ADDR_WIDTH = `MANTISSA_PRECISION; -defparam sram_replace0.DATA_WIDTH = 32; -single_port_ram sram_replace0 (.clk (clock), .addr (c_shifted_x), .data (blank), .we (1'b0), .out (mantissa)); + +single_port_ram + # (.ADDR_WIDTH(`MANTISSA_PRECISION), .DATA_WIDTH(32)) +sram_replace0 (.clk (clock), .addr (c_shifted_x), .data (blank), .we (1'b0), .out (mantissa)); // priority encoder //integer i; @@ -10485,7 +10180,7 @@ single_port_ram sram_replace0 (.clk (clock), .addr (c_shifted_x), .data (blank), //end // Priority encoder, loop expanded -always @(in_x) +always @(*) begin if (in_x[31]) begin c_indexFirstOne = 6'b011111; @@ -10594,7 +10289,7 @@ end wire [5:0]shifted; assign shifted = c_indexFirstOne - `MANTISSA_PRECISION + 1; -always@(c_indexFirstOne or in_x or shifted) +always@(*) begin // c_temp_shift_x = in_x >> (c_indexFirstOne - `MANTISSA_PRECISION + 1); if(c_indexFirstOne >= `MANTISSA_PRECISION) @@ -10678,7 +10373,7 @@ begin end // calculate log -always@(r_indexFirstOne or mantissa) +always@(*) begin if(r_indexFirstOne >= `MANTISSA_PRECISION) begin @@ -13105,8 +12800,7 @@ ScattererReflectorWrapper scattererReflector( //// or the reflector should be used in any clock cycle //// ////////////////////////////////////////////////////////////////////// -always @ (hit__37 or ux_scatterer or uy_scatterer or uz_scatterer or layer__37 or dead__37 or - ux_reflector or uy_reflector or uz_reflector or layer_reflector or dead_reflector) begin +always @ (*) begin case (hit__37) 0: begin o_ux = ux_scatterer; @@ -14839,7 +14533,7 @@ PhotonBlock1 photon1q( ////////////////////////////////////////////////////////////////////////////// ///////////////STAGE 2 - square of x and y///////////////////////// -always @(reset or x_pipe or y_pipe) begin +always @(*) begin if (reset) begin x2_temp=0; y2_temp=0; @@ -14851,7 +14545,7 @@ always @(reset or x_pipe or y_pipe) begin end ///////////////STAGE 3 - square of r///////////////////////// -always @(reset or x2_P or y2_P) begin +always @(*) begin if (reset) r2_temp=0; else @@ -14860,7 +14554,7 @@ end ///////////////STAGE 4 - Find r and dwa///////////////////////// //Create MUX -always@(layer_pipe or muaFraction1 or muaFraction2 or muaFraction3 or muaFraction4 or muaFraction5) +always@(*) case(layer_pipe) 1: fractionScaled=muaFraction1; 2: fractionScaled=muaFraction2; @@ -14871,7 +14565,7 @@ always@(layer_pipe or muaFraction1 or muaFraction2 or muaFraction3 or muaFractio endcase -always @(reset or weight__4 or r_P_wire or weight_P4 or fractionScaled or product64bit or dead__4 or hit__4) begin +always @(*) begin if (reset) begin weight_P4=0; r_P=0; @@ -14902,7 +14596,7 @@ Sqrt_64b squareRoot ( ); ///////////////STAGE 14 - Find ir and iz///////////////////////// -always @(reset or r_P or z_pipe or dead__14 or hit__14 or iz_temp or ir_temp) begin +always @(*) begin if (reset) begin ir_temp=0; iz_temp=0; @@ -14950,7 +14644,7 @@ always @(reset or r_P or z_pipe or dead__14 or hit__14 or iz_temp or ir_temp) be end ///////////////STAGE 15 - Compute MEM address///////////////////////// -always @(reset or ir__15 or iz__15 or ir_P or iz_P or ir_scaled) begin +always @(*) begin if (reset) begin ir_P=0; iz_P=0; @@ -14966,7 +14660,7 @@ always @(reset or ir__15 or iz__15 or ir_P or iz_P or ir_scaled) begin end ///////////////STAGE 16 - MEM read///////////////////////// -always @(reset or ir__16 or ir__17 or iz__16 or iz__17 or ir__18 or iz__18 or newAbs_P or q or newAbs_temp) begin +always @(*) begin if (reset) begin oldAbs_MEM=0; end else begin @@ -14984,7 +14678,7 @@ end ///////////////STAGE 17 - Update Weight///////////////////////// //TO BE TESTED!!! -always @(reset or dwa__17 or weight__17 or weight_P or dwa_P or oldAbs_P) begin +always @(*) begin if(reset) begin dwa_P=0; //How to specify Base 10??? weight_P=0; @@ -15628,7 +15322,7 @@ assign reset_new = reset & bigOr; //MUX for sending in indices for memory. -always @ (i_layer31_pipeWrapper) begin +always @ (*) begin case (i_layer31_pipeWrapper) 3'b001: layerMinusOne = 0; 3'b010: layerMinusOne = 1; @@ -17923,11 +17617,7 @@ end //are placed on the appropriate wires for placement in the pipeline. //-------------MUXES for SYNCHRONOUS LOGIC-------- -always @ (i_layer36 or downCritAngle_0 or upCritAngle_0 or - downCritAngle_1 or upCritAngle_1 or - downCritAngle_2 or upCritAngle_2 or - downCritAngle_3 or upCritAngle_3 or - downCritAngle_4 or upCritAngle_4) begin +always @ (*) begin case (i_layer36) 1:begin downCritAngle = downCritAngle_0; @@ -17957,7 +17647,7 @@ always @ (i_layer36 or downCritAngle_0 or upCritAngle_0 or endcase end -always @ (i_uz35 or i_layer35) begin +always @ (*) begin negUz = -i_uz35; case (i_uz35[31]) 0: begin @@ -18008,11 +17698,7 @@ assign op1_2_2 = i_uz1; //SUBTRACTION, see math results //CC 4 -always @ (i_uz3 or i_layer3 or down_niOverNt_2_1 or up_niOverNt_2_1 or - down_niOverNt_2_2 or up_niOverNt_2_2 or - down_niOverNt_2_3 or up_niOverNt_2_3 or - down_niOverNt_2_4 or up_niOverNt_2_4 or - down_niOverNt_2_5 or up_niOverNt_2_5) begin +always @ (*) begin case (i_uz3[31]) //uz >= 0 0:begin @@ -18050,11 +17736,7 @@ assign sqrtOperand1_6 = uz2_2__5; //CC `SQRT+`DIV+6 -- Line up with Scatterer. assign op1_36_1 = i_ux35; -always @ (i_uz35 or i_layer35 or down_niOverNt_1 or up_niOverNt_1 or - down_niOverNt_2 or up_niOverNt_2 or - down_niOverNt_3 or up_niOverNt_3 or - down_niOverNt_4 or up_niOverNt_4 or - down_niOverNt_5 or up_niOverNt_5) begin +always @ (*) begin case (i_uz35[31]) 0: begin//uz >= 0 case (i_layer35) @@ -18198,8 +17880,7 @@ assign overflow2_36 = ~prod2_36[63] & toAnd2_36_1; //and U9(negOverflow2_36, prod2_36[63], toAnd2_36_2); assign negOverflow2_36 = prod2_36[63] & toAnd2_36_2; -always @ (overflow1_36 or negOverflow1_36 or prod1_36 or - overflow2_36 or negOverflow2_36 or prod2_36) begin +always @ (*) begin case ({overflow1_36, negOverflow1_36}) 0: new_ux_transmitted = {prod1_36[63:63], prod1_36[59:29]}; 1: new_ux_transmitted = `INTMIN; @@ -18234,9 +17915,7 @@ end // // // -always @ (i_uz36 or downCritAngle or upCritAngle or down_rFresnel or i_ux36 or - i_uy36 or i_layer36 or i_dead36 or rnd or up_rFresnel or ux_transmitted__37 or - uy_transmitted__37 or uz2__37) begin +always @ (*) begin //REFLECTED -- Due to total internal reflection while moving down if (~i_uz36[31] && i_uz36 <= downCritAngle) begin new_ux = i_ux36; @@ -18323,13 +18002,14 @@ output [31:0] cosp; //Instantiate a single port ram for odin wire [31:0]blank; assign blank = 32'b000000000000000000000000000000; -defparam sinp_replace.ADDR_WIDTH = 10; -defparam sinp_replace.DATA_WIDTH = 32; -single_port_ram sinp_replace(.clk (clock), .addr (pindex), .data (blank), .we (1'b0), .out (sinp)); -defparam cosp_replace.ADDR_WIDTH = 10; -defparam cosp_replace.DATA_WIDTH = 32; -single_port_ram cosp_replace(.clk (clock), .addr (pindex), .data (blank), .we (1'b0), .out (cosp)); +single_port_ram +# (.ADDR_WIDTH(10), .DATA_WIDTH(32)) +sinp_replace(.clk (clock), .addr (pindex), .data (blank), .we (1'b0), .out (sinp)); + +single_port_ram +# (.ADDR_WIDTH(10), .DATA_WIDTH(32)) +cosp_replace(.clk (clock), .addr (pindex), .data (blank), .we (1'b0), .out (cosp)); endmodule @@ -22930,7 +22610,7 @@ add_32b uyNumer_add( assign new_sqrtOneMinusUz2_inv = (div_overflow) ? `INTMAX : {quot1_16[63:63], quot1_16[46:16]}; //CC `SQRT+`DIV+6 -always @ (overflow1_36 or negOverflow1_36 or prod1_36 or overflow2_36 or negOverflow2_36 or prod2_36) begin +always @ (*) begin case ({overflow1_36, negOverflow1_36}) 0: new_uxQuotient = {prod1_36[63:63], prod1_36[45:15]}; 1: new_uxQuotient = `INTMIN; @@ -22983,7 +22663,7 @@ assign new_uzCost = prod6_36; //Determine whether or not the photon calculation was done on a photon that //was normal (orthogonal) to the plane of interest. This is to avoid divide //by zero errors -always @ (i_uz36) begin +always @ (*) begin //If uz >= `INTMAX-3 || uz <= -`INTMAX+3, normal incident if(i_uz36 == 32'h7FFFFFFF || i_uz36 == 32'h7FFFFFFE || i_uz36 == 32'h7FFFFFFD || i_uz36 == 32'h7FFFFFFC || i_uz36 == 32'h80000000 || i_uz36 == 32'h80000001 || i_uz36 == 32'h80000002 || i_uz36 == 32'h80000003 || i_uz36 == 32'h80000004) begin normalIncident = 1'b1; @@ -23104,7 +22784,7 @@ module Mult_32b (dataa, datab, result); //now signed version! reg [63:0]mult_tmp; reg [63:0]c_tmp; -always@(a or b or is_neg_a or is_neg_b or a_tmp or b_tmp or c) +always@(*) begin if(a[31] == 1) begin a_tmp = -a; @@ -23134,7 +22814,7 @@ begin end end -always@(c_tmp) +always@(*) begin c = c_tmp; end @@ -23156,7 +22836,7 @@ module Div_64b (clock, denom, numer, quotient, remain); wire [31:0]remain_temp; Div_64b_unsigned div_temp(.clock(clock), .denom_(denom), .numer_(numer), .quotient(quotient_temp), .remain(remain_temp)); - always @ (numer or denom or quotient_temp or remain_temp) begin + always @ (*) begin if ( numer[63]^denom[31] ) begin // only one is negative quotient = -quotient_temp; remain = -remain_temp; @@ -23324,7 +23004,7 @@ module Div_64b_unsigned (clock, denom_, numer_, quotient, remain); reg [31:0]denom19; - always @(numer or denom0) begin + always @(*) begin numer_temp_63 = {31'b0, numer}; //quo0[63] @@ -23361,7 +23041,7 @@ module Div_64b_unsigned (clock, denom_, numer_, quotient, remain); denom1 <= denom0; end - always @(numer_temp_60_q or denom1 or quo0_q) begin + always @(*) begin quo1_d[63:61] = quo0_q[63:61]; //quo1_d[60] @@ -23397,7 +23077,7 @@ module Div_64b_unsigned (clock, denom_, numer_, quotient, remain); denom2 <= denom1; end - always @ (numer_temp_57_q or denom2 or quo1_q) begin + always @ (*) begin quo2_d[63:58] = quo1_q[63:58]; //quo2_d[57] @@ -23434,7 +23114,7 @@ module Div_64b_unsigned (clock, denom_, numer_, quotient, remain); denom3 <= denom2; end - always @ (numer_temp_54_q or denom3 or quo2_q) begin + always @ (*) begin quo3_d[63:55] = quo2_q[63:55]; //quo3_d[54] @@ -23470,7 +23150,7 @@ module Div_64b_unsigned (clock, denom_, numer_, quotient, remain); denom4 <= denom3; end - always @ (numer_temp_51_q or denom4 or quo3_q) begin + always @ (*) begin quo4_d[63:52] = quo3_q[63:52]; //quo4[51] @@ -23506,7 +23186,7 @@ module Div_64b_unsigned (clock, denom_, numer_, quotient, remain); denom5 <= denom4; end - always @ (numer_temp_48_q or denom5 or quo4_q) begin + always @ (*) begin quo5_d[63:49] = quo4_q[63:49]; //quo5_d[48] @@ -23542,7 +23222,7 @@ module Div_64b_unsigned (clock, denom_, numer_, quotient, remain); denom6 <= denom5; end - always @ (numer_temp_45_q or denom6 or quo5_q) begin + always @ (*) begin quo6_d[63:46] = quo5_q[63:46]; //quo6_d[45] @@ -23578,7 +23258,7 @@ module Div_64b_unsigned (clock, denom_, numer_, quotient, remain); denom7 <= denom6; end - always @ (numer_temp_42_q or denom7 or quo6_q) begin + always @ (*) begin quo7_d[63:43] = quo6_q[63:43]; //quo7_d[42] @@ -23614,7 +23294,7 @@ module Div_64b_unsigned (clock, denom_, numer_, quotient, remain); denom8 <= denom7; end - always @ (numer_temp_39_q or denom8 or quo7_q) begin + always @ (*) begin quo8_d[63:40] = quo7_q[63:40]; //quo8[39] @@ -23650,7 +23330,7 @@ module Div_64b_unsigned (clock, denom_, numer_, quotient, remain); denom9 <= denom8; end - always @ (numer_temp_36_q or denom9 or quo8_q) begin + always @ (*) begin quo9_d[63:37] = quo8_q[63:37]; //quo9[36] @@ -23686,7 +23366,7 @@ module Div_64b_unsigned (clock, denom_, numer_, quotient, remain); denom10 <= denom9; end - always @ (numer_temp_33_q or denom10 or quo9_q) begin + always @ (*) begin quo10_d[63:34] = quo9_q[63:34]; //quo10_d[33] @@ -23722,7 +23402,7 @@ module Div_64b_unsigned (clock, denom_, numer_, quotient, remain); denom11 <= denom10; end - always @ (numer_temp_30_q or denom11 or quo10_q) begin + always @ (*) begin quo11_d[63:31] = quo10_q[63:31]; //quo11[30] @@ -23758,7 +23438,7 @@ module Div_64b_unsigned (clock, denom_, numer_, quotient, remain); denom12 <= denom11; end - always @ (numer_temp_27_q or denom12 or quo11_q) begin + always @ (*) begin quo12_d[63:28] = quo11_q[63:28]; //quo12[27] @@ -23802,7 +23482,7 @@ module Div_64b_unsigned (clock, denom_, numer_, quotient, remain); denom13 <= denom12; end - always @ (numer_temp_23_q or denom13 or quo12_q) begin + always @ (*) begin quo13_d[63:24] = quo12_q[63:24]; //quo13_d[23] @@ -23846,7 +23526,7 @@ module Div_64b_unsigned (clock, denom_, numer_, quotient, remain); denom14 <= denom13; end - always @ (numer_temp_19_q or denom14 or quo13_q) begin + always @ (*) begin quo14_d[63:20] = quo13_q[63:20]; //quo14_d[19] @@ -23890,7 +23570,7 @@ module Div_64b_unsigned (clock, denom_, numer_, quotient, remain); denom15 <= denom14; end - always @ (numer_temp_15_q or denom15 or quo14_q) begin + always @ (*) begin quo15_d[63:16] = quo14_q[63:16]; //quo15_d[15] @@ -23934,7 +23614,7 @@ module Div_64b_unsigned (clock, denom_, numer_, quotient, remain); denom16 <= denom15; end - always @ (numer_temp_11_q or denom16 or quo15_q) begin + always @ (*) begin quo16_d[63:12] = quo15_q[63:12]; //quo16_d[11] @@ -23978,7 +23658,7 @@ module Div_64b_unsigned (clock, denom_, numer_, quotient, remain); denom17 <= denom16; end - always @ (numer_temp_7_q or denom17 or quo16_q) begin + always @ (*) begin quo17_d[63:8] = quo16_q[63:8]; //quo17_d[7] @@ -24022,7 +23702,7 @@ module Div_64b_unsigned (clock, denom_, numer_, quotient, remain); denom18 <= denom17; end - always @ (numer_temp_3_q or denom18 or quo17_q) begin + always @ (*) begin quo18_d[63:4] = quo17_q[63:4]; //quo18_d[3] @@ -24050,7 +23730,7 @@ module Div_64b_unsigned (clock, denom_, numer_, quotient, remain); denom19 <= denom18; end - always @ (numer_temp_1_q or denom19 or quo18_q) begin + always @ (*) begin quo19_d[63:2] = quo18_q[63:2]; //quo19_d[1] if (numer_temp_1_q[94:1] >= denom19 ) begin @@ -24211,7 +23891,7 @@ module Sqrt_64b (clk, num_, res); reg [63:0]one; //This is the one that is selected in first expanded loop reg [31:0]one_tmp; - always @ (num) begin + always @ (*) begin //The first for-loop: //all of these will be zero no matter how 'one' is selected. @@ -24352,7 +24032,7 @@ module Sqrt_64b (clk, num_, res); assign res__0 = 64'b0; assign one__0 = one; - always @ (res__0 or op__0 or one__0) begin + always @ (*) begin //i = 0 if (op__0 >= res__0 + one__0) begin @@ -24391,7 +24071,7 @@ module Sqrt_64b (clk, num_, res); one__3_q <= one__3_d; end - always @ (op__3_q or res__3_q or one__3_q) begin + always @ (*) begin //i = 3 if (op__3_q >= res__3_q + one__3_q) begin op__4 = op__3_q - res__3_q - one__3_q; @@ -24439,7 +24119,7 @@ module Sqrt_64b (clk, num_, res); res__7_q <= res__7_d; end - always @ (op__7_q or res__7_q or one__7_q) begin + always @ (*) begin //i = 7 if (op__7_q >= res__7_q + one__7_q) begin op__8 = op__7_q - res__7_q - one__7_q; @@ -24487,7 +24167,7 @@ module Sqrt_64b (clk, num_, res); res__11_q <= res__11_d; end - always @ (op__11_q or res__11_q or one__11_q) begin + always @ (*) begin //i = 11 if (op__11_q >= res__11_q + one__11_q) begin op__12 = op__11_q - res__11_q - one__11_q; @@ -24535,7 +24215,7 @@ module Sqrt_64b (clk, num_, res); res__15_q <= res__15_d; end - always @ (op__15_q or res__15_q or one__15_q) begin + always @ (*) begin //i = 15 if (op__15_q >= res__15_q + one__15_q) begin op__16 = op__15_q - res__15_q - one__15_q; @@ -24573,7 +24253,7 @@ module Sqrt_64b (clk, num_, res); res__18_q <= res__18_d; end - always @ (op__18_q or res__18_q or one__18_q) begin + always @ (*) begin //i = 18 if (op__18_q >= res__18_q + one__18_q) begin op__19 = op__18_q - res__18_q - one__18_q; @@ -24611,7 +24291,7 @@ module Sqrt_64b (clk, num_, res); res__21_q <= res__21_d; end - always @ (op__21_q or res__21_q or one__21_q) begin + always @ (*) begin //i = 21 if (op__21_q >= res__21_q + one__21_q) begin op__22 = op__21_q - res__21_q - one__21_q; @@ -24649,7 +24329,7 @@ module Sqrt_64b (clk, num_, res); res__24_q <= res__24_d; end - always @ (op__24_q or res__24_q or one__24_q) begin + always @ (*) begin //i = 24 if (op__24_q >= res__24_q + one__24_q) begin op__25 = op__24_q - res__24_q - one__24_q; @@ -24687,7 +24367,7 @@ module Sqrt_64b (clk, num_, res); res__27_q <= res__27_d; end - always @ (op__27_q or res__27_q or one__27_q) begin + always @ (*) begin //i = 27 if (op__27_q >= res__27_q + one__27_q) begin op__28 = op__27_q - res__27_q - one__27_q; diff --git a/vtr_flow/benchmarks/verilog/mkDelayWorker32B.v b/vtr_flow/benchmarks/verilog/mkDelayWorker32B.v index b5dc810431e..b20a866394f 100644 --- a/vtr_flow/benchmarks/verilog/mkDelayWorker32B.v +++ b/vtr_flow/benchmarks/verilog/mkDelayWorker32B.v @@ -310,16 +310,6 @@ module mkDelayWorker32B(wciS0_Clk, wire dummy7; wire dummy8; wire dummy9; - assign dummy1 = &mesgRF_memory__DOB; - assign dummy2 = &mesgWF_memory__DOB; - assign dummy3 = &metaRF__D_OUT; - assign dummy4 = &metaWF__D_OUT ; - assign dummy5 = &wci_reqF__D_OUT; - assign dummy6 = &wide16Fa__D_OUT; - assign dummy7 = &wide16Fb__D_OUT; - assign dummy8 = &wmemi_respF__D_OUT; - assign dummy9 = &wsiS_reqFifo__D_OUT; - wire prevent_hang_wire; assign prevent_hang_wire = dummy1 & dummy2 & dummy3 & dummy4 &dummy5 & dummy6 & dummy7 & dummy8 & dummy9; assign prevent_hanging_nodes = prevent_hang_wire; @@ -1331,6 +1321,16 @@ module mkDelayWorker32B(wciS0_Clk, metaWF_RDY_deq__58_AND_NOT_wrtSerPos_11_EQ_3_1_ETC___d365, wci_cState_9_EQ_2_0_AND_dlyCtrl_4_BITS_3_TO_0__ETC___d397; + assign dummy1 = &mesgRF_memory__DOB; + assign dummy2 = &mesgWF_memory__DOB; + assign dummy3 = &metaRF__D_OUT; + assign dummy4 = &metaWF__D_OUT ; + assign dummy5 = &wci_reqF__D_OUT; + assign dummy6 = &wide16Fa__D_OUT; + assign dummy7 = &wide16Fb__D_OUT; + assign dummy8 = &wmemi_respF__D_OUT; + assign dummy9 = &wsiS_reqFifo__D_OUT; + // action method wciS0_mCmd assign CAN_FIRE_wciS0_mCmd = 1'b1 ; assign WILL_FIRE_wciS0_mCmd = 1'b1 ; @@ -1503,9 +1503,9 @@ module mkDelayWorker32B(wciS0_Clk, wire [255:0] dp_out_not_used1; wire [255:0] dp_out_not_used2; - defparam dpram1.ADDR_WIDTH = 10; - defparam dpram1.DATA_WIDTH = 256; - dual_port_ram dpram1 ( + dual_port_ram + # (.ADDR_WIDTH(10), .DATA_WIDTH(256)) + dpram1 ( .clk(wciS0_Clk), .addr1(mesgRF_memory__ADDRA), .addr2(mesgRF_memory__ADDRB), @@ -1523,9 +1523,9 @@ wire [255:0] dp_out_not_used2; // .DATA_WIDTH(32'b1056), // .MEMSIZE(11'b1024)) mesgWF_memory( - defparam dpram2.ADDR_WIDTH = 10; - defparam dpram2.DATA_WIDTH = 256; - dual_port_ram dpram2 ( + dual_port_ram + # (.ADDR_WIDTH(10), .DATA_WIDTH(256)) + dpram2 ( .clk(wciS0_Clk), .addr1(mesgWF_memory__ADDRA), .addr2(mesgWF_memory__ADDRB), @@ -2190,10 +2190,7 @@ wire [255:0] dp_out_not_used2; assign MUX_wmemi_reqF_x_wire__wset_1__VAL_1 = { 4'b0101, addr__h20994, 12'b01 } ; assign MUX_wmemi_reqF_x_wire__wset_1__VAL_2 = { 4'b0011, addr__h21166, 12'b01 } ; assign MUX_wci_respF_x_wire__wset_1__VAL_1 = { 2'b01, x_data__h21804 } ; - always@(WILL_FIRE_RL_wci_cfrd or - MUX_wci_respF_x_wire__wset_1__VAL_1 or - WILL_FIRE_RL_wci_ctl_op_complete or - MUX_wci_respF_x_wire__wset_1__VAL_2 or WILL_FIRE_RL_wci_cfwr) + always@(*) begin case (1'b1) // synopsys parallel_case WILL_FIRE_RL_wci_cfrd: @@ -2266,9 +2263,7 @@ wire [255:0] dp_out_not_used2; WILL_FIRE_RL_wmemi_reqF_incCtr && wmemi_reqF_c_r == 2'b00 ; assign MUX_wmemi_reqF_q_1__write_1__SEL_2 = WILL_FIRE_RL_wmemi_reqF_incCtr && wmemi_reqF_c_r == 2'b01 ; - always@(wrtSerPos or - IF_wrtSerPos_11_EQ_2_14_THEN_0x0_ELSE_mesgWF_w_ETC___d354 or - x1__h19969 or x1__h19978) + always@(*) begin case (wrtSerPos) 2'b00: MUX_wide16Fa__enq_1__VAL_2 = x1__h19969; @@ -2277,9 +2272,7 @@ wire [255:0] dp_out_not_used2; IF_wrtSerPos_11_EQ_2_14_THEN_0x0_ELSE_mesgWF_w_ETC___d354; endcase end - always@(wrtSerPos or - IF_wrtSerPos_11_EQ_2_14_THEN_0x0_ELSE_metaWF_f_ETC___d377 or - x1__h20492 or x1__h20501) + always@(*) begin case (wrtSerPos) 2'b00: MUX_wide16Fa__enq_1__VAL_1 = x1__h20492; @@ -2557,9 +2550,7 @@ wire [255:0] dp_out_not_used2; // wsiS_reqFifo__D_OUT[39:8] != 32'b00000000000000000000000000000000) ; // register impreciseBurst - always@(WILL_FIRE_RL_wmwt_doAbort or - MUX_impreciseBurst__write_1__SEL_2 or - WILL_FIRE_RL_wmwt_messageFinalize) + always@(*) case (1'b1) WILL_FIRE_RL_wmwt_doAbort: impreciseBurst__D_IN = 1'b0; MUX_impreciseBurst__write_1__SEL_2: impreciseBurst__D_IN = 1'b1; @@ -2572,11 +2563,7 @@ wire [255:0] dp_out_not_used2; WILL_FIRE_RL_wmwt_doAbort ; // register mesgLength - always@(WILL_FIRE_RL_wmwt_doAbort or - MUX_mesgLength__write_1__SEL_2 or - MUX_mesgLength__write_1__VAL_2 or - MUX_endOfMessage__write_1__SEL_1 or - MUX_mesgLength__write_1__VAL_3 or WILL_FIRE_RL_wmwt_messageFinalize) + always@(*) case (1'b1) WILL_FIRE_RL_wmwt_doAbort: mesgLength__D_IN = 15'b010101010101010; MUX_mesgLength__write_1__SEL_2: @@ -2650,9 +2637,7 @@ wire [255:0] dp_out_not_used2; WILL_FIRE_RL_wmwt_messageFinalize || WILL_FIRE_RL_wci_ctrl_IsO ; // register opcode - always@(WILL_FIRE_RL_wmwt_doAbort or - WILL_FIRE_RL_wmwt_mesgBegin or - MUX_opcode__write_1__VAL_2 or WILL_FIRE_RL_wmwt_messageFinalize) + always@(*) case (1'b1) WILL_FIRE_RL_wmwt_doAbort: opcode__D_IN = 9'b010101010; WILL_FIRE_RL_wmwt_mesgBegin: opcode__D_IN = MUX_opcode__write_1__VAL_2; @@ -2664,8 +2649,7 @@ wire [255:0] dp_out_not_used2; WILL_FIRE_RL_wmwt_mesgBegin ; // register preciseBurst - always@(WILL_FIRE_RL_wmwt_doAbort or - MUX_mesgLength__write_1__SEL_2 or WILL_FIRE_RL_wmwt_messageFinalize) + always@(*) case (1'b1) WILL_FIRE_RL_wmwt_doAbort: preciseBurst__D_IN = 1'b0; MUX_mesgLength__write_1__SEL_2: preciseBurst__D_IN = 1'b1; @@ -2733,10 +2717,7 @@ wire [255:0] dp_out_not_used2; assign rdSerUnroll__EN = MUX_rdSerEmpty__write_1__PSEL_1 ; // register rdSyncWord - always@(WILL_FIRE_RL_rdSer_body or - MUX_rdSyncWord__write_1__VAL_1 or - WILL_FIRE_RL_rdSer_begin or - MUX_rdSyncWord__write_1__VAL_2 or WILL_FIRE_RL_rdSer_sync) + always@(*) begin case (1'b1) // synopsys parallel_case WILL_FIRE_RL_rdSer_body: @@ -2756,9 +2737,7 @@ wire [255:0] dp_out_not_used2; assign readMeta__EN = CAN_FIRE_RL_wmrd_mesgBegin ; // register readyToPush - always@(WILL_FIRE_RL_wmwt_doAbort or - MUX_impreciseBurst__write_1__SEL_2 or - MUX_endOfMessage__write_1__SEL_1) + always@(*) case (1'b1) WILL_FIRE_RL_wmwt_doAbort: readyToPush__D_IN = 1'b0; MUX_impreciseBurst__write_1__SEL_2: readyToPush__D_IN = 1'b1; @@ -2821,7 +2800,7 @@ wire [255:0] dp_out_not_used2; MUX_wci_illegalEdge__write_1__SEL_2 ; // register wci_nState - always@(wci_reqF__D_OUT) + always@(*) begin case (wci_reqF__D_OUT[36:34]) 3'b000: wci_nState__D_IN = 3'b001; @@ -2860,11 +2839,7 @@ wire [255:0] dp_out_not_used2; WILL_FIRE_RL_wci_respF_both || WILL_FIRE_RL_wci_respF_incCtr && wci_respF_c_r == 2'b00 || WILL_FIRE_RL_wci_respF_decCtr ; - always@(WILL_FIRE_RL_wci_respF_both or - MUX_wci_respF_q_0__write_1__VAL_1 or - MUX_wci_respF_q_0__write_1__SEL_2 or - MUX_wci_respF_q_0__write_1__VAL_2 or - WILL_FIRE_RL_wci_respF_decCtr or wci_respF_q_1) + always@(*) begin case (1'b1) // synopsys parallel_case WILL_FIRE_RL_wci_respF_both: @@ -2881,10 +2856,7 @@ wire [255:0] dp_out_not_used2; WILL_FIRE_RL_wci_respF_both || WILL_FIRE_RL_wci_respF_incCtr && wci_respF_c_r == 2'b01 || WILL_FIRE_RL_wci_respF_decCtr ; - always@(WILL_FIRE_RL_wci_respF_both or - MUX_wci_respF_q_1__write_1__VAL_1 or - MUX_wci_respF_q_1__write_1__SEL_2 or - MUX_wci_respF_q_0__write_1__VAL_2 or WILL_FIRE_RL_wci_respF_decCtr) + always@(*) begin case (1'b1) // synopsys parallel_case WILL_FIRE_RL_wci_respF_both: @@ -2929,11 +2901,7 @@ wire [255:0] dp_out_not_used2; WILL_FIRE_RL_wmemi_dhF_decCtr || WILL_FIRE_RL_wmemi_dhF_incCtr ; // register wmemi_dhF_q_0 - always@(WILL_FIRE_RL_wmemi_dhF_both or - MUX_wmemi_dhF_q_0__write_1__VAL_1 or - MUX_wmemi_dhF_q_0__write_1__SEL_2 or - MUX_wmemi_dhF_q_0__write_1__VAL_2 or - WILL_FIRE_RL_wmemi_dhF_decCtr or wmemi_dhF_q_1) + always@(*) begin case (1'b1) // synopsys parallel_case WILL_FIRE_RL_wmemi_dhF_both: @@ -2951,10 +2919,7 @@ wire [255:0] dp_out_not_used2; WILL_FIRE_RL_wmemi_dhF_decCtr ; // register wmemi_dhF_q_1 - always@(WILL_FIRE_RL_wmemi_dhF_both or - MUX_wmemi_dhF_q_1__write_1__VAL_1 or - MUX_wmemi_dhF_q_1__write_1__SEL_2 or - MUX_wmemi_dhF_q_0__write_1__VAL_2 or WILL_FIRE_RL_wmemi_dhF_decCtr) + always@(*) begin case (1'b1) // synopsys parallel_case WILL_FIRE_RL_wmemi_dhF_both: @@ -2994,11 +2959,7 @@ wire [255:0] dp_out_not_used2; WILL_FIRE_RL_wmemi_reqF_incCtr ; // register wmemi_reqF_q_0 - always@(WILL_FIRE_RL_wmemi_reqF_both or - MUX_wmemi_reqF_q_0__write_1__VAL_1 or - MUX_wmemi_reqF_q_0__write_1__SEL_2 or - MUX_wmemi_reqF_q_0__write_1__VAL_2 or - WILL_FIRE_RL_wmemi_reqF_decCtr or wmemi_reqF_q_1) + always@(*) begin case (1'b1) // synopsys parallel_case WILL_FIRE_RL_wmemi_reqF_both: @@ -3016,10 +2977,7 @@ wire [255:0] dp_out_not_used2; WILL_FIRE_RL_wmemi_reqF_decCtr ; // register wmemi_reqF_q_1 - always@(WILL_FIRE_RL_wmemi_reqF_both or - MUX_wmemi_reqF_q_1__write_1__VAL_1 or - MUX_wmemi_reqF_q_1__write_1__SEL_2 or - MUX_wmemi_reqF_q_0__write_1__VAL_2 or WILL_FIRE_RL_wmemi_reqF_decCtr) + always@(*) begin case (1'b1) // synopsys parallel_case WILL_FIRE_RL_wmemi_reqF_both: @@ -3166,11 +3124,7 @@ wire [255:0] dp_out_not_used2; WILL_FIRE_RL_wsiM_reqFifo_both || WILL_FIRE_RL_wsiM_reqFifo_incCtr && wsiM_reqFifo_c_r == 2'b00 || WILL_FIRE_RL_wsiM_reqFifo_decCtr ; - always@(WILL_FIRE_RL_wsiM_reqFifo_both or - MUX_wsiM_reqFifo_q_0__write_1__VAL_1 or - MUX_wsiM_reqFifo_q_0__write_1__SEL_2 or - MUX_wsiM_reqFifo_q_0__write_1__VAL_2 or - WILL_FIRE_RL_wsiM_reqFifo_decCtr or wsiM_reqFifo_q_1) + always@(*) begin case (1'b1) // synopsys parallel_case WILL_FIRE_RL_wsiM_reqFifo_both: @@ -3189,11 +3143,7 @@ wire [255:0] dp_out_not_used2; WILL_FIRE_RL_wsiM_reqFifo_both || WILL_FIRE_RL_wsiM_reqFifo_incCtr && wsiM_reqFifo_c_r == 2'b01 || WILL_FIRE_RL_wsiM_reqFifo_decCtr ; - always@(WILL_FIRE_RL_wsiM_reqFifo_both or - MUX_wsiM_reqFifo_q_1__write_1__VAL_1 or - MUX_wsiM_reqFifo_q_1__write_1__SEL_2 or - MUX_wsiM_reqFifo_q_0__write_1__VAL_2 or - WILL_FIRE_RL_wsiM_reqFifo_decCtr) + always@(*) begin case (1'b1) // synopsys parallel_case WILL_FIRE_RL_wsiM_reqFifo_both: @@ -3341,8 +3291,7 @@ wire [255:0] dp_out_not_used2; CAN_FIRE_RL_wrtSer_body ? x__h15126[9:0] : mesgWF_rRdPtr[9:0] ; // submodule metaRF - always@(rdSerPos or - rdSerStage_3 or wide16Fb__D_OUT or rdSerStage_1 or rdSerStage_2) + always@(*) begin case (rdSerPos) 2'b00: metaRF__D_IN = wide16Fb__D_OUT[31:0]; @@ -3470,20 +3419,7 @@ wire [255:0] dp_out_not_used2; assign x_burstLength__h22437 = (readMeta[23:0] == 24'b000000000000000000000000) ? 12'b01 : readMeta[16:5] ; assign x_byteEn__h22438 = (readMeta[23:0] == 24'b000000000000000000000000) ? 32'b00000000000000000000000000000000 : 32'hFFFFFFFF ; - always@(wci_reqF__D_OUT or - dlyCtrl or - dlyHoldoffBytes or - dlyHoldoffCycles or - mesgWtCount or - mesgRdCount or - bytesWritten or - rdat__h21847 or - wsiS_extStatusW__wget or - wsiM_extStatusW__wget or - wmemiWrReq or - wmemiRdReq or - wmemiRdResp or - rdat__h22030 or rdat__h22038 or rdat__h22046 or rdat__h22054) + always@(*) begin case (wci_reqF__D_OUT[51:32]) 20'h0: x_data__h21804 = dlyCtrl; @@ -3510,7 +3446,7 @@ wire [255:0] dp_out_not_used2; default: x_data__h21804 = 32'b00000000000000000000000000000000; endcase end - always@(wrtSerPos or wide16Fa__FULL_N) + always@(*) begin case (wrtSerPos) // 2'b00, 2'b01, 2'b10 @@ -3528,7 +3464,7 @@ wire [255:0] dp_out_not_used2; wrtSerPos != 2'b11 || wide16Fa__FULL_N; endcase end - always@(wrtSerPos) + always@(*) begin case (wrtSerPos) // 2'b00, 2'b01, 2'b10, 2'b11: CASE_wrtSerPos_0b1_0_1_1_1_2_1_3_0b1__q1 = 1'b1; @@ -4137,9 +4073,9 @@ reg full_n_r, empty_n_r; // manually assign assign junk_in = 32'b00000000000000000000000000000000; -defparam ram1.ADDR_WIDTH = `awa; -defparam ram1.DATA_WIDTH = `dwa; -dual_port_ram ram1( +dual_port_ram + # (.ADDR_WIDTH(`awa), .DATA_WIDTH(`dwa)) +ram1( .clk( clk ), .addr1( rp ), .addr2( wp ), @@ -4537,9 +4473,9 @@ reg full_n_r, empty_n_r; // manually assign assign junk_in = 32'b00000000000000000000000000000000; -defparam ram1.ADDR_WIDTH = `awa; -defparam ram1.DATA_WIDTH = `dwa; -dual_port_ram ram1( +dual_port_ram + # (.ADDR_WIDTH(`awa), .DATA_WIDTH(`dwa)) +ram1( .clk( clk ), .addr1( rp ), .addr2( wp ), @@ -4941,9 +4877,9 @@ reg full_n_r, empty_n_r; // manually assign assign junk_in = 128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000; -defparam ram1.ADDR_WIDTH = `awa; -defparam ram1.DATA_WIDTH = `dwc; -dual_port_ram ram1( +dual_port_ram + # (.ADDR_WIDTH(`awa), .DATA_WIDTH(`dwc)) +ram1( .clk( clk ), .addr1( rp ), .addr2( wp ), @@ -5345,9 +5281,9 @@ reg full_n_r, empty_n_r; // manually assign assign junk_in = 128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000; -defparam ram1.ADDR_WIDTH = `awa; -defparam ram1.DATA_WIDTH = `dwd; -dual_port_ram ram1( +dual_port_ram + # (.ADDR_WIDTH(`awa), .DATA_WIDTH(`dwd)) +ram1( .clk( clk ), .addr1( rp ), .addr2( wp ), @@ -5693,9 +5629,6 @@ parameter n=32; parameter max_size = 1<> Can't find translated component 'spram'. Module name may not match + spram21x4 spraminst(we, texinfo, CfgData[20:0], clk); + assign we = ((CfgData_Ready == 1'b1) & (CfgAddr == 4'b1110)) ? 1'b1 : 1'b0 ; + + always @(posedge clk) + begin + if (globalreset == 1'b1) + begin + state <= 0 ; + origx <= 0; + origy <= 0; + + origz <= 0; + m11 <= 1; + m12 <= 0; + m13 <= 0; + m21 <= 0; + m22 <= 1; + m23 <= 0; + m31 <= 0; + m32 <= 0; + m33 <= 1; + bkcolour <= 0; + end + else + begin + state <= next_state ; + if (CfgData_Ready) begin + if (CfgAddr == 4'b0001) origx <= CfgData; + if (CfgAddr == 4'b0010) origy <= CfgData; + if (CfgAddr == 4'b0011) origz <= CfgData; + if (CfgAddr == 4'b0100) m11 <= CfgData[15:0]; + if (CfgAddr == 4'b0101) m12 <= CfgData[15:0]; + if (CfgAddr == 4'b0110) m13 <= CfgData[15:0]; + if (CfgAddr == 4'b0111) m21 <= CfgData[15:0]; + if (CfgAddr == 4'b1000) m22 <= CfgData[15:0]; + if (CfgAddr == 4'b1001) m23 <= CfgData[15:0]; + if (CfgAddr == 4'b1010) m31 <= CfgData[15:0]; + if (CfgAddr == 4'b1011) m32 <= CfgData[15:0]; + if (CfgAddr == 4'b1100) m33 <= CfgData[15:0]; + if (CfgAddr == 4'b1101) bkcolour <= CfgData[20:0]; + end + end + end + + always @(*) + begin + case (state) + 0 : + begin + want_CfgData = 1'b1 ; + if (CfgData_Ready == 1'b1) + begin + next_state = 1 ; + end + + else + begin + next_state = 0 ; + end + end + 1 : + begin + want_CfgData = 1'b0 ; + if (CfgData_Ready == 1'b0) + begin + next_state = 0 ; + end + + else + begin + next_state = 1 ; + end + end + endcase + end + endmodule + + + + module spram21x4 (we, dataout, datain, clk); + + input we; + output[21 - 1:0] dataout; + wire[21 - 1:0] dataout; + input[21 - 1:0] datain; + input clk; + + reg [7:0] addr; + + always @ (posedge clk) + begin + addr[0] <= we; + addr [1] <= addr[0]; + addr [2] <= addr[1]; + addr [3] <= addr[2]; + addr [4] <= addr[3]; + addr [5] <= addr[4]; + addr [6] <= addr[5]; + addr [7] <= addr[6]; + end +//changed to odin 2 ram specifications + +single_port_ram + # (.ADDR_WIDTH(8), .DATA_WIDTH(21)) +new_ram( + .clk (clk), + .we(we), + .data(datain), + .out(dataout), + .addr(addr) + ); + + + endmodule + + + + + + + + + + + + +module rgsramcontroller (want_addr, addr_ready, addrin, want_data, data_ready, datain, want_read, read_ready, dataout, dirReady, wantDir, sramdatal, addr, wantwriteback, writebackack, writebackdata, writebackaddr, fbdata, fbnextscanline, fbdatavalid, fbpage, shadedata, triID, wantshadedata, shadedataready, texeladdr, texel, wanttexel, texelready, tm3_sram_data_in, tm3_sram_data_out, tm3_sram_addr, tm3_sram_we, tm3_sram_oe, tm3_sram_adsp, globalreset, clk); + + output want_addr; + reg want_addr; + input addr_ready; + input[17:0] addrin; + output want_data; + reg want_data; + input data_ready; + input[63:0] datain; + input want_read; + output read_ready; + + reg read_ready; + output[63:0] dataout; + wire[63:0] dataout; + output dirReady; + reg dirReady; + input wantDir; + output[47:0] sramdatal; + reg[47:0] sramdatal; + output[14:0] addr; + wire[14:0] addr; + input wantwriteback; + output writebackack; + + reg writebackack; + input[63:0] writebackdata; + input[17:0] writebackaddr; + output[63:0] fbdata; + reg[63:0] fbdata; + input fbnextscanline; + output fbdatavalid; + reg fbdatavalid; + input fbpage; + output[63:0] shadedata; + wire[63:0] shadedata; + input[15:0] triID; + + input wantshadedata; + output shadedataready; + reg shadedataready; + input[17:0] texeladdr; + output[63:0] texel; + wire[63:0] texel; + input wanttexel; + output texelready; + reg texelready; + input[63:0] tm3_sram_data_in; + wire[63:0] tm3_sram_data_in; + output[63:0] tm3_sram_data_out; + wire[63:0] tm3_sram_data_out; + reg[63:0] tm3_sram_data_xhdl0; + + output[18:0] tm3_sram_addr; + reg[18:0] tm3_sram_addr; + output[7:0] tm3_sram_we; + reg[7:0] tm3_sram_we; + output[1:0] tm3_sram_oe; + reg[1:0] tm3_sram_oe; + output tm3_sram_adsp; + reg tm3_sram_adsp; + input globalreset; + input clk; + + reg[3:0] state; + reg[3:0] next_state; + reg[17:0] waddress; + reg[14:0] faddress; + reg[6:0] fcount; + reg fbdatavalidl; + + reg[17:0] temp_waddress; + reg[14:0] temp_faddress; + reg[6:0] temp_fcount; + reg temp_fbdatavalidl; + reg temp_texelready; + reg temp_shadedataready; + + assign tm3_sram_data_out = tm3_sram_data_xhdl0; + + assign dataout = tm3_sram_data_in ; + assign addr = tm3_sram_data_in[62:48] ; + assign shadedata = tm3_sram_data_in ; + assign texel = tm3_sram_data_in ; + + always @(posedge clk) + begin + if (globalreset == 1'b1) + begin + + state <= 0 ; + waddress <= 0; + faddress <= 0; + fcount <= 7'b1101011 ; + fbdatavalid <= 1'b0 ; + fbdatavalidl <= 1'b0 ; + shadedataready <= 1'b0 ; + texelready <= 1'b0 ; + sramdatal <= 0; + fbdata <= 0; + end + else + + begin + state <= next_state ; + sramdatal <= tm3_sram_data_in[47:0] ; + fbdata <= tm3_sram_data_in ; + fbdatavalid <= fbdatavalidl ; + + fbdatavalidl <= temp_fbdatavalidl; + texelready <= temp_texelready; + shadedataready <= temp_shadedataready; + fcount <= temp_fcount; + faddress <= temp_faddress; + waddress <= temp_waddress; + + end + end + + + always @(*) + begin + case (state) + 0 : + begin + tm3_sram_we = 8'b11111111 ; + tm3_sram_oe = 2'b01 ; + tm3_sram_adsp = 1'b0 ; + tm3_sram_data_xhdl0 = 0; + tm3_sram_addr = {1'b0, waddress} ; + want_addr = 1'b1 ; + want_data = 1'b1 ; + read_ready = 1'b1 ; + dirReady = 1'b0 ; + writebackack = 1'b0 ; + + temp_fbdatavalidl = 1'b0 ; + temp_shadedataready = 1'b0 ; + temp_texelready = 1'b0 ; + if (addr_ready == 1'b1) + + begin + temp_waddress = addrin ; + end + else begin + temp_waddress = waddress; + end + temp_faddress = faddress; + temp_fcount = fcount; + + end + 1 : + begin + tm3_sram_we = 8'b11111111 ; + tm3_sram_oe = 2'b01 ; + tm3_sram_adsp = 1'b0 ; + tm3_sram_data_xhdl0 = 0; + tm3_sram_addr = {1'b0, waddress} ; + want_addr = 1'b0 ; + want_data = 1'b1 ; + read_ready = 1'b1 ; + dirReady = 1'b0 ; + writebackack = 1'b0 ; + + temp_fbdatavalidl = fbdatavalidl; + temp_shadedataready = shadedataready; + temp_texelready = texelready; + temp_waddress = waddress; + temp_faddress = faddress; + temp_fcount = fcount; + + end + 2 : + begin + tm3_sram_we = 8'b11111111 ; + tm3_sram_oe = 2'b01 ; + tm3_sram_adsp = 1'b0 ; + tm3_sram_data_xhdl0 = 0; + tm3_sram_addr = {1'b0, waddress} ; + want_addr = 1'b1 ; + want_data = 1'b1 ; + read_ready = 1'b0 ; + dirReady = 1'b0 ; + writebackack = 1'b0 ; + + temp_fbdatavalidl = 1'b0 ; + temp_shadedataready = 1'b0 ; + temp_texelready = 1'b0 ; + if (want_read == 1'b0) + begin + + temp_waddress = waddress + 1 ; + end + else begin + temp_waddress = waddress; + end + temp_faddress = faddress; + temp_fcount = fcount; + end + 3 : + begin + tm3_sram_we = 8'b00000000 ; + tm3_sram_oe = 2'b11 ; + tm3_sram_adsp = 1'b0 ; + tm3_sram_data_xhdl0 = datain ; + tm3_sram_addr = {1'b0, waddress} ; + want_addr = 1'b1 ; + want_data = 1'b0 ; + read_ready = 1'b1 ; + dirReady = 1'b0 ; + writebackack = 1'b0 ; + + temp_fbdatavalidl = 1'b0 ; + temp_shadedataready = 1'b0 ; + temp_texelready = 1'b0 ; + temp_waddress = waddress + 1 ; + temp_faddress = faddress; + temp_fcount = fcount; + + end + 4 : + begin + tm3_sram_we = 8'b11111111 ; + tm3_sram_oe = 2'b01 ; + tm3_sram_adsp = 1'b0 ; + tm3_sram_data_xhdl0 = 0; + tm3_sram_addr = {1'b0, waddress} ; + want_addr = 1'b1 ; + want_data = 1'b0 ; + read_ready = 1'b1 ; + dirReady = 1'b0 ; + writebackack = 1'b0 ; + + temp_fbdatavalidl = fbdatavalidl; + temp_shadedataready = shadedataready; + temp_texelready = texelready; + temp_waddress = waddress; + temp_faddress = faddress; + temp_fcount = fcount; + end + + 5 : + begin + tm3_sram_we = 8'b11111111 ; + tm3_sram_oe = 2'b01 ; + tm3_sram_adsp = 1'b0 ; + tm3_sram_data_xhdl0 = 0; + tm3_sram_addr = {1'b0, waddress} ; + want_addr = 1'b1 ; + want_data = 1'b1 ; + read_ready = 1'b1 ; + dirReady = 1'b1 ; + writebackack = 1'b0 ; + + temp_fbdatavalidl = 1'b0 ; + temp_shadedataready = 1'b0 ; + temp_texelready = 1'b0 ; + if (wantDir == 1'b0) + begin + temp_waddress = waddress + 1 ; + end + else begin + temp_waddress = waddress; + end + temp_faddress = faddress; + temp_fcount = fcount; + end + 6 : + begin + tm3_sram_we = 8'b00000000 ; + tm3_sram_oe = 2'b11 ; + tm3_sram_adsp = 1'b0 ; + tm3_sram_data_xhdl0 = writebackdata ; + tm3_sram_addr = {1'b0, writebackaddr} ; + want_addr = 1'b1 ; + want_data = 1'b1 ; + read_ready = 1'b1 ; + dirReady = 1'b0 ; + writebackack = 1'b1 ; + + temp_fbdatavalidl = fbdatavalidl; + temp_shadedataready = shadedataready; + temp_texelready = texelready; + temp_waddress = waddress; + temp_faddress = faddress; + temp_fcount = fcount; + end + + 7 : + begin + tm3_sram_we = 8'b11111111 ; + tm3_sram_oe = 2'b01 ; + tm3_sram_adsp = 1'b0 ; + tm3_sram_data_xhdl0 = 0; + tm3_sram_addr = {3'b011, fbpage, faddress} ; + want_addr = 1'b1 ; + want_data = 1'b1 ; + read_ready = 1'b1 ; + dirReady = 1'b0 ; + writebackack = 1'b0 ; + + temp_shadedataready = 1'b0 ; + temp_texelready = 1'b0 ; + temp_fbdatavalidl = 1'b1 ; + temp_waddress = waddress; + if (fcount != 0) + begin + temp_faddress = faddress + 1 ; + temp_fcount = fcount - 1 ; + end + else begin + temp_faddress = faddress; + temp_fcount = fcount; + end + end + 8 : + begin + tm3_sram_we = 8'b11111111 ; + tm3_sram_oe = 2'b01 ; + tm3_sram_adsp = 1'b0 ; + tm3_sram_data_xhdl0 = 0; + tm3_sram_addr = {1'b0, waddress} ; + want_addr = 1'b1 ; + want_data = 1'b1 ; + read_ready = 1'b1 ; + dirReady = 1'b0 ; + writebackack = 1'b0 ; + + temp_fbdatavalidl = 1'b0 ; + temp_shadedataready = 1'b0 ; + temp_texelready = 1'b0 ; + temp_waddress = waddress; + temp_fcount = 7'b1101011 ; + if (faddress == 25680) + begin + temp_faddress = 0; + end + else begin + temp_faddress = faddress; + end + end + 9 : + begin + tm3_sram_we = 8'b11111111 ; + tm3_sram_oe = 2'b01 ; + tm3_sram_adsp = 1'b0 ; + tm3_sram_data_xhdl0 = 0; + want_addr = 1'b1 ; + want_data = 1'b1 ; + read_ready = 1'b1 ; + dirReady = 1'b0 ; + writebackack = 1'b0 ; + tm3_sram_addr = {3'b010, triID} ; + + temp_fbdatavalidl = 1'b0 ; + temp_texelready = 1'b0 ; + temp_shadedataready = 1'b1 ; + temp_waddress = waddress; + temp_faddress = faddress; + temp_fcount = fcount; + end + + 10 : + begin + tm3_sram_we = 8'b11111111 ; + tm3_sram_oe = 2'b01 ; + tm3_sram_adsp = 1'b0 ; + tm3_sram_data_xhdl0 = 0; + want_addr = 1'b1 ; + want_data = 1'b1 ; + read_ready = 1'b1 ; + dirReady = 1'b0 ; + writebackack = 1'b0 ; + tm3_sram_addr = {1'b0, texeladdr} ; + + temp_fbdatavalidl = 1'b0 ; + temp_shadedataready = 1'b0 ; + temp_texelready = 1'b1 ; + temp_waddress = waddress; + temp_faddress = faddress; + temp_fcount = fcount; + end + // Create a default case to avoid inferring latches. + // for temp_* variables we can hold previous state to + // preserve design intent. For variables that are + // not re-registered, we must make a choice about + // what the default behavior should be that will + // potentially change functionality vs. previous revision + // for previously undefined state decoding. Make a best + // effort based on how the signals appear to idle when + // not being used by the FSM by matching state 0 + default: begin + tm3_sram_we = 8'b11111111 ; + tm3_sram_oe = 2'b01 ; + tm3_sram_adsp = 1'b0 ; + tm3_sram_data_xhdl0 = 0; + tm3_sram_addr = {1'b0, waddress} ; + want_addr = 1'b1 ; + want_data = 1'b1 ; + read_ready = 1'b1 ; + dirReady = 1'b0 ; + writebackack = 1'b0 ; + + temp_fbdatavalidl = fbdatavalidl; + temp_shadedataready = shadedataready; + temp_texelready = texelready; + temp_waddress = waddress; + temp_faddress = faddress; + temp_fcount = fcount; + end + endcase + end + + always @(*) + begin + case (state) + 0 : + begin + if (addr_ready == 1'b1) + begin + next_state = 1 ; + end + else if (want_read == 1'b1) + begin + next_state = 2 ; + end + else if (data_ready == 1'b1) + begin + + next_state = 3 ; + end + else if (wantDir == 1'b1) + begin + next_state = 5 ; + end + else if (wantwriteback == 1'b1) + begin + next_state = 6 ; + end + else if (wantshadedata == 1'b1) + begin + + next_state = 9 ; + end + else if (wanttexel == 1'b1) + begin + next_state = 10 ; + end + else if (fcount != 0) + begin + next_state = 7 ; + end + else if (fbnextscanline == 1'b1) + begin + + next_state = 8 ; + end + else + begin + next_state = 0 ; + end + end + 1 : + begin + if (addr_ready == 1'b0) + begin + next_state = 0 ; + + end + else + begin + next_state = 1 ; + end + end + 2 : + begin + if (want_read == 1'b0) + begin + next_state = 0 ; + end + else + begin + next_state = 2 ; + end + end + 3 : + begin + next_state = 4 ; + end + 4 : + begin + if (data_ready == 1'b0) + begin + + next_state = 0 ; + end + else + begin + next_state = 4 ; + end + end + 5 : + begin + if (wantDir == 1'b0) + begin + next_state = 0 ; + + end + else + begin + next_state = 5 ; + end + end + 6 : + begin + next_state = 0 ; + end + + 7 : + begin + if ((fcount == 1) | (addr_ready == 1'b1) | (want_read == 1'b1) | (data_ready == 1'b1) | (wantDir == 1'b1) | (wantwriteback == 1'b1)) + begin + next_state = 0 ; + + end + else + begin + next_state = 7 ; + end + end + 8 : + begin + next_state = 7 ; + end + 9 : + begin + next_state = 0 ; + end + + 10 : + begin + next_state = 0 ; + end + // Add a default to avoid inferring latches. Preserve original functionality + // by holding previous state, even if this is suboptimal for real circuits: + default: begin + next_state = state; + end + endcase + end + + endmodule + + + module raysend (as, ack, addr, dir, origx, origy, origz, rgData, rgAddr, rgWE, rgAddrValid, rgDone, globalreset, clk, statepeek); + + input as; + output ack; + reg ack; + input[3:0] addr; + input[47:0] dir; + input[27:0] origx; + input[27:0] origy; + input[27:0] origz; + output[31:0] rgData; + reg[31:0] rgData; + + output[3:0] rgAddr; + reg[3:0] rgAddr; + output[2:0] rgWE; + reg[2:0] rgWE; + output rgAddrValid; + reg rgAddrValid; + input rgDone; + input globalreset; + input clk; + output[2:0] statepeek; + reg[2:0] statepeek; + + reg[3:0] state; + reg[3:0] next_state; + + + + reg[31:0] temp_rgData; + reg[2:0] temp_rgWE; + reg temp_rgAddrValid; + reg temp_ack; + reg[3:0] temp_rgAddr; + + always @(posedge clk) + begin + if (globalreset == 1'b1) + begin + state <= 0 ; + ack <= 1'b0 ; + rgWE <= 3'b000 ; + rgData <= 0; + rgAddrValid <= 1'b0 ; + rgAddr <= 0; + end + else + begin + state <= next_state ; + +rgData <= temp_rgData; +rgWE <= temp_rgWE; +rgAddrValid <= temp_rgAddrValid; +ack <= temp_ack; +rgAddr <= temp_rgAddr; + + end + end + + always @(*) + begin + + case (state) + 0 : + begin + if ((as == 1'b1) & (ack == 1'b0)) + begin + next_state = 1 ; + end + else + begin + next_state = 0 ; + end + statepeek = 3'b001 ; + + if ((as == 1'b1) & (ack == 1'b0)) + begin + temp_rgData = {4'b0000, origx} ; + temp_rgWE = 3'b001 ; + temp_rgAddrValid = 1'b1 ; + temp_rgAddr = addr ; + end + //need to hold previous value explicitly to prevent + //latch inference + else begin + temp_rgData = rgData; + temp_rgWE = rgWE; + temp_rgAddrValid = rgAddrValid; + temp_rgAddr = addr ; + end + if (as == 1'b0 & ack == 1'b1) + begin + temp_ack = 1'b0 ; + end + //need to hold previous value explicitly to prevent + //latch inference + else begin + temp_ack = ack; + end + + end + 1 : + begin + if (rgDone == 1'b1) + begin + next_state = 6 ; + end + else + begin + next_state = 1 ; + end + statepeek = 3'b010 ; + + //need to hold previous value explicitly to prevent + //latch inference + temp_rgData = rgData; + temp_rgWE = rgWE; + temp_rgAddr = rgAddr; + + if (rgDone == 1'b1) + begin + temp_rgAddrValid = 1'b0 ; + end + //need to hold previous value explicitly to prevent + //latch inference + else begin + temp_rgAddrValid = rgAddrValid; + end + temp_ack = ack; + end + 2 : + begin + if (rgDone == 1'b1) + begin + next_state = 7 ; + end + else + begin + next_state = 2 ; + end + statepeek = 3'b011 ; + + //need to hold previous value explicitly to prevent + //latch inference + temp_rgData = rgData; + temp_rgWE = rgWE; + temp_rgAddr = rgAddr; + + if (rgDone == 1'b1) + begin + temp_rgAddrValid = 1'b0 ; + end + else begin + temp_rgAddrValid = rgAddrValid; + end + + temp_ack = ack; + end + 3 : + begin + if (rgDone == 1'b1) + begin + next_state = 8 ; + end + else + begin + next_state = 3 ; + end + statepeek = 3'b100 ; + + //need to hold previous value explicitly to prevent + //latch inference + temp_rgData = rgData; + temp_rgWE = rgWE; + temp_rgAddr = rgAddr; + + if (rgDone == 1'b1) + begin + temp_rgAddrValid = 1'b0 ; + end + else begin + temp_rgAddrValid = rgAddrValid; + end + + temp_ack = ack; + end + 4 : + begin + if (rgDone == 1'b1) + begin + next_state = 9 ; + end + else + begin + next_state = 4 ; + end + statepeek = 3'b101 ; + + //need to hold previous value explicitly to prevent + //latch inference + temp_rgData = rgData; + temp_rgWE = rgWE; + temp_rgAddr = rgAddr; + + if (rgDone == 1'b1) + begin + temp_rgAddrValid = 1'b0 ; + end + else begin + temp_rgAddrValid = rgAddrValid; + end + temp_ack = ack; + end + + 5 : + begin + if (rgDone == 1'b1) + begin + next_state = 0 ; + end + else + begin + next_state = 5 ; + end + statepeek = 3'b110 ; + + //need to hold previous value explicitly to prevent + //latch inference + temp_rgData = rgData; + temp_rgWE = rgWE; + temp_rgAddr = rgAddr; + + temp_ack = 1'b1 ; + if (rgDone == 1'b1) + begin + temp_rgAddrValid = 1'b0 ; + end + else begin + temp_rgAddrValid = rgAddrValid; + end + + end + + 6 : + begin + next_state = 2 ; + + //need to hold previous value explicitly to prevent + //latch inference + temp_rgAddr = rgAddr; + temp_ack = ack; + + temp_rgData = {4'b0000, origy} ; + temp_rgWE = 3'b010 ; + temp_rgAddrValid = 1'b1 ; + + end + 7 : + begin + next_state = 3 ; + + //need to hold previous value explicitly to prevent + //latch inference + temp_rgAddr = rgAddr; + temp_ack = ack; + + temp_rgData = {4'b0000, origz} ; + temp_rgWE = 3'b011 ; + temp_rgAddrValid = 1'b1 ; + end + 8 : + begin + next_state = 4 ; + + //need to hold previous value explicitly to prevent + //latch inference + temp_rgAddr = rgAddr; + temp_ack = ack; + + temp_rgData = {dir[31:16], dir[47:32]} ; + temp_rgWE = 3'b100 ; + temp_rgAddrValid = 1'b1 ; + end + 9 : + begin + next_state = 5 ; + + //need to hold previous value explicitly to prevent + //latch inference + temp_rgAddr = rgAddr; + temp_ack = ack; + + temp_rgData = {16'b0000000000000000, dir[15:0]} ; + temp_rgWE = 3'b101 ; + temp_rgAddrValid = 1'b1 ; + end + // The original FSM did not have a default case. We want to add one + // to prevent modern synthesis tools from inferring latches in this + // logic. To preserve as much of the original behavior as possible, + // hold the previous flop values whereever possible, even though + // this will cause the FSM to lock up if it gets in an illegal state + default: begin + temp_rgData = rgData; + temp_rgWE = rgWE; + temp_rgAddrValid = rgAddrValid; + temp_rgAddr = rgAddr; + temp_ack = ack; + next_state = state; + end + endcase + end + endmodule + + + module raygencont (go, initcount, busyout, cycles, nextaddr, nas0, nas1, page, dirReady, wantDir, dirIn, addrIn, as, addr, ack, dir, raygroup0, raygroupvalid0, busy0, raygroup1, raygroupvalid1, busy1, globalreset, clk, statepeek); + + input go; + input[14:0] initcount; + output busyout; + wire busyout; + reg temp_busyout; + output[30:0] cycles; + reg[30:0] cycles; + output[17:0] nextaddr; + wire[17:0] nextaddr; + output nas0; + + wire nas0; + reg temp_nas0; + output nas1; + wire nas1; + reg temp_nas1; + input page; + input dirReady; + output wantDir; + reg wantDir; + input[47:0] dirIn; + input[14:0] addrIn; + output as; + reg as; + output[3:0] addr; + + reg[3:0] addr; + input ack; + output[47:0] dir; + reg[47:0] dir; + output[1:0] raygroup0; + wire[1:0] raygroup0; + output raygroupvalid0; + reg raygroupvalid0; + input busy0; + output[1:0] raygroup1; + wire[1:0] raygroup1; + output raygroupvalid1; + + reg raygroupvalid1; + input busy1; + input globalreset; + input clk; + output[2:0] statepeek; + reg[2:0] statepeek; + + + reg[2:0] state; + reg[2:0] next_state; + reg[14:0] count; + reg first; + reg[17:0] destaddr; + wire[1:0] busy; + reg[1:0] loaded; + reg[1:0] groupID; + reg active; + + reg[47:0] temp_dir; + reg[30:0] temp_cycles; + reg[1:0] temp_addr; + reg[1:0] temp_loaded; + reg[1:0] temp_groupID; + reg[14:0] temp_count; + reg temp_active; + reg temp_raygroupvalid1; + reg temp_raygroupvalid0; + + assign busy = {busy1, busy0} ; + + always @(posedge clk) + begin + + if (globalreset == 1'b1) + + begin + state <= 0 ; + cycles <= 0; + dir <= 0; + addr[1:0] <= 2'b00 ; + groupID <= 2'b00 ; + count <= 0; + first <= 1'b0 ; + destaddr <= 0; + raygroupvalid0 <= 1'b0 ; + raygroupvalid1 <= 1'b0 ; + loaded <= 2'b00 ; + + active <= 1'b0 ; + end + else + begin + addr[3:2] <= (active == 1'b0) ? {1'b0, groupID[0]} : {1'b1, groupID[1]} ; + addr[1:0] <= temp_addr[1:0]; + state <= next_state ; + + // dir is only loaded if state == 1, make enable logic here rather + // than risk latch inference below + if (state == 1) begin + dir <= dirIn; + end + + // This matches original logic for all explicitly defined + // states; with a simulation testbench, we could show whether + // there are bugs introduced by allowing this to increment + // during states that are not part of the next state logic + if (state == 0) begin + if (go) begin + cycles <= 0; + end + end + else begin + cycles <= cycles + 1; + end + + loaded <= temp_loaded; + groupID <= temp_groupID; + count <= temp_count; + active <= temp_active; + raygroupvalid0 <= temp_raygroupvalid0; + raygroupvalid1 <= temp_raygroupvalid1; + + end + end + + assign raygroup0 = {1'b0, groupID[0]} ; + assign raygroup1 = {1'b1, groupID[1]} ; + assign nextaddr = {2'b11, page, addrIn} ; + assign busyout = temp_busyout; + assign nas0 = temp_nas0; + assign nas1 = temp_nas1; + + always @(*) + begin + case (state) + 0 : + begin + temp_addr[1:0] = 2'b00 ; + temp_loaded = 2'b00 ; + temp_groupID = 2'b00 ; + temp_count = initcount ; + temp_active = 1'b0 ; + temp_raygroupvalid0 = raygroupvalid0; + temp_raygroupvalid1 = raygroupvalid1; + end + 1 : + begin + if (dirReady == 1'b1 & addr[1:0] == 2'b10) + begin + if (active == 1'b0) + begin + temp_loaded[0] = 1'b1 ; + temp_loaded[1] = loaded[1]; + end + else + begin + temp_loaded[1] = 1'b1 ; + temp_loaded[0] = loaded[0]; + end + end + else begin + temp_loaded = loaded; + end + + temp_addr[1:0] = addr; + temp_groupID = groupID; + temp_count = count; + temp_active = active; + temp_raygroupvalid0 = raygroupvalid0; + temp_raygroupvalid1 = raygroupvalid1; + end + 2 : + begin + if ((ack == 1'b1) & (addr[1:0] != 2'b10)) + begin + temp_active = active; + temp_addr[1:0] = addr[1:0] + 2'b01 ; + temp_raygroupvalid0 = raygroupvalid0; + temp_raygroupvalid1 = raygroupvalid1; + end + else if ((ack == 1'b1) & addr[1:0] == 2'b10) + begin + if ((loaded[0]) == 1'b1 & (busy[0]) == 1'b0) + begin + temp_active = active; + temp_addr[1:0] = addr; + temp_raygroupvalid0 = 1'b1 ; + temp_raygroupvalid1 = raygroupvalid1; + end + else if ((loaded[1]) == 1'b1 & (busy[1]) == 1'b0) + begin + temp_active = active; + temp_addr[1:0] = addr; + temp_raygroupvalid0 = raygroupvalid0; + temp_raygroupvalid1 = 1'b1 ; + end + else if ((loaded[0]) == 1'b0) + begin + temp_active = 1'b0 ; + temp_addr[1:0] = 2'b00 ; + temp_raygroupvalid0 = raygroupvalid0; + temp_raygroupvalid1 = raygroupvalid1; + end + else if ((loaded[1]) == 1'b0) + begin + temp_active = 1'b1 ; + temp_addr[1:0] = 2'b00 ; + temp_raygroupvalid0 = raygroupvalid0; + temp_raygroupvalid1 = raygroupvalid1; + end + else + begin + temp_addr[1:0] = addr; + temp_active = active; + temp_raygroupvalid0 = raygroupvalid0; + temp_raygroupvalid1 = raygroupvalid1; + end + end + else begin + temp_addr[1:0] = addr; + temp_active = active; + temp_raygroupvalid0 = raygroupvalid0; + temp_raygroupvalid1 = raygroupvalid1; + end + temp_loaded = loaded; + temp_groupID = groupID; + temp_count = count; + end + 3 : + begin + if ((busy[0]) == 1'b1) + begin + temp_groupID = {groupID[1], ~groupID[0]} ; + temp_raygroupvalid0 = 1'b0 ; + temp_count = count - 1 ; + if ((loaded[1]) == 1'b1 & (busy[1]) == 1'b0) + begin + temp_raygroupvalid1 = 1'b1 ; + temp_active = active; + + end + else if ((loaded[1]) == 1'b0) + begin + temp_raygroupvalid1 = raygroupvalid1 ; + temp_active = 1'b1 ; + end + else + begin + temp_raygroupvalid1 = raygroupvalid1 ; + temp_active = 1'b0 ; + end + end + else begin + temp_active = active; + temp_raygroupvalid0 = raygroupvalid0; + temp_raygroupvalid1 = raygroupvalid1; + temp_count = count; + temp_groupID = groupID; + end + temp_loaded = {loaded[1], 1'b0} ; + temp_addr[1:0] = 2'b00 ; + end + 4 : + begin + if ((busy[1]) == 1'b1) + begin + temp_groupID = {~groupID[1], groupID[0]} ; + temp_raygroupvalid1 = 1'b0 ; + temp_count = count - 1 ; + if ((loaded[0]) == 1'b1 & (busy[0]) == 1'b0) + begin + temp_raygroupvalid0 = 1'b1 ; + temp_active = active; + end + + else if ((loaded[0]) == 1'b0) + begin + temp_raygroupvalid0 = raygroupvalid0 ; + temp_active = 1'b0 ; + end + else + begin + temp_raygroupvalid0 = raygroupvalid0; + temp_active = 1'b1 ; + end + end + else begin + temp_active = active; + temp_raygroupvalid0 = raygroupvalid0; + temp_raygroupvalid1 = raygroupvalid1; + temp_count = count; + temp_groupID = groupID; + end + temp_loaded = {1'b0, loaded[0]} ; + temp_addr[1:0] = 2'b00 ; + end + // add a default to prevent latch inference. preserve original + // design intent and hold previous state + default: begin + temp_addr[1:0] = addr; + temp_loaded = loaded; + temp_groupID = groupID; + temp_count = count; + temp_active = active; + temp_raygroupvalid0 = raygroupvalid0; + temp_raygroupvalid1 = raygroupvalid1; + end + endcase + end + + always @(*) + begin + case (state) + 0 : + begin + as = 1'b0 ; + wantDir = 1'b0 ; + statepeek = 3'b001 ; + temp_busyout = 1'b0; + temp_nas0 = 1'b0; + temp_nas1 = 1'b0; + end + 1 : + begin + as = dirReady ; + wantDir = 1'b1 ; + statepeek = 3'b010 ; + temp_busyout = 1'b1; + if (addr[1:0] == 2'b00 & dirReady == 1'b1 & active == 1'b0) + begin + temp_nas0 = 1'b1; + temp_nas1 = 1'b1; + end + else begin + temp_nas0 = 1'b0; + temp_nas1 = 1'b0; + end + end + 2 : + begin + wantDir = 1'b0 ; + as = 1'b1 ; + statepeek = 3'b011 ; + temp_busyout = 1'b1; + temp_nas0 = 1'b0; + temp_nas1 = 1'b0; + end + // Create a default to avoid latch inference + // use the pattern from other states to make + // choices about how to calculate each value. + // this preserves design intent for defined states + // while not guaranteeing identical behavior for + // undefined states. + // Note that states 3 and 4 were previously explicitly + // defined for these signals but match the defaults. + default: begin + //***NOTE: The original behavior of "wantDir" and "as" is almost + // certainly buggy, as the values are undefined for + // states 3-7 and so behavior during states 3-4 (which are + // actually used unlike states 5-7) would have + // held as = 1 and wantDir = 0 regardless of whether + // that was the desired effect or not. It seems unlikely + // that latched behavior was envisioned, as the clock + // for these latches is not well defined. We thus have + // to guess as to the desired value for these bits in + // states 3, 4, (and 5-7 for that matter). The next state + // logic bounces around, so there's not much insight + // to be gleaned from it. The safe choice appears to be + // to set them both inactive even though that definitely + // changes the behavior of the circuit by allowing as to + // clear on transitions from states 2-3 or 2-4. + wantDir = 1'b0; + as = 1'b0; + statepeek = state + 1 ; + temp_busyout = 1'b1; + temp_nas0 = 1'b0; + temp_nas1 = 1'b0; + end + endcase + end + + always @(*) + begin + case (state) + 0 : + begin + if (go == 1'b1) + begin + next_state = 1 ; + end + else + begin + next_state = 0 ; + end + end + 1 : + begin + if (dirReady == 1'b1) + begin + next_state = 2 ; + end + else + begin + next_state = 1 ; + end + end + 2 : + begin + if ((ack == 1'b1) & (addr[1:0] != 2'b10)) + begin + next_state = 1 ; + end + else if (ack == 1'b1) + begin + if ((loaded[0]) == 1'b1 & (busy[0]) == 1'b0) + begin + next_state = 3 ; + end + else if ((loaded[1]) == 1'b1 & (busy[1]) == 1'b0) + begin + next_state = 4 ; + end + else if (loaded != 2'b11) + begin + next_state = 1 ; + end + else + begin + next_state = 2 ; + end + end + else + begin + next_state = 2 ; + end + end + 3 : + begin + if ((busy[0]) == 1'b0) + begin + next_state = 3 ; + end + else if ((loaded[1]) == 1'b1 & (busy[1]) == 1'b0) + begin + next_state = 4 ; + end + else if (count > 0) + begin + next_state = 1 ; + end + else + begin + next_state = 0 ; + end + end + 4 : + begin + if ((busy[1]) == 1'b0) + begin + next_state = 4 ; + end + else if ((loaded[0]) == 1'b1 & (busy[0]) == 1'b0) + begin + next_state = 3 ; + end + else if (count > 0) + begin + + next_state = 1 ; + end + else + begin + next_state = 0 ; + end + end + // add a default to prevent latch inference + // hold previous state to preserve original design + // intent, even if this is not optimal behavior + default: + next_state = state; + endcase + end + + endmodule + + + module resultrecieve (valid01, valid10, id01a, id01b, id01c, id10a, id10b, id10c, hit01a, hit01b, hit01c, hit10a, hit10b, hit10c, u01a, u01b, u01c, v01a, v01b, v01c, u10a, u10b, u10c, v10a, v10b, v10c, rgResultData, rgResultReady, rgResultSource, globalreset, clk); + + output valid01; + reg valid01; + output valid10; + reg valid10; + output[15:0] id01a; + reg[15:0] id01a; + output[15:0] id01b; + reg[15:0] id01b; + output[15:0] id01c; + reg[15:0] id01c; + + output[15:0] id10a; + reg[15:0] id10a; + output[15:0] id10b; + reg[15:0] id10b; + output[15:0] id10c; + reg[15:0] id10c; + output hit01a; + reg hit01a; + output hit01b; + reg hit01b; + output hit01c; + reg hit01c; + + output hit10a; + reg hit10a; + output hit10b; + reg hit10b; + output hit10c; + reg hit10c; + output[7:0] u01a; + reg[7:0] u01a; + output[7:0] u01b; + reg[7:0] u01b; + output[7:0] u01c; + reg[7:0] u01c; + + output[7:0] v01a; + reg[7:0] v01a; + output[7:0] v01b; + reg[7:0] v01b; + output[7:0] v01c; + reg[7:0] v01c; + output[7:0] u10a; + reg[7:0] u10a; + output[7:0] u10b; + reg[7:0] u10b; + output[7:0] u10c; + reg[7:0] u10c; + + output[7:0] v10a; + reg[7:0] v10a; + output[7:0] v10b; + reg[7:0] v10b; + output[7:0] v10c; + reg[7:0] v10c; + input[31:0] rgResultData; + input rgResultReady; + input[1:0] rgResultSource; + input globalreset; + input clk; + + reg[2:0] state; + reg[2:0] next_state; + + always @(posedge clk) + begin + if (globalreset == 1'b1) + begin + state <= 0 ; + valid01 <= 1'b0 ; + valid10 <= 1'b0 ; + hit01a <= 1'b0 ; + hit01b <= 1'b0 ; + hit01c <= 1'b0 ; + hit10a <= 1'b0 ; + hit10b <= 1'b0 ; + hit10c <= 1'b0 ; + id01a <= 0; + + id01b <= 0; + id01c <= 0; + id10a <= 0; + id10b <= 0; + id10c <= 0; + u01a <= 0; + u01b <= 0; + u01c <= 0; + v01a <= 0; + v01b <= 0; + v01c <= 0; + u10a <= 0; + + u10b <= 0; + u10c <= 0; + v10a <= 0; + v10b <= 0; + v10c <= 0; + end + else + begin + state <= next_state ; + + if (state == 0) begin + if (rgResultReady == 1'b1 & rgResultSource == 2'b01) + begin + id01a <= rgResultData[31:16] ; + id01b <= rgResultData[15:0] ; + end + else if (rgResultReady == 1'b1 & rgResultSource == 2'b10) + begin + id10a <= rgResultData[31:16] ; + id10b <= rgResultData[15:0] ; + end + end + if (state == 1) begin + id01c <= rgResultData[15:0]; + hit01a <= rgResultData[18]; + hit01b <= rgResultData[17]; + hit01c <= rgResultData[16]; + end + if (state == 2) begin + u01a <= rgResultData[23:16]; + u01b <= rgResultData[15:8]; + u01c <= rgResultData[7:0]; + end + if (state == 5) begin + u10a <= rgResultData[23:16]; + u10b <= rgResultData[15:8]; + u10c <= rgResultData[7:0]; + end + if (state == 3) begin + v01a <= rgResultData[23:16]; + v01b <= rgResultData[15:8]; + v01c <= rgResultData[7:0]; + end + if (state == 6) begin + v10a <= rgResultData[23:16]; + v10b <= rgResultData[15:8]; + v10c <= rgResultData[7:0]; + end + if (state == 4) begin + id10c <= rgResultData[15:0] ; + hit10a <= rgResultData[18]; + hit10b <= rgResultData[17]; + hit10c <= rgResultData[16]; + end + + if (state == 3) begin + valid01 <= 1'b1; + end + else begin + valid01 <= 1'b0; + end + if (state == 6) begin + valid10 <= 1'b1; + end + else begin + valid10 <= 1'b0; + end + end + end + + + always @(*) + begin + case (state) + 0 : + begin + if (rgResultReady == 1'b1 & rgResultSource == 2'b01) + begin + next_state = 1 ; + end + else if (rgResultReady == 1'b1 & rgResultSource == 2'b10) + begin + next_state = 4 ; + end + else + begin + next_state = 0 ; + end + end + + 1 : + begin + next_state = 2 ; + end + 2 : + + begin + next_state = 3 ; + end + 3 : + begin + next_state = 0 ; + end + 4 : + begin + next_state = 5 ; + end + 5 : + + begin + next_state = 6 ; + end + 6 : + begin + next_state = 0 ; + end + default: begin + next_state = state; + end + endcase + end + endmodule + + + module resultwriter (valid01, valid10, id01a, id01b, id01c, id10a, id10b, id10c, hit01a, hit01b, hit01c, hit10a, hit10b, hit10c, u01a, u01b, u01c, v01a, v01b, v01c, u10a, u10b, u10c, v10a, v10b, v10c, addr, as01, as10, bkcolour, shadedata, triID, wantshadedata, shadedataready, texinfo, texaddr, texeladdr, texel, wanttexel, texelready, dataout, addrout, write, ack, globalreset, clk); + + input valid01; + input valid10; + input[15:0] id01a; + input[15:0] id01b; + input[15:0] id01c; + input[15:0] id10a; + input[15:0] id10b; + input[15:0] id10c; + + input hit01a; + input hit01b; + input hit01c; + input hit10a; + input hit10b; + input hit10c; + input[7:0] u01a; + input[7:0] u01b; + input[7:0] u01c; + input[7:0] v01a; + input[7:0] v01b; + input[7:0] v01c; + + input[7:0] u10a; + input[7:0] u10b; + input[7:0] u10c; + input[7:0] v10a; + input[7:0] v10b; + input[7:0] v10c; + input[17:0] addr; + input as01; + input as10; + input[20:0] bkcolour; + input[63:0] shadedata; + output[15:0] triID; + + reg[15:0] triID; + output wantshadedata; + reg wantshadedata; + input shadedataready; + input[20:0] texinfo; + output[3:0] texaddr; + wire[3:0] texaddr; + output[17:0] texeladdr; + wire[17:0] texeladdr; + input[63:0] texel; + output wanttexel; + reg wanttexel; + + input texelready; + output[63:0] dataout; + // PAJ see lower note wire[63:0] dataout; + reg[63:0] dataout; + output[17:0] addrout; + wire[17:0] addrout; + output write; + wire write; + reg temp_write; + input ack; + input globalreset; + input clk; + + reg[3:0] state; + reg[3:0] next_state; + reg pending01; + reg pending10; + reg process01; + wire[17:0] addrout01; + wire[17:0] addrout10; + wire shiften01; + wire shiften10; + reg temp_shiften01; + reg temp_shiften10; + reg[20:0] shadedataa; + reg[20:0] shadedatab; + reg[20:0] shadedatac; + wire hita; + wire hitb; + wire hitc; + + reg[2:0] selectuv; + wire[6:0] blr; + wire[6:0] blg; + wire[6:0] blb; + reg texmap; + reg lmenable; + wire[1:0] texelselect; + wire[6:0] texelr; + wire[6:0] texelg; + wire[6:0] texelb; + reg[20:0] texinfol; + + reg temp_pending01; + reg temp_pending10; + reg temp_texmap; + reg[20:0] temp_texinfol; + reg[20:0] temp_shadedataa; + reg[20:0] temp_shadedatab; + reg[20:0] temp_shadedatac; + + col16to21 col16to21inst (texel, texelselect, texelr, texelg, texelb); + linearmap linearmapinst (blb, blg, texinfol[17:0], texeladdr, texelselect, texinfol[20:18], lmenable, clk); + bilinearintrp bilinearimp (u01a, u01b, u01c, v01a, v01b, v01c, u10a, u10b, u10c, v10a, v10b, v10c, selectuv, shadedata[41:35], shadedata[62:56], shadedata[20:14], shadedata[34:28], shadedata[55:49], shadedata[13:7], shadedata[27:21], shadedata[48:42], shadedata[6:0], blr, blg, blb, clk); + fifo3 fifo3insta (addr, as01, addrout01, shiften01, globalreset, clk); + fifo3 fifo3instb (addr, as10, addrout10, shiften10, globalreset, clk); + assign hita = (hit01a & process01) | (hit10a & ~process01) ; + assign hitb = (hit01b & process01) | (hit10b & ~process01) ; + assign hitc = (hit01c & process01) | (hit10c & ~process01) ; + assign texaddr = shadedata[59:56] ; + assign shiften01 = temp_shiften01; + assign shiften10 = temp_shiften10; + assign write = temp_write; + + + always @(posedge clk) + begin + if (globalreset == 1'b1) + begin + state <= 0 ; + pending01 <= 1'b0 ; + pending10 <= 1'b0 ; + shadedataa <= 0; + shadedatab <= 0; + shadedatac <= 0; + process01 <= 1'b0 ; + texmap <= 1'b0 ; + + texinfol <= 0; + end + else + begin + state <= next_state ; + + if (state == 0) begin + process01 <= pending01; + end + + pending01 <= temp_pending01; + pending10 <= temp_pending10; + texmap <= temp_texmap; + texinfol <= temp_texinfol; + shadedataa <= temp_shadedataa; + shadedatab <= temp_shadedatab; + shadedatac <= temp_shadedatac; + + dataout <= {1'b0, shadedataa, shadedatab, shadedatac} ; + end +// end +// PAJ used to be assign, but weird error, so added as register assign dataout = {1'b0, + end + assign addrout = (process01 == 1'b1) ? addrout01 : addrout10 ; + + always @(*) + begin + case (state) + 0 : + begin + wantshadedata = 1'b0 ; + triID = 0; + selectuv = 0; + lmenable = 1'b0 ; + wanttexel = 1'b0 ; + end + 1 : + begin + wantshadedata = 1'b0 ; + triID = 0; + selectuv = 0; + lmenable = 1'b0 ; + wanttexel = 1'b0 ; + end + 2 : + begin + lmenable = 1'b0 ; + wanttexel = 1'b0 ; + wantshadedata = 1'b1 ; + selectuv[2] = ~process01 ; + selectuv[1:0] = 2'b00 ; + if (process01 == 1'b1) + begin + triID = id01a ; + + end + else + begin + triID = id10a ; + end + end + 3 : + begin + wantshadedata = 1'b0 ; + triID = 0; + lmenable = 1'b0 ; + wanttexel = 1'b0 ; + selectuv[2] = ~process01 ; + selectuv[1:0] = 2'b00 ; + end + 4 : + begin + wantshadedata = 1'b0 ; + lmenable = 1'b0 ; + wanttexel = 1'b0 ; + selectuv[2] = ~process01 ; + selectuv[1:0] = 2'b01 ; + if (process01 == 1'b1) + begin + triID = id01b ; + end + else + begin + triID = id10b ; + end + end + 5 : + begin + lmenable = 1'b0 ; + wanttexel = 1'b0 ; + wantshadedata = 1'b1 ; + selectuv[2] = ~process01 ; + selectuv[1:0] = 2'b10 ; + if (process01 == 1'b1) + begin + triID = id01c ; + end + else + begin + triID = id10c ; + end + end + 6 : + begin + wantshadedata = 1'b0 ; + triID = 0; + lmenable = 1'b0 ; + wanttexel = 1'b0 ; + selectuv[2] = ~process01 ; + selectuv[1:0] = 2'b01 ; + end + 7 : + begin + wantshadedata = 1'b0 ; + triID = 0; + lmenable = 1'b0 ; + wanttexel = 1'b0 ; + selectuv[2] = ~process01 ; + selectuv[1:0] = 2'b10 ; + end + 8 : + begin + wantshadedata = 1'b0 ; + triID = 0; + wanttexel = 1'b0 ; + selectuv[2] = ~process01 ; + selectuv[1:0] = 2'b00 ; + lmenable = 1'b1 ; + end + 9 : + begin + wantshadedata = 1'b0 ; + triID = 0; + wanttexel = 1'b0 ; + selectuv[2] = ~process01 ; + selectuv[1:0] = 2'b01 ; + lmenable = 1'b1 ; + end + 10 : + begin + wantshadedata = 1'b0 ; + triID = 0; + wanttexel = 1'b0 ; + selectuv[2] = ~process01 ; + selectuv[1:0] = 2'b10 ; + lmenable = 1'b1 ; + end + 11 : + begin + wantshadedata = 1'b0 ; + triID = 0; + selectuv = 0; + lmenable = 1'b0 ; + wanttexel = 1'b1 ; + end + 12 : + begin + wantshadedata = 1'b0 ; + triID = 0; + selectuv = 0; + lmenable = 1'b0 ; + wanttexel = 1'b1 ; + end + 13 : + begin + wantshadedata = 1'b0 ; + triID = 0; + selectuv = 0; + lmenable = 1'b0 ; + wanttexel = 1'b1 ; + end + // Default needed to prevent latch inference; set everything to zero + // for undefined state. This represents a change in design intent + // vs. original code, albeit a subtle one + default: begin + wantshadedata = 1'b0 ; + triID = 0; + selectuv = 0; + lmenable = 1'b0 ; + wanttexel = 1'b0 ; + end + endcase + end + + always @(*) + begin + case (state) + 1 : + begin + if (ack == 1'b1 & process01 == 1'b1) + begin + temp_pending01 = 1'b0 ; + temp_pending10 = pending10; + end + + else if (ack == 1'b1 & process01 == 1'b0) + begin + temp_pending10 = 1'b0 ; + temp_pending01 = pending01; + end + //add an else to hold the register value to prevent + //latch inference while preserving design intent + else begin + temp_pending01 = pending01; + temp_pending10 = pending10; + end + end + // Create a default to avoid latch inference. This has a couple of side effects: + // 1. the two unused states in the FSM will pick up this logic (subtle change + // in design intent) + // 2. We can collapse the case statement to eliminate redundancy -- most + // states calculate these values as follows: + default : + begin + if (valid01 == 1'b1) + begin + temp_pending01 = 1'b1 ; + end + //add an else to hold the register value to prevent + //latch inference while preserving design intent + else begin + temp_pending01 = pending01; + end + + if (valid10 == 1'b1) + begin + temp_pending10 = 1'b1 ; + end + //add an else to hold the register value to prevent + //latch inference while preserving design intent + else begin + temp_pending10 = pending10; + end + end + endcase + end + + always @(*) + begin + case (state) + 1 : + begin + if (process01 == 1'b1 & ack == 1'b1) + begin + temp_shiften01 = 1'b1; + temp_shiften10 = 1'b1; + end + else begin + temp_shiften01 = 1'b0; + temp_shiften10 = 1'b0; + end + temp_write = 1'b1; + end + // Create a default to avoid latch inference. This has a couple of side effects: + // 1. the two unused states in the FSM will pick up this logic (subtle change + // in design intent) + // 2. We can collapse the case statement to eliminate redundancy -- most + // states calculate these values as follows: + default: begin + temp_shiften01 = 1'b0; + temp_shiften10 = 1'b0; + temp_write = 1'b0; + end + endcase + end + + always @(*) + begin + case (state) + 2 : + begin + if (hita == 1'b1) + begin + temp_shadedataa = shadedata[20:0] ; + temp_texmap = (~shadedata[63]) & shadedata[62] ; + end + else + begin + temp_shadedataa = bkcolour ; + temp_texmap = texmap; + end + + temp_shadedatab = shadedatab; + temp_shadedatac = shadedatac; + temp_texinfol = texinfol; + + end + 3 : + begin + temp_texinfol = texinfo ; + + temp_shadedataa = shadedataa; + temp_shadedatab = shadedatab; + temp_shadedatac = shadedatac; + temp_texmap = texmap; + end + 4 : + begin + if (hitb == 1'b1) + begin + temp_shadedatab = shadedata[20:0] ; + temp_texmap = (~shadedata[63]) & shadedata[62] ; + end + else + begin + temp_shadedatab = bkcolour ; + temp_texmap = texmap; + end + temp_shadedataa = shadedataa; + temp_shadedatac = shadedatac; + temp_texinfol = texinfol; + end + 5 : + begin + if (hitc == 1'b1) + begin + temp_shadedatac = shadedata[20:0] ; + temp_texmap = (~shadedata[63]) & shadedata[62] ; + end + else + begin + temp_shadedatac = bkcolour ; + temp_texmap = texmap; + end + temp_shadedataa = shadedataa; + temp_shadedatab = shadedatab; + temp_texinfol = texinfol; + end + 6 : + begin + temp_texinfol = texinfo ; + + temp_shadedataa = shadedataa; + temp_shadedatab = shadedatab; + temp_shadedatac = shadedatac; + temp_texmap = texmap; + end + 7 : + begin + temp_texinfol = texinfo ; + + temp_shadedataa = shadedataa; + temp_shadedatab = shadedatab; + temp_shadedatac = shadedatac; + temp_texmap = texmap; + end + 8 : + begin + temp_shadedataa[6:0] = blb ; + temp_shadedataa[13:7] = blg ; + temp_shadedataa[20:14] = blr ; + + temp_shadedatab = shadedatab; + temp_shadedatac = shadedatac; + temp_texinfol = texinfol ; + temp_texmap = texmap; + end + 9 : + begin + temp_shadedatab[6:0] = blb ; + temp_shadedatab[13:7] = blg ; + temp_shadedatab[20:14] = blr ; + + temp_shadedataa = shadedataa; + temp_shadedatac = shadedatac; + temp_texinfol = texinfol ; + temp_texmap = texmap; + end + 10 : + begin + temp_shadedatac[6:0] = blb ; + temp_shadedatac[13:7] = blg ; + temp_shadedatac[20:14] = blr ; + + temp_shadedataa = shadedataa; + temp_shadedatab = shadedatab; + temp_texinfol = texinfol ; + temp_texmap = texmap; + end + 11 : + begin + temp_shadedataa[6:0] = texelb ; + temp_shadedataa[13:7] = texelg ; + temp_shadedataa[20:14] = texelr ; + + temp_shadedatab = shadedatab; + temp_shadedatac = shadedatac; + temp_texinfol = texinfol ; + temp_texmap = texmap; + end + 12 : + begin + temp_shadedatab[6:0] = texelb ; + temp_shadedatab[13:7] = texelg ; + temp_shadedatab[20:14] = texelr ; + + temp_shadedataa = shadedataa; + temp_shadedatac = shadedatac; + temp_texinfol = texinfol ; + temp_texmap = texmap; + end + 13 : + begin + temp_shadedatac[6:0] = texelb ; + temp_shadedatac[13:7] = texelg ; + temp_shadedatac[20:14] = texelr ; + + temp_shadedataa = shadedataa; + temp_shadedatab = shadedatab; + temp_texinfol = texinfol ; + temp_texmap = texmap; + end + //create a default to avoid latch inference; use to hold + //previous state and thus preserve design intent + default: begin + temp_shadedataa = shadedataa; + temp_shadedatab = shadedatab; + temp_shadedatac = shadedatac; + temp_texinfol = texinfol; + temp_texmap = texmap; + end + endcase + end + + always @(*) + begin + case (state) + 0 : + begin + if (pending01 == 1'b1 | pending10 == 1'b1) + begin + next_state = 2 ; + end + else + begin + next_state = 0 ; + end + end + 1 : + begin + if (ack == 1'b1) + begin + next_state = 0 ; + end + else + begin + next_state = 1 ; + end + end + 2 : + begin + if (shadedataready == 1'b1) + begin + if (hita == 1'b1 & ((shadedata[63]) == 1'b1 | shadedata[63:62] == 2'b01)) + begin + next_state = 3 ; + end + else + + begin + next_state = 4 ; + end + end + else + begin + next_state = 2 ; + end + end + 3 : + begin + next_state = 8 ; + end + 4 : + begin + if (shadedataready == 1'b1) + begin + if (hitb == 1'b1 & ((shadedata[63]) == 1'b1 | shadedata[63:62] == 2'b01)) + begin + next_state = 6 ; + end + else + begin + next_state = 5 ; + end + + end + else + begin + next_state = 4 ; + end + end + 5 : + begin + if (shadedataready == 1'b1) + begin + if (hitc == 1'b1 & ((shadedata[63]) == 1'b1 | shadedata[63:62] == 2'b01)) + begin + next_state = 7 ; + + end + else + begin + next_state = 1 ; + end + end + else + begin + next_state = 5 ; + end + end + 6 : + begin + next_state = 9 ; + end + 7 : + begin + next_state = 10 ; + end + 8 : + begin + if (texmap == 1'b1) + begin + next_state = 11 ; + end + else + begin + next_state = 4 ; + end + end + 9 : + begin + if (texmap == 1'b1) + begin + next_state = 12 ; + + end + else + begin + next_state = 5 ; + end + end + 10 : + begin + if (texmap == 1'b1) + begin + next_state = 13 ; + end + else + begin + next_state = 1 ; + end + end + 11 : + begin + if (texelready == 1'b1) + begin + next_state = 4 ; + end + else + begin + next_state = 11 ; + end + end + 12 : + begin + if (texelready == 1'b1) + begin + next_state = 5 ; + end + else + begin + next_state = 12 ; + end + end + 13 : + begin + if (texelready == 1'b1) + begin + next_state = 1 ; + end + else + begin + next_state = 13 ; + end + end + // create a default to avoid latch inference; preserving intent by holding + // circuit in invalid states + default: begin + next_state = state; + end + endcase + end + endmodule + ////////////////////////////////////////////////////////////////////////////////////////////// + // + // Verilog file generated by X-HDL - Revision 3.2.38 Jan. 9, 2004 + // Sun Feb 8 14:14:35 2004 + // + // Input file : G:/jamieson/VERILOG_BENCHMARKS/RAYTRACE/col16to21.vhd + // Design name : col16to21 + // Author : + // Company : + // + // Description : + // + // + ////////////////////////////////////////////////////////////////////////////////////////////// + // + module col16to21 (dataline, texelselect, r, g, b); + + input[63:0] dataline; + input[1:0] texelselect; + output[6:0] r; + wire[6:0] r; + output[6:0] g; + wire[6:0] g; + output[6:0] b; + wire[6:0] b; + + reg[15:0] col16; + + always @(*) + begin + case (texelselect) + 2'b00 : + begin + col16 = dataline[15:0] ; + end + 2'b01 : + begin + col16 = dataline[31:16] ; + end + 2'b10 : + begin + col16 = dataline[47:32] ; + end + 2'b11 : + begin + col16 = dataline[63:48] ; + end + endcase + end + assign r = {col16[15:10], 1'b0} ; + assign g = {col16[9:5], 2'b00} ; + assign b = {col16[4:0], 2'b00} ; + endmodule + module linearmap (u, v, start, addr, texelselect, factor, enable, clk); + + input[6:0] u; + input[6:0] v; + input[17:0] start; + output[17:0] addr; + reg[17:0] addr; + output[1:0] texelselect; + wire[1:0] texelselect; + + input[2:0] factor; + input enable; + input clk; + + reg[6:0] ul; + reg[6:0] vl; + + assign texelselect = ul[1:0] ; + + always @(posedge clk) + begin + if (enable == 1'b1) + begin + ul <= u ; + vl <= v ; + end + else + begin + ul <= ul ; + vl <= vl ; + end + case (factor) + 3'b000 : + begin + addr <= start + ({13'b0000000000000, ul[6:2]}) + ({11'b00000000000, vl}) ; + end + 3'b001 : + begin + addr <= start + ({13'b0000000000000, ul[6:2]}) + ({10'b0000000000, vl, 1'b0}) ; + + end + 3'b010 : + begin + addr <= start + ({13'b0000000000000, ul[6:2]}) + ({9'b000000000, vl, 2'b00}) ; + end + 3'b011 : + begin + addr <= start + ({13'b0000000000000, ul[6:2]}) + ({8'b00000000, vl, 3'b000}) ; + end + 3'b100 : + begin + addr <= start + ({13'b0000000000000, ul[6:2]}) + ({7'b0000000, vl, 4'b0000}) ; + + end + 3'b101 : + begin + addr <= start + ({13'b0000000000000, ul[6:2]}) + ({6'b000000, vl, 5'b00000}) ; + end + 3'b110 : + begin + addr <= start + ({13'b0000000000000, ul[6:2]}) + ({5'b00000, vl, 6'b000000}) ; + end + 3'b111 : + begin + addr <= start + ({13'b0000000000000, ul[6:2]}) + ({4'b0000, vl, 7'b0000000}) ; + + end + endcase + end + endmodule + module bilinearintrp (u01a, u01b, u01c, v01a, v01b, v01c, u10a, u10b, u10c, v10a, v10b, v10c, selectuv, ru, rv, rw, gu, gv, gw, bu, bv, bw, r, g, b, clk); + + input[7:0] u01a; + input[7:0] u01b; + input[7:0] u01c; + input[7:0] v01a; + input[7:0] v01b; + input[7:0] v01c; + input[7:0] u10a; + input[7:0] u10b; + input[7:0] u10c; + input[7:0] v10a; + input[7:0] v10b; + input[7:0] v10c; + input[2:0] selectuv; + input[6:0] ru; + input[6:0] rv; + input[6:0] rw; + input[6:0] gu; + input[6:0] gv; + input[6:0] gw; + input[6:0] bu; + input[6:0] bv; + input[6:0] bw; + output[6:0] r; + wire[6:0] r; + output[6:0] g; + wire[6:0] g; + output[6:0] b; + wire[6:0] b; + input clk; + + reg[7:0] u; + reg[7:0] v; + reg[7:0] ul; + reg[7:0] vl; + reg[7:0] wl; + reg[14:0] i1b; + reg[14:0] i2b; + reg[14:0] i3b; + reg[14:0] i1g; + reg[14:0] i2g; + reg[14:0] i3g; + reg[14:0] i1r; + reg[14:0] i2r; + reg[14:0] i3r; + reg[6:0] rul; + reg[6:0] rvl; + reg[6:0] rwl; + reg[6:0] gul; + reg[6:0] gvl; + reg[6:0] gwl; + reg[6:0] bul; + reg[6:0] bvl; + reg[6:0] bwl; + + always @(*) + begin + case (selectuv) + 3'b000 : + begin + u = u01a ; + v = v01a ; + end + 3'b001 : + begin + u = u01b ; + v = v01b ; + end + 3'b010 : + begin + u = u01c ; + v = v01c ; + end + 3'b100 : + begin + u = u10a ; + v = v10a ; + end + 3'b101 : + begin + u = u10b ; + v = v10b ; + end + 3'b110 : + begin + u = u10c ; + v = v10c ; + end + default : + begin + u = 0; + v = 0; + end + endcase + end + + always @(posedge clk) + begin + wl <= 8'b11111111 - u - v ; + ul <= u ; + vl <= v ; + rul <= ru ; + rvl <= rv ; + rwl <= rw ; + gul <= gu ; + gvl <= gv ; + gwl <= gw ; + bul <= bu ; + bvl <= bv ; + bwl <= bw ; + i1r <= ul * rul ; + i2r <= vl * rvl ; + i3r <= wl * rwl ; + i1g <= ul * gul ; + i2g <= vl * gvl ; + i3g <= wl * gwl ; + i1b <= ul * bul ; + i2b <= vl * bvl ; + i3b <= wl * bwl ; + end + assign r = (i1r + i2r + i3r) ; + assign g = (i1g + i2g + i3g) ; + assign b = (i1b + i2b + i3b) ; + endmodule + + + +module fifo3 (datain, writeen, dataout, shiften, globalreset, clk); + + input[18 - 1:0] datain; + input writeen; + output[18 - 1:0] dataout; + wire[18 - 1:0] dataout; + input shiften; + input globalreset; + input clk; + + reg[18 - 1:0] data0; + reg[18 - 1:0] data1; + reg[18 - 1:0] data2; + + reg[1:0] pos; + + assign dataout = data0 ; + + always @(posedge clk) + begin + if (globalreset == 1'b1) + begin + pos <= 2'b00 ; + data0 <= 0 ; + data1 <= 0 ; + data2 <= 0 ; + end + else + begin + if (writeen == 1'b1 & shiften == 1'b1) + begin + case (pos) + 2'b00 : + begin + data0 <= 0 ; + data1 <= 0 ; + data2 <= 0 ; + end + + 2'b01 : + begin + data0 <= datain ; + data1 <= 0 ; + data2 <= 0 ; + end + 2'b10 : + begin + data0 <= data1 ; + data1 <= datain ; + data2 <= 0 ; + end + + 2'b11 : + begin + data0 <= data1 ; + data1 <= data2 ; + data2 <= datain ; + end + endcase + end + else if (shiften == 1'b1) + begin + data0 <= data1 ; + data1 <= data2 ; + pos <= pos - 1 ; + end + else if (writeen == 1'b1) + begin + case (pos) + 2'b00 : + begin + data0 <= datain ; + end + 2'b01 : + begin + data1 <= datain ; + end + 2'b10 : + begin + data2 <= datain ; + end + endcase + pos <= pos + 1 ; + end + end + end + endmodule + diff --git a/vtr_flow/benchmarks/verilog/spree.v b/vtr_flow/benchmarks/verilog/spree.v index 5128317654c..b1e108c4b5d 100644 --- a/vtr_flow/benchmarks/verilog/spree.v +++ b/vtr_flow/benchmarks/verilog/spree.v @@ -1121,7 +1121,6 @@ assign ctrl_pipereg11_squashn = 1'b1; assign ctrl_pipereg12_squashn = 1'b1; assign ctrl_pipereg13_squashn = 1'b1; assign ctrl_ifetch_squashn = 1'b1; -wire ctrl_ifetch_squashn; assign squash_stage2 = ((stall_out_stage2))|~resetn; @@ -1717,9 +1716,10 @@ assign a_readdataout = a_readdataout_temp; wire wren1; assign wren1 = (c_we & (|c_reg)); -defparam regfile1_replace.ADDR_WIDTH = 5; -defparam regfile1_replace.DATA_WIDTH = 32; -single_port_ram regfile1_replace ( + +single_port_ram + # (.ADDR_WIDTH(5), .DATA_WIDTH(32)) +regfile1_replace ( .clk (clk), .we(wren1), .data(c_writedatain), @@ -1731,9 +1731,9 @@ single_port_ram regfile1_replace ( //between 2 read and 1 write //MORE MEMORY -defparam regfile2_replace.ADDR_WIDTH = 5; -defparam regfile2_replace.DATA_WIDTH = 32; -single_port_ram regfile2_replace( +single_port_ram + # (.ADDR_WIDTH(5), .DATA_WIDTH(32)) +regfile2_replace( .clk (clk), .we(wren1), .data(c_writedatain), @@ -1980,9 +1980,9 @@ assign next_pc_wire = next_pc [9:0]; wire [31:0]dummyout2; -defparam imem_replace.ADDR_WIDTH = 10; -defparam imem_replace.DATA_WIDTH = `I_DATAWIDTH; -dual_port_ram imem_replace( +dual_port_ram + # (.ADDR_WIDTH(10), .DATA_WIDTH(`I_DATAWIDTH)) +imem_replace( .clk (clk), .we1(wren1), .we2(boot_iwe), @@ -2153,9 +2153,9 @@ wire [9:0] memaddr_wrd; assign memaddr_wrd = d_address[`DM_ADDRESSWIDTH:2]; -defparam dmem_replace.ADDR_WIDTH = 10; -defparam dmem_replace.DATA_WIDTH = `DM_DATAWIDTH; -single_port_ram dmem_replace( +single_port_ram + # (.ADDR_WIDTH(10), .DATA_WIDTH(`DM_DATAWIDTH)) +dmem_replace( .clk (clk), .we(will_be_wren1), .data(d_writedatamem), @@ -2202,7 +2202,7 @@ output [31:0] d_writedataout; reg [3:0] d_byteena; reg [31:0] d_writedataout; -always @(write_data or d_address or store_size) +always @(*) begin case (store_size) 2'b11: @@ -2268,15 +2268,15 @@ input [31:0] d_readdatain; output [31:0] d_loadresult; wire d_adr_one; -assign d_adr_one = d_address [1]; reg [31:0] d_loadresult; reg sign; wire [1:0] d_address; +assign d_adr_one = d_address [1]; assign d_address [1:0] =d_readdatain [25:24]; //assume always full-word-access -always @(d_readdatain or d_address ) +always @(*) begin d_loadresult[31:0]=d_readdatain[31:0]; end @@ -2404,7 +2404,7 @@ output [31:0] result; reg [31:0] logic_result; -always@(opA or opB or op ) +always@(*) case(op) 2'b00: logic_result=opA&opB; @@ -2876,7 +2876,7 @@ output stalled; reg T,Tnext; // State machine for Stalling 1 cycle - always@(request or T) + always@(*) begin case(T) 1'b0: Tnext=request; diff --git a/vtr_flow/benchmarks/verilog/stereovision1.v b/vtr_flow/benchmarks/verilog/stereovision1.v index 5a9765831c4..0c8033af58a 100755 --- a/vtr_flow/benchmarks/verilog/stereovision1.v +++ b/vtr_flow/benchmarks/verilog/stereovision1.v @@ -2294,7 +2294,7 @@ module my_wrapper_divider(rst, clk, data_in_a, data_in_b, data_out); y <= Y; end - always @(y) + always @(*) begin case (y) S1 : @@ -2370,7 +2370,7 @@ module my_divider(clk, rst, start, LA, EB, data_in_a, data_in_b, Remainder, data reg [INPUT_WIDTH_A-1:0] DataA; reg ff0; - always @(start or y or zero) + always @(*) begin case(y) S1: @@ -2409,7 +2409,7 @@ module my_divider(clk, rst, start, LA, EB, data_in_a, data_in_b, Remainder, data y <= Y; end - always @(y or start or Cout or zero) + always @(*) begin case (y) S1: diff --git a/vtr_flow/benchmarks/verilog/stereovision3.v b/vtr_flow/benchmarks/verilog/stereovision3.v index 1b3e343a2bb..d9de7d979b8 100755 --- a/vtr_flow/benchmarks/verilog/stereovision3.v +++ b/vtr_flow/benchmarks/verilog/stereovision3.v @@ -637,7 +637,7 @@ module sv_chip3_hierarchy_no_mem (tm3_clk_v0, tm3_clk_v2, tm3_vidin_llc, tm3_vid endcase end - always @(reg_prog_state or iic_stop) + always @(*) begin case (reg_prog_state) reg_prog1 : @@ -1016,6 +1016,13 @@ module sv_chip3_hierarchy_no_mem (tm3_clk_v0, tm3_clk_v2, tm3_vidin_llc, tm3_vid iic_start = 1'b0 ; reg_prog_nextstate = reg_prog_end ; end + default: + begin + iicaddr = 8'b00000000 ; + iicdata = 8'b00000000 ; + iic_start = 1'b0 ; + reg_prog_nextstate = reg_prog_state; + end endcase end diff --git a/vtr_flow/tasks/regression_tests/vtr_reg_strong/strong_slang_parser/config/config.txt b/vtr_flow/tasks/regression_tests/vtr_reg_strong/strong_slang_parser/config/config.txt new file mode 100755 index 00000000000..90aa067671c --- /dev/null +++ b/vtr_flow/tasks/regression_tests/vtr_reg_strong/strong_slang_parser/config/config.txt @@ -0,0 +1,36 @@ +# +############################################ +# Configuration file for running experiments +############################################## + +# Path to directory of circuits to use +circuits_dir=benchmarks/verilog + +# Path to directory of architectures to use +archs_dir=arch/timing + +# Add circuits to list to sweep +# circuit_list_add=arm_core.v +circuit_list_add=boundtop_nolatches.v +circuit_list_add=ch_intrinsics_nolatches.v +circuit_list_add=diffeq1.v +circuit_list_add=diffeq2.v +# circuit_list_add=or1200.v +circuit_list_add=raygentop_nolatches.v +circuit_list_add=stereovision3.v + +# Add architectures to list to sweep +arch_list_add=k6_frac_N10_frac_chain_mem32K_40nm.xml + +# Parse info and how to parse +parse_file=vpr_fixed_chan_width.txt + +# How to parse QoR info +qor_parse_file=qor_fixed_chan_width.txt + +# Pass requirements +pass_requirements_file=pass_requirements_fixed_chan_width.txt + +#Script parameters +script_params=-track_memory_usage -crit_path_router_iterations 100 -parser slang --route_chan_width 128 + diff --git a/vtr_flow/tasks/regression_tests/vtr_reg_strong/strong_slang_parser/config/golden_results.txt b/vtr_flow/tasks/regression_tests/vtr_reg_strong/strong_slang_parser/config/golden_results.txt new file mode 100644 index 00000000000..6c83c20362f --- /dev/null +++ b/vtr_flow/tasks/regression_tests/vtr_reg_strong/strong_slang_parser/config/golden_results.txt @@ -0,0 +1,7 @@ +arch circuit script_params vtr_flow_elapsed_time vtr_max_mem_stage vtr_max_mem error odin_synth_time max_odin_mem parmys_synth_time max_parmys_mem abc_depth abc_synth_time abc_cec_time abc_sec_time max_abc_mem ace_time max_ace_mem num_clb num_io num_memories num_mult vpr_status vpr_revision vpr_build_info vpr_compiler vpr_compiled hostname rundir max_vpr_mem num_primary_inputs num_primary_outputs num_pre_packed_nets num_pre_packed_blocks num_netlist_clocks num_post_packed_nets num_post_packed_blocks device_width device_height device_grid_tiles device_limiting_resources device_name pack_mem pack_time initial_placed_wirelength_est placed_wirelength_est total_swap accepted_swap rejected_swap aborted_swap place_mem place_time place_quench_time initial_placed_CPD_est placed_CPD_est placed_setup_TNS_est placed_setup_WNS_est placed_geomean_nonvirtual_intradomain_critical_path_delay_est place_delay_matrix_lookup_time place_quench_timing_analysis_time place_quench_sta_time place_total_timing_analysis_time place_total_sta_time ap_mem ap_time ap_full_legalizer_mem ap_full_legalizer_time routed_wirelength avg_routed_wirelength routed_wiresegment avg_routed_wiresegment total_nets_routed total_connections_routed total_heap_pushes total_heap_pops logic_block_area_total logic_block_area_used routing_area_total routing_area_per_tile crit_path_route_success_iteration num_rr_graph_nodes num_rr_graph_edges collapsed_nodes critical_path_delay geomean_nonvirtual_intradomain_critical_path_delay setup_TNS setup_WNS hold_TNS hold_WNS create_rr_graph_time create_intra_cluster_rr_graph_time adding_internal_edges route_mem crit_path_route_time crit_path_total_timing_analysis_time crit_path_total_sta_time router_lookahead_mem tile_lookahead_computation_time router_lookahead_computation_time +k6_frac_N10_frac_chain_mem32K_40nm.xml boundtop_nolatches.v common 12.16 vpr 71.77 MiB -1 -1 9.32 72804 2 0.65 -1 -1 38964 -1 -1 74 148 0 0 success v8.0.0-13737-geacf45ff9 release IPO VTR_ASSERT_LEVEL=2 GNU 13.3.0 on Linux-6.14.0-28-generic x86_64 2025-08-27T14:03:13 adams /tools/vpr/vtr-verilog-to-routing-fix_benchmark_slang2/vtr-verilog-to-routing/vtr_flow/tasks/regression_tests/vtr_reg_strong/strong_slang_parser 73496 148 193 894 1035 1 471 415 13 13 169 io clb auto 32.4 MiB 0.61 4545.16 2110 122628 30635 84156 7837 71.8 MiB 0.36 0.01 2.76668 2.20243 -440.318 -2.20243 2.20243 0.00 0.00143675 0.00130367 0.116316 0.10612 -1 -1 -1 -1 3274 7.68545 1003 2.35446 788 1188 71304 17035 6.63067e+06 3.98816e+06 1.15055e+06 6807.99 13 21740 182126 -1 2.39693 2.39693 -466.942 -2.39693 0 0 0.18 -1 -1 71.8 MiB 0.07 0.183158 0.170361 71.8 MiB -1 0.05 +k6_frac_N10_frac_chain_mem32K_40nm.xml ch_intrinsics_nolatches.v common 2.07 vpr 67.96 MiB -1 -1 0.44 44256 3 0.10 -1 -1 36516 -1 -1 70 99 1 0 success v8.0.0-13737-geacf45ff9 release IPO VTR_ASSERT_LEVEL=2 GNU 13.3.0 on Linux-6.14.0-28-generic x86_64 2025-08-27T14:03:13 adams /tools/vpr/vtr-verilog-to-routing-fix_benchmark_slang2/vtr-verilog-to-routing/vtr_flow/tasks/regression_tests/vtr_reg_strong/strong_slang_parser 69592 99 130 378 508 1 259 300 12 12 144 clb auto 29.0 MiB 0.22 2009.34 955 66498 19201 40199 7098 68.0 MiB 0.15 0.00 2.09053 2.07246 -173.561 -2.07246 2.07246 0.00 0.000492596 0.000442662 0.0369652 0.0331292 -1 -1 -1 -1 1472 7.47208 481 2.44162 406 586 38945 11111 5.66058e+06 4.32058e+06 956551. 6642.71 12 18382 150503 -1 2.24159 2.24159 -185.221 -2.24159 0 0 0.30 -1 -1 68.0 MiB 0.03 0.0605201 0.0555852 68.0 MiB -1 0.05 +k6_frac_N10_frac_chain_mem32K_40nm.xml diffeq1.v common 2.85 vpr 71.33 MiB -1 -1 0.40 46492 5 0.18 -1 -1 36772 -1 -1 32 162 0 5 success v8.0.0-13737-geacf45ff9 release IPO VTR_ASSERT_LEVEL=2 GNU 13.3.0 on Linux-6.14.0-28-generic x86_64 2025-08-27T14:03:13 adams /tools/vpr/vtr-verilog-to-routing-fix_benchmark_slang2/vtr-verilog-to-routing/vtr_flow/tasks/regression_tests/vtr_reg_strong/strong_slang_parser 73040 162 96 1067 884 1 658 295 16 16 256 mult_36 auto 31.8 MiB 0.45 8451.67 5398 80737 21615 58722 400 71.3 MiB 0.38 0.01 16.9045 15.9888 -1212.72 -15.9888 15.9888 0.00 0.00127682 0.00116071 0.118486 0.107638 -1 -1 -1 -1 7949 12.1359 2178 3.32519 1966 3171 479741 132762 1.21132e+07 3.70461e+06 1.83459e+06 7166.37 18 34204 296442 -1 16.8376 16.8376 -1274.78 -16.8376 0 0 0.28 -1 -1 71.3 MiB 0.16 0.198999 0.184322 71.3 MiB -1 0.08 +k6_frac_N10_frac_chain_mem32K_40nm.xml diffeq2.v common 6.54 vpr 69.70 MiB -1 -1 0.29 45652 5 0.30 -1 -1 36184 -1 -1 22 66 0 5 success v8.0.0-13737-geacf45ff9 release IPO VTR_ASSERT_LEVEL=2 GNU 13.3.0 on Linux-6.14.0-28-generic x86_64 2025-08-27T14:03:13 adams /tools/vpr/vtr-verilog-to-routing-fix_benchmark_slang2/vtr-verilog-to-routing/vtr_flow/tasks/regression_tests/vtr_reg_strong/strong_slang_parser 71372 66 96 776 593 1 463 189 16 16 256 mult_36 auto 30.7 MiB 3.22 6883.05 3700 34335 10232 23241 862 69.7 MiB 0.20 0.00 13.161 12.037 -749.404 -12.037 12.037 0.00 0.00099543 0.000915117 0.068787 0.062813 -1 -1 -1 -1 6154 13.3783 1753 3.81087 1760 3230 532371 154722 1.21132e+07 3.16567e+06 1.83459e+06 7166.37 18 34204 296442 -1 12.4692 12.4692 -806.806 -12.4692 0 0 0.56 -1 -1 69.7 MiB 0.15 0.139145 0.129846 69.7 MiB -1 0.08 +k6_frac_N10_frac_chain_mem32K_40nm.xml raygentop_nolatches.v common 15.01 vpr 94.77 MiB -1 -1 2.43 68324 3 1.61 -1 -1 43856 -1 -1 195 239 1 9 success v8.0.0-13737-geacf45ff9 release IPO VTR_ASSERT_LEVEL=2 GNU 13.3.0 on Linux-6.14.0-28-generic x86_64 2025-08-27T14:03:13 adams /tools/vpr/vtr-verilog-to-routing-fix_benchmark_slang2/vtr-verilog-to-routing/vtr_flow/tasks/regression_tests/vtr_reg_strong/strong_slang_parser 97044 239 305 4323 4090 1 1925 749 22 22 484 mult_36 auto 55.3 MiB 5.85 38605.3 17255 289749 95156 190297 4296 94.8 MiB 1.85 0.03 7.56206 4.77084 -3745.21 -4.77084 4.77084 0.00 0.00506536 0.00443481 0.512533 0.449097 -1 -1 -1 -1 25384 13.2415 6670 3.47939 5426 15585 1202326 275109 2.50602e+07 1.46213e+07 3.67586e+06 7594.76 15 66630 606784 -1 5.05284 5.05284 -3992.33 -5.05284 0 0 0.56 -1 -1 94.8 MiB 0.52 0.862224 0.781116 94.8 MiB -1 0.16 +k6_frac_N10_frac_chain_mem32K_40nm.xml stereovision3.v common 3.12 vpr 67.77 MiB -1 -1 1.10 46092 5 0.13 -1 -1 35856 -1 -1 15 11 0 0 success v8.0.0-13737-geacf45ff9 release IPO VTR_ASSERT_LEVEL=2 GNU 13.3.0 on Linux-6.14.0-28-generic x86_64 2025-08-27T14:03:13 adams /tools/vpr/vtr-verilog-to-routing-fix_benchmark_slang2/vtr-verilog-to-routing/vtr_flow/tasks/regression_tests/vtr_reg_strong/strong_slang_parser 69396 11 2 305 285 2 86 28 7 7 49 clb auto 28.3 MiB 0.15 428.787 324 322 83 216 23 67.8 MiB 0.01 0.00 2.3241 2.37129 -160.174 -2.37129 2.1984 0.00 0.00024006 0.000179108 0.00645069 0.00585529 -1 -1 -1 -1 348 4.35000 130 1.62500 146 242 5336 1408 1.07788e+06 808410 275329. 5618.96 5 5772 40772 -1 2.56079 2.28267 -159.197 -2.56079 0 0 0.04 -1 -1 67.8 MiB 0.02 0.0222337 0.0209515 67.8 MiB -1 0.01 diff --git a/vtr_flow/tasks/regression_tests/vtr_reg_strong/task_list.txt b/vtr_flow/tasks/regression_tests/vtr_reg_strong/task_list.txt index ba2f042d930..8e39c7b2f8f 100644 --- a/vtr_flow/tasks/regression_tests/vtr_reg_strong/task_list.txt +++ b/vtr_flow/tasks/regression_tests/vtr_reg_strong/task_list.txt @@ -86,6 +86,7 @@ regression_tests/vtr_reg_strong/strong_routing_differing_modes regression_tests/vtr_reg_strong/strong_routing_modes regression_tests/vtr_reg_strong/strong_scale_delay_budgets regression_tests/vtr_reg_strong/strong_sdc +regression_tests/vtr_reg_strong/strong_slang_parser regression_tests/vtr_reg_strong/strong_soft_multipliers regression_tests/vtr_reg_strong/strong_sub_tiles regression_tests/vtr_reg_strong/strong_sub_tiles_directs @@ -120,4 +121,4 @@ regression_tests/vtr_reg_strong/strong_3d/3d_sb regression_tests/vtr_reg_strong/strong_xilinx_simple regression_tests/vtr_reg_strong/strong_xilinx_flagship regression_tests/vtr_reg_strong/strong_scatter_gather -regression_tests/vtr_reg_strong/strong_interposer \ No newline at end of file +regression_tests/vtr_reg_strong/strong_interposer