blob: e9ff98ec4a98c9dd00d041b3b17a41f6c87bd85d [file] [log] [blame]
/*
* This source file contains a Verilog description of an IP core
* automatically generated by the SPIRAL HDL Generator.
*
* This product includes a hardware design developed by Carnegie Mellon University.
*
* Copyright (c) 2005-2011 by Peter A. Milder for the SPIRAL Project,
* Carnegie Mellon University
*
* For more information, see the SPIRAL project website at:
* http://www.spiral.net
*
* This design is provided for internal, non-commercial research use only
* and is not for redistribution, with or without modifications.
*
* You may not use the name "Carnegie Mellon University" or derivations
* thereof to endorse or promote products derived from this software.
*
* THE SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY WARRANTY OF ANY KIND, EITHER
* EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO ANY WARRANTY
* THAT THE SOFTWARE WILL CONFORM TO SPECIFICATIONS OR BE ERROR-FREE AND ANY
* IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
* TITLE, OR NON-INFRINGEMENT. IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
* BE LIABLE FOR ANY DAMAGES, INCLUDING BUT NOT LIMITED TO DIRECT, INDIRECT,
* SPECIAL OR CONSEQUENTIAL DAMAGES, ARISING OUT OF, RESULTING FROM, OR IN
* ANY WAY CONNECTED WITH THIS SOFTWARE (WHETHER OR NOT BASED UPON WARRANTY,
* CONTRACT, TORT OR OTHERWISE).
*
DFT Size = 64
direction = forward
data type = 16 bit fixed point, unscaled
architecture = fully streaming
radix = 2
streaming width = 2
data ordering = natural input / natural output
BRAM budget = 1000
*/
// Input/output stream: 2 complex words per cycle
// Throughput: one transform every 32 cycles
// Latency: 332 cycles
// Resources required:
// 20 multipliers (16 x 16 bit)
// 34 adders (16 x 16 bit)
// 4 RAMs (16 words, 32 bits per word)
// 4 RAMs (8 words, 32 bits per word)
// 12 RAMs (64 words, 32 bits per word)
// 4 RAMs (32 words, 32 bits per word)
// 2 ROMs (32 words, 16 bits per word)
// 2 ROMs (8 words, 16 bits per word)
// 12 ROMs (32 words, 5 bits per word)
// 2 ROMs (16 words, 16 bits per word)
// Generated on Fri Jul 25 15:42:10 EDT 2014
// Latency: 332 clock cycles
// Throughput: 1 transform every 32 cycles
// We use an interleaved complex data format. X0 represents the
// real portion of the first input, and X1 represents the imaginary
// portion. The X variables are system inputs and the Y variables
// are system outputs.
// The design uses a system of flag signals to indicate the
// beginning of the input and output data streams. The 'next'
// input (asserted high), is used to instruct the system that the
// input stream will begin on the following cycle.
// This system has a 'gap' of 32 cycles. This means that
// 32 cycles must elapse between the beginning of the input
// vectors.
// The output signal 'next_out' (also asserted high) indicates
// that the output vector will begin streaming out of the system
// on the following cycle.
// The system has a latency of 332 cycles. This means that
// the 'next_out' will be asserted 332 cycles after the user
// asserts 'next'.
// The simple testbench below will demonstrate the timing for loading
// and unloading data vectors.
// The system reset signal is asserted high.
// Please note: when simulating floating point code, you must include
// Xilinx's DSP slice simulation module.
// module dft_testbench();
// reg clk, reset, next;
// wire next_out;
// integer i, j, k, l, m;
// reg [15:0] counter;
// reg [15:0] in [3:0];
// wire [15:0] X0;
// wire [15:0] Y0;
// wire [15:0] X1;
// wire [15:0] Y1;
// wire [15:0] X2;
// wire [15:0] Y2;
// wire [15:0] X3;
// wire [15:0] Y3;
// reg clrCnt;
// assign X0 = in[0];
// assign X1 = in[1];
// assign X2 = in[2];
// assign X3 = in[3];
// initial clk = 0;
// always #10000 clk = ~clk;
// // Instantiate top-level module of core 'X' signals are system inputs
// // and 'Y' signals are system outputs
// dft_top dft_top_instance (.clk(clk), .reset(reset), .next(next), .next_out(next_out),
// .X0(X0), .Y0(Y0),
// .X1(X1), .Y1(Y1),
// .X2(X2), .Y2(Y2),
// .X3(X3), .Y3(Y3));
// // You can use this counter to verify that the gap and latency are as expected.
// always @(posedge clk) begin
// if (clrCnt) counter <= 0;
// else counter <= counter+1;
// end
// initial begin
// @(posedge clk);
// @(posedge clk);
// // On the next cycle, begin loading input vector.
// next <= 1;
// clrCnt <= 1;
// @(posedge clk);
// clrCnt <= 0;
// next <= 0;
// // The 64 complex data points enter the system over 32 cycles
// for (j=0; j < 31; j = j+1) begin
// // Input: 2 complex words per cycle
// for (k=0; k < 4; k = k+1) begin
// in[k] <= j*4 + k;
// end
// @(posedge clk);
// end
// j = 31;
// for (k=0; k < 4; k = k+1) begin
// in[k] <= j*4 + k;
// end
// @(posedge clk);
// // Wait until the next data vector can be entered
// while (counter < 30)
// @(posedge clk);
// // On the next cycle, we will start the next data vector
// next <= 1;
// clrCnt <= 1;
// @(posedge clk);
// clrCnt <= 0;
// next <= 0;
// // Start entering next input vector
// for (j=0; j < 31; j = j+1) begin
// // Input 4 words per cycle
// for (k=0; k < 4; k = k+1) begin
// in[k] <= 128 + j*4 + k;
// end
// @(posedge clk);
// end
// j = 31;
// for (k=0; k < 4; k = k+1) begin
// in[k] <= 128 + j*4 + k;
// end
// end
// initial begin
// // set initial values
// in[0] <= 0;
// in[1] <= 0;
// in[2] <= 0;
// in[3] <= 0;
// next <= 0;
// reset <= 0;
// @(posedge clk);
// reset <= 1;
// @(posedge clk);
// reset <= 0;
// @(posedge clk);
// @(posedge clk);
// // Wait until next_out goes high, then wait one clock cycle and begin receiving data
// @(posedge next_out);
// @(posedge clk); #1;
// $display("--- begin output 1---");
// for (m=0; m < 31; m=m+1) begin
// $display("%x", Y0);
// $display("%x", Y1);
// $display("%x", Y2);
// $display("%x", Y3);
// @(posedge clk); #1;
// end
// $display("%x", Y0);
// $display("%x", Y1);
// $display("%x", Y2);
// $display("%x", Y3);
// // Wait until next_out goes high, then wait one clock cycle and begin receiving data
// @(posedge next_out);
// @(posedge clk); #1;
// $display("--- begin output 2---");
// for (m=0; m < 31; m=m+1) begin
// $display("%x", Y0);
// $display("%x", Y1);
// $display("%x", Y2);
// $display("%x", Y3);
// @(posedge clk); #1;
// end
// $display("%x", Y0);
// $display("%x", Y1);
// $display("%x", Y2);
// $display("%x", Y3);
// $finish;
// end
// endmodule
// Latency: 332
// Gap: 32
// module_name_is:dft_top
module dft_top(clk, reset, next, next_out,
X0, Y0,
X1, Y1,
X2, Y2,
X3, Y3);
output next_out;
input clk, reset, next;
input [15:0] X0,
X1,
X2,
X3;
output [15:0] Y0,
Y1,
Y2,
Y3;
wire [15:0] t0_0;
wire [15:0] t0_1;
wire [15:0] t0_2;
wire [15:0] t0_3;
wire next_0;
wire [15:0] t1_0;
wire [15:0] t1_1;
wire [15:0] t1_2;
wire [15:0] t1_3;
wire next_1;
wire [15:0] t2_0;
wire [15:0] t2_1;
wire [15:0] t2_2;
wire [15:0] t2_3;
wire next_2;
wire [15:0] t3_0;
wire [15:0] t3_1;
wire [15:0] t3_2;
wire [15:0] t3_3;
wire next_3;
wire [15:0] t4_0;
wire [15:0] t4_1;
wire [15:0] t4_2;
wire [15:0] t4_3;
wire next_4;
wire [15:0] t5_0;
wire [15:0] t5_1;
wire [15:0] t5_2;
wire [15:0] t5_3;
wire next_5;
wire [15:0] t6_0;
wire [15:0] t6_1;
wire [15:0] t6_2;
wire [15:0] t6_3;
wire next_6;
wire [15:0] t7_0;
wire [15:0] t7_1;
wire [15:0] t7_2;
wire [15:0] t7_3;
wire next_7;
wire [15:0] t8_0;
wire [15:0] t8_1;
wire [15:0] t8_2;
wire [15:0] t8_3;
wire next_8;
wire [15:0] t9_0;
wire [15:0] t9_1;
wire [15:0] t9_2;
wire [15:0] t9_3;
wire next_9;
wire [15:0] t10_0;
wire [15:0] t10_1;
wire [15:0] t10_2;
wire [15:0] t10_3;
wire next_10;
wire [15:0] t11_0;
wire [15:0] t11_1;
wire [15:0] t11_2;
wire [15:0] t11_3;
wire next_11;
wire [15:0] t12_0;
wire [15:0] t12_1;
wire [15:0] t12_2;
wire [15:0] t12_3;
wire next_12;
wire [15:0] t13_0;
wire [15:0] t13_1;
wire [15:0] t13_2;
wire [15:0] t13_3;
wire next_13;
wire [15:0] t14_0;
wire [15:0] t14_1;
wire [15:0] t14_2;
wire [15:0] t14_3;
wire next_14;
wire [15:0] t15_0;
wire [15:0] t15_1;
wire [15:0] t15_2;
wire [15:0] t15_3;
wire next_15;
wire [15:0] t16_0;
wire [15:0] t16_1;
wire [15:0] t16_2;
wire [15:0] t16_3;
wire next_16;
wire [15:0] t17_0;
wire [15:0] t17_1;
wire [15:0] t17_2;
wire [15:0] t17_3;
wire next_17;
wire [15:0] t18_0;
wire [15:0] t18_1;
wire [15:0] t18_2;
wire [15:0] t18_3;
wire next_18;
assign t0_0 = X0;
assign Y0 = t18_0;
assign t0_1 = X1;
assign Y1 = t18_1;
assign t0_2 = X2;
assign Y2 = t18_2;
assign t0_3 = X3;
assign Y3 = t18_3;
assign next_0 = next;
assign next_out = next_18;
// latency=68, gap=32
rc30655 stage0(.clk(clk), .reset(reset), .next(next_0), .next_out(next_1),
.X0(t0_0), .Y0(t1_0),
.X1(t0_1), .Y1(t1_1),
.X2(t0_2), .Y2(t1_2),
.X3(t0_3), .Y3(t1_3));
// latency=2, gap=32
codeBlock30657 stage1(.clk(clk), .reset(reset), .next_in(next_1), .next_out(next_2),
.X0_in(t1_0), .Y0(t2_0),
.X1_in(t1_1), .Y1(t2_1),
.X2_in(t1_2), .Y2(t2_2),
.X3_in(t1_3), .Y3(t2_3));
// latency=8, gap=32
rc30737 stage2(.clk(clk), .reset(reset), .next(next_2), .next_out(next_3),
.X0(t2_0), .Y0(t3_0),
.X1(t2_1), .Y1(t3_1),
.X2(t2_2), .Y2(t3_2),
.X3(t2_3), .Y3(t3_3));
// latency=8, gap=32
DirSum_30916 stage3(.next(next_3), .clk(clk), .reset(reset), .next_out(next_4),
.X0(t3_0), .Y0(t4_0),
.X1(t3_1), .Y1(t4_1),
.X2(t3_2), .Y2(t4_2),
.X3(t3_3), .Y3(t4_3));
// latency=2, gap=32
codeBlock30919 stage4(.clk(clk), .reset(reset), .next_in(next_4), .next_out(next_5),
.X0_in(t4_0), .Y0(t5_0),
.X1_in(t4_1), .Y1(t5_1),
.X2_in(t4_2), .Y2(t5_2),
.X3_in(t4_3), .Y3(t5_3));
// latency=12, gap=32
rc30999 stage5(.clk(clk), .reset(reset), .next(next_5), .next_out(next_6),
.X0(t5_0), .Y0(t6_0),
.X1(t5_1), .Y1(t6_1),
.X2(t5_2), .Y2(t6_2),
.X3(t5_3), .Y3(t6_3));
// latency=8, gap=32
DirSum_31186 stage6(.next(next_6), .clk(clk), .reset(reset), .next_out(next_7),
.X0(t6_0), .Y0(t7_0),
.X1(t6_1), .Y1(t7_1),
.X2(t6_2), .Y2(t7_2),
.X3(t6_3), .Y3(t7_3));
// latency=2, gap=32
codeBlock31189 stage7(.clk(clk), .reset(reset), .next_in(next_7), .next_out(next_8),
.X0_in(t7_0), .Y0(t8_0),
.X1_in(t7_1), .Y1(t8_1),
.X2_in(t7_2), .Y2(t8_2),
.X3_in(t7_3), .Y3(t8_3));
// latency=20, gap=32
rc31269 stage8(.clk(clk), .reset(reset), .next(next_8), .next_out(next_9),
.X0(t8_0), .Y0(t9_0),
.X1(t8_1), .Y1(t9_1),
.X2(t8_2), .Y2(t9_2),
.X3(t8_3), .Y3(t9_3));
// latency=8, gap=32
DirSum_31472 stage9(.next(next_9), .clk(clk), .reset(reset), .next_out(next_10),
.X0(t9_0), .Y0(t10_0),
.X1(t9_1), .Y1(t10_1),
.X2(t9_2), .Y2(t10_2),
.X3(t9_3), .Y3(t10_3));
// latency=2, gap=32
codeBlock31475 stage10(.clk(clk), .reset(reset), .next_in(next_10), .next_out(next_11),
.X0_in(t10_0), .Y0(t11_0),
.X1_in(t10_1), .Y1(t11_1),
.X2_in(t10_2), .Y2(t11_2),
.X3_in(t10_3), .Y3(t11_3));
// latency=36, gap=32
rc31555 stage11(.clk(clk), .reset(reset), .next(next_11), .next_out(next_12),
.X0(t11_0), .Y0(t12_0),
.X1(t11_1), .Y1(t12_1),
.X2(t11_2), .Y2(t12_2),
.X3(t11_3), .Y3(t12_3));
// latency=8, gap=32
DirSum_31790 stage12(.next(next_12), .clk(clk), .reset(reset), .next_out(next_13),
.X0(t12_0), .Y0(t13_0),
.X1(t12_1), .Y1(t13_1),
.X2(t12_2), .Y2(t13_2),
.X3(t12_3), .Y3(t13_3));
// latency=2, gap=32
codeBlock31793 stage13(.clk(clk), .reset(reset), .next_in(next_13), .next_out(next_14),
.X0_in(t13_0), .Y0(t14_0),
.X1_in(t13_1), .Y1(t14_1),
.X2_in(t13_2), .Y2(t14_2),
.X3_in(t13_3), .Y3(t14_3));
// latency=68, gap=32
rc31873 stage14(.clk(clk), .reset(reset), .next(next_14), .next_out(next_15),
.X0(t14_0), .Y0(t15_0),
.X1(t14_1), .Y1(t15_1),
.X2(t14_2), .Y2(t15_2),
.X3(t14_3), .Y3(t15_3));
// latency=8, gap=32
DirSum_32171 stage15(.next(next_15), .clk(clk), .reset(reset), .next_out(next_16),
.X0(t15_0), .Y0(t16_0),
.X1(t15_1), .Y1(t16_1),
.X2(t15_2), .Y2(t16_2),
.X3(t15_3), .Y3(t16_3));
// latency=2, gap=32
codeBlock32174 stage16(.clk(clk), .reset(reset), .next_in(next_16), .next_out(next_17),
.X0_in(t16_0), .Y0(t17_0),
.X1_in(t16_1), .Y1(t17_1),
.X2_in(t16_2), .Y2(t17_2),
.X3_in(t16_3), .Y3(t17_3));
// latency=68, gap=32
rc32254 stage17(.clk(clk), .reset(reset), .next(next_17), .next_out(next_18),
.X0(t17_0), .Y0(t18_0),
.X1(t17_1), .Y1(t18_1),
.X2(t17_2), .Y2(t18_2),
.X3(t17_3), .Y3(t18_3));
endmodule
// Latency: 68
// Gap: 32
module rc30655(clk, reset, next, next_out,
X0, Y0,
X1, Y1,
X2, Y2,
X3, Y3);
output next_out;
input clk, reset, next;
input [15:0] X0,
X1,
X2,
X3;
output [15:0] Y0,
Y1,
Y2,
Y3;
wire [31:0] t0;
wire [31:0] s0;
assign t0 = {X0, X1};
wire [31:0] t1;
wire [31:0] s1;
assign t1 = {X2, X3};
assign Y0 = s0[31:16];
assign Y1 = s0[15:0];
assign Y2 = s1[31:16];
assign Y3 = s1[15:0];
perm30653 instPerm33199(.x0(t0), .y0(s0),
.x1(t1), .y1(s1),
.clk(clk), .next(next), .next_out(next_out), .reset(reset)
);
endmodule
module swNet30653(itr, clk, ct
, x0, y0
, x1, y1
);
parameter width = 32;
input [4:0] ct;
input clk;
input [0:0] itr;
input [width-1:0] x0;
output [width-1:0] y0;
reg [width-1:0] y0;
input [width-1:0] x1;
output [width-1:0] y1;
reg [width-1:0] y1;
wire [width-1:0] t0_0, t0_1;
reg [width-1:0] t1_0, t1_1;
reg [0:0] control;
always @(posedge clk) begin
case(ct)
5'd0: control <= 1'b1;
5'd1: control <= 1'b1;
5'd2: control <= 1'b1;
5'd3: control <= 1'b1;
5'd4: control <= 1'b1;
5'd5: control <= 1'b1;
5'd6: control <= 1'b1;
5'd7: control <= 1'b1;
5'd8: control <= 1'b1;
5'd9: control <= 1'b1;
5'd10: control <= 1'b1;
5'd11: control <= 1'b1;
5'd12: control <= 1'b1;
5'd13: control <= 1'b1;
5'd14: control <= 1'b1;
5'd15: control <= 1'b1;
5'd16: control <= 1'b0;
5'd17: control <= 1'b0;
5'd18: control <= 1'b0;
5'd19: control <= 1'b0;
5'd20: control <= 1'b0;
5'd21: control <= 1'b0;
5'd22: control <= 1'b0;
5'd23: control <= 1'b0;
5'd24: control <= 1'b0;
5'd25: control <= 1'b0;
5'd26: control <= 1'b0;
5'd27: control <= 1'b0;
5'd28: control <= 1'b0;
5'd29: control <= 1'b0;
5'd30: control <= 1'b0;
5'd31: control <= 1'b0;
endcase
end
// synthesis attribute rom_style of control is "distributed"
reg [0:0] control0;
always @(posedge clk) begin
control0 <= control;
end
assign t0_0 = x0;
assign t0_1 = x1;
always @(posedge clk) begin
t1_0 <= (control0[0] == 0) ? t0_0 : t0_1;
t1_1 <= (control0[0] == 0) ? t0_1 : t0_0;
end
always @(posedge clk) begin
y0 <= t1_0;
y1 <= t1_1;
end
endmodule
// Latency: 68
// Gap: 32
module perm30653(clk, next, reset, next_out,
x0, y0,
x1, y1);
parameter width = 32;
parameter depth = 32;
parameter depthX2 = 64;
parameter addrbits = 5;
parameter addrbitsplusone = 6;
parameter muxbits = 1;
input [width-1:0] x0;
output [width-1:0] y0;
wire [width-1:0] t0;
wire [width-1:0] s0;
input [width-1:0] x1;
output [width-1:0] y1;
wire [width-1:0] t1;
wire [width-1:0] s1;
input next, reset, clk;
output next_out;
reg [addrbits-1:0] s1rdloc, s2rdloc;
reg [addrbits-1:0] s1wr0;
reg [addrbits-1:0] s1rd0, s2wr0, s2rd0;
reg [addrbits-1:0] s1rd1, s2wr1, s2rd1;
reg s1wr_en, state1, state2, state3;
wire next2, next3, next4;
reg inFlip0, outFlip0_z, outFlip1;
wire inFlip1, outFlip0;
wire [0:0] tm0;
assign tm0 = 0;
shiftRegFIFO shiftFIFO_33204(.X(outFlip0), .Y(inFlip1), .clk(clk));
defparam shiftFIFO_33204.depth = 3;
defparam shiftFIFO_33204.width = 1;
shiftRegFIFO shiftFIFO_33205(.X(outFlip0_z), .Y(outFlip0), .clk(clk));
defparam shiftFIFO_33205.depth = 1;
defparam shiftFIFO_33205.width = 1;
// shiftRegFIFO inFlip1Reg(outFlip0, inFlip1,
// defparam shiftRegFIFO.depth = 2;
// wi shiftRegFIFO.dth = 1;
// shiftRegFIFO outFlip0Reg(outFlip0_z, outFlip0,
// defparam shiftRegFIFO.depth = 1;
// wi shiftRegFIFO.dth = 1;
memMod_dist s1mem0(x0, t0, {inFlip0, s1wr0}, {outFlip0, s1rd0}, s1wr_en, clk);
defparam s1mem0.depth = 46;
defparam s1mem0.width = 32;
defparam s1mem0.logDepth = 6;
memMod_dist s1mem1(x1, t1, {inFlip0, s1wr0}, {outFlip0, s1rd1}, s1wr_en, clk);
defparam s1mem1.depth = 46;
defparam s1mem1.width = 32;
defparam s1mem1.logDepth = 6;
nextReg nextReg_33216(.X(next), .Y(next2), .reset(reset), .clk(clk));
defparam nextReg_33216.depth = 31;
defparam nextReg_33216.logDepth = 5;
shiftRegFIFO shiftFIFO_33217(.X(next2), .Y(next3), .clk(clk));
defparam shiftFIFO_33217.depth = 4;
defparam shiftFIFO_33217.width = 1;
nextReg nextReg_33220(.X(next3), .Y(next4), .reset(reset), .clk(clk));
defparam nextReg_33220.depth = 32;
defparam nextReg_33220.logDepth = 5;
shiftRegFIFO shiftFIFO_33221(.X(next4), .Y(next_out), .clk(clk));
defparam shiftFIFO_33221.depth = 1;
defparam shiftFIFO_33221.width = 1;
shiftRegFIFO shiftFIFO_33224(.X(tm0), .Y(tm0_d), .clk(clk));
defparam shiftFIFO_33224.depth = 31;
defparam shiftFIFO_33224.width = 1;
shiftRegFIFO shiftFIFO_33227(.X(tm0_d), .Y(tm0_dd), .clk(clk));
defparam shiftFIFO_33227.depth = 3;
defparam shiftFIFO_33227.width = 1;
// // shiftRegFIFO1) n1(next, next2,
// defparam shiftRegFIFO1.depth = dept;
// wi shiftRegFIFO1.dth = 1;,
// // shiftRegFIFO n2(next2, next3,
// defparam shiftRegFIFO.depth = 3;
// wi shiftRegFIFO.dth = 1;
// // shiftRegFIFO n3(next3, next4,
// defparam shiftRegFIFO.depth = depth;
// wi shiftRegFIFO.dth = 1;
// // shiftRegFIFO n4(next4, next_out,
// defparam shiftRegFIFO.depth = 1;
// wi shiftRegFIFO.dth = 1;
wire [addrbits-1:0] muxCycle, writeCycle;
assign muxCycle = s1rdloc;
shiftRegFIFO shiftFIFO_33232(.X(muxCycle), .Y(writeCycle), .clk(clk));
defparam shiftFIFO_33232.depth = 3;
defparam shiftFIFO_33232.width = 5;
wire readInt, s2wr_en;
assign readInt = (state2 == 1);
shiftRegFIFO writeIntReg(readInt, s2wr_en, clk);
defparam writeIntReg.depth = 4;
defparam writeIntReg.width = 1;
memMod_dist s2mem0(s0, y0, {inFlip1, s2wr0}, {outFlip1, s2rdloc}, s2wr_en, clk);
defparam s2mem0.depth = 46;
defparam s2mem0.width = 32;
defparam s2mem0.logDepth = 6;
memMod_dist s2mem1(s1, y1, {inFlip1, s2wr1}, {outFlip1, s2rdloc}, s2wr_en, clk);
defparam s2mem1.depth = 46;
defparam s2mem1.width = 32;
defparam s2mem1.logDepth = 6;
always @(posedge clk) begin
if (reset == 1) begin
state1 <= 0;
inFlip0 <= 0;
end
else if (next == 1) begin
s1wr0 <= 0;
state1 <= 1;
s1wr_en <= 1;
inFlip0 <= (s1wr0 == depth-1) ? ~inFlip0 : inFlip0;
end
else begin
case(state1)
0: begin
s1wr0 <= 0;
state1 <= 0;
s1wr_en <= 0;
inFlip0 <= inFlip0;
end
1: begin
s1wr0 <= (s1wr0 == depth-1) ? 0 : s1wr0 + 1;
state1 <= 1;
s1wr_en <= 1;
inFlip0 <= (s1wr0 == depth-1) ? ~inFlip0 : inFlip0;
end
endcase
end
end
always @(posedge clk) begin
if (reset == 1) begin
state2 <= 0;
outFlip0_z <= 0;
end
else if (next2 == 1) begin
s1rdloc <= 0;
state2 <= 1;
outFlip0_z <= (s1rdloc == depth-1) ? ~outFlip0_z : outFlip0_z;
end
else begin
case(state2)
0: begin
s1rdloc <= 0;
state2 <= 0;
outFlip0_z <= outFlip0_z;
end
1: begin
s1rdloc <= (s1rdloc == depth-1) ? 0 : s1rdloc + 1;
state2 <= 1;
outFlip0_z <= (s1rdloc == depth-1) ? ~outFlip0_z : outFlip0_z;
end
endcase
end
end
always @(posedge clk) begin
if (reset == 1) begin
state3 <= 0;
outFlip1 <= 0;
end
else if (next4 == 1) begin
s2rdloc <= 0;
state3 <= 1;
outFlip1 <= (s2rdloc == depth-1) ? ~outFlip1 : outFlip1;
end
else begin
case(state3)
0: begin
s2rdloc <= 0;
state3 <= 0;
outFlip1 <= outFlip1;
end
1: begin
s2rdloc <= (s2rdloc == depth-1) ? 0 : s2rdloc + 1;
state3 <= 1;
outFlip1 <= (s2rdloc == depth-1) ? ~outFlip1 : outFlip1;
end
endcase
end
end
always @(posedge clk) begin
case({tm0_d, s1rdloc})
{1'd0, 5'd0}: s1rd0 <= 16;
{1'd0, 5'd1}: s1rd0 <= 24;
{1'd0, 5'd2}: s1rd0 <= 20;
{1'd0, 5'd3}: s1rd0 <= 28;
{1'd0, 5'd4}: s1rd0 <= 18;
{1'd0, 5'd5}: s1rd0 <= 26;
{1'd0, 5'd6}: s1rd0 <= 22;
{1'd0, 5'd7}: s1rd0 <= 30;
{1'd0, 5'd8}: s1rd0 <= 17;
{1'd0, 5'd9}: s1rd0 <= 25;
{1'd0, 5'd10}: s1rd0 <= 21;
{1'd0, 5'd11}: s1rd0 <= 29;
{1'd0, 5'd12}: s1rd0 <= 19;
{1'd0, 5'd13}: s1rd0 <= 27;
{1'd0, 5'd14}: s1rd0 <= 23;
{1'd0, 5'd15}: s1rd0 <= 31;
{1'd0, 5'd16}: s1rd0 <= 0;
{1'd0, 5'd17}: s1rd0 <= 8;
{1'd0, 5'd18}: s1rd0 <= 4;
{1'd0, 5'd19}: s1rd0 <= 12;
{1'd0, 5'd20}: s1rd0 <= 2;
{1'd0, 5'd21}: s1rd0 <= 10;
{1'd0, 5'd22}: s1rd0 <= 6;
{1'd0, 5'd23}: s1rd0 <= 14;
{1'd0, 5'd24}: s1rd0 <= 1;
{1'd0, 5'd25}: s1rd0 <= 9;
{1'd0, 5'd26}: s1rd0 <= 5;
{1'd0, 5'd27}: s1rd0 <= 13;
{1'd0, 5'd28}: s1rd0 <= 3;
{1'd0, 5'd29}: s1rd0 <= 11;
{1'd0, 5'd30}: s1rd0 <= 7;
{1'd0, 5'd31}: s1rd0 <= 15;
endcase
end
// synthesis attribute rom_style of s1rd0 is "block"
always @(posedge clk) begin
case({tm0_d, s1rdloc})
{1'd0, 5'd0}: s1rd1 <= 0;
{1'd0, 5'd1}: s1rd1 <= 8;
{1'd0, 5'd2}: s1rd1 <= 4;
{1'd0, 5'd3}: s1rd1 <= 12;
{1'd0, 5'd4}: s1rd1 <= 2;
{1'd0, 5'd5}: s1rd1 <= 10;
{1'd0, 5'd6}: s1rd1 <= 6;
{1'd0, 5'd7}: s1rd1 <= 14;
{1'd0, 5'd8}: s1rd1 <= 1;
{1'd0, 5'd9}: s1rd1 <= 9;
{1'd0, 5'd10}: s1rd1 <= 5;
{1'd0, 5'd11}: s1rd1 <= 13;
{1'd0, 5'd12}: s1rd1 <= 3;
{1'd0, 5'd13}: s1rd1 <= 11;
{1'd0, 5'd14}: s1rd1 <= 7;
{1'd0, 5'd15}: s1rd1 <= 15;
{1'd0, 5'd16}: s1rd1 <= 16;
{1'd0, 5'd17}: s1rd1 <= 24;
{1'd0, 5'd18}: s1rd1 <= 20;
{1'd0, 5'd19}: s1rd1 <= 28;
{1'd0, 5'd20}: s1rd1 <= 18;
{1'd0, 5'd21}: s1rd1 <= 26;
{1'd0, 5'd22}: s1rd1 <= 22;
{1'd0, 5'd23}: s1rd1 <= 30;
{1'd0, 5'd24}: s1rd1 <= 17;
{1'd0, 5'd25}: s1rd1 <= 25;
{1'd0, 5'd26}: s1rd1 <= 21;
{1'd0, 5'd27}: s1rd1 <= 29;
{1'd0, 5'd28}: s1rd1 <= 19;
{1'd0, 5'd29}: s1rd1 <= 27;
{1'd0, 5'd30}: s1rd1 <= 23;
{1'd0, 5'd31}: s1rd1 <= 31;
endcase
end
// synthesis attribute rom_style of s1rd1 is "block"
swNet30653 sw(tm0_d, clk, muxCycle, t0, s0, t1, s1);
always @(posedge clk) begin
case({tm0_dd, writeCycle})
{1'd0, 5'd0}: s2wr0 <= 16;
{1'd0, 5'd1}: s2wr0 <= 17;
{1'd0, 5'd2}: s2wr0 <= 18;
{1'd0, 5'd3}: s2wr0 <= 19;
{1'd0, 5'd4}: s2wr0 <= 20;
{1'd0, 5'd5}: s2wr0 <= 21;
{1'd0, 5'd6}: s2wr0 <= 22;
{1'd0, 5'd7}: s2wr0 <= 23;
{1'd0, 5'd8}: s2wr0 <= 24;
{1'd0, 5'd9}: s2wr0 <= 25;
{1'd0, 5'd10}: s2wr0 <= 26;
{1'd0, 5'd11}: s2wr0 <= 27;
{1'd0, 5'd12}: s2wr0 <= 28;
{1'd0, 5'd13}: s2wr0 <= 29;
{1'd0, 5'd14}: s2wr0 <= 30;
{1'd0, 5'd15}: s2wr0 <= 31;
{1'd0, 5'd16}: s2wr0 <= 0;
{1'd0, 5'd17}: s2wr0 <= 1;
{1'd0, 5'd18}: s2wr0 <= 2;
{1'd0, 5'd19}: s2wr0 <= 3;
{1'd0, 5'd20}: s2wr0 <= 4;
{1'd0, 5'd21}: s2wr0 <= 5;
{1'd0, 5'd22}: s2wr0 <= 6;
{1'd0, 5'd23}: s2wr0 <= 7;
{1'd0, 5'd24}: s2wr0 <= 8;
{1'd0, 5'd25}: s2wr0 <= 9;
{1'd0, 5'd26}: s2wr0 <= 10;
{1'd0, 5'd27}: s2wr0 <= 11;
{1'd0, 5'd28}: s2wr0 <= 12;
{1'd0, 5'd29}: s2wr0 <= 13;
{1'd0, 5'd30}: s2wr0 <= 14;
{1'd0, 5'd31}: s2wr0 <= 15;
endcase // case(writeCycle)
end // always @ (posedge clk)
// synthesis attribute rom_style of s2wr0 is "block"
always @(posedge clk) begin
case({tm0_dd, writeCycle})
{1'd0, 5'd0}: s2wr1 <= 0;
{1'd0, 5'd1}: s2wr1 <= 1;
{1'd0, 5'd2}: s2wr1 <= 2;
{1'd0, 5'd3}: s2wr1 <= 3;
{1'd0, 5'd4}: s2wr1 <= 4;
{1'd0, 5'd5}: s2wr1 <= 5;
{1'd0, 5'd6}: s2wr1 <= 6;
{1'd0, 5'd7}: s2wr1 <= 7;
{1'd0, 5'd8}: s2wr1 <= 8;
{1'd0, 5'd9}: s2wr1 <= 9;
{1'd0, 5'd10}: s2wr1 <= 10;
{1'd0, 5'd11}: s2wr1 <= 11;
{1'd0, 5'd12}: s2wr1 <= 12;
{1'd0, 5'd13}: s2wr1 <= 13;
{1'd0, 5'd14}: s2wr1 <= 14;
{1'd0, 5'd15}: s2wr1 <= 15;
{1'd0, 5'd16}: s2wr1 <= 16;
{1'd0, 5'd17}: s2wr1 <= 17;
{1'd0, 5'd18}: s2wr1 <= 18;
{1'd0, 5'd19}: s2wr1 <= 19;
{1'd0, 5'd20}: s2wr1 <= 20;
{1'd0, 5'd21}: s2wr1 <= 21;
{1'd0, 5'd22}: s2wr1 <= 22;
{1'd0, 5'd23}: s2wr1 <= 23;
{1'd0, 5'd24}: s2wr1 <= 24;
{1'd0, 5'd25}: s2wr1 <= 25;
{1'd0, 5'd26}: s2wr1 <= 26;
{1'd0, 5'd27}: s2wr1 <= 27;
{1'd0, 5'd28}: s2wr1 <= 28;
{1'd0, 5'd29}: s2wr1 <= 29;
{1'd0, 5'd30}: s2wr1 <= 30;
{1'd0, 5'd31}: s2wr1 <= 31;
endcase // case(writeCycle)
end // always @ (posedge clk)
// synthesis attribute rom_style of s2wr1 is "block"
endmodule
module memMod(in, out, inAddr, outAddr, writeSel, clk);
parameter depth=1024, width=16, logDepth=10;
input [width-1:0] in;
input [logDepth-1:0] inAddr, outAddr;
input writeSel, clk;
output [width-1:0] out;
reg [width-1:0] out;
// synthesis attribute ram_style of mem is block
reg [width-1:0] mem[depth-1:0];
always @(posedge clk) begin
out <= mem[outAddr];
if (writeSel)
mem[inAddr] <= in;
end
endmodule
module memMod_dist(in, out, inAddr, outAddr, writeSel, clk);
parameter depth=1024;
parameter width=16;
parameter logDepth=10;
input [width-1:0] in;
input [logDepth-1:0] inAddr, outAddr;
input writeSel, clk;
output [width-1:0] out;
reg [width-1:0] out;
// synthesis attribute ram_style of mem is distributed
reg [width-1:0] mem[depth-1:0];
always @(posedge clk) begin
out <= mem[outAddr];
if (writeSel)
mem[inAddr] <= in;
end
endmodule
module shiftRegFIFO(X, Y, clk);
parameter depth=1;
parameter width=1;
output [width-1:0] Y;
input [width-1:0] X;
input clk;
reg [width-1:0] mem [depth-1:0];
integer index;
assign Y = mem[depth-1];
always @ (posedge clk) begin
for(index=1;index<depth;index=index+1) begin
mem[index] <= mem[index-1];
end
mem[0]<=X;
end
endmodule
module nextReg(X, Y, reset, clk);
parameter depth=2;
parameter logDepth=1;
output Y;
input X;
input clk, reset;
reg [logDepth:0] count;
reg active;
assign Y = (count == depth) ? 1 : 0;
always @ (posedge clk) begin
if (reset == 1) begin
count <= 0;
active <= 0;
end
else if (X == 1) begin
active <= 1;
count <= 1;
end
else if (count == depth) begin
count <= 0;
active <= 0;
end
else if (active)
count <= count+1;
end
endmodule
// Latency: 2
// Gap: 1
module codeBlock30657(clk, reset, next_in, next_out,
X0_in, Y0,
X1_in, Y1,
X2_in, Y2,
X3_in, Y3);
output next_out;
input clk, reset, next_in;
reg next;
input [15:0] X0_in,
X1_in,
X2_in,
X3_in;
reg [15:0] X0,
X1,
X2,
X3;
output [15:0] Y0,
Y1,
Y2,
Y3;
shiftRegFIFO shiftFIFO_33239(.X(next), .Y(next_out), .clk(clk));
defparam shiftFIFO_33239.depth = 1;
defparam shiftFIFO_33239.width = 1;
wire [15:0] a309; // signed
wire [15:0] a310; // signed
wire [15:0] a311; // signed
wire [15:0] a312; // signed
wire [15:0] t141; // signed
wire [15:0] t142; // signed
wire [15:0] t143; // signed
wire [15:0] t144; // signed
wire [15:0] Y0; // signed
wire [15:0] Y1; // signed
wire [15:0] Y2; // signed
wire [15:0] Y3; // signed
assign a309 = X0;
assign a310 = X2;
assign a311 = X1;
assign a312 = X3;
assign Y0 = t141;
assign Y1 = t142;
assign Y2 = t143;
assign Y3 = t144;
addfxp add30669(.a(a309), .b(a310), .clk(clk), .q(t141)); // 0
defparam add30669.width = 16;
addfxp add30684(.a(a311), .b(a312), .clk(clk), .q(t142)); // 0
defparam add30684.width = 16;
subfxp sub30698(.a(a309), .b(a310), .clk(clk), .q(t143)); // 0
defparam sub30698.width = 16;
subfxp sub30712(.a(a311), .b(a312), .clk(clk), .q(t144)); // 0
defparam sub30712.width = 16;
always @(posedge clk) begin
if (reset != 1) begin
X0 <= X0_in;
X1 <= X1_in;
X2 <= X2_in;
X3 <= X3_in;
next <= next_in;
end
end
endmodule
// Latency: 8
// Gap: 2
module rc30737(clk, reset, next, next_out,
X0, Y0,
X1, Y1,
X2, Y2,
X3, Y3);
output next_out;
input clk, reset, next;
input [15:0] X0,
X1,
X2,
X3;
output [15:0] Y0,
Y1,
Y2,
Y3;
wire [31:0] t0;
wire [31:0] s0;
assign t0 = {X0, X1};
wire [31:0] t1;
wire [31:0] s1;
assign t1 = {X2, X3};
assign Y0 = s0[31:16];
assign Y1 = s0[15:0];
assign Y2 = s1[31:16];
assign Y3 = s1[15:0];
perm30735 instPerm33240(.x0(t0), .y0(s0),
.x1(t1), .y1(s1),
.clk(clk), .next(next), .next_out(next_out), .reset(reset)
);
endmodule
module swNet30735(itr, clk, ct
, x0, y0
, x1, y1
);
parameter width = 32;
input [0:0] ct;
input clk;
input [0:0] itr;
input [width-1:0] x0;
output [width-1:0] y0;
reg [width-1:0] y0;
input [width-1:0] x1;
output [width-1:0] y1;
reg [width-1:0] y1;
wire [width-1:0] t0_0, t0_1;
reg [width-1:0] t1_0, t1_1;
reg [0:0] control;
always @(posedge clk) begin
case(ct)
1'd0: control <= 1'b1;
1'd1: control <= 1'b0;
endcase
end
// synthesis attribute rom_style of control is "distributed"
reg [0:0] control0;
always @(posedge clk) begin
control0 <= control;
end
assign t0_0 = x0;
assign t0_1 = x1;
always @(posedge clk) begin
t1_0 <= (control0[0] == 0) ? t0_0 : t0_1;
t1_1 <= (control0[0] == 0) ? t0_1 : t0_0;
end
always @(posedge clk) begin
y0 <= t1_0;
y1 <= t1_1;
end
endmodule
// Latency: 8
// Gap: 2
module perm30735(clk, next, reset, next_out,
x0, y0,
x1, y1);
parameter width = 32;
parameter depth = 2;
parameter depthX2 = 64;
parameter addrbits = 1;
parameter addrbitsplusone = 6;
parameter muxbits = 1;
input [width-1:0] x0;
output [width-1:0] y0;
wire [width-1:0] t0;
wire [width-1:0] s0;
input [width-1:0] x1;
output [width-1:0] y1;
wire [width-1:0] t1;
wire [width-1:0] s1;
input next, reset, clk;
output next_out;
reg [addrbits-1:0] s1rdloc, s2rdloc;
reg [addrbits-1:0] s1wr0;
reg [addrbits-1:0] s1rd0, s2wr0, s2rd0;
reg [addrbits-1:0] s1rd1, s2wr1, s2rd1;
reg s1wr_en, state1, state2, state3;
wire next2, next3, next4;
reg inFlip0, outFlip0_z, outFlip1;
wire inFlip1, outFlip0;
wire [0:0] tm1;
assign tm1 = 0;
shiftRegFIFO shiftFIFO_33245(.X(outFlip0), .Y(inFlip1), .clk(clk));
defparam shiftFIFO_33245.depth = 3;
defparam shiftFIFO_33245.width = 1;
shiftRegFIFO shiftFIFO_33246(.X(outFlip0_z), .Y(outFlip0), .clk(clk));
defparam shiftFIFO_33246.depth = 1;
defparam shiftFIFO_33246.width = 1;
// // shiftRegFIFO inFlip1Reg(outFlip0, inFlip1,
// defparam shiftRegFIFO.depth = 2;
// wi shiftRegFIFO.dth = 1;
// // shiftRegFIFO outFlip0Reg(outFlip0_z, outFlip0,
// defparam shiftRegFIFO.depth = 1;
// wi shiftRegFIFO.dth = 1;
memMod_dist s1mem0(x0, t0, {inFlip0, s1wr0}, {outFlip0, s1rd0}, s1wr_en, clk);
defparam s1mem0.depth = 8;
defparam s1mem0.width = 32;
defparam s1mem0.logDepth = 6;
memMod_dist s1mem1(x1, t1, {inFlip0, s1wr0}, {outFlip0, s1rd1}, s1wr_en, clk);
defparam s1mem1.depth = 8;
defparam s1mem1.width = 32;
defparam s1mem1.logDepth = 6;
shiftRegFIFO shiftFIFO_33255(.X(next), .Y(next2), .clk(clk));
defparam shiftFIFO_33255.depth = 1;
defparam shiftFIFO_33255.width = 1;
shiftRegFIFO shiftFIFO_33256(.X(next2), .Y(next3), .clk(clk));
defparam shiftFIFO_33256.depth = 4;
defparam shiftFIFO_33256.width = 1;
shiftRegFIFO shiftFIFO_33257(.X(next3), .Y(next4), .clk(clk));
defparam shiftFIFO_33257.depth = 2;
defparam shiftFIFO_33257.width = 1;
shiftRegFIFO shiftFIFO_33258(.X(next4), .Y(next_out), .clk(clk));
defparam shiftFIFO_33258.depth = 1;
defparam shiftFIFO_33258.width = 1;
shiftRegFIFO shiftFIFO_33261(.X(tm1), .Y(tm1_d), .clk(clk));
defparam shiftFIFO_33261.depth = 1;
defparam shiftFIFO_33261.width = 1;
shiftRegFIFO shiftFIFO_33264(.X(tm1_d), .Y(tm1_dd), .clk(clk));
defparam shiftFIFO_33264.depth = 3;
defparam shiftFIFO_33264.width = 1;
// // shiftRegFIFO1) n1(next, next2,
// defparam shiftRegFIFO1.depth = dept;
// wi shiftRegFIFO1.dth = 1;,
// // shiftRegFIFO n2(next2, next3,
// defparam shiftRegFIFO.depth = 3;
// wi shiftRegFIFO.dth = 1;
// // shiftRegFIFO n3(next3, next4,
// defparam shiftRegFIFO.depth = depth;
// wi shiftRegFIFO.dth = 1;
// // shiftRegFIFO n4(next4, next_out,
// defparam shiftRegFIFO.depth = 1;
// wi shiftRegFIFO.dth = 1;
wire [addrbits-1:0] muxCycle, writeCycle;
assign muxCycle = s1rdloc;
shiftRegFIFO shiftFIFO_33269(.X(muxCycle), .Y(writeCycle), .clk(clk));
defparam shiftFIFO_33269.depth = 3;
defparam shiftFIFO_33269.width = 1;
wire readInt, s2wr_en;
assign readInt = (state2 == 1);
shiftRegFIFO writeIntReg(readInt, s2wr_en, clk);
defparam writeIntReg.depth = 4;
defparam writeIntReg.width = 1;
memMod_dist s2mem0(s0, y0, {inFlip1, s2wr0}, {outFlip1, s2rdloc}, s2wr_en, clk);
defparam s2mem0.depth = 8;
defparam s2mem0.width = 32;
defparam s2mem0.logDepth = 6;
memMod_dist s2mem1(s1, y1, {inFlip1, s2wr1}, {outFlip1, s2rdloc}, s2wr_en, clk);
defparam s2mem1.depth = 8;
defparam s2mem1.width = 32;
defparam s2mem1.logDepth = 6;
always @(posedge clk) begin
if (reset == 1) begin
state1 <= 0;
inFlip0 <= 0;
end
else if (next == 1) begin
s1wr0 <= 0;
state1 <= 1;
s1wr_en <= 1;
inFlip0 <= (s1wr0 == depth-1) ? ~inFlip0 : inFlip0;
end
else begin
case(state1)
0: begin
s1wr0 <= 0;
state1 <= 0;
s1wr_en <= 0;
inFlip0 <= inFlip0;
end
1: begin
s1wr0 <= (s1wr0 == depth-1) ? 0 : s1wr0 + 1;
state1 <= 1;
s1wr_en <= 1;
inFlip0 <= (s1wr0 == depth-1) ? ~inFlip0 : inFlip0;
end
endcase
end
end
always @(posedge clk) begin
if (reset == 1) begin
state2 <= 0;
outFlip0_z <= 0;
end
else if (next2 == 1) begin
s1rdloc <= 0;
state2 <= 1;
outFlip0_z <= (s1rdloc == depth-1) ? ~outFlip0_z : outFlip0_z;
end
else begin
case(state2)
0: begin
s1rdloc <= 0;
state2 <= 0;
outFlip0_z <= outFlip0_z;
end
1: begin
s1rdloc <= (s1rdloc == depth-1) ? 0 : s1rdloc + 1;
state2 <= 1;
outFlip0_z <= (s1rdloc == depth-1) ? ~outFlip0_z : outFlip0_z;
end
endcase
end
end
always @(posedge clk) begin
if (reset == 1) begin
state3 <= 0;
outFlip1 <= 0;
end
else if (next4 == 1) begin
s2rdloc <= 0;
state3 <= 1;
outFlip1 <= (s2rdloc == depth-1) ? ~outFlip1 : outFlip1;
end
else begin
case(state3)
0: begin
s2rdloc <= 0;
state3 <= 0;
outFlip1 <= outFlip1;
end
1: begin
s2rdloc <= (s2rdloc == depth-1) ? 0 : s2rdloc + 1;
state3 <= 1;
outFlip1 <= (s2rdloc == depth-1) ? ~outFlip1 : outFlip1;
end
endcase
end
end
always @(posedge clk) begin
case({tm1_d, s1rdloc})
{1'd0, 1'd0}: s1rd0 <= 1;
{1'd0, 1'd1}: s1rd0 <= 0;
endcase
end
// synthesis attribute rom_style of s1rd0 is "block"
always @(posedge clk) begin
case({tm1_d, s1rdloc})
{1'd0, 1'd0}: s1rd1 <= 0;
{1'd0, 1'd1}: s1rd1 <= 1;
endcase
end
// synthesis attribute rom_style of s1rd1 is "block"
swNet30735 sw(tm1_d, clk, muxCycle, t0, s0, t1, s1);
always @(posedge clk) begin
case({tm1_dd, writeCycle})
{1'd0, 1'd0}: s2wr0 <= 1;
{1'd0, 1'd1}: s2wr0 <= 0;
endcase // case(writeCycle)
end // always @ (posedge clk)
// synthesis attribute rom_style of s2wr0 is "block"
always @(posedge clk) begin
case({tm1_dd, writeCycle})
{1'd0, 1'd0}: s2wr1 <= 0;
{1'd0, 1'd1}: s2wr1 <= 1;
endcase // case(writeCycle)
end // always @ (posedge clk)
// synthesis attribute rom_style of s2wr1 is "block"
endmodule
// Latency: 8
// Gap: 2
module DirSum_30916(clk, reset, next, next_out,
X0, Y0,
X1, Y1,
X2, Y2,
X3, Y3);
output next_out;
input clk, reset, next;
reg [0:0] i5;
input [15:0] X0,
X1,
X2,
X3;
output [15:0] Y0,
Y1,
Y2,
Y3;
always @(posedge clk) begin
if (reset == 1) begin
i5 <= 0;
end
else begin
if (next == 1)
i5 <= 0;
else if (i5 == 1)
i5 <= 0;
else
i5 <= i5 + 1;
end
end
codeBlock30740 codeBlockIsnt33270(.clk(clk), .reset(reset), .next_in(next), .next_out(next_out),
.i5_in(i5),
.X0_in(X0), .Y0(Y0),
.X1_in(X1), .Y1(Y1),
.X2_in(X2), .Y2(Y2),
.X3_in(X3), .Y3(Y3));
endmodule
module D18_30906(addr, out, clk);
input clk;
output [15:0] out;
reg [15:0] out, out2, out3;
input [0:0] addr;
always @(posedge clk) begin
out2 <= out3;
out <= out2;
case(addr)
0: out3 <= 16'h4000;
1: out3 <= 16'h0;
default: out3 <= 0;
endcase
end
// synthesis attribute rom_style of out3 is "block"
endmodule
module D20_30914(addr, out, clk);
input clk;
output [15:0] out;
reg [15:0] out, out2, out3;
input [0:0] addr;
always @(posedge clk) begin
out2 <= out3;
out <= out2;
case(addr)
0: out3 <= 16'h0;
1: out3 <= 16'hc000;
default: out3 <= 0;
endcase
end
// synthesis attribute rom_style of out3 is "block"
endmodule
// Latency: 8
// Gap: 1
module codeBlock30740(clk, reset, next_in, next_out,
i5_in,
X0_in, Y0,
X1_in, Y1,
X2_in, Y2,
X3_in, Y3);
output next_out;
input clk, reset, next_in;
reg next;
input [0:0] i5_in;
reg [0:0] i5;
input [15:0] X0_in,
X1_in,
X2_in,
X3_in;
reg [15:0] X0,
X1,
X2,
X3;
output [15:0] Y0,
Y1,
Y2,
Y3;
shiftRegFIFO shiftFIFO_33273(.X(next), .Y(next_out), .clk(clk));
defparam shiftFIFO_33273.depth = 7;
defparam shiftFIFO_33273.width = 1;
wire [15:0] a293; // signed
wire [15:0] a282; // signed
wire [15:0] a296; // signed
wire [15:0] a286; // signed
wire [15:0] a297; // signed
wire [15:0] a298; // signed
reg [15:0] tm137; // signed
reg [15:0] tm141; // signed
reg [15:0] tm153; // signed
reg [15:0] tm160; // signed
reg [15:0] tm138; // signed
reg [15:0] tm142; // signed
reg [15:0] tm154; // signed
reg [15:0] tm161; // signed
wire [15:0] tm4; // signed
wire [15:0] a287; // signed
wire [15:0] tm5; // signed
wire [15:0] a289; // signed
reg [15:0] tm139; // signed
reg [15:0] tm143; // signed
reg [15:0] tm155; // signed
reg [15:0] tm162; // signed
reg [15:0] tm31; // signed
reg [15:0] tm32; // signed
reg [15:0] tm140; // signed
reg [15:0] tm144; // signed
reg [15:0] tm156; // signed
reg [15:0] tm163; // signed
reg [15:0] tm157; // signed
reg [15:0] tm164; // signed
wire [15:0] a288; // signed
wire [15:0] a290; // signed
wire [15:0] a291; // signed
wire [15:0] a292; // signed
reg [15:0] tm158; // signed
reg [15:0] tm165; // signed
wire [15:0] Y0; // signed
wire [15:0] Y1; // signed
wire [15:0] Y2; // signed
wire [15:0] Y3; // signed
reg [15:0] tm159; // signed
reg [15:0] tm166; // signed
assign a293 = X0;
assign a282 = a293;
assign a296 = X1;
assign a286 = a296;
assign a297 = X2;
assign a298 = X3;
assign a287 = tm4;
assign a289 = tm5;
assign Y0 = tm159;
assign Y1 = tm166;
D18_30906 instD18inst0_30906(.addr(i5[0:0]), .out(tm4), .clk(clk));
D20_30914 instD20inst0_30914(.addr(i5[0:0]), .out(tm5), .clk(clk));
multfix m30838(.a(tm31), .b(tm140), .clk(clk), .q_sc(a288), .rst(reset));
defparam m30838.WIDTH = 16;
multfix m30860(.a(tm32), .b(tm144), .clk(clk), .q_sc(a290), .rst(reset));
defparam m30860.WIDTH = 16;
multfix m30877(.a(tm32), .b(tm140), .clk(clk), .q_sc(a291), .rst(reset));
defparam m30877.WIDTH = 16;
multfix m30888(.a(tm31), .b(tm144), .clk(clk), .q_sc(a292), .rst(reset));
defparam m30888.WIDTH = 16;
subfxp sub30866(.a(a288), .b(a290), .clk(clk), .q(Y2)); // 6
defparam sub30866.width = 16;
addfxp add30895(.a(a291), .b(a292), .clk(clk), .q(Y3)); // 6
defparam add30895.width = 16;
always @(posedge clk) begin
if (reset == 1) begin
tm31 <= 0;
tm140 <= 0;
tm32 <= 0;
tm144 <= 0;
tm32 <= 0;
tm140 <= 0;
tm31 <= 0;
tm144 <= 0;
end
else begin
i5 <= i5_in;
X0 <= X0_in;
X1 <= X1_in;
X2 <= X2_in;
X3 <= X3_in;
next <= next_in;
tm137 <= a297;
tm141 <= a298;
tm153 <= a282;
tm160 <= a286;
tm138 <= tm137;
tm142 <= tm141;
tm154 <= tm153;
tm161 <= tm160;
tm139 <= tm138;
tm143 <= tm142;
tm155 <= tm154;
tm162 <= tm161;
tm31 <= a287;
tm32 <= a289;
tm140 <= tm139;
tm144 <= tm143;
tm156 <= tm155;
tm163 <= tm162;
tm157 <= tm156;
tm164 <= tm163;
tm158 <= tm157;
tm165 <= tm164;
tm159 <= tm158;
tm166 <= tm165;
end
end
endmodule
// Latency: 2
// Gap: 1
module codeBlock30919(clk, reset, next_in, next_out,
X0_in, Y0,
X1_in, Y1,
X2_in, Y2,
X3_in, Y3);
output next_out;
input clk, reset, next_in;
reg next;
input [15:0] X0_in,
X1_in,
X2_in,
X3_in;
reg [15:0] X0,
X1,
X2,
X3;
output [15:0] Y0,
Y1,
Y2,
Y3;
shiftRegFIFO shiftFIFO_33276(.X(next), .Y(next_out), .clk(clk));
defparam shiftFIFO_33276.depth = 1;
defparam shiftFIFO_33276.width = 1;
wire [15:0] a249; // signed
wire [15:0] a250; // signed
wire [15:0] a251; // signed
wire [15:0] a252; // signed
wire [15:0] t117; // signed
wire [15:0] t118; // signed
wire [15:0] t119; // signed
wire [15:0] t120; // signed
wire [15:0] Y0; // signed
wire [15:0] Y1; // signed
wire [15:0] Y2; // signed
wire [15:0] Y3; // signed
assign a249 = X0;
assign a250 = X2;
assign a251 = X1;
assign a252 = X3;
assign Y0 = t117;
assign Y1 = t118;
assign Y2 = t119;
assign Y3 = t120;
addfxp add30931(.a(a249), .b(a250), .clk(clk), .q(t117)); // 0
defparam add30931.width = 16;
addfxp add30946(.a(a251), .b(a252), .clk(clk), .q(t118)); // 0
defparam add30946.width = 16;
subfxp sub30960(.a(a249), .b(a250), .clk(clk), .q(t119)); // 0
defparam sub30960.width = 16;
subfxp sub30974(.a(a251), .b(a252), .clk(clk), .q(t120)); // 0
defparam sub30974.width = 16;
always @(posedge clk) begin
if (reset != 1) begin
X0 <= X0_in;
X1 <= X1_in;
X2 <= X2_in;
X3 <= X3_in;
next <= next_in;
end
end
endmodule
// Latency: 12
// Gap: 4
module rc30999(clk, reset, next, next_out,
X0, Y0,
X1, Y1,
X2, Y2,
X3, Y3);
output next_out;
input clk, reset, next;
input [15:0] X0,
X1,
X2,
X3;
output [15:0] Y0,
Y1,
Y2,
Y3;
wire [31:0] t0;
wire [31:0] s0;
assign t0 = {X0, X1};
wire [31:0] t1;
wire [31:0] s1;
assign t1 = {X2, X3};
assign Y0 = s0[31:16];
assign Y1 = s0[15:0];
assign Y2 = s1[31:16];
assign Y3 = s1[15:0];
perm30997 instPerm33277(.x0(t0), .y0(s0),
.x1(t1), .y1(s1),
.clk(clk), .next(next), .next_out(next_out), .reset(reset)
);
endmodule
module swNet30997(itr, clk, ct
, x0, y0
, x1, y1
);
parameter width = 32;
input [1:0] ct;
input clk;
input [0:0] itr;
input [width-1:0] x0;
output [width-1:0] y0;
reg [width-1:0] y0;
input [width-1:0] x1;
output [width-1:0] y1;
reg [width-1:0] y1;
wire [width-1:0] t0_0, t0_1;
reg [width-1:0] t1_0, t1_1;
reg [0:0] control;
always @(posedge clk) begin
case(ct)
2'd0: control <= 1'b1;
2'd1: control <= 1'b1;
2'd2: control <= 1'b0;
2'd3: control <= 1'b0;
endcase
end
// synthesis attribute rom_style of control is "distributed"
reg [0:0] control0;
always @(posedge clk) begin
control0 <= control;
end
assign t0_0 = x0;
assign t0_1 = x1;
always @(posedge clk) begin
t1_0 <= (control0[0] == 0) ? t0_0 : t0_1;
t1_1 <= (control0[0] == 0) ? t0_1 : t0_0;
end
always @(posedge clk) begin
y0 <= t1_0;
y1 <= t1_1;
end
endmodule
// Latency: 12
// Gap: 4
module perm30997(clk, next, reset, next_out,
x0, y0,
x1, y1);
parameter width = 32;
parameter depth = 4;
parameter depthX2 = 64;
parameter addrbits = 2;
parameter addrbitsplusone = 6;
parameter muxbits = 1;
input [width-1:0] x0;
output [width-1:0] y0;
wire [width-1:0] t0;
wire [width-1:0] s0;
input [width-1:0] x1;
output [width-1:0] y1;
wire [width-1:0] t1;
wire [width-1:0] s1;
input next, reset, clk;
output next_out;
reg [addrbits-1:0] s1rdloc, s2rdloc;
reg [addrbits-1:0] s1wr0;
reg [addrbits-1:0] s1rd0, s2wr0, s2rd0;
reg [addrbits-1:0] s1rd1, s2wr1, s2rd1;
reg s1wr_en, state1, state2, state3;
wire next2, next3, next4;
reg inFlip0, outFlip0_z, outFlip1;
wire inFlip1, outFlip0;
wire [0:0] tm6;
assign tm6 = 0;
shiftRegFIFO shiftFIFO_33282(.X(outFlip0), .Y(inFlip1), .clk(clk));
defparam shiftFIFO_33282.depth = 3;
defparam shiftFIFO_33282.width = 1;
shiftRegFIFO shiftFIFO_33283(.X(outFlip0_z), .Y(outFlip0), .clk(clk));
defparam shiftFIFO_33283.depth = 1;
defparam shiftFIFO_33283.width = 1;
// // shiftRegFIFO inFlip1Reg(outFlip0, inFlip1,
// defparam shiftRegFIFO.depth = 2;
// wi shiftRegFIFO.dth = 1;
// // shiftRegFIFO outFlip0Reg(outFlip0_z, outFlip0,
// defparam shiftRegFIFO.depth = 1;
// wi shiftRegFIFO.dth = 1;
memMod_dist s1mem0(x0, t0, {inFlip0, s1wr0}, {outFlip0, s1rd0}, s1wr_en, clk);
defparam s1mem0.depth = 8;
defparam s1mem0.width = 32;
defparam s1mem0.logDepth = 6;
memMod_dist s1mem1(x1, t1, {inFlip0, s1wr0}, {outFlip0, s1rd1}, s1wr_en, clk);
defparam s1mem1.depth = 8;
defparam s1mem1.width = 32;
defparam s1mem1.logDepth = 6;
shiftRegFIFO shiftFIFO_33292(.X(next), .Y(next2), .clk(clk));
defparam shiftFIFO_33292.depth = 3;
defparam shiftFIFO_33292.width = 1;
shiftRegFIFO shiftFIFO_33293(.X(next2), .Y(next3), .clk(clk));
defparam shiftFIFO_33293.depth = 4;
defparam shiftFIFO_33293.width = 1;
shiftRegFIFO shiftFIFO_33294(.X(next3), .Y(next4), .clk(clk));
defparam shiftFIFO_33294.depth = 4;
defparam shiftFIFO_33294.width = 1;
shiftRegFIFO shiftFIFO_33295(.X(next4), .Y(next_out), .clk(clk));
defparam shiftFIFO_33295.depth = 1;
defparam shiftFIFO_33295.width = 1;
shiftRegFIFO shiftFIFO_33298(.X(tm6), .Y(tm6_d), .clk(clk));
defparam shiftFIFO_33298.depth = 3;
defparam shiftFIFO_33298.width = 1;
shiftRegFIFO shiftFIFO_33301(.X(tm6_d), .Y(tm6_dd), .clk(clk));
defparam shiftFIFO_33301.depth = 3;
defparam shiftFIFO_33301.width = 1;
// // shiftRegFIFO1) n1(next, next2,
// defparam shiftRegFIFO1.depth = dept;
// wi shiftRegFIFO1.dth = 1;,
// // shiftRegFIFO n2(next2, next3,
// defparam shiftRegFIFO.depth = 3;
// wi shiftRegFIFO.dth = 1;
// // shiftRegFIFO n3(next3, next4,
// defparam shiftRegFIFO.depth = depth;
// wi shiftRegFIFO.dth = 1;
// // shiftRegFIFO n4(next4, next_out,
// defparam shiftRegFIFO.depth = 1;
// wi shiftRegFIFO.dth = 1;
wire [addrbits-1:0] muxCycle, writeCycle;
assign muxCycle = s1rdloc;
shiftRegFIFO shiftFIFO_33306(.X(muxCycle), .Y(writeCycle), .clk(clk));
defparam shiftFIFO_33306.depth = 3;
defparam shiftFIFO_33306.width = 2;
wire readInt, s2wr_en;
assign readInt = (state2 == 1);
shiftRegFIFO writeIntReg(readInt, s2wr_en, clk);
defparam writeIntReg.depth = 4;
defparam writeIntReg.width = 1;
memMod_dist s2mem0(s0, y0, {inFlip1, s2wr0}, {outFlip1, s2rdloc}, s2wr_en, clk);
defparam s2mem0.depth = 8;
defparam s2mem0.width = 32;
defparam s2mem0.logDepth = 6;
memMod_dist s2mem1(s1, y1, {inFlip1, s2wr1}, {outFlip1, s2rdloc}, s2wr_en, clk);
defparam s2mem1.depth = 8;
defparam s2mem1.width = 32;
defparam s2mem1.logDepth = 6;
always @(posedge clk) begin
if (reset == 1) begin
state1 <= 0;
inFlip0 <= 0;
end
else if (next == 1) begin
s1wr0 <= 0;
state1 <= 1;
s1wr_en <= 1;
inFlip0 <= (s1wr0 == depth-1) ? ~inFlip0 : inFlip0;
end
else begin
case(state1)
0: begin
s1wr0 <= 0;
state1 <= 0;
s1wr_en <= 0;
inFlip0 <= inFlip0;
end
1: begin
s1wr0 <= (s1wr0 == depth-1) ? 0 : s1wr0 + 1;
state1 <= 1;
s1wr_en <= 1;
inFlip0 <= (s1wr0 == depth-1) ? ~inFlip0 : inFlip0;
end
endcase
end
end
always @(posedge clk) begin
if (reset == 1) begin
state2 <= 0;
outFlip0_z <= 0;
end
else if (next2 == 1) begin
s1rdloc <= 0;
state2 <= 1;
outFlip0_z <= (s1rdloc == depth-1) ? ~outFlip0_z : outFlip0_z;
end
else begin
case(state2)
0: begin
s1rdloc <= 0;
state2 <= 0;
outFlip0_z <= outFlip0_z;
end
1: begin
s1rdloc <= (s1rdloc == depth-1) ? 0 : s1rdloc + 1;
state2 <= 1;
outFlip0_z <= (s1rdloc == depth-1) ? ~outFlip0_z : outFlip0_z;
end
endcase
end
end
always @(posedge clk) begin
if (reset == 1) begin
state3 <= 0;
outFlip1 <= 0;
end
else if (next4 == 1) begin
s2rdloc <= 0;
state3 <= 1;
outFlip1 <= (s2rdloc == depth-1) ? ~outFlip1 : outFlip1;
end
else begin
case(state3)
0: begin
s2rdloc <= 0;
state3 <= 0;
outFlip1 <= outFlip1;
end
1: begin
s2rdloc <= (s2rdloc == depth-1) ? 0 : s2rdloc + 1;
state3 <= 1;
outFlip1 <= (s2rdloc == depth-1) ? ~outFlip1 : outFlip1;
end
endcase
end
end
always @(posedge clk) begin
case({tm6_d, s1rdloc})
{1'd0, 2'd0}: s1rd0 <= 2;
{1'd0, 2'd1}: s1rd0 <= 3;
{1'd0, 2'd2}: s1rd0 <= 0;
{1'd0, 2'd3}: s1rd0 <= 1;
endcase
end
// synthesis attribute rom_style of s1rd0 is "block"
always @(posedge clk) begin
case({tm6_d, s1rdloc})
{1'd0, 2'd0}: s1rd1 <= 0;
{1'd0, 2'd1}: s1rd1 <= 1;
{1'd0, 2'd2}: s1rd1 <= 2;
{1'd0, 2'd3}: s1rd1 <= 3;
endcase
end
// synthesis attribute rom_style of s1rd1 is "block"
swNet30997 sw(tm6_d, clk, muxCycle, t0, s0, t1, s1);
always @(posedge clk) begin
case({tm6_dd, writeCycle})
{1'd0, 2'd0}: s2wr0 <= 2;
{1'd0, 2'd1}: s2wr0 <= 3;
{1'd0, 2'd2}: s2wr0 <= 0;
{1'd0, 2'd3}: s2wr0 <= 1;
endcase // case(writeCycle)
end // always @ (posedge clk)
// synthesis attribute rom_style of s2wr0 is "block"
always @(posedge clk) begin
case({tm6_dd, writeCycle})
{1'd0, 2'd0}: s2wr1 <= 0;
{1'd0, 2'd1}: s2wr1 <= 1;
{1'd0, 2'd2}: s2wr1 <= 2;
{1'd0, 2'd3}: s2wr1 <= 3;
endcase // case(writeCycle)
end // always @ (posedge clk)
// synthesis attribute rom_style of s2wr1 is "block"
endmodule
// Latency: 8
// Gap: 4
module DirSum_31186(clk, reset, next, next_out,
X0, Y0,
X1, Y1,
X2, Y2,
X3, Y3);
output next_out;
input clk, reset, next;
reg [1:0] i4;
input [15:0] X0,
X1,
X2,
X3;
output [15:0] Y0,
Y1,
Y2,
Y3;
always @(posedge clk) begin
if (reset == 1) begin
i4 <= 0;
end
else begin
if (next == 1)
i4 <= 0;
else if (i4 == 3)
i4 <= 0;
else
i4 <= i4 + 1;
end
end
codeBlock31002 codeBlockIsnt33307(.clk(clk), .reset(reset), .next_in(next), .next_out(next_out),
.i4_in(i4),
.X0_in(X0), .Y0(Y0),
.X1_in(X1), .Y1(Y1),
.X2_in(X2), .Y2(Y2),
.X3_in(X3), .Y3(Y3));
endmodule
module D14_31172(addr, out, clk);
input clk;
output [15:0] out;
reg [15:0] out, out2, out3;
input [1:0] addr;
always @(posedge clk) begin
out2 <= out3;
out <= out2;
case(addr)
0: out3 <= 16'h4000;
1: out3 <= 16'h2d41;
2: out3 <= 16'h0;
3: out3 <= 16'hd2bf;
default: out3 <= 0;
endcase
end
// synthesis attribute rom_style of out3 is "block"
endmodule
module D16_31184(addr, out, clk);
input clk;
output [15:0] out;
reg [15:0] out, out2, out3;
input [1:0] addr;
always @(posedge clk) begin
out2 <= out3;
out <= out2;
case(addr)
0: out3 <= 16'h0;
1: out3 <= 16'hd2bf;
2: out3 <= 16'hc000;
3: out3 <= 16'hd2bf;
default: out3 <= 0;
endcase
end
// synthesis attribute rom_style of out3 is "block"
endmodule
// Latency: 8
// Gap: 1
module codeBlock31002(clk, reset, next_in, next_out,
i4_in,
X0_in, Y0,
X1_in, Y1,
X2_in, Y2,
X3_in, Y3);
output next_out;
input clk, reset, next_in;
reg next;
input [1:0] i4_in;
reg [1:0] i4;
input [15:0] X0_in,
X1_in,
X2_in,
X3_in;
reg [15:0] X0,
X1,
X2,
X3;
output [15:0] Y0,
Y1,
Y2,
Y3;
shiftRegFIFO shiftFIFO_33310(.X(next), .Y(next_out), .clk(clk));
defparam shiftFIFO_33310.depth = 7;
defparam shiftFIFO_33310.width = 1;
wire [15:0] a233; // signed
wire [15:0] a222; // signed
wire [15:0] a236; // signed
wire [15:0] a226; // signed
wire [15:0] a237; // signed
wire [15:0] a238; // signed
reg [15:0] tm167; // signed
reg [15:0] tm171; // signed
reg [15:0] tm183; // signed
reg [15:0] tm190; // signed
reg [15:0] tm168; // signed
reg [15:0] tm172; // signed
reg [15:0] tm184; // signed
reg [15:0] tm191; // signed
wire [15:0] tm9; // signed
wire [15:0] a227; // signed
wire [15:0] tm10; // signed
wire [15:0] a229; // signed
reg [15:0] tm169; // signed
reg [15:0] tm173; // signed
reg [15:0] tm185; // signed
reg [15:0] tm192; // signed
reg [15:0] tm39; // signed
reg [15:0] tm40; // signed
reg [15:0] tm170; // signed
reg [15:0] tm174; // signed
reg [15:0] tm186; // signed
reg [15:0] tm193; // signed
reg [15:0] tm187; // signed
reg [15:0] tm194; // signed
wire [15:0] a228; // signed
wire [15:0] a230; // signed
wire [15:0] a231; // signed
wire [15:0] a232; // signed
reg [15:0] tm188; // signed
reg [15:0] tm195; // signed
wire [15:0] Y0; // signed
wire [15:0] Y1; // signed
wire [15:0] Y2; // signed
wire [15:0] Y3; // signed
reg [15:0] tm189; // signed
reg [15:0] tm196; // signed
assign a233 = X0;
assign a222 = a233;
assign a236 = X1;
assign a226 = a236;
assign a237 = X2;
assign a238 = X3;
assign a227 = tm9;
assign a229 = tm10;
assign Y0 = tm189;
assign Y1 = tm196;
D14_31172 instD14inst0_31172(.addr(i4[1:0]), .out(tm9), .clk(clk));
D16_31184 instD16inst0_31184(.addr(i4[1:0]), .out(tm10), .clk(clk));
multfix m31100(.a(tm39), .b(tm170), .clk(clk), .q_sc(a228), .rst(reset));
defparam m31100.WIDTH = 16;
multfix m31122(.a(tm40), .b(tm174), .clk(clk), .q_sc(a230), .rst(reset));
defparam m31122.WIDTH = 16;
multfix m31139(.a(tm40), .b(tm170), .clk(clk), .q_sc(a231), .rst(reset));
defparam m31139.WIDTH = 16;
multfix m31150(.a(tm39), .b(tm174), .clk(clk), .q_sc(a232), .rst(reset));
defparam m31150.WIDTH = 16;
subfxp sub31128(.a(a228), .b(a230), .clk(clk), .q(Y2)); // 6
defparam sub31128.width = 16;
addfxp add31157(.a(a231), .b(a232), .clk(clk), .q(Y3)); // 6
defparam add31157.width = 16;
always @(posedge clk) begin
if (reset == 1) begin
tm39 <= 0;
tm170 <= 0;
tm40 <= 0;
tm174 <= 0;
tm40 <= 0;
tm170 <= 0;
tm39 <= 0;
tm174 <= 0;
end
else begin
i4 <= i4_in;
X0 <= X0_in;
X1 <= X1_in;
X2 <= X2_in;
X3 <= X3_in;
next <= next_in;
tm167 <= a237;
tm171 <= a238;
tm183 <= a222;
tm190 <= a226;
tm168 <= tm167;
tm172 <= tm171;
tm184 <= tm183;
tm191 <= tm190;
tm169 <= tm168;
tm173 <= tm172;
tm185 <= tm184;
tm192 <= tm191;
tm39 <= a227;
tm40 <= a229;
tm170 <= tm169;
tm174 <= tm173;
tm186 <= tm185;
tm193 <= tm192;
tm187 <= tm186;
tm194 <= tm193;
tm188 <= tm187;
tm195 <= tm194;
tm189 <= tm188;
tm196 <= tm195;
end
end
endmodule
// Latency: 2
// Gap: 1
module codeBlock31189(clk, reset, next_in, next_out,
X0_in, Y0,
X1_in, Y1,
X2_in, Y2,
X3_in, Y3);
output next_out;
input clk, reset, next_in;
reg next;
input [15:0] X0_in,
X1_in,
X2_in,
X3_in;
reg [15:0] X0,
X1,
X2,
X3;
output [15:0] Y0,
Y1,
Y2,
Y3;
shiftRegFIFO shiftFIFO_33313(.X(next), .Y(next_out), .clk(clk));
defparam shiftFIFO_33313.depth = 1;
defparam shiftFIFO_33313.width = 1;
wire [15:0] a189; // signed
wire [15:0] a190; // signed
wire [15:0] a191; // signed
wire [15:0] a192; // signed
wire [15:0] t93; // signed
wire [15:0] t94; // signed
wire [15:0] t95; // signed
wire [15:0] t96; // signed
wire [15:0] Y0; // signed
wire [15:0] Y1; // signed
wire [15:0] Y2; // signed
wire [15:0] Y3; // signed
assign a189 = X0;
assign a190 = X2;
assign a191 = X1;
assign a192 = X3;
assign Y0 = t93;
assign Y1 = t94;
assign Y2 = t95;
assign Y3 = t96;
addfxp add31201(.a(a189), .b(a190), .clk(clk), .q(t93)); // 0
defparam add31201.width = 16;
addfxp add31216(.a(a191), .b(a192), .clk(clk), .q(t94)); // 0
defparam add31216.width = 16;
subfxp sub31230(.a(a189), .b(a190), .clk(clk), .q(t95)); // 0
defparam sub31230.width = 16;
subfxp sub31244(.a(a191), .b(a192), .clk(clk), .q(t96)); // 0
defparam sub31244.width = 16;
always @(posedge clk) begin
if (reset != 1) begin
X0 <= X0_in;
X1 <= X1_in;
X2 <= X2_in;
X3 <= X3_in;
next <= next_in;
end
end
endmodule
// Latency: 20
// Gap: 8
module rc31269(clk, reset, next, next_out,
X0, Y0,
X1, Y1,
X2, Y2,
X3, Y3);
output next_out;
input clk, reset, next;
input [15:0] X0,
X1,
X2,
X3;
output [15:0] Y0,
Y1,
Y2,
Y3;
wire [31:0] t0;
wire [31:0] s0;
assign t0 = {X0, X1};
wire [31:0] t1;
wire [31:0] s1;
assign t1 = {X2, X3};
assign Y0 = s0[31:16];
assign Y1 = s0[15:0];
assign Y2 = s1[31:16];
assign Y3 = s1[15:0];
perm31267 instPerm33314(.x0(t0), .y0(s0),
.x1(t1), .y1(s1),
.clk(clk), .next(next), .next_out(next_out), .reset(reset)
);
endmodule
module swNet31267(itr, clk, ct
, x0, y0
, x1, y1
);
parameter width = 32;
input [2:0] ct;
input clk;
input [0:0] itr;
input [width-1:0] x0;
output [width-1:0] y0;
reg [width-1:0] y0;
input [width-1:0] x1;
output [width-1:0] y1;
reg [width-1:0] y1;
wire [width-1:0] t0_0, t0_1;
reg [width-1:0] t1_0, t1_1;
reg [0:0] control;
always @(posedge clk) begin
case(ct)
3'd0: control <= 1'b1;
3'd1: control <= 1'b1;
3'd2: control <= 1'b1;
3'd3: control <= 1'b1;
3'd4: control <= 1'b0;
3'd5: control <= 1'b0;
3'd6: control <= 1'b0;
3'd7: control <= 1'b0;
endcase
end
// synthesis attribute rom_style of control is "distributed"
reg [0:0] control0;
always @(posedge clk) begin
control0 <= control;
end
assign t0_0 = x0;
assign t0_1 = x1;
always @(posedge clk) begin
t1_0 <= (control0[0] == 0) ? t0_0 : t0_1;
t1_1 <= (control0[0] == 0) ? t0_1 : t0_0;
end
always @(posedge clk) begin
y0 <= t1_0;
y1 <= t1_1;
end
endmodule
// Latency: 20
// Gap: 8
module perm31267(clk, next, reset, next_out,
x0, y0,
x1, y1);
parameter width = 32;
parameter depth = 8;
parameter depthX2 = 64;
parameter addrbits = 3;
parameter addrbitsplusone = 6;
parameter muxbits = 1;
input [width-1:0] x0;
output [width-1:0] y0;
wire [width-1:0] t0;
wire [width-1:0] s0;
input [width-1:0] x1;
output [width-1:0] y1;
wire [width-1:0] t1;
wire [width-1:0] s1;
input next, reset, clk;
output next_out;
reg [addrbits-1:0] s1rdloc, s2rdloc;
reg [addrbits-1:0] s1wr0;
reg [addrbits-1:0] s1rd0, s2wr0, s2rd0;
reg [addrbits-1:0] s1rd1, s2wr1, s2rd1;
reg s1wr_en, state1, state2, state3;
wire next2, next3, next4;
reg inFlip0, outFlip0_z, outFlip1;
wire inFlip1, outFlip0;
wire [0:0] tm11;
assign tm11 = 0;
shiftRegFIFO shiftFIFO_33319(.X(outFlip0), .Y(inFlip1), .clk(clk));
defparam shiftFIFO_33319.depth = 3;
defparam shiftFIFO_33319.width = 1;
shiftRegFIFO shiftFIFO_33320(.X(outFlip0_z), .Y(outFlip0), .clk(clk));
defparam shiftFIFO_33320.depth = 1;
defparam shiftFIFO_33320.width = 1;
// // shiftRegFIFO inFlip1Reg(outFlip0, inFlip1,
// defparam shiftRegFIFO.depth = 2;
// wi shiftRegFIFO.dth = 1;
// // shiftRegFIFO outFlip0Reg(outFlip0_z, outFlip0,
// defparam shiftRegFIFO.depth = 1;
// wi shiftRegFIFO.dth = 1;
memMod_dist s1mem0(x0, t0, {inFlip0, s1wr0}, {outFlip0, s1rd0}, s1wr_en, clk);
defparam s1mem0.depth = 8;
defparam s1mem0.width = 32;
defparam s1mem0.logDepth = 6;
memMod_dist s1mem1(x1, t1, {inFlip0, s1wr0}, {outFlip0, s1rd1}, s1wr_en, clk);
defparam s1mem1.depth = 8;
defparam s1mem1.width = 32;
defparam s1mem1.logDepth = 6;
shiftRegFIFO shiftFIFO_33329(.X(next), .Y(next2), .clk(clk));
defparam shiftFIFO_33329.depth = 7;
defparam shiftFIFO_33329.width = 1;
shiftRegFIFO shiftFIFO_33330(.X(next2), .Y(next3), .clk(clk));
defparam shiftFIFO_33330.depth = 4;
defparam shiftFIFO_33330.width = 1;
shiftRegFIFO shiftFIFO_33331(.X(next3), .Y(next4), .clk(clk));
defparam shiftFIFO_33331.depth = 8;
defparam shiftFIFO_33331.width = 1;
shiftRegFIFO shiftFIFO_33332(.X(next4), .Y(next_out), .clk(clk));
defparam shiftFIFO_33332.depth = 1;
defparam shiftFIFO_33332.width = 1;
shiftRegFIFO shiftFIFO_33335(.X(tm11), .Y(tm11_d), .clk(clk));
defparam shiftFIFO_33335.depth = 7;
defparam shiftFIFO_33335.width = 1;
shiftRegFIFO shiftFIFO_33338(.X(tm11_d), .Y(tm11_dd), .clk(clk));
defparam shiftFIFO_33338.depth = 3;
defparam shiftFIFO_33338.width = 1;
// // shiftRegFIFO1) n1(next, next2,
// defparam shiftRegFIFO1.depth = dept;
// wi shiftRegFIFO1.dth = 1;,
// // shiftRegFIFO n2(next2, next3,
// defparam shiftRegFIFO.depth = 3;
// wi shiftRegFIFO.dth = 1;
// // shiftRegFIFO n3(next3, next4,
// defparam shiftRegFIFO.depth = depth;
// wi shiftRegFIFO.dth = 1;
// // shiftRegFIFO n4(next4, next_out,
// defparam shiftRegFIFO.depth = 1;
// wi shiftRegFIFO.dth = 1;
wire [addrbits-1:0] muxCycle, writeCycle;
assign muxCycle = s1rdloc;
shiftRegFIFO shiftFIFO_33343(.X(muxCycle), .Y(writeCycle), .clk(clk));
defparam shiftFIFO_33343.depth = 3;
defparam shiftFIFO_33343.width = 3;
wire readInt, s2wr_en;
assign readInt = (state2 == 1);
shiftRegFIFO writeIntReg(readInt, s2wr_en, clk);
defparam writeIntReg.depth = 4;
defparam writeIntReg.width = 1;
memMod_dist s2mem0(s0, y0, {inFlip1, s2wr0}, {outFlip1, s2rdloc}, s2wr_en, clk);
defparam s2mem0.depth = 8;
defparam s2mem0.width = 32;
defparam s2mem0.logDepth = 6;
memMod_dist s2mem1(s1, y1, {inFlip1, s2wr1}, {outFlip1, s2rdloc}, s2wr_en, clk);
defparam s2mem1.depth = 8;
defparam s2mem1.width = 32;
defparam s2mem1.logDepth = 6;
always @(posedge clk) begin
if (reset == 1) begin
state1 <= 0;
inFlip0 <= 0;
end
else if (next == 1) begin
s1wr0 <= 0;
state1 <= 1;
s1wr_en <= 1;
inFlip0 <= (s1wr0 == depth-1) ? ~inFlip0 : inFlip0;
end
else begin
case(state1)
0: begin
s1wr0 <= 0;
state1 <= 0;
s1wr_en <= 0;
inFlip0 <= inFlip0;
end
1: begin
s1wr0 <= (s1wr0 == depth-1) ? 0 : s1wr0 + 1;
state1 <= 1;
s1wr_en <= 1;
inFlip0 <= (s1wr0 == depth-1) ? ~inFlip0 : inFlip0;
end
endcase
end
end
always @(posedge clk) begin
if (reset == 1) begin
state2 <= 0;
outFlip0_z <= 0;
end
else if (next2 == 1) begin
s1rdloc <= 0;
state2 <= 1;
outFlip0_z <= (s1rdloc == depth-1) ? ~outFlip0_z : outFlip0_z;
end
else begin
case(state2)
0: begin
s1rdloc <= 0;
state2 <= 0;
outFlip0_z <= outFlip0_z;
end
1: begin
s1rdloc <= (s1rdloc == depth-1) ? 0 : s1rdloc + 1;
state2 <= 1;
outFlip0_z <= (s1rdloc == depth-1) ? ~outFlip0_z : outFlip0_z;
end
endcase
end
end
always @(posedge clk) begin
if (reset == 1) begin
state3 <= 0;
outFlip1 <= 0;
end
else if (next4 == 1) begin
s2rdloc <= 0;
state3 <= 1;
outFlip1 <= (s2rdloc == depth-1) ? ~outFlip1 : outFlip1;
end
else begin
case(state3)
0: begin
s2rdloc <= 0;
state3 <= 0;
outFlip1 <= outFlip1;
end
1: begin
s2rdloc <= (s2rdloc == depth-1) ? 0 : s2rdloc + 1;
state3 <= 1;
outFlip1 <= (s2rdloc == depth-1) ? ~outFlip1 : outFlip1;
end
endcase
end
end
always @(posedge clk) begin
case({tm11_d, s1rdloc})
{1'd0, 3'd0}: s1rd0 <= 4;
{1'd0, 3'd1}: s1rd0 <= 5;
{1'd0, 3'd2}: s1rd0 <= 6;
{1'd0, 3'd3}: s1rd0 <= 7;
{1'd0, 3'd4}: s1rd0 <= 0;
{1'd0, 3'd5}: s1rd0 <= 1;
{1'd0, 3'd6}: s1rd0 <= 2;
{1'd0, 3'd7}: s1rd0 <= 3;
endcase
end
// synthesis attribute rom_style of s1rd0 is "block"
always @(posedge clk) begin
case({tm11_d, s1rdloc})
{1'd0, 3'd0}: s1rd1 <= 0;
{1'd0, 3'd1}: s1rd1 <= 1;
{1'd0, 3'd2}: s1rd1 <= 2;
{1'd0, 3'd3}: s1rd1 <= 3;
{1'd0, 3'd4}: s1rd1 <= 4;
{1'd0, 3'd5}: s1rd1 <= 5;
{1'd0, 3'd6}: s1rd1 <= 6;
{1'd0, 3'd7}: s1rd1 <= 7;
endcase
end
// synthesis attribute rom_style of s1rd1 is "block"
swNet31267 sw(tm11_d, clk, muxCycle, t0, s0, t1, s1);
always @(posedge clk) begin
case({tm11_dd, writeCycle})
{1'd0, 3'd0}: s2wr0 <= 4;
{1'd0, 3'd1}: s2wr0 <= 5;
{1'd0, 3'd2}: s2wr0 <= 6;
{1'd0, 3'd3}: s2wr0 <= 7;
{1'd0, 3'd4}: s2wr0 <= 0;
{1'd0, 3'd5}: s2wr0 <= 1;
{1'd0, 3'd6}: s2wr0 <= 2;
{1'd0, 3'd7}: s2wr0 <= 3;
endcase // case(writeCycle)
end // always @ (posedge clk)
// synthesis attribute rom_style of s2wr0 is "block"
always @(posedge clk) begin
case({tm11_dd, writeCycle})
{1'd0, 3'd0}: s2wr1 <= 0;
{1'd0, 3'd1}: s2wr1 <= 1;
{1'd0, 3'd2}: s2wr1 <= 2;
{1'd0, 3'd3}: s2wr1 <= 3;
{1'd0, 3'd4}: s2wr1 <= 4;
{1'd0, 3'd5}: s2wr1 <= 5;
{1'd0, 3'd6}: s2wr1 <= 6;
{1'd0, 3'd7}: s2wr1 <= 7;
endcase // case(writeCycle)
end // always @ (posedge clk)
// synthesis attribute rom_style of s2wr1 is "block"
endmodule
// Latency: 8
// Gap: 8
module DirSum_31472(clk, reset, next, next_out,
X0, Y0,
X1, Y1,
X2, Y2,
X3, Y3);
output next_out;
input clk, reset, next;
reg [2:0] i3;
input [15:0] X0,
X1,
X2,
X3;
output [15:0] Y0,
Y1,
Y2,
Y3;
always @(posedge clk) begin
if (reset == 1) begin
i3 <= 0;
end
else begin
if (next == 1)
i3 <= 0;
else if (i3 == 7)
i3 <= 0;
else
i3 <= i3 + 1;
end
end
codeBlock31272 codeBlockIsnt33344(.clk(clk), .reset(reset), .next_in(next), .next_out(next_out),
.i3_in(i3),
.X0_in(X0), .Y0(Y0),
.X1_in(X1), .Y1(Y1),
.X2_in(X2), .Y2(Y2),
.X3_in(X3), .Y3(Y3));
endmodule
module D10_31450(addr, out, clk);
input clk;
output [15:0] out;
reg [15:0] out, out2, out3;
input [2:0] addr;
always @(posedge clk) begin
out2 <= out3;
out <= out2;
case(addr)
0: out3 <= 16'h4000;
1: out3 <= 16'h3b21;
2: out3 <= 16'h2d41;
3: out3 <= 16'h187e;
4: out3 <= 16'h0;
5: out3 <= 16'he782;
6: out3 <= 16'hd2bf;
7: out3 <= 16'hc4df;
default: out3 <= 0;
endcase
end
// synthesis attribute rom_style of out3 is "block"
endmodule
module D12_31470(addr, out, clk);
input clk;
output [15:0] out;
reg [15:0] out, out2, out3;
input [2:0] addr;
always @(posedge clk) begin
out2 <= out3;
out <= out2;
case(addr)
0: out3 <= 16'h0;
1: out3 <= 16'he782;
2: out3 <= 16'hd2bf;
3: out3 <= 16'hc4df;
4: out3 <= 16'hc000;
5: out3 <= 16'hc4df;
6: out3 <= 16'hd2bf;
7: out3 <= 16'he782;
default: out3 <= 0;
endcase
end
// synthesis attribute rom_style of out3 is "block"
endmodule
// Latency: 8
// Gap: 1
module codeBlock31272(clk, reset, next_in, next_out,
i3_in,
X0_in, Y0,
X1_in, Y1,
X2_in, Y2,
X3_in, Y3);
output next_out;
input clk, reset, next_in;
reg next;
input [2:0] i3_in;
reg [2:0] i3;
input [15:0] X0_in,
X1_in,
X2_in,
X3_in;
reg [15:0] X0,
X1,
X2,
X3;
output [15:0] Y0,
Y1,
Y2,
Y3;
shiftRegFIFO shiftFIFO_33347(.X(next), .Y(next_out), .clk(clk));
defparam shiftFIFO_33347.depth = 7;
defparam shiftFIFO_33347.width = 1;
wire [15:0] a173; // signed
wire [15:0] a162; // signed
wire [15:0] a176; // signed
wire [15:0] a166; // signed
wire [15:0] a177; // signed
wire [15:0] a178; // signed
reg [15:0] tm197; // signed
reg [15:0] tm201; // signed
reg [15:0] tm213; // signed
reg [15:0] tm220; // signed
reg [15:0] tm198; // signed
reg [15:0] tm202; // signed
reg [15:0] tm214; // signed
reg [15:0] tm221; // signed
wire [15:0] tm14; // signed
wire [15:0] a167; // signed
wire [15:0] tm15; // signed
wire [15:0] a169; // signed
reg [15:0] tm199; // signed
reg [15:0] tm203; // signed
reg [15:0] tm215; // signed
reg [15:0] tm222; // signed
reg [15:0] tm47; // signed
reg [15:0] tm48; // signed
reg [15:0] tm200; // signed
reg [15:0] tm204; // signed
reg [15:0] tm216; // signed
reg [15:0] tm223; // signed
reg [15:0] tm217; // signed
reg [15:0] tm224; // signed
wire [15:0] a168; // signed
wire [15:0] a170; // signed
wire [15:0] a171; // signed
wire [15:0] a172; // signed
reg [15:0] tm218; // signed
reg [15:0] tm225; // signed
wire [15:0] Y0; // signed
wire [15:0] Y1; // signed
wire [15:0] Y2; // signed
wire [15:0] Y3; // signed
reg [15:0] tm219; // signed
reg [15:0] tm226; // signed
assign a173 = X0;
assign a162 = a173;
assign a176 = X1;
assign a166 = a176;
assign a177 = X2;
assign a178 = X3;
assign a167 = tm14;
assign a169 = tm15;
assign Y0 = tm219;
assign Y1 = tm226;
D10_31450 instD10inst0_31450(.addr(i3[2:0]), .out(tm14), .clk(clk));
D12_31470 instD12inst0_31470(.addr(i3[2:0]), .out(tm15), .clk(clk));
multfix m31370(.a(tm47), .b(tm200), .clk(clk), .q_sc(a168), .rst(reset));
defparam m31370.WIDTH = 16;
multfix m31392(.a(tm48), .b(tm204), .clk(clk), .q_sc(a170), .rst(reset));
defparam m31392.WIDTH = 16;
multfix m31409(.a(tm48), .b(tm200), .clk(clk), .q_sc(a171), .rst(reset));
defparam m31409.WIDTH = 16;
multfix m31420(.a(tm47), .b(tm204), .clk(clk), .q_sc(a172), .rst(reset));
defparam m31420.WIDTH = 16;
subfxp sub31398(.a(a168), .b(a170), .clk(clk), .q(Y2)); // 6
defparam sub31398.width = 16;
addfxp add31427(.a(a171), .b(a172), .clk(clk), .q(Y3)); // 6
defparam add31427.width = 16;
always @(posedge clk) begin
if (reset == 1) begin
tm47 <= 0;
tm200 <= 0;
tm48 <= 0;
tm204 <= 0;
tm48 <= 0;
tm200 <= 0;
tm47 <= 0;
tm204 <= 0;
end
else begin
i3 <= i3_in;
X0 <= X0_in;
X1 <= X1_in;
X2 <= X2_in;
X3 <= X3_in;
next <= next_in;
tm197 <= a177;
tm201 <= a178;
tm213 <= a162;
tm220 <= a166;
tm198 <= tm197;
tm202 <= tm201;
tm214 <= tm213;
tm221 <= tm220;
tm199 <= tm198;
tm203 <= tm202;
tm215 <= tm214;
tm222 <= tm221;
tm47 <= a167;
tm48 <= a169;
tm200 <= tm199;
tm204 <= tm203;
tm216 <= tm215;
tm223 <= tm222;
tm217 <= tm216;
tm224 <= tm223;
tm218 <= tm217;
tm225 <= tm224;
tm219 <= tm218;
tm226 <= tm225;
end
end
endmodule
// Latency: 2
// Gap: 1
module codeBlock31475(clk, reset, next_in, next_out,
X0_in, Y0,
X1_in, Y1,
X2_in, Y2,
X3_in, Y3);
output next_out;
input clk, reset, next_in;
reg next;
input [15:0] X0_in,
X1_in,
X2_in,
X3_in;
reg [15:0] X0,
X1,
X2,
X3;
output [15:0] Y0,
Y1,
Y2,
Y3;
shiftRegFIFO shiftFIFO_33350(.X(next), .Y(next_out), .clk(clk));
defparam shiftFIFO_33350.depth = 1;
defparam shiftFIFO_33350.width = 1;
wire [15:0] a129; // signed
wire [15:0] a130; // signed
wire [15:0] a131; // signed
wire [15:0] a132; // signed
wire [15:0] t69; // signed
wire [15:0] t70; // signed
wire [15:0] t71; // signed
wire [15:0] t72; // signed
wire [15:0] Y0; // signed
wire [15:0] Y1; // signed
wire [15:0] Y2; // signed
wire [15:0] Y3; // signed
assign a129 = X0;
assign a130 = X2;
assign a131 = X1;
assign a132 = X3;
assign Y0 = t69;
assign Y1 = t70;
assign Y2 = t71;
assign Y3 = t72;
addfxp add31487(.a(a129), .b(a130), .clk(clk), .q(t69)); // 0
defparam add31487.width = 16;
addfxp add31502(.a(a131), .b(a132), .clk(clk), .q(t70)); // 0
defparam add31502.width = 16;
subfxp sub31516(.a(a129), .b(a130), .clk(clk), .q(t71)); // 0
defparam sub31516.width = 16;
subfxp sub31530(.a(a131), .b(a132), .clk(clk), .q(t72)); // 0
defparam sub31530.width = 16;
always @(posedge clk) begin
if (reset != 1) begin
X0 <= X0_in;
X1 <= X1_in;
X2 <= X2_in;
X3 <= X3_in;
next <= next_in;
end
end
endmodule
// Latency: 36
// Gap: 16
module rc31555(clk, reset, next, next_out,
X0, Y0,
X1, Y1,
X2, Y2,
X3, Y3);
output next_out;
input clk, reset, next;
input [15:0] X0,
X1,
X2,
X3;
output [15:0] Y0,
Y1,
Y2,
Y3;
wire [31:0] t0;
wire [31:0] s0;
assign t0 = {X0, X1};
wire [31:0] t1;
wire [31:0] s1;
assign t1 = {X2, X3};
assign Y0 = s0[31:16];
assign Y1 = s0[15:0];
assign Y2 = s1[31:16];
assign Y3 = s1[15:0];
perm31553 instPerm33351(.x0(t0), .y0(s0),
.x1(t1), .y1(s1),
.clk(clk), .next(next), .next_out(next_out), .reset(reset)
);
endmodule
module swNet31553(itr, clk, ct
, x0, y0
, x1, y1
);
parameter width = 32;
input [3:0] ct;
input clk;
input [0:0] itr;
input [width-1:0] x0;
output [width-1:0] y0;
reg [width-1:0] y0;
input [width-1:0] x1;
output [width-1:0] y1;
reg [width-1:0] y1;
wire [width-1:0] t0_0, t0_1;
reg [width-1:0] t1_0, t1_1;
reg [0:0] control;
always @(posedge clk) begin
case(ct)
4'd0: control <= 1'b1;
4'd1: control <= 1'b1;
4'd2: control <= 1'b1;
4'd3: control <= 1'b1;
4'd4: control <= 1'b1;
4'd5: control <= 1'b1;
4'd6: control <= 1'b1;
4'd7: control <= 1'b1;
4'd8: control <= 1'b0;
4'd9: control <= 1'b0;
4'd10: control <= 1'b0;
4'd11: control <= 1'b0;
4'd12: control <= 1'b0;
4'd13: control <= 1'b0;
4'd14: control <= 1'b0;
4'd15: control <= 1'b0;
endcase
end
// synthesis attribute rom_style of control is "distributed"
reg [0:0] control0;
always @(posedge clk) begin
control0 <= control;
end
assign t0_0 = x0;
assign t0_1 = x1;
always @(posedge clk) begin
t1_0 <= (control0[0] == 0) ? t0_0 : t0_1;
t1_1 <= (control0[0] == 0) ? t0_1 : t0_0;
end
always @(posedge clk) begin
y0 <= t1_0;
y1 <= t1_1;
end
endmodule
// Latency: 36
// Gap: 16
module perm31553(clk, next, reset, next_out,
x0, y0,
x1, y1);
parameter width = 32;
parameter depth = 16;
parameter depthX2 = 64;
parameter addrbits = 4;
parameter addrbitsplusone = 6;
parameter muxbits = 1;
input [width-1:0] x0;
output [width-1:0] y0;
wire [width-1:0] t0;
wire [width-1:0] s0;
input [width-1:0] x1;
output [width-1:0] y1;
wire [width-1:0] t1;
wire [width-1:0] s1;
input next, reset, clk;
output next_out;
reg [addrbits-1:0] s1rdloc, s2rdloc;
reg [addrbits-1:0] s1wr0;
reg [addrbits-1:0] s1rd0, s2wr0, s2rd0;
reg [addrbits-1:0] s1rd1, s2wr1, s2rd1;
reg s1wr_en, state1, state2, state3;
wire next2, next3, next4;
reg inFlip0, outFlip0_z, outFlip1;
wire inFlip1, outFlip0;
wire [0:0] tm16;
assign tm16 = 0;
shiftRegFIFO shiftFIFO_33356(.X(outFlip0), .Y(inFlip1), .clk(clk));
defparam shiftFIFO_33356.depth = 3;
defparam shiftFIFO_33356.width = 1;
shiftRegFIFO shiftFIFO_33357(.X(outFlip0_z), .Y(outFlip0), .clk(clk));
defparam shiftFIFO_33357.depth = 1;
defparam shiftFIFO_33357.width = 1;
// // shiftRegFIFO inFlip1Reg(outFlip0, inFlip1,
// defparam shiftRegFIFO.depth = 2;
// wi shiftRegFIFO.dth = 1;
// // shiftRegFIFO outFlip0Reg(outFlip0_z, outFlip0,
// defparam shiftRegFIFO.depth = 1;
// wi shiftRegFIFO.dth = 1;
memMod_dist s1mem0(x0, t0, {inFlip0, s1wr0}, {outFlip0, s1rd0}, s1wr_en, clk);
defparam s1mem0.depth = 32;
defparam s1mem0.width = 32;
defparam s1mem0.logDepth = 6;
memMod_dist s1mem1(x1, t1, {inFlip0, s1wr0}, {outFlip0, s1rd1}, s1wr_en, clk);
defparam s1mem1.depth = 32;
defparam s1mem1.width = 32;
defparam s1mem1.logDepth = 6;
nextReg nextReg_33368(.X(next), .Y(next2), .reset(reset), .clk(clk));
defparam nextReg_33368.depth = 15;
defparam nextReg_33368.logDepth = 4;
shiftRegFIFO shiftFIFO_33369(.X(next2), .Y(next3), .clk(clk));
defparam shiftFIFO_33369.depth = 4;
defparam shiftFIFO_33369.width = 1;
nextReg nextReg_33372(.X(next3), .Y(next4), .reset(reset), .clk(clk));
defparam nextReg_33372.depth = 16;
defparam nextReg_33372.logDepth = 4;
shiftRegFIFO shiftFIFO_33373(.X(next4), .Y(next_out), .clk(clk));
defparam shiftFIFO_33373.depth = 1;
defparam shiftFIFO_33373.width = 1;
shiftRegFIFO shiftFIFO_33376(.X(tm16), .Y(tm16_d), .clk(clk));
defparam shiftFIFO_33376.depth = 15;
defparam shiftFIFO_33376.width = 1;
shiftRegFIFO shiftFIFO_33379(.X(tm16_d), .Y(tm16_dd), .clk(clk));
defparam shiftFIFO_33379.depth = 3;
defparam shiftFIFO_33379.width = 1;
// // shiftRegFIFO1) n1(next, next2,
// defparam shiftRegFIFO1.depth = dept;
// wi shiftRegFIFO1.dth = 1;,
// // shiftRegFIFO n2(next2, next3,
// defparam shiftRegFIFO.depth = 3;
// wi shiftRegFIFO.dth = 1;
// // shiftRegFIFO n3(next3, next4,
// defparam shiftRegFIFO.depth = depth;
// wi shiftRegFIFO.dth = 1;
// // shiftRegFIFO n4(next4, next_out,
// defparam shiftRegFIFO.depth = 1;
// wi shiftRegFIFO.dth = 1;
wire [addrbits-1:0] muxCycle, writeCycle;
assign muxCycle = s1rdloc;
shiftRegFIFO shiftFIFO_33384(.X(muxCycle), .Y(writeCycle), .clk(clk));
defparam shiftFIFO_33384.depth = 3;
defparam shiftFIFO_33384.width = 4;
wire readInt, s2wr_en;
assign readInt = (state2 == 1);
shiftRegFIFO writeIntReg(readInt, s2wr_en, clk);
defparam writeIntReg.depth = 4;
defparam writeIntReg.width = 1;
memMod_dist s2mem0(s0, y0, {inFlip1, s2wr0}, {outFlip1, s2rdloc}, s2wr_en, clk);
defparam s2mem0.depth = 32;
defparam s2mem0.width = 32;
defparam s2mem0.logDepth = 6;
memMod_dist s2mem1(s1, y1, {inFlip1, s2wr1}, {outFlip1, s2rdloc}, s2wr_en, clk);
defparam s2mem1.depth = 32;
defparam s2mem1.width = 32;
defparam s2mem1.logDepth = 6;
always @(posedge clk) begin
if (reset == 1) begin
state1 <= 0;
inFlip0 <= 0;
end
else if (next == 1) begin
s1wr0 <= 0;
state1 <= 1;
s1wr_en <= 1;
inFlip0 <= (s1wr0 == depth-1) ? ~inFlip0 : inFlip0;
end
else begin
case(state1)
0: begin
s1wr0 <= 0;
state1 <= 0;
s1wr_en <= 0;
inFlip0 <= inFlip0;
end
1: begin
s1wr0 <= (s1wr0 == depth-1) ? 0 : s1wr0 + 1;
state1 <= 1;
s1wr_en <= 1;
inFlip0 <= (s1wr0 == depth-1) ? ~inFlip0 : inFlip0;
end
endcase
end
end
always @(posedge clk) begin
if (reset == 1) begin
state2 <= 0;
outFlip0_z <= 0;
end
else if (next2 == 1) begin
s1rdloc <= 0;
state2 <= 1;
outFlip0_z <= (s1rdloc == depth-1) ? ~outFlip0_z : outFlip0_z;
end
else begin
case(state2)
0: begin
s1rdloc <= 0;
state2 <= 0;
outFlip0_z <= outFlip0_z;
end
1: begin
s1rdloc <= (s1rdloc == depth-1) ? 0 : s1rdloc + 1;
state2 <= 1;
outFlip0_z <= (s1rdloc == depth-1) ? ~outFlip0_z : outFlip0_z;
end
endcase
end
end
always @(posedge clk) begin
if (reset == 1) begin
state3 <= 0;
outFlip1 <= 0;
end
else if (next4 == 1) begin
s2rdloc <= 0;
state3 <= 1;
outFlip1 <= (s2rdloc == depth-1) ? ~outFlip1 : outFlip1;
end
else begin
case(state3)
0: begin
s2rdloc <= 0;
state3 <= 0;
outFlip1 <= outFlip1;
end
1: begin
s2rdloc <= (s2rdloc == depth-1) ? 0 : s2rdloc + 1;
state3 <= 1;
outFlip1 <= (s2rdloc == depth-1) ? ~outFlip1 : outFlip1;
end
endcase
end
end
always @(posedge clk) begin
case({tm16_d, s1rdloc})
{1'd0, 4'd0}: s1rd0 <= 8;
{1'd0, 4'd1}: s1rd0 <= 9;
{1'd0, 4'd2}: s1rd0 <= 10;
{1'd0, 4'd3}: s1rd0 <= 11;
{1'd0, 4'd4}: s1rd0 <= 12;
{1'd0, 4'd5}: s1rd0 <= 13;
{1'd0, 4'd6}: s1rd0 <= 14;
{1'd0, 4'd7}: s1rd0 <= 15;
{1'd0, 4'd8}: s1rd0 <= 0;
{1'd0, 4'd9}: s1rd0 <= 1;
{1'd0, 4'd10}: s1rd0 <= 2;
{1'd0, 4'd11}: s1rd0 <= 3;
{1'd0, 4'd12}: s1rd0 <= 4;
{1'd0, 4'd13}: s1rd0 <= 5;
{1'd0, 4'd14}: s1rd0 <= 6;
{1'd0, 4'd15}: s1rd0 <= 7;
endcase
end
// synthesis attribute rom_style of s1rd0 is "block"
always @(posedge clk) begin
case({tm16_d, s1rdloc})
{1'd0, 4'd0}: s1rd1 <= 0;
{1'd0, 4'd1}: s1rd1 <= 1;
{1'd0, 4'd2}: s1rd1 <= 2;
{1'd0, 4'd3}: s1rd1 <= 3;
{1'd0, 4'd4}: s1rd1 <= 4;
{1'd0, 4'd5}: s1rd1 <= 5;
{1'd0, 4'd6}: s1rd1 <= 6;
{1'd0, 4'd7}: s1rd1 <= 7;
{1'd0, 4'd8}: s1rd1 <= 8;
{1'd0, 4'd9}: s1rd1 <= 9;
{1'd0, 4'd10}: s1rd1 <= 10;
{1'd0, 4'd11}: s1rd1 <= 11;
{1'd0, 4'd12}: s1rd1 <= 12;
{1'd0, 4'd13}: s1rd1 <= 13;
{1'd0, 4'd14}: s1rd1 <= 14;
{1'd0, 4'd15}: s1rd1 <= 15;
endcase
end
// synthesis attribute rom_style of s1rd1 is "block"
swNet31553 sw(tm16_d, clk, muxCycle, t0, s0, t1, s1);
always @(posedge clk) begin
case({tm16_dd, writeCycle})
{1'd0, 4'd0}: s2wr0 <= 8;
{1'd0, 4'd1}: s2wr0 <= 9;
{1'd0, 4'd2}: s2wr0 <= 10;
{1'd0, 4'd3}: s2wr0 <= 11;
{1'd0, 4'd4}: s2wr0 <= 12;
{1'd0, 4'd5}: s2wr0 <= 13;
{1'd0, 4'd6}: s2wr0 <= 14;
{1'd0, 4'd7}: s2wr0 <= 15;
{1'd0, 4'd8}: s2wr0 <= 0;
{1'd0, 4'd9}: s2wr0 <= 1;
{1'd0, 4'd10}: s2wr0 <= 2;
{1'd0, 4'd11}: s2wr0 <= 3;
{1'd0, 4'd12}: s2wr0 <= 4;
{1'd0, 4'd13}: s2wr0 <= 5;
{1'd0, 4'd14}: s2wr0 <= 6;
{1'd0, 4'd15}: s2wr0 <= 7;
endcase // case(writeCycle)
end // always @ (posedge clk)
// synthesis attribute rom_style of s2wr0 is "block"
always @(posedge clk) begin
case({tm16_dd, writeCycle})
{1'd0, 4'd0}: s2wr1 <= 0;
{1'd0, 4'd1}: s2wr1 <= 1;
{1'd0, 4'd2}: s2wr1 <= 2;
{1'd0, 4'd3}: s2wr1 <= 3;
{1'd0, 4'd4}: s2wr1 <= 4;
{1'd0, 4'd5}: s2wr1 <= 5;
{1'd0, 4'd6}: s2wr1 <= 6;
{1'd0, 4'd7}: s2wr1 <= 7;
{1'd0, 4'd8}: s2wr1 <= 8;
{1'd0, 4'd9}: s2wr1 <= 9;
{1'd0, 4'd10}: s2wr1 <= 10;
{1'd0, 4'd11}: s2wr1 <= 11;
{1'd0, 4'd12}: s2wr1 <= 12;
{1'd0, 4'd13}: s2wr1 <= 13;
{1'd0, 4'd14}: s2wr1 <= 14;
{1'd0, 4'd15}: s2wr1 <= 15;
endcase // case(writeCycle)
end // always @ (posedge clk)
// synthesis attribute rom_style of s2wr1 is "block"
endmodule
// Latency: 8
// Gap: 16
module DirSum_31790(clk, reset, next, next_out,
X0, Y0,
X1, Y1,
X2, Y2,
X3, Y3);
output next_out;
input clk, reset, next;
reg [3:0] i2;
input [15:0] X0,
X1,
X2,
X3;
output [15:0] Y0,
Y1,
Y2,
Y3;
always @(posedge clk) begin
if (reset == 1) begin
i2 <= 0;
end
else begin
if (next == 1)
i2 <= 0;
else if (i2 == 15)
i2 <= 0;
else
i2 <= i2 + 1;
end
end
codeBlock31558 codeBlockIsnt33389(.clk(clk), .reset(reset), .next_in(next), .next_out(next_out),
.i2_in(i2),
.X0_in(X0), .Y0(Y0),
.X1_in(X1), .Y1(Y1),
.X2_in(X2), .Y2(Y2),
.X3_in(X3), .Y3(Y3));
endmodule
module D6_31752(addr, out, clk);
input clk;
output [15:0] out;
reg [15:0] out, out2, out3;
input [3:0] addr;
always @(posedge clk) begin
out2 <= out3;
out <= out2;
case(addr)
0: out3 <= 16'h4000;
1: out3 <= 16'h3ec5;
2: out3 <= 16'h3b21;
3: out3 <= 16'h3537;
4: out3 <= 16'h2d41;
5: out3 <= 16'h238e;
6: out3 <= 16'h187e;
7: out3 <= 16'hc7c;
8: out3 <= 16'h0;
9: out3 <= 16'hf384;
10: out3 <= 16'he782;
11: out3 <= 16'hdc72;
12: out3 <= 16'hd2bf;
13: out3 <= 16'hcac9;
14: out3 <= 16'hc4df;
15: out3 <= 16'hc13b;
default: out3 <= 0;
endcase
end
// synthesis attribute rom_style of out3 is "block"
endmodule
module D8_31788(addr, out, clk);
input clk;
output [15:0] out;
reg [15:0] out, out2, out3;
input [3:0] addr;
always @(posedge clk) begin
out2 <= out3;
out <= out2;
case(addr)
0: out3 <= 16'h0;
1: out3 <= 16'hf384;
2: out3 <= 16'he782;
3: out3 <= 16'hdc72;
4: out3 <= 16'hd2bf;
5: out3 <= 16'hcac9;
6: out3 <= 16'hc4df;
7: out3 <= 16'hc13b;
8: out3 <= 16'hc000;
9: out3 <= 16'hc13b;
10: out3 <= 16'hc4df;
11: out3 <= 16'hcac9;
12: out3 <= 16'hd2bf;
13: out3 <= 16'hdc72;
14: out3 <= 16'he782;
15: out3 <= 16'hf384;
default: out3 <= 0;
endcase
end
// synthesis attribute rom_style of out3 is "block"
endmodule
// Latency: 8
// Gap: 1
module codeBlock31558(clk, reset, next_in, next_out,
i2_in,
X0_in, Y0,
X1_in, Y1,
X2_in, Y2,
X3_in, Y3);
output next_out;
input clk, reset, next_in;
reg next;
input [3:0] i2_in;
reg [3:0] i2;
input [15:0] X0_in,
X1_in,
X2_in,
X3_in;
reg [15:0] X0,
X1,
X2,
X3;
output [15:0] Y0,
Y1,
Y2,
Y3;
shiftRegFIFO shiftFIFO_33392(.X(next), .Y(next_out), .clk(clk));
defparam shiftFIFO_33392.depth = 7;
defparam shiftFIFO_33392.width = 1;
wire [15:0] a113; // signed
wire [15:0] a102; // signed
wire [15:0] a116; // signed
wire [15:0] a106; // signed
wire [15:0] a117; // signed
wire [15:0] a118; // signed
reg [15:0] tm227; // signed
reg [15:0] tm231; // signed
reg [15:0] tm243; // signed
reg [15:0] tm250; // signed
reg [15:0] tm228; // signed
reg [15:0] tm232; // signed
reg [15:0] tm244; // signed
reg [15:0] tm251; // signed
wire [15:0] tm19; // signed
wire [15:0] a107; // signed
wire [15:0] tm20; // signed
wire [15:0] a109; // signed
reg [15:0] tm229; // signed
reg [15:0] tm233; // signed
reg [15:0] tm245; // signed
reg [15:0] tm252; // signed
reg [15:0] tm55; // signed
reg [15:0] tm56; // signed
reg [15:0] tm230; // signed
reg [15:0] tm234; // signed
reg [15:0] tm246; // signed
reg [15:0] tm253; // signed
reg [15:0] tm247; // signed
reg [15:0] tm254; // signed
wire [15:0] a108; // signed
wire [15:0] a110; // signed
wire [15:0] a111; // signed
wire [15:0] a112; // signed
reg [15:0] tm248; // signed
reg [15:0] tm255; // signed
wire [15:0] Y0; // signed
wire [15:0] Y1; // signed
wire [15:0] Y2; // signed
wire [15:0] Y3; // signed
reg [15:0] tm249; // signed
reg [15:0] tm256; // signed
assign a113 = X0;
assign a102 = a113;
assign a116 = X1;
assign a106 = a116;
assign a117 = X2;
assign a118 = X3;
assign a107 = tm19;
assign a109 = tm20;
assign Y0 = tm249;
assign Y1 = tm256;
D6_31752 instD6inst0_31752(.addr(i2[3:0]), .out(tm19), .clk(clk));
D8_31788 instD8inst0_31788(.addr(i2[3:0]), .out(tm20), .clk(clk));
multfix m31656(.a(tm55), .b(tm230), .clk(clk), .q_sc(a108), .rst(reset));
defparam m31656.WIDTH = 16;
multfix m31678(.a(tm56), .b(tm234), .clk(clk), .q_sc(a110), .rst(reset));
defparam m31678.WIDTH = 16;
multfix m31695(.a(tm56), .b(tm230), .clk(clk), .q_sc(a111), .rst(reset));
defparam m31695.WIDTH = 16;
multfix m31706(.a(tm55), .b(tm234), .clk(clk), .q_sc(a112), .rst(reset));
defparam m31706.WIDTH = 16;
subfxp sub31684(.a(a108), .b(a110), .clk(clk), .q(Y2)); // 6
defparam sub31684.width = 16;
addfxp add31713(.a(a111), .b(a112), .clk(clk), .q(Y3)); // 6
defparam add31713.width = 16;
always @(posedge clk) begin
if (reset == 1) begin
tm55 <= 0;
tm230 <= 0;
tm56 <= 0;
tm234 <= 0;
tm56 <= 0;
tm230 <= 0;
tm55 <= 0;
tm234 <= 0;
end
else begin
i2 <= i2_in;
X0 <= X0_in;
X1 <= X1_in;
X2 <= X2_in;
X3 <= X3_in;
next <= next_in;
tm227 <= a117;
tm231 <= a118;
tm243 <= a102;
tm250 <= a106;
tm228 <= tm227;
tm232 <= tm231;
tm244 <= tm243;
tm251 <= tm250;
tm229 <= tm228;
tm233 <= tm232;
tm245 <= tm244;
tm252 <= tm251;
tm55 <= a107;
tm56 <= a109;
tm230 <= tm229;
tm234 <= tm233;
tm246 <= tm245;
tm253 <= tm252;
tm247 <= tm246;
tm254 <= tm253;
tm248 <= tm247;
tm255 <= tm254;
tm249 <= tm248;
tm256 <= tm255;
end
end
endmodule
// Latency: 2
// Gap: 1
module codeBlock31793(clk, reset, next_in, next_out,
X0_in, Y0,
X1_in, Y1,
X2_in, Y2,
X3_in, Y3);
output next_out;
input clk, reset, next_in;
reg next;
input [15:0] X0_in,
X1_in,
X2_in,
X3_in;
reg [15:0] X0,
X1,
X2,
X3;
output [15:0] Y0,
Y1,
Y2,
Y3;
shiftRegFIFO shiftFIFO_33395(.X(next), .Y(next_out), .clk(clk));
defparam shiftFIFO_33395.depth = 1;
defparam shiftFIFO_33395.width = 1;
wire [15:0] a69; // signed
wire [15:0] a70; // signed
wire [15:0] a71; // signed
wire [15:0] a72; // signed
wire [15:0] t45; // signed
wire [15:0] t46; // signed
wire [15:0] t47; // signed
wire [15:0] t48; // signed
wire [15:0] Y0; // signed
wire [15:0] Y1; // signed
wire [15:0] Y2; // signed
wire [15:0] Y3; // signed
assign a69 = X0;
assign a70 = X2;
assign a71 = X1;
assign a72 = X3;
assign Y0 = t45;
assign Y1 = t46;
assign Y2 = t47;
assign Y3 = t48;
addfxp add31805(.a(a69), .b(a70), .clk(clk), .q(t45)); // 0
defparam add31805.width = 16;
addfxp add31820(.a(a71), .b(a72), .clk(clk), .q(t46)); // 0
defparam add31820.width = 16;
subfxp sub31834(.a(a69), .b(a70), .clk(clk), .q(t47)); // 0
defparam sub31834.width = 16;
subfxp sub31848(.a(a71), .b(a72), .clk(clk), .q(t48)); // 0
defparam sub31848.width = 16;
always @(posedge clk) begin
if (reset != 1) begin
X0 <= X0_in;
X1 <= X1_in;
X2 <= X2_in;
X3 <= X3_in;
next <= next_in;
end
end
endmodule
// Latency: 68
// Gap: 32
module rc31873(clk, reset, next, next_out,
X0, Y0,
X1, Y1,
X2, Y2,
X3, Y3);
output next_out;
input clk, reset, next;
input [15:0] X0,
X1,
X2,
X3;
output [15:0] Y0,
Y1,
Y2,
Y3;
wire [31:0] t0;
wire [31:0] s0;
assign t0 = {X0, X1};
wire [31:0] t1;
wire [31:0] s1;
assign t1 = {X2, X3};
assign Y0 = s0[31:16];
assign Y1 = s0[15:0];
assign Y2 = s1[31:16];
assign Y3 = s1[15:0];
perm31871 instPerm33396(.x0(t0), .y0(s0),
.x1(t1), .y1(s1),
.clk(clk), .next(next), .next_out(next_out), .reset(reset)
);
endmodule
module swNet31871(itr, clk, ct
, x0, y0
, x1, y1
);
parameter width = 32;
input [4:0] ct;
input clk;
input [0:0] itr;
input [width-1:0] x0;
output [width-1:0] y0;
reg [width-1:0] y0;
input [width-1:0] x1;
output [width-1:0] y1;
reg [width-1:0] y1;
wire [width-1:0] t0_0, t0_1;
reg [width-1:0] t1_0, t1_1;
reg [0:0] control;
always @(posedge clk) begin
case(ct)
5'd0: control <= 1'b1;
5'd1: control <= 1'b1;
5'd2: control <= 1'b1;
5'd3: control <= 1'b1;
5'd4: control <= 1'b1;
5'd5: control <= 1'b1;
5'd6: control <= 1'b1;
5'd7: control <= 1'b1;
5'd8: control <= 1'b1;
5'd9: control <= 1'b1;
5'd10: control <= 1'b1;
5'd11: control <= 1'b1;
5'd12: control <= 1'b1;
5'd13: control <= 1'b1;
5'd14: control <= 1'b1;
5'd15: control <= 1'b1;
5'd16: control <= 1'b0;
5'd17: control <= 1'b0;
5'd18: control <= 1'b0;
5'd19: control <= 1'b0;
5'd20: control <= 1'b0;
5'd21: control <= 1'b0;
5'd22: control <= 1'b0;
5'd23: control <= 1'b0;
5'd24: control <= 1'b0;
5'd25: control <= 1'b0;
5'd26: control <= 1'b0;
5'd27: control <= 1'b0;
5'd28: control <= 1'b0;
5'd29: control <= 1'b0;
5'd30: control <= 1'b0;
5'd31: control <= 1'b0;
endcase
end
// synthesis attribute rom_style of control is "distributed"
reg [0:0] control0;
always @(posedge clk) begin
control0 <= control;
end
assign t0_0 = x0;
assign t0_1 = x1;
always @(posedge clk) begin
t1_0 <= (control0[0] == 0) ? t0_0 : t0_1;
t1_1 <= (control0[0] == 0) ? t0_1 : t0_0;
end
always @(posedge clk) begin
y0 <= t1_0;
y1 <= t1_1;
end
endmodule
// Latency: 68
// Gap: 32
module perm31871(clk, next, reset, next_out,
x0, y0,
x1, y1);
parameter width = 32;
parameter depth = 32;
parameter depthX2 = 64;
parameter addrbits = 5;
parameter addrbitsplusone = 6;
parameter muxbits = 1;
input [width-1:0] x0;
output [width-1:0] y0;
wire [width-1:0] t0;
wire [width-1:0] s0;
input [width-1:0] x1;
output [width-1:0] y1;
wire [width-1:0] t1;
wire [width-1:0] s1;
input next, reset, clk;
output next_out;
reg [addrbits-1:0] s1rdloc, s2rdloc;
reg [addrbits-1:0] s1wr0;
reg [addrbits-1:0] s1rd0, s2wr0, s2rd0;
reg [addrbits-1:0] s1rd1, s2wr1, s2rd1;
reg s1wr_en, state1, state2, state3;
wire next2, next3, next4;
reg inFlip0, outFlip0_z, outFlip1;
wire inFlip1, outFlip0;
wire [0:0] tm21;
assign tm21 = 0;
shiftRegFIFO shiftFIFO_33401(.X(outFlip0), .Y(inFlip1), .clk(clk));
defparam shiftFIFO_33401.depth = 3;
defparam shiftFIFO_33401.width = 1;
shiftRegFIFO shiftFIFO_33402(.X(outFlip0_z), .Y(outFlip0), .clk(clk));
defparam shiftFIFO_33402.depth = 1;
defparam shiftFIFO_33402.width = 1;
// // shiftRegFIFO inFlip1Reg(outFlip0, inFlip1,
// defparam shiftRegFIFO.depth = 2;
// wi shiftRegFIFO.dth = 1;
// // shiftRegFIFO outFlip0Reg(outFlip0_z, outFlip0,
// defparam shiftRegFIFO.depth = 1;
// wi shiftRegFIFO.dth = 1;
memMod_dist s1mem0(x0, t0, {inFlip0, s1wr0}, {outFlip0, s1rd0}, s1wr_en, clk);
defparam s1mem0.depth = 64;
defparam s1mem0.width = 32;
defparam s1mem0.logDepth = 6;
memMod_dist s1mem1(x1, t1, {inFlip0, s1wr0}, {outFlip0, s1rd1}, s1wr_en, clk);
defparam s1mem1.depth = 64;
defparam s1mem1.width = 32;
defparam s1mem1.logDepth = 6;
nextReg nextReg_33413(.X(next), .Y(next2), .reset(reset), .clk(clk));
defparam nextReg_33413.depth = 31;
defparam nextReg_33413.logDepth = 5;
shiftRegFIFO shiftFIFO_33414(.X(next2), .Y(next3), .clk(clk));
defparam shiftFIFO_33414.depth = 4;
defparam shiftFIFO_33414.width = 1;
nextReg nextReg_33417(.X(next3), .Y(next4), .reset(reset), .clk(clk));
defparam nextReg_33417.depth = 32;
defparam nextReg_33417.logDepth = 5;
shiftRegFIFO shiftFIFO_33418(.X(next4), .Y(next_out), .clk(clk));
defparam shiftFIFO_33418.depth = 1;
defparam shiftFIFO_33418.width = 1;
shiftRegFIFO shiftFIFO_33421(.X(tm21), .Y(tm21_d), .clk(clk));
defparam shiftFIFO_33421.depth = 31;
defparam shiftFIFO_33421.width = 1;
shiftRegFIFO shiftFIFO_33424(.X(tm21_d), .Y(tm21_dd), .clk(clk));
defparam shiftFIFO_33424.depth = 3;
defparam shiftFIFO_33424.width = 1;
// // shiftRegFIFO1) n1(next, next2,
// defparam shiftRegFIFO1.depth = dept;
// wi shiftRegFIFO1.dth = 1;,
// // shiftRegFIFO n2(next2, next3,
// defparam shiftRegFIFO.depth = 3;
// wi shiftRegFIFO.dth = 1;
// // shiftRegFIFO n3(next3, next4,
// defparam shiftRegFIFO.depth = depth;
// wi shiftRegFIFO.dth = 1;
// // shiftRegFIFO n4(next4, next_out,
// defparam shiftRegFIFO.depth = 1;
// wi shiftRegFIFO.dth = 1;
wire [addrbits-1:0] muxCycle, writeCycle;
assign muxCycle = s1rdloc;
shiftRegFIFO shiftFIFO_33429(.X(muxCycle), .Y(writeCycle), .clk(clk));
defparam shiftFIFO_33429.depth = 3;
defparam shiftFIFO_33429.width = 5;
wire readInt, s2wr_en;
assign readInt = (state2 == 1);
shiftRegFIFO writeIntReg(readInt, s2wr_en, clk);
defparam writeIntReg.depth = 4;
defparam writeIntReg.width = 1;
memMod_dist s2mem0(s0, y0, {inFlip1, s2wr0}, {outFlip1, s2rdloc}, s2wr_en, clk);
defparam s2mem0.depth = 64;
defparam s2mem0.width = 32;
defparam s2mem0.logDepth = 6;
memMod_dist s2mem1(s1, y1, {inFlip1, s2wr1}, {outFlip1, s2rdloc}, s2wr_en, clk);
defparam s2mem1.depth = 64;
defparam s2mem1.width = 32;
defparam s2mem1.logDepth = 6;
always @(posedge clk) begin
if (reset == 1) begin
state1 <= 0;
inFlip0 <= 0;
end
else if (next == 1) begin
s1wr0 <= 0;
state1 <= 1;
s1wr_en <= 1;
inFlip0 <= (s1wr0 == depth-1) ? ~inFlip0 : inFlip0;
end
else begin
case(state1)
0: begin
s1wr0 <= 0;
state1 <= 0;
s1wr_en <= 0;
inFlip0 <= inFlip0;
end
1: begin
s1wr0 <= (s1wr0 == depth-1) ? 0 : s1wr0 + 1;
state1 <= 1;
s1wr_en <= 1;
inFlip0 <= (s1wr0 == depth-1) ? ~inFlip0 : inFlip0;
end
endcase
end
end
always @(posedge clk) begin
if (reset == 1) begin
state2 <= 0;
outFlip0_z <= 0;
end
else if (next2 == 1) begin
s1rdloc <= 0;
state2 <= 1;
outFlip0_z <= (s1rdloc == depth-1) ? ~outFlip0_z : outFlip0_z;
end
else begin
case(state2)
0: begin
s1rdloc <= 0;
state2 <= 0;
outFlip0_z <= outFlip0_z;
end
1: begin
s1rdloc <= (s1rdloc == depth-1) ? 0 : s1rdloc + 1;
state2 <= 1;
outFlip0_z <= (s1rdloc == depth-1) ? ~outFlip0_z : outFlip0_z;
end
endcase
end
end
always @(posedge clk) begin
if (reset == 1) begin
state3 <= 0;
outFlip1 <= 0;
end
else if (next4 == 1) begin
s2rdloc <= 0;
state3 <= 1;
outFlip1 <= (s2rdloc == depth-1) ? ~outFlip1 : outFlip1;
end
else begin
case(state3)
0: begin
s2rdloc <= 0;
state3 <= 0;
outFlip1 <= outFlip1;
end
1: begin
s2rdloc <= (s2rdloc == depth-1) ? 0 : s2rdloc + 1;
state3 <= 1;
outFlip1 <= (s2rdloc == depth-1) ? ~outFlip1 : outFlip1;
end
endcase
end
end
always @(posedge clk) begin
case({tm21_d, s1rdloc})
{1'd0, 5'd0}: s1rd0 <= 16;
{1'd0, 5'd1}: s1rd0 <= 17;
{1'd0, 5'd2}: s1rd0 <= 18;
{1'd0, 5'd3}: s1rd0 <= 19;
{1'd0, 5'd4}: s1rd0 <= 20;
{1'd0, 5'd5}: s1rd0 <= 21;
{1'd0, 5'd6}: s1rd0 <= 22;
{1'd0, 5'd7}: s1rd0 <= 23;
{1'd0, 5'd8}: s1rd0 <= 24;
{1'd0, 5'd9}: s1rd0 <= 25;
{1'd0, 5'd10}: s1rd0 <= 26;
{1'd0, 5'd11}: s1rd0 <= 27;
{1'd0, 5'd12}: s1rd0 <= 28;
{1'd0, 5'd13}: s1rd0 <= 29;
{1'd0, 5'd14}: s1rd0 <= 30;
{1'd0, 5'd15}: s1rd0 <= 31;
{1'd0, 5'd16}: s1rd0 <= 0;
{1'd0, 5'd17}: s1rd0 <= 1;
{1'd0, 5'd18}: s1rd0 <= 2;
{1'd0, 5'd19}: s1rd0 <= 3;
{1'd0, 5'd20}: s1rd0 <= 4;
{1'd0, 5'd21}: s1rd0 <= 5;
{1'd0, 5'd22}: s1rd0 <= 6;
{1'd0, 5'd23}: s1rd0 <= 7;
{1'd0, 5'd24}: s1rd0 <= 8;
{1'd0, 5'd25}: s1rd0 <= 9;
{1'd0, 5'd26}: s1rd0 <= 10;
{1'd0, 5'd27}: s1rd0 <= 11;
{1'd0, 5'd28}: s1rd0 <= 12;
{1'd0, 5'd29}: s1rd0 <= 13;
{1'd0, 5'd30}: s1rd0 <= 14;
{1'd0, 5'd31}: s1rd0 <= 15;
endcase
end
// synthesis attribute rom_style of s1rd0 is "block"
always @(posedge clk) begin
case({tm21_d, s1rdloc})
{1'd0, 5'd0}: s1rd1 <= 0;
{1'd0, 5'd1}: s1rd1 <= 1;
{1'd0, 5'd2}: s1rd1 <= 2;
{1'd0, 5'd3}: s1rd1 <= 3;
{1'd0, 5'd4}: s1rd1 <= 4;
{1'd0, 5'd5}: s1rd1 <= 5;
{1'd0, 5'd6}: s1rd1 <= 6;
{1'd0, 5'd7}: s1rd1 <= 7;
{1'd0, 5'd8}: s1rd1 <= 8;
{1'd0, 5'd9}: s1rd1 <= 9;
{1'd0, 5'd10}: s1rd1 <= 10;
{1'd0, 5'd11}: s1rd1 <= 11;
{1'd0, 5'd12}: s1rd1 <= 12;
{1'd0, 5'd13}: s1rd1 <= 13;
{1'd0, 5'd14}: s1rd1 <= 14;
{1'd0, 5'd15}: s1rd1 <= 15;
{1'd0, 5'd16}: s1rd1 <= 16;
{1'd0, 5'd17}: s1rd1 <= 17;
{1'd0, 5'd18}: s1rd1 <= 18;
{1'd0, 5'd19}: s1rd1 <= 19;
{1'd0, 5'd20}: s1rd1 <= 20;
{1'd0, 5'd21}: s1rd1 <= 21;
{1'd0, 5'd22}: s1rd1 <= 22;
{1'd0, 5'd23}: s1rd1 <= 23;
{1'd0, 5'd24}: s1rd1 <= 24;
{1'd0, 5'd25}: s1rd1 <= 25;
{1'd0, 5'd26}: s1rd1 <= 26;
{1'd0, 5'd27}: s1rd1 <= 27;
{1'd0, 5'd28}: s1rd1 <= 28;
{1'd0, 5'd29}: s1rd1 <= 29;
{1'd0, 5'd30}: s1rd1 <= 30;
{1'd0, 5'd31}: s1rd1 <= 31;
endcase
end
// synthesis attribute rom_style of s1rd1 is "block"
swNet31871 sw(tm21_d, clk, muxCycle, t0, s0, t1, s1);
always @(posedge clk) begin
case({tm21_dd, writeCycle})
{1'd0, 5'd0}: s2wr0 <= 16;
{1'd0, 5'd1}: s2wr0 <= 17;
{1'd0, 5'd2}: s2wr0 <= 18;
{1'd0, 5'd3}: s2wr0 <= 19;
{1'd0, 5'd4}: s2wr0 <= 20;
{1'd0, 5'd5}: s2wr0 <= 21;
{1'd0, 5'd6}: s2wr0 <= 22;
{1'd0, 5'd7}: s2wr0 <= 23;
{1'd0, 5'd8}: s2wr0 <= 24;
{1'd0, 5'd9}: s2wr0 <= 25;
{1'd0, 5'd10}: s2wr0 <= 26;
{1'd0, 5'd11}: s2wr0 <= 27;
{1'd0, 5'd12}: s2wr0 <= 28;
{1'd0, 5'd13}: s2wr0 <= 29;
{1'd0, 5'd14}: s2wr0 <= 30;
{1'd0, 5'd15}: s2wr0 <= 31;
{1'd0, 5'd16}: s2wr0 <= 0;
{1'd0, 5'd17}: s2wr0 <= 1;
{1'd0, 5'd18}: s2wr0 <= 2;
{1'd0, 5'd19}: s2wr0 <= 3;
{1'd0, 5'd20}: s2wr0 <= 4;
{1'd0, 5'd21}: s2wr0 <= 5;
{1'd0, 5'd22}: s2wr0 <= 6;
{1'd0, 5'd23}: s2wr0 <= 7;
{1'd0, 5'd24}: s2wr0 <= 8;
{1'd0, 5'd25}: s2wr0 <= 9;
{1'd0, 5'd26}: s2wr0 <= 10;
{1'd0, 5'd27}: s2wr0 <= 11;
{1'd0, 5'd28}: s2wr0 <= 12;
{1'd0, 5'd29}: s2wr0 <= 13;
{1'd0, 5'd30}: s2wr0 <= 14;
{1'd0, 5'd31}: s2wr0 <= 15;
endcase // case(writeCycle)
end // always @ (posedge clk)
// synthesis attribute rom_style of s2wr0 is "block"
always @(posedge clk) begin
case({tm21_dd, writeCycle})
{1'd0, 5'd0}: s2wr1 <= 0;
{1'd0, 5'd1}: s2wr1 <= 1;
{1'd0, 5'd2}: s2wr1 <= 2;
{1'd0, 5'd3}: s2wr1 <= 3;
{1'd0, 5'd4}: s2wr1 <= 4;
{1'd0, 5'd5}: s2wr1 <= 5;
{1'd0, 5'd6}: s2wr1 <= 6;
{1'd0, 5'd7}: s2wr1 <= 7;
{1'd0, 5'd8}: s2wr1 <= 8;
{1'd0, 5'd9}: s2wr1 <= 9;
{1'd0, 5'd10}: s2wr1 <= 10;
{1'd0, 5'd11}: s2wr1 <= 11;
{1'd0, 5'd12}: s2wr1 <= 12;
{1'd0, 5'd13}: s2wr1 <= 13;
{1'd0, 5'd14}: s2wr1 <= 14;
{1'd0, 5'd15}: s2wr1 <= 15;
{1'd0, 5'd16}: s2wr1 <= 16;
{1'd0, 5'd17}: s2wr1 <= 17;
{1'd0, 5'd18}: s2wr1 <= 18;
{1'd0, 5'd19}: s2wr1 <= 19;
{1'd0, 5'd20}: s2wr1 <= 20;
{1'd0, 5'd21}: s2wr1 <= 21;
{1'd0, 5'd22}: s2wr1 <= 22;
{1'd0, 5'd23}: s2wr1 <= 23;
{1'd0, 5'd24}: s2wr1 <= 24;
{1'd0, 5'd25}: s2wr1 <= 25;
{1'd0, 5'd26}: s2wr1 <= 26;
{1'd0, 5'd27}: s2wr1 <= 27;
{1'd0, 5'd28}: s2wr1 <= 28;
{1'd0, 5'd29}: s2wr1 <= 29;
{1'd0, 5'd30}: s2wr1 <= 30;
{1'd0, 5'd31}: s2wr1 <= 31;
endcase // case(writeCycle)
end // always @ (posedge clk)
// synthesis attribute rom_style of s2wr1 is "block"
endmodule
// Latency: 8
// Gap: 32
module DirSum_32171(clk, reset, next, next_out,
X0, Y0,
X1, Y1,
X2, Y2,
X3, Y3);
output next_out;
input clk, reset, next;
reg [4:0] i1;
input [15:0] X0,
X1,
X2,
X3;
output [15:0] Y0,
Y1,
Y2,
Y3;
always @(posedge clk) begin
if (reset == 1) begin
i1 <= 0;
end
else begin
if (next == 1)
i1 <= 0;
else if (i1 == 31)
i1 <= 0;
else
i1 <= i1 + 1;
end
end
codeBlock31875 codeBlockIsnt33434(.clk(clk), .reset(reset), .next_in(next), .next_out(next_out),
.i1_in(i1),
.X0_in(X0), .Y0(Y0),
.X1_in(X1), .Y1(Y1),
.X2_in(X2), .Y2(Y2),
.X3_in(X3), .Y3(Y3));
endmodule
module D2_32101(addr, out, clk);
input clk;
output [15:0] out;
reg [15:0] out, out2, out3;
input [4:0] addr;
always @(posedge clk) begin
out2 <= out3;
out <= out2;
case(addr)
0: out3 <= 16'h4000;
1: out3 <= 16'h3fb1;
2: out3 <= 16'h3ec5;
3: out3 <= 16'h3d3f;
4: out3 <= 16'h3b21;
5: out3 <= 16'h3871;
6: out3 <= 16'h3537;
7: out3 <= 16'h3179;
8: out3 <= 16'h2d41;
9: out3 <= 16'h289a;
10: out3 <= 16'h238e;
11: out3 <= 16'h1e2b;
12: out3 <= 16'h187e;
13: out3 <= 16'h1294;
14: out3 <= 16'hc7c;
15: out3 <= 16'h646;
16: out3 <= 16'h0;
17: out3 <= 16'hf9ba;
18: out3 <= 16'hf384;
19: out3 <= 16'hed6c;
20: out3 <= 16'he782;
21: out3 <= 16'he1d5;
22: out3 <= 16'hdc72;
23: out3 <= 16'hd766;
24: out3 <= 16'hd2bf;
25: out3 <= 16'hce87;
26: out3 <= 16'hcac9;
27: out3 <= 16'hc78f;
28: out3 <= 16'hc4df;
29: out3 <= 16'hc2c1;
30: out3 <= 16'hc13b;
31: out3 <= 16'hc04f;
default: out3 <= 0;
endcase
end
// synthesis attribute rom_style of out3 is "block"
endmodule
module D4_32169(addr, out, clk);
input clk;
output [15:0] out;
reg [15:0] out, out2, out3;
input [4:0] addr;
always @(posedge clk) begin
out2 <= out3;
out <= out2;
case(addr)
0: out3 <= 16'h0;
1: out3 <= 16'hf9ba;
2: out3 <= 16'hf384;
3: out3 <= 16'hed6c;
4: out3 <= 16'he782;
5: out3 <= 16'he1d5;
6: out3 <= 16'hdc72;
7: out3 <= 16'hd766;
8: out3 <= 16'hd2bf;
9: out3 <= 16'hce87;
10: out3 <= 16'hcac9;
11: out3 <= 16'hc78f;
12: out3 <= 16'hc4df;
13: out3 <= 16'hc2c1;
14: out3 <= 16'hc13b;
15: out3 <= 16'hc04f;
16: out3 <= 16'hc000;
17: out3 <= 16'hc04f;
18: out3 <= 16'hc13b;
19: out3 <= 16'hc2c1;
20: out3 <= 16'hc4df;
21: out3 <= 16'hc78f;
22: out3 <= 16'hcac9;
23: out3 <= 16'hce87;
24: out3 <= 16'hd2bf;
25: out3 <= 16'hd766;
26: out3 <= 16'hdc72;
27: out3 <= 16'he1d5;
28: out3 <= 16'he782;
29: out3 <= 16'hed6c;
30: out3 <= 16'hf384;
31: out3 <= 16'hf9ba;
default: out3 <= 0;
endcase
end
// synthesis attribute rom_style of out3 is "block"
endmodule
// Latency: 8
// Gap: 1
module codeBlock31875(clk, reset, next_in, next_out,
i1_in,
X0_in, Y0,
X1_in, Y1,
X2_in, Y2,
X3_in, Y3);
output next_out;
input clk, reset, next_in;
reg next;
input [4:0] i1_in;
reg [4:0] i1;
input [15:0] X0_in,
X1_in,
X2_in,
X3_in;
reg [15:0] X0,
X1,
X2,
X3;
output [15:0] Y0,
Y1,
Y2,
Y3;
shiftRegFIFO shiftFIFO_33437(.X(next), .Y(next_out), .clk(clk));
defparam shiftFIFO_33437.depth = 7;
defparam shiftFIFO_33437.width = 1;
wire [15:0] a53; // signed
wire [15:0] a42; // signed
wire [15:0] a56; // signed
wire [15:0] a46; // signed
wire [15:0] a57; // signed
wire [15:0] a58; // signed
reg [15:0] tm257; // signed
reg [15:0] tm261; // signed
reg [15:0] tm273; // signed
reg [15:0] tm280; // signed
reg [15:0] tm258; // signed
reg [15:0] tm262; // signed
reg [15:0] tm274; // signed
reg [15:0] tm281; // signed
wire [15:0] tm24; // signed
wire [15:0] a47; // signed
wire [15:0] tm25; // signed
wire [15:0] a49; // signed
reg [15:0] tm259; // signed
reg [15:0] tm263; // signed
reg [15:0] tm275; // signed
reg [15:0] tm282; // signed
reg [15:0] tm63; // signed
reg [15:0] tm64; // signed
reg [15:0] tm260; // signed
reg [15:0] tm264; // signed
reg [15:0] tm276; // signed
reg [15:0] tm283; // signed
reg [15:0] tm277; // signed
reg [15:0] tm284; // signed
wire [15:0] a48; // signed
wire [15:0] a50; // signed
wire [15:0] a51; // signed
wire [15:0] a52; // signed
reg [15:0] tm278; // signed
reg [15:0] tm285; // signed
wire [15:0] Y0; // signed
wire [15:0] Y1; // signed
wire [15:0] Y2; // signed
wire [15:0] Y3; // signed
reg [15:0] tm279; // signed
reg [15:0] tm286; // signed
assign a53 = X0;
assign a42 = a53;
assign a56 = X1;
assign a46 = a56;
assign a57 = X2;
assign a58 = X3;
assign a47 = tm24;
assign a49 = tm25;
assign Y0 = tm279;
assign Y1 = tm286;
D2_32101 instD2inst0_32101(.addr(i1[4:0]), .out(tm24), .clk(clk));
D4_32169 instD4inst0_32169(.addr(i1[4:0]), .out(tm25), .clk(clk));
multfix m31973(.a(tm63), .b(tm260), .clk(clk), .q_sc(a48), .rst(reset));
defparam m31973.WIDTH = 16;
multfix m31995(.a(tm64), .b(tm264), .clk(clk), .q_sc(a50), .rst(reset));
defparam m31995.WIDTH = 16;
multfix m32012(.a(tm64), .b(tm260), .clk(clk), .q_sc(a51), .rst(reset));
defparam m32012.WIDTH = 16;
multfix m32023(.a(tm63), .b(tm264), .clk(clk), .q_sc(a52), .rst(reset));
defparam m32023.WIDTH = 16;
subfxp sub32001(.a(a48), .b(a50), .clk(clk), .q(Y2)); // 6
defparam sub32001.width = 16;
addfxp add32030(.a(a51), .b(a52), .clk(clk), .q(Y3)); // 6
defparam add32030.width = 16;
always @(posedge clk) begin
if (reset == 1) begin
tm63 <= 0;
tm260 <= 0;
tm64 <= 0;
tm264 <= 0;
tm64 <= 0;
tm260 <= 0;
tm63 <= 0;
tm264 <= 0;
end
else begin
i1 <= i1_in;
X0 <= X0_in;
X1 <= X1_in;
X2 <= X2_in;
X3 <= X3_in;
next <= next_in;
tm257 <= a57;
tm261 <= a58;
tm273 <= a42;
tm280 <= a46;
tm258 <= tm257;
tm262 <= tm261;
tm274 <= tm273;
tm281 <= tm280;
tm259 <= tm258;
tm263 <= tm262;
tm275 <= tm274;
tm282 <= tm281;
tm63 <= a47;
tm64 <= a49;
tm260 <= tm259;
tm264 <= tm263;
tm276 <= tm275;
tm283 <= tm282;
tm277 <= tm276;
tm284 <= tm283;
tm278 <= tm277;
tm285 <= tm284;
tm279 <= tm278;
tm286 <= tm285;
end
end
endmodule
// Latency: 2
// Gap: 1
module codeBlock32174(clk, reset, next_in, next_out,
X0_in, Y0,
X1_in, Y1,
X2_in, Y2,
X3_in, Y3);
output next_out;
input clk, reset, next_in;
reg next;
input [15:0] X0_in,
X1_in,
X2_in,
X3_in;
reg [15:0] X0,
X1,
X2,
X3;
output [15:0] Y0,
Y1,
Y2,
Y3;
shiftRegFIFO shiftFIFO_33440(.X(next), .Y(next_out), .clk(clk));
defparam shiftFIFO_33440.depth = 1;
defparam shiftFIFO_33440.width = 1;
wire [15:0] a9; // signed
wire [15:0] a10; // signed
wire [15:0] a11; // signed
wire [15:0] a12; // signed
wire [15:0] t21; // signed
wire [15:0] t22; // signed
wire [15:0] t23; // signed
wire [15:0] t24; // signed
wire [15:0] Y0; // signed
wire [15:0] Y1; // signed
wire [15:0] Y2; // signed
wire [15:0] Y3; // signed
assign a9 = X0;
assign a10 = X2;
assign a11 = X1;
assign a12 = X3;
assign Y0 = t21;
assign Y1 = t22;
assign Y2 = t23;
assign Y3 = t24;
addfxp add32186(.a(a9), .b(a10), .clk(clk), .q(t21)); // 0
defparam add32186.width = 16;
addfxp add32201(.a(a11), .b(a12), .clk(clk), .q(t22)); // 0
defparam add32201.width = 16;
subfxp sub32215(.a(a9), .b(a10), .clk(clk), .q(t23)); // 0
defparam sub32215.width = 16;
subfxp sub32229(.a(a11), .b(a12), .clk(clk), .q(t24)); // 0
defparam sub32229.width = 16;
always @(posedge clk) begin
if (reset != 1) begin
X0 <= X0_in;
X1 <= X1_in;
X2 <= X2_in;
X3 <= X3_in;
next <= next_in;
end
end
endmodule
// Latency: 68
// Gap: 32
module rc32254(clk, reset, next, next_out,
X0, Y0,
X1, Y1,
X2, Y2,
X3, Y3);
output next_out;
input clk, reset, next;
input [15:0] X0,
X1,
X2,
X3;
output [15:0] Y0,
Y1,
Y2,
Y3;
wire [31:0] t0;
wire [31:0] s0;
assign t0 = {X0, X1};
wire [31:0] t1;
wire [31:0] s1;
assign t1 = {X2, X3};
assign Y0 = s0[31:16];
assign Y1 = s0[15:0];
assign Y2 = s1[31:16];
assign Y3 = s1[15:0];
perm32252 instPerm33441(.x0(t0), .y0(s0),
.x1(t1), .y1(s1),
.clk(clk), .next(next), .next_out(next_out), .reset(reset)
);
endmodule
module swNet32252(itr, clk, ct
, x0, y0
, x1, y1
);
parameter width = 32;
input [4:0] ct;
input clk;
input [0:0] itr;
input [width-1:0] x0;
output [width-1:0] y0;
reg [width-1:0] y0;
input [width-1:0] x1;
output [width-1:0] y1;
reg [width-1:0] y1;
wire [width-1:0] t0_0, t0_1;
reg [width-1:0] t1_0, t1_1;
reg [0:0] control;
always @(posedge clk) begin
case(ct)
5'd0: control <= 1'b1;
5'd1: control <= 1'b1;
5'd2: control <= 1'b1;
5'd3: control <= 1'b1;
5'd4: control <= 1'b1;
5'd5: control <= 1'b1;
5'd6: control <= 1'b1;
5'd7: control <= 1'b1;
5'd8: control <= 1'b1;
5'd9: control <= 1'b1;
5'd10: control <= 1'b1;
5'd11: control <= 1'b1;
5'd12: control <= 1'b1;
5'd13: control <= 1'b1;
5'd14: control <= 1'b1;
5'd15: control <= 1'b1;
5'd16: control <= 1'b0;
5'd17: control <= 1'b0;
5'd18: control <= 1'b0;
5'd19: control <= 1'b0;
5'd20: control <= 1'b0;
5'd21: control <= 1'b0;
5'd22: control <= 1'b0;
5'd23: control <= 1'b0;
5'd24: control <= 1'b0;
5'd25: control <= 1'b0;
5'd26: control <= 1'b0;
5'd27: control <= 1'b0;
5'd28: control <= 1'b0;
5'd29: control <= 1'b0;
5'd30: control <= 1'b0;
5'd31: control <= 1'b0;
endcase
end
// synthesis attribute rom_style of control is "distributed"
reg [0:0] control0;
always @(posedge clk) begin
control0 <= control;
end
assign t0_0 = x0;
assign t0_1 = x1;
always @(posedge clk) begin
t1_0 <= (control0[0] == 0) ? t0_0 : t0_1;
t1_1 <= (control0[0] == 0) ? t0_1 : t0_0;
end
always @(posedge clk) begin
y0 <= t1_0;
y1 <= t1_1;
end
endmodule
// Latency: 68
// Gap: 32
module perm32252(clk, next, reset, next_out,
x0, y0,
x1, y1);
parameter width = 32;
parameter depth = 32;
parameter depthX2 = 64;
parameter addrbits = 5;
parameter addrbitsplusone = 6;
parameter muxbits = 1;
input [width-1:0] x0;
output [width-1:0] y0;
wire [width-1:0] t0;
wire [width-1:0] s0;
input [width-1:0] x1;
output [width-1:0] y1;
wire [width-1:0] t1;
wire [width-1:0] s1;
input next, reset, clk;
output next_out;
reg [addrbits-1:0] s1rdloc, s2rdloc;
reg [addrbits-1:0] s1wr0;
reg [addrbits-1:0] s1rd0, s2wr0, s2rd0;
reg [addrbits-1:0] s1rd1, s2wr1, s2rd1;
reg s1wr_en, state1, state2, state3;
wire next2, next3, next4;
reg inFlip0, outFlip0_z, outFlip1;
wire inFlip1, outFlip0;
wire [0:0] tm26;
assign tm26 = 0;
shiftRegFIFO shiftFIFO_33446(.X(outFlip0), .Y(inFlip1), .clk(clk));
defparam shiftFIFO_33446.depth = 3;
defparam shiftFIFO_33446.width = 1;
shiftRegFIFO shiftFIFO_33447(.X(outFlip0_z), .Y(outFlip0), .clk(clk));
defparam shiftFIFO_33447.depth = 1;
defparam shiftFIFO_33447.width = 1;
// // shiftRegFIFO inFlip1Reg(outFlip0, inFlip1,
// defparam shiftRegFIFO.depth = 2;
// wi shiftRegFIFO.dth = 1;
// // shiftRegFIFO outFlip0Reg(outFlip0_z, outFlip0,
// defparam shiftRegFIFO.depth = 1;
// wi shiftRegFIFO.dth = 1;
memMod_dist s1mem0(x0, t0, {inFlip0, s1wr0}, {outFlip0, s1rd0}, s1wr_en, clk);
defparam s1mem0.depth = 64;
defparam s1mem0.width = 32;
defparam s1mem0.logDepth = 6;
memMod_dist s1mem1(x1, t1, {inFlip0, s1wr0}, {outFlip0, s1rd1}, s1wr_en, clk);
defparam s1mem1.depth = 64;
defparam s1mem1.width = 32;
defparam s1mem1.logDepth = 6;
nextReg nextReg_33458(.X(next), .Y(next2), .reset(reset), .clk(clk));
defparam nextReg_33458.depth = 31;
defparam nextReg_33458.logDepth = 5;
shiftRegFIFO shiftFIFO_33459(.X(next2), .Y(next3), .clk(clk));
defparam shiftFIFO_33459.depth = 4;
defparam shiftFIFO_33459.width = 1;
nextReg nextReg_33462(.X(next3), .Y(next4), .reset(reset), .clk(clk));
defparam nextReg_33462.depth = 32;
defparam nextReg_33462.logDepth = 5;
shiftRegFIFO shiftFIFO_33463(.X(next4), .Y(next_out), .clk(clk));
defparam shiftFIFO_33463.depth = 1;
defparam shiftFIFO_33463.width = 1;
shiftRegFIFO shiftFIFO_33466(.X(tm26), .Y(tm26_d), .clk(clk));
defparam shiftFIFO_33466.depth = 31;
defparam shiftFIFO_33466.width = 1;
shiftRegFIFO shiftFIFO_33469(.X(tm26_d), .Y(tm26_dd), .clk(clk));
defparam shiftFIFO_33469.depth = 3;
defparam shiftFIFO_33469.width = 1;
// // shiftRegFIFO1) n1(next, next2,
// defparam shiftRegFIFO1.depth = dept;
// wi shiftRegFIFO1.dth = 1;,
// // shiftRegFIFO n2(next2, next3,
// defparam shiftRegFIFO.depth = 3;
// wi shiftRegFIFO.dth = 1;
// // shiftRegFIFO n3(next3, next4,
// defparam shiftRegFIFO.depth = depth;
// wi shiftRegFIFO.dth = 1;
// // shiftRegFIFO n4(next4, next_out,
// defparam shiftRegFIFO.depth = 1;
// wi shiftRegFIFO.dth = 1;
wire [addrbits-1:0] muxCycle, writeCycle;
assign muxCycle = s1rdloc;
shiftRegFIFO shiftFIFO_33474(.X(muxCycle), .Y(writeCycle), .clk(clk));
defparam shiftFIFO_33474.depth = 3;
defparam shiftFIFO_33474.width = 5;
wire readInt, s2wr_en;
assign readInt = (state2 == 1);
shiftRegFIFO writeIntReg(readInt, s2wr_en, clk);
defparam writeIntReg.depth = 4;
defparam writeIntReg.width = 1;
memMod_dist s2mem0(s0, y0, {inFlip1, s2wr0}, {outFlip1, s2rdloc}, s2wr_en, clk);
defparam s2mem0.depth = 64;
defparam s2mem0.width = 32;
defparam s2mem0.logDepth = 6;
memMod_dist s2mem1(s1, y1, {inFlip1, s2wr1}, {outFlip1, s2rdloc}, s2wr_en, clk);
defparam s2mem1.depth = 64;
defparam s2mem1.width = 32;
defparam s2mem1.logDepth = 6;
always @(posedge clk) begin
if (reset == 1) begin
state1 <= 0;
inFlip0 <= 0;
end
else if (next == 1) begin
s1wr0 <= 0;
state1 <= 1;
s1wr_en <= 1;
inFlip0 <= (s1wr0 == depth-1) ? ~inFlip0 : inFlip0;
end
else begin
case(state1)
0: begin
s1wr0 <= 0;
state1 <= 0;
s1wr_en <= 0;
inFlip0 <= inFlip0;
end
1: begin
s1wr0 <= (s1wr0 == depth-1) ? 0 : s1wr0 + 1;
state1 <= 1;
s1wr_en <= 1;
inFlip0 <= (s1wr0 == depth-1) ? ~inFlip0 : inFlip0;
end
endcase
end
end
always @(posedge clk) begin
if (reset == 1) begin
state2 <= 0;
outFlip0_z <= 0;
end
else if (next2 == 1) begin
s1rdloc <= 0;
state2 <= 1;
outFlip0_z <= (s1rdloc == depth-1) ? ~outFlip0_z : outFlip0_z;
end
else begin
case(state2)
0: begin
s1rdloc <= 0;
state2 <= 0;
outFlip0_z <= outFlip0_z;
end
1: begin
s1rdloc <= (s1rdloc == depth-1) ? 0 : s1rdloc + 1;
state2 <= 1;
outFlip0_z <= (s1rdloc == depth-1) ? ~outFlip0_z : outFlip0_z;
end
endcase
end
end
always @(posedge clk) begin
if (reset == 1) begin
state3 <= 0;
outFlip1 <= 0;
end
else if (next4 == 1) begin
s2rdloc <= 0;
state3 <= 1;
outFlip1 <= (s2rdloc == depth-1) ? ~outFlip1 : outFlip1;
end
else begin
case(state3)
0: begin
s2rdloc <= 0;
state3 <= 0;
outFlip1 <= outFlip1;
end
1: begin
s2rdloc <= (s2rdloc == depth-1) ? 0 : s2rdloc + 1;
state3 <= 1;
outFlip1 <= (s2rdloc == depth-1) ? ~outFlip1 : outFlip1;
end
endcase
end
end
always @(posedge clk) begin
case({tm26_d, s1rdloc})
{1'd0, 5'd0}: s1rd0 <= 1;
{1'd0, 5'd1}: s1rd0 <= 3;
{1'd0, 5'd2}: s1rd0 <= 5;
{1'd0, 5'd3}: s1rd0 <= 7;
{1'd0, 5'd4}: s1rd0 <= 9;
{1'd0, 5'd5}: s1rd0 <= 11;
{1'd0, 5'd6}: s1rd0 <= 13;
{1'd0, 5'd7}: s1rd0 <= 15;
{1'd0, 5'd8}: s1rd0 <= 17;
{1'd0, 5'd9}: s1rd0 <= 19;
{1'd0, 5'd10}: s1rd0 <= 21;
{1'd0, 5'd11}: s1rd0 <= 23;
{1'd0, 5'd12}: s1rd0 <= 25;
{1'd0, 5'd13}: s1rd0 <= 27;
{1'd0, 5'd14}: s1rd0 <= 29;
{1'd0, 5'd15}: s1rd0 <= 31;
{1'd0, 5'd16}: s1rd0 <= 0;
{1'd0, 5'd17}: s1rd0 <= 2;
{1'd0, 5'd18}: s1rd0 <= 4;
{1'd0, 5'd19}: s1rd0 <= 6;
{1'd0, 5'd20}: s1rd0 <= 8;
{1'd0, 5'd21}: s1rd0 <= 10;
{1'd0, 5'd22}: s1rd0 <= 12;
{1'd0, 5'd23}: s1rd0 <= 14;
{1'd0, 5'd24}: s1rd0 <= 16;
{1'd0, 5'd25}: s1rd0 <= 18;
{1'd0, 5'd26}: s1rd0 <= 20;
{1'd0, 5'd27}: s1rd0 <= 22;
{1'd0, 5'd28}: s1rd0 <= 24;
{1'd0, 5'd29}: s1rd0 <= 26;
{1'd0, 5'd30}: s1rd0 <= 28;
{1'd0, 5'd31}: s1rd0 <= 30;
endcase
end
// synthesis attribute rom_style of s1rd0 is "block"
always @(posedge clk) begin
case({tm26_d, s1rdloc})
{1'd0, 5'd0}: s1rd1 <= 0;
{1'd0, 5'd1}: s1rd1 <= 2;
{1'd0, 5'd2}: s1rd1 <= 4;
{1'd0, 5'd3}: s1rd1 <= 6;
{1'd0, 5'd4}: s1rd1 <= 8;
{1'd0, 5'd5}: s1rd1 <= 10;
{1'd0, 5'd6}: s1rd1 <= 12;
{1'd0, 5'd7}: s1rd1 <= 14;
{1'd0, 5'd8}: s1rd1 <= 16;
{1'd0, 5'd9}: s1rd1 <= 18;
{1'd0, 5'd10}: s1rd1 <= 20;
{1'd0, 5'd11}: s1rd1 <= 22;
{1'd0, 5'd12}: s1rd1 <= 24;
{1'd0, 5'd13}: s1rd1 <= 26;
{1'd0, 5'd14}: s1rd1 <= 28;
{1'd0, 5'd15}: s1rd1 <= 30;
{1'd0, 5'd16}: s1rd1 <= 1;
{1'd0, 5'd17}: s1rd1 <= 3;
{1'd0, 5'd18}: s1rd1 <= 5;
{1'd0, 5'd19}: s1rd1 <= 7;
{1'd0, 5'd20}: s1rd1 <= 9;
{1'd0, 5'd21}: s1rd1 <= 11;
{1'd0, 5'd22}: s1rd1 <= 13;
{1'd0, 5'd23}: s1rd1 <= 15;
{1'd0, 5'd24}: s1rd1 <= 17;
{1'd0, 5'd25}: s1rd1 <= 19;
{1'd0, 5'd26}: s1rd1 <= 21;
{1'd0, 5'd27}: s1rd1 <= 23;
{1'd0, 5'd28}: s1rd1 <= 25;
{1'd0, 5'd29}: s1rd1 <= 27;
{1'd0, 5'd30}: s1rd1 <= 29;
{1'd0, 5'd31}: s1rd1 <= 31;
endcase
end
// synthesis attribute rom_style of s1rd1 is "block"
swNet32252 sw(tm26_d, clk, muxCycle, t0, s0, t1, s1);
always @(posedge clk) begin
case({tm26_dd, writeCycle})
{1'd0, 5'd0}: s2wr0 <= 16;
{1'd0, 5'd1}: s2wr0 <= 17;
{1'd0, 5'd2}: s2wr0 <= 18;
{1'd0, 5'd3}: s2wr0 <= 19;
{1'd0, 5'd4}: s2wr0 <= 20;
{1'd0, 5'd5}: s2wr0 <= 21;
{1'd0, 5'd6}: s2wr0 <= 22;
{1'd0, 5'd7}: s2wr0 <= 23;
{1'd0, 5'd8}: s2wr0 <= 24;
{1'd0, 5'd9}: s2wr0 <= 25;
{1'd0, 5'd10}: s2wr0 <= 26;
{1'd0, 5'd11}: s2wr0 <= 27;
{1'd0, 5'd12}: s2wr0 <= 28;
{1'd0, 5'd13}: s2wr0 <= 29;
{1'd0, 5'd14}: s2wr0 <= 30;
{1'd0, 5'd15}: s2wr0 <= 31;
{1'd0, 5'd16}: s2wr0 <= 0;
{1'd0, 5'd17}: s2wr0 <= 1;
{1'd0, 5'd18}: s2wr0 <= 2;
{1'd0, 5'd19}: s2wr0 <= 3;
{1'd0, 5'd20}: s2wr0 <= 4;
{1'd0, 5'd21}: s2wr0 <= 5;
{1'd0, 5'd22}: s2wr0 <= 6;
{1'd0, 5'd23}: s2wr0 <= 7;
{1'd0, 5'd24}: s2wr0 <= 8;
{1'd0, 5'd25}: s2wr0 <= 9;
{1'd0, 5'd26}: s2wr0 <= 10;
{1'd0, 5'd27}: s2wr0 <= 11;
{1'd0, 5'd28}: s2wr0 <= 12;
{1'd0, 5'd29}: s2wr0 <= 13;
{1'd0, 5'd30}: s2wr0 <= 14;
{1'd0, 5'd31}: s2wr0 <= 15;
endcase // case(writeCycle)
end // always @ (posedge clk)
// synthesis attribute rom_style of s2wr0 is "block"
always @(posedge clk) begin
case({tm26_dd, writeCycle})
{1'd0, 5'd0}: s2wr1 <= 0;
{1'd0, 5'd1}: s2wr1 <= 1;
{1'd0, 5'd2}: s2wr1 <= 2;
{1'd0, 5'd3}: s2wr1 <= 3;
{1'd0, 5'd4}: s2wr1 <= 4;
{1'd0, 5'd5}: s2wr1 <= 5;
{1'd0, 5'd6}: s2wr1 <= 6;
{1'd0, 5'd7}: s2wr1 <= 7;
{1'd0, 5'd8}: s2wr1 <= 8;
{1'd0, 5'd9}: s2wr1 <= 9;
{1'd0, 5'd10}: s2wr1 <= 10;
{1'd0, 5'd11}: s2wr1 <= 11;
{1'd0, 5'd12}: s2wr1 <= 12;
{1'd0, 5'd13}: s2wr1 <= 13;
{1'd0, 5'd14}: s2wr1 <= 14;
{1'd0, 5'd15}: s2wr1 <= 15;
{1'd0, 5'd16}: s2wr1 <= 16;
{1'd0, 5'd17}: s2wr1 <= 17;
{1'd0, 5'd18}: s2wr1 <= 18;
{1'd0, 5'd19}: s2wr1 <= 19;
{1'd0, 5'd20}: s2wr1 <= 20;
{1'd0, 5'd21}: s2wr1 <= 21;
{1'd0, 5'd22}: s2wr1 <= 22;
{1'd0, 5'd23}: s2wr1 <= 23;
{1'd0, 5'd24}: s2wr1 <= 24;
{1'd0, 5'd25}: s2wr1 <= 25;
{1'd0, 5'd26}: s2wr1 <= 26;
{1'd0, 5'd27}: s2wr1 <= 27;
{1'd0, 5'd28}: s2wr1 <= 28;
{1'd0, 5'd29}: s2wr1 <= 29;
{1'd0, 5'd30}: s2wr1 <= 30;
{1'd0, 5'd31}: s2wr1 <= 31;
endcase // case(writeCycle)
end // always @ (posedge clk)
// synthesis attribute rom_style of s2wr1 is "block"
endmodule
module multfix(clk, rst, a, b, q_sc, q_unsc);
parameter WIDTH=35;
input [WIDTH-1:0] a,b; // signed
output [WIDTH-1:0] q_sc;
output [WIDTH-1:0] q_unsc;
input clk, rst;
reg [2*WIDTH-1:0] q_0; // signed
reg [2*WIDTH-1:0] q_1; // signed
wire [2*WIDTH-1:0] res; // signed
assign res = q_1;
assign q_unsc = res[WIDTH-1:0];
assign q_sc = {res[2*WIDTH-1], res[2*WIDTH-4:WIDTH-2]};
always @(posedge clk) begin
q_0 <= a * b;
q_1 <= q_0;
end
endmodule
module addfxp(a, b, q, clk);
parameter width = 16;
input [width-1:0] a, b; // signed
input clk;
output [width-1:0] q; // signed
reg [width-1:0] res; // signed
assign q = res[0];
integer i;
always @(posedge clk) begin
res[0] <= a+b;
end
endmodule
module subfxp(a, b, q, clk);
parameter width = 16;
input [width-1:0] a, b; // signed
input clk;
output [width-1:0] q; // signed
reg [width-1:0] res; // signed
assign q = res;
always @(posedge clk) begin
res <= a-b;
end
endmodule