//https://www.xilinx.com/support/documentation/sw_manuals/xilinx14_1/7series_scm.pdf //Places one of every FF primitive /* LDC => LDCE LDE => LDCE LDP => LDPE */ module top(input clk, stb, di, output do); localparam integer DIN_N = 120; localparam integer DOUT_N = 30; reg [DIN_N-1:0] din; wire [DOUT_N-1:0] dout; reg [DIN_N-1:0] din_shr; reg [DOUT_N-1:0] dout_shr; always @(posedge clk) begin din_shr <= {din_shr, di}; dout_shr <= {dout_shr, din_shr[DIN_N-1]}; if (stb) begin din <= din_shr; dout_shr <= dout; end end assign do = dout_shr[DOUT_N-1]; roi roi ( .clk(clk), .din(din), .dout(dout) ); endmodule module roi(input clk, input [119:0] din, output [29:0] dout); /* clbs = ( 'FD', 'FD_1', 'FDC', 'FDC_1', 'FDCE', 'FDCE_1', 'FDE', 'FDE_1', 'FDP', 'FDP_1', 'FDPE', 'FDPE_1', 'FDR', 'FDR_1', 'FDRE', 'FDRE_1', 'FDS', 'FDS_1', 'FDSE', 'FDSE_1', 'LDC', 'LDC_1', 'LDCE', 'LDCE_1', 'LDE', 'LDE_1', 'LDPE', 'LDPE_1', 'LDP', 'LDP_1', ) for i, clb in enumerate(clbs): print 'clb_%s clb_%s (.clk(clk), .din(din[ %d +: 4]), .dout(dout[ %d ]));' % (clb, clb, i * 4, i * 1) */ //FD clb_FD clb_FD (.clk(clk), .din(din[ 0 +: 4]), .dout(dout[ 0])); clb_FD_1 clb_FD_1 (.clk(clk), .din(din[ 4 +: 4]), .dout(dout[ 1])); clb_FDC clb_FDC (.clk(clk), .din(din[ 8 +: 4]), .dout(dout[ 2])); clb_FDC_1 clb_FDC_1 (.clk(clk), .din(din[ 12 +: 4]), .dout(dout[ 3])); clb_FDCE clb_FDCE (.clk(clk), .din(din[ 16 +: 4]), .dout(dout[ 4])); clb_FDCE_1 clb_FDCE_1 (.clk(clk), .din(din[ 20 +: 4]), .dout(dout[ 5])); clb_FDE clb_FDE (.clk(clk), .din(din[ 24 +: 4]), .dout(dout[ 6])); clb_FDE_1 clb_FDE_1 (.clk(clk), .din(din[ 28 +: 4]), .dout(dout[ 7])); clb_FDP clb_FDP (.clk(clk), .din(din[ 32 +: 4]), .dout(dout[ 8])); clb_FDP_1 clb_FDP_1 (.clk(clk), .din(din[ 36 +: 4]), .dout(dout[ 9])); clb_FDPE clb_FDPE (.clk(clk), .din(din[ 40 +: 4]), .dout(dout[ 10])); clb_FDPE_1 clb_FDPE_1 (.clk(clk), .din(din[ 44 +: 4]), .dout(dout[ 11])); clb_FDR clb_FDR (.clk(clk), .din(din[ 48 +: 4]), .dout(dout[ 12])); clb_FDR_1 clb_FDR_1 (.clk(clk), .din(din[ 52 +: 4]), .dout(dout[ 13])); clb_FDRE clb_FDRE (.clk(clk), .din(din[ 56 +: 4]), .dout(dout[ 14])); clb_FDRE_1 clb_FDRE_1 (.clk(clk), .din(din[ 60 +: 4]), .dout(dout[ 15])); clb_FDS clb_FDS (.clk(clk), .din(din[ 64 +: 4]), .dout(dout[ 16])); clb_FDS_1 clb_FDS_1 (.clk(clk), .din(din[ 68 +: 4]), .dout(dout[ 17])); clb_FDSE clb_FDSE (.clk(clk), .din(din[ 72 +: 4]), .dout(dout[ 18])); clb_FDSE_1 clb_FDSE_1 (.clk(clk), .din(din[ 76 +: 4]), .dout(dout[ 19])); //LD clb_LDC clb_LDC (.clk(clk), .din(din[ 80 +: 4]), .dout(dout[ 20 ])); clb_LDC_1 clb_LDC_1 (.clk(clk), .din(din[ 84 +: 4]), .dout(dout[ 21 ])); clb_LDCE clb_LDCE (.clk(clk), .din(din[ 88 +: 4]), .dout(dout[ 22 ])); clb_LDCE_1 clb_LDCE_1 (.clk(clk), .din(din[ 92 +: 4]), .dout(dout[ 23 ])); clb_LDE clb_LDE (.clk(clk), .din(din[ 96 +: 4]), .dout(dout[ 24 ])); clb_LDE_1 clb_LDE_1 (.clk(clk), .din(din[ 100 +: 4]), .dout(dout[ 25 ])); clb_LDPE clb_LDPE (.clk(clk), .din(din[ 104 +: 4]), .dout(dout[ 26 ])); clb_LDPE_1 clb_LDPE_1 (.clk(clk), .din(din[ 108 +: 4]), .dout(dout[ 27 ])); clb_LDP clb_LDP (.clk(clk), .din(din[ 112 +: 4]), .dout(dout[ 28 ])); clb_LDP_1 clb_LDP_1 (.clk(clk), .din(din[ 116 +: 4]), .dout(dout[ 29 ])); endmodule // --------------------------------------------------------------------- module clb_FD (input clk, input [3:0] din, output dout); (* LOC="SLICE_X16Y100", BEL="AFF" *) FD ff ( .C(clk), .Q(dout), .D(din[0]) ); endmodule module clb_FD_1 (input clk, input [3:0] din, output dout); (* LOC="SLICE_X16Y101", BEL="AFF" *) FD_1 ff ( .C(clk), .Q(dout), .D(din[0]) ); endmodule module clb_FDC (input clk, input [3:0] din, output dout); (* LOC="SLICE_X16Y102", BEL="AFF" *) FDC ff ( .C(clk), .Q(dout), .CLR(din[0]), .D(din[1]) ); endmodule module clb_FDC_1 (input clk, input [3:0] din, output dout); (* LOC="SLICE_X16Y103", BEL="AFF" *) FDC_1 ff ( .C(clk), .Q(dout), .CLR(din[0]), .D(din[1]) ); endmodule module clb_FDCE (input clk, input [3:0] din, output dout); (* LOC="SLICE_X16Y104", BEL="AFF" *) FDCE ff ( .C(clk), .Q(dout), .CE(din[0]), .CLR(din[1]), .D(din[2]) ); endmodule module clb_FDCE_1 (input clk, input [3:0] din, output dout); (* LOC="SLICE_X16Y105", BEL="AFF" *) FDCE_1 ff ( .C(clk), .Q(dout), .CE(din[0]), .CLR(din[1]), .D(din[2]) ); endmodule module clb_FDE (input clk, input [3:0] din, output dout); (* LOC="SLICE_X16Y106", BEL="AFF" *) FDE ff ( .C(clk), .Q(dout), .D(din[0]), .CE(din[1]) ); endmodule module clb_FDE_1 (input clk, input [3:0] din, output dout); (* LOC="SLICE_X16Y107", BEL="AFF" *) FDE_1 ff ( .C(clk), .Q(dout), .D(din[0]), .CE(din[1]) ); endmodule module clb_FDP (input clk, input [3:0] din, output dout); (* LOC="SLICE_X16Y108", BEL="AFF" *) FDP ff ( .C(clk), .Q(dout), .D(din[0]), .PRE(din[1]) ); endmodule module clb_FDP_1 (input clk, input [3:0] din, output dout); (* LOC="SLICE_X16Y109", BEL="AFF" *) FDP_1 ff ( .C(clk), .Q(dout), .D(din[0]), .PRE(din[1]) ); endmodule module clb_FDPE (input clk, input [3:0] din, output dout); (* LOC="SLICE_X16Y110", BEL="AFF" *) FDPE ff ( .C(clk), .Q(dout), .CE(din[0]), .PRE(din[1]), .D(din[2]) ); endmodule module clb_FDPE_1 (input clk, input [3:0] din, output dout); (* LOC="SLICE_X16Y111", BEL="AFF" *) FDPE_1 ff ( .C(clk), .Q(dout), .CE(din[0]), .PRE(din[1]), .D(din[2]) ); endmodule module clb_FDR (input clk, input [3:0] din, output dout); (* LOC="SLICE_X16Y112", BEL="AFF" *) FDR ff ( .C(clk), .Q(dout), .D(din[0]), .R(din[1]) ); endmodule module clb_FDR_1 (input clk, input [3:0] din, output dout); (* LOC="SLICE_X16Y113", BEL="AFF" *) FDR_1 ff ( .C(clk), .Q(dout), .D(din[0]), .R(din[1]) ); endmodule module clb_FDRE (input clk, input [3:0] din, output dout); (* LOC="SLICE_X16Y114", BEL="AFF" *) FDRE ff ( .C(clk), .Q(dout), .CE(din[0]), .R(din[1]), .D(din[2]) ); endmodule module clb_FDRE_1 (input clk, input [3:0] din, output dout); (* LOC="SLICE_X16Y115", BEL="AFF" *) FDRE_1 ff ( .C(clk), .Q(dout), .CE(din[0]), .R(din[1]), .D(din[2]) ); endmodule module clb_FDS (input clk, input [3:0] din, output dout); (* LOC="SLICE_X16Y116", BEL="AFF" *) FDS ff ( .C(clk), .Q(dout), .S(din[0]), .D(din[1]) ); endmodule module clb_FDS_1 (input clk, input [3:0] din, output dout); (* LOC="SLICE_X16Y117", BEL="AFF" *) FDS_1 ff ( .C(clk), .Q(dout), .S(din[0]), .D(din[1]) ); endmodule module clb_FDSE (input clk, input [3:0] din, output dout); (* LOC="SLICE_X16Y118", BEL="AFF" *) FDSE ff ( .C(clk), .Q(dout), .CE(din[0]), .S(din[1]), .D(din[2]) ); endmodule module clb_FDSE_1 (input clk, input [3:0] din, output dout); (* LOC="SLICE_X16Y119", BEL="AFF" *) FDSE_1 ff ( .C(clk), .Q(dout), .CE(din[0]), .S(din[1]), .D(din[2]) ); endmodule //******************************************************************************** module clb_LDC (input clk, input [3:0] din, output dout); parameter LOC="SLICE_X16Y120"; parameter BEL="AFF"; (* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH *) LDC ff ( .G(clk), .Q(dout), .D(din[0]), .CLR(din[1]) ); endmodule module clb_LDC_1 (input clk, input [3:0] din, output dout); parameter LOC="SLICE_X16Y121"; parameter BEL="AFF"; (* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH *) LDC_1 ff ( .G(clk), .Q(dout), .D(din[0]), .CLR(din[1]) ); endmodule module clb_LDCE (input clk, input [3:0] din, output dout); parameter LOC="SLICE_X16Y122"; parameter BEL="AFF"; (* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH *) LDCE ff ( .G(clk), //NOTE: diagram shows two outputs. Error? .Q(dout), .D(din[0]), .GE(din[1]), .CLR(din[2]) ); endmodule module clb_LDCE_1 (input clk, input [3:0] din, output dout); parameter LOC="SLICE_X16Y123"; parameter BEL="AFF"; (* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH *) LDCE_1 ff ( .G(clk), //NOTE: diagram shows two outputs. Error? .Q(dout), .D(din[0]), .GE(din[1]), .CLR(din[2]) ); endmodule module clb_LDE (input clk, input [3:0] din, output dout); parameter LOC="SLICE_X16Y124"; parameter BEL="AFF"; (* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH *) LDE ff ( .G(clk), .Q(dout), .D(din[0]), .GE(din[1]) ); endmodule module clb_LDE_1 (input clk, input [3:0] din, output dout); parameter LOC="SLICE_X16Y125"; parameter BEL="AFF"; (* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH *) LDE_1 ff ( .G(clk), .Q(dout), .D(din[0]), .GE(din[1]) ); endmodule module clb_LDP (input clk, input [3:0] din, output dout); parameter LOC="SLICE_X16Y126"; parameter BEL="AFF"; (* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH *) LDP ff ( .G(clk), .Q(dout), .D(din[0]), .PRE(din[1]) ); endmodule module clb_LDP_1 (input clk, input [3:0] din, output dout); parameter LOC="SLICE_X16Y127"; parameter BEL="AFF"; (* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH *) LDP_1 ff ( .G(clk), .Q(dout), .D(din[0]), .PRE(din[1]) ); endmodule module clb_LDPE (input clk, input [3:0] din, output dout); parameter LOC="SLICE_X16Y128"; parameter BEL="AFF"; (* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH *) LDPE ff ( .G(clk), .Q(dout), .PRE(din[0]), .D(din[1]), .GE(din[2]) ); endmodule module clb_LDPE_1 (input clk, input [3:0] din, output dout); parameter LOC="SLICE_X16Y129"; parameter BEL="AFF"; (* LOC=LOC, BEL=BEL, KEEP, DONT_TOUCH *) LDPE_1 ff ( .G(clk), .Q(dout), .PRE(din[0]), .D(din[1]), .GE(din[2]) ); endmodule