mirror of https://github.com/YosysHQ/yosys.git
Merge pull request #712 from mmicko/anlogic-support
Initial support for Anlogic FPGA
This commit is contained in:
commit
1a260ce89b
|
@ -0,0 +1,8 @@
|
||||||
|
|
||||||
|
OBJS += techlibs/anlogic/synth_anlogic.o
|
||||||
|
OBJS += techlibs/anlogic/anlogic_eqn.o
|
||||||
|
|
||||||
|
$(eval $(call add_share_file,share/anlogic,techlibs/anlogic/cells_map.v))
|
||||||
|
$(eval $(call add_share_file,share/anlogic,techlibs/anlogic/arith_map.v))
|
||||||
|
$(eval $(call add_share_file,share/anlogic,techlibs/anlogic/cells_sim.v))
|
||||||
|
$(eval $(call add_share_file,share/anlogic,techlibs/anlogic/eagle_bb.v))
|
|
@ -0,0 +1,113 @@
|
||||||
|
/*
|
||||||
|
* yosys -- Yosys Open SYnthesis Suite
|
||||||
|
*
|
||||||
|
* Copyright (C) 2018 Miodrag Milanovic <miodrag@symbioticeda.com>
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and/or distribute this software for any
|
||||||
|
* purpose with or without fee is hereby granted, provided that the above
|
||||||
|
* copyright notice and this permission notice appear in all copies.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "kernel/yosys.h"
|
||||||
|
#include "kernel/sigtools.h"
|
||||||
|
|
||||||
|
USING_YOSYS_NAMESPACE
|
||||||
|
PRIVATE_NAMESPACE_BEGIN
|
||||||
|
|
||||||
|
struct AnlogicEqnPass : public Pass {
|
||||||
|
AnlogicEqnPass() : Pass("anlogic_eqn", "Anlogic: Calculate equations for luts") { }
|
||||||
|
void help() YS_OVERRIDE
|
||||||
|
{
|
||||||
|
log("\n");
|
||||||
|
log(" anlogic_eqn [selection]\n");
|
||||||
|
log("\n");
|
||||||
|
log("Calculate equations for luts since bitstream generator depends on it.\n");
|
||||||
|
log("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
Const init2eqn(Const init, int inputs)
|
||||||
|
{
|
||||||
|
std::string init_bits = init.as_string();
|
||||||
|
const char* names[] = { "A" , "B", "C", "D", "E", "F" };
|
||||||
|
|
||||||
|
std::string eqn;
|
||||||
|
int width = (int)pow(2,inputs);
|
||||||
|
for(int i=0;i<width;i++)
|
||||||
|
{
|
||||||
|
if (init_bits[width-1-i]=='1')
|
||||||
|
{
|
||||||
|
eqn += "(";
|
||||||
|
for(int j=0;j<inputs;j++)
|
||||||
|
{
|
||||||
|
if (i & (1<<j))
|
||||||
|
eqn += names[j];
|
||||||
|
else
|
||||||
|
eqn += std::string("~") + names[j];
|
||||||
|
|
||||||
|
if (j!=(inputs-1)) eqn += "*";
|
||||||
|
}
|
||||||
|
eqn += ")+";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (eqn.empty()) return Const("0");
|
||||||
|
eqn = eqn.substr(0, eqn.length()-1);
|
||||||
|
return Const(eqn);
|
||||||
|
}
|
||||||
|
|
||||||
|
void execute(std::vector<std::string> args, RTLIL::Design *design) YS_OVERRIDE
|
||||||
|
{
|
||||||
|
log_header(design, "Executing ANLOGIC_EQN pass (calculate equations for luts).\n");
|
||||||
|
|
||||||
|
extra_args(args, args.size(), design);
|
||||||
|
|
||||||
|
size_t cnt = 0;
|
||||||
|
for (auto module : design->selected_modules())
|
||||||
|
{
|
||||||
|
for (auto cell : module->selected_cells())
|
||||||
|
{
|
||||||
|
if (cell->type == "\\AL_MAP_LUT1")
|
||||||
|
{
|
||||||
|
cell->setParam("\\EQN", init2eqn(cell->getParam("\\INIT"),1));
|
||||||
|
cnt++;
|
||||||
|
}
|
||||||
|
if (cell->type == "\\AL_MAP_LUT2")
|
||||||
|
{
|
||||||
|
cell->setParam("\\EQN", init2eqn(cell->getParam("\\INIT"),2));
|
||||||
|
cnt++;
|
||||||
|
}
|
||||||
|
if (cell->type == "\\AL_MAP_LUT3")
|
||||||
|
{
|
||||||
|
cell->setParam("\\EQN", init2eqn(cell->getParam("\\INIT"),3));
|
||||||
|
cnt++;
|
||||||
|
}
|
||||||
|
if (cell->type == "\\AL_MAP_LUT4")
|
||||||
|
{
|
||||||
|
cell->setParam("\\EQN", init2eqn(cell->getParam("\\INIT"),4));
|
||||||
|
cnt++;
|
||||||
|
}
|
||||||
|
if (cell->type == "\\AL_MAP_LUT5")
|
||||||
|
{
|
||||||
|
cell->setParam("\\EQN", init2eqn(cell->getParam("\\INIT"),5));
|
||||||
|
cnt++;
|
||||||
|
}
|
||||||
|
if (cell->type == "\\AL_MAP_LUT6")
|
||||||
|
{
|
||||||
|
cell->setParam("\\EQN", init2eqn(cell->getParam("\\INIT"),6));
|
||||||
|
cnt++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
log_header(design, "Updated %lu of AL_MAP_LUT* elements with equation.\n", cnt);
|
||||||
|
}
|
||||||
|
} AnlogicEqnPass;
|
||||||
|
|
||||||
|
PRIVATE_NAMESPACE_END
|
|
@ -0,0 +1,84 @@
|
||||||
|
/*
|
||||||
|
* yosys -- Yosys Open SYnthesis Suite
|
||||||
|
*
|
||||||
|
* Copyright (C) 2018 Miodrag Milanovic <miodrag@symbioticeda.com>
|
||||||
|
* Copyright (C) 2012 Clifford Wolf <clifford@clifford.at>
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and/or distribute this software for any
|
||||||
|
* purpose with or without fee is hereby granted, provided that the above
|
||||||
|
* copyright notice and this permission notice appear in all copies.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
(* techmap_celltype = "$alu" *)
|
||||||
|
module _80_anlogic_alu (A, B, CI, BI, X, Y, CO);
|
||||||
|
parameter A_SIGNED = 0;
|
||||||
|
parameter B_SIGNED = 0;
|
||||||
|
parameter A_WIDTH = 1;
|
||||||
|
parameter B_WIDTH = 1;
|
||||||
|
parameter Y_WIDTH = 1;
|
||||||
|
|
||||||
|
input [A_WIDTH-1:0] A;
|
||||||
|
input [B_WIDTH-1:0] B;
|
||||||
|
output [Y_WIDTH-1:0] X, Y;
|
||||||
|
|
||||||
|
input CI, BI;
|
||||||
|
output CO;
|
||||||
|
|
||||||
|
wire _TECHMAP_FAIL_ = Y_WIDTH <= 2;
|
||||||
|
|
||||||
|
wire [Y_WIDTH-1:0] A_buf, B_buf;
|
||||||
|
\$pos #(.A_SIGNED(A_SIGNED), .A_WIDTH(A_WIDTH), .Y_WIDTH(Y_WIDTH)) A_conv (.A(A), .Y(A_buf));
|
||||||
|
\$pos #(.A_SIGNED(B_SIGNED), .A_WIDTH(B_WIDTH), .Y_WIDTH(Y_WIDTH)) B_conv (.A(B), .Y(B_buf));
|
||||||
|
|
||||||
|
wire [Y_WIDTH-1:0] AA = A_buf;
|
||||||
|
wire [Y_WIDTH-1:0] BB = BI ? ~B_buf : B_buf;
|
||||||
|
wire [Y_WIDTH+1:0] COx;
|
||||||
|
wire [Y_WIDTH+1:0] C = {COx, CI};
|
||||||
|
|
||||||
|
wire dummy;
|
||||||
|
(* keep *)
|
||||||
|
AL_MAP_ADDER #(
|
||||||
|
.ALUTYPE("ADD_CARRY"))
|
||||||
|
adder_cin (
|
||||||
|
.a(C[0]),
|
||||||
|
.o({COx[0], dummy})
|
||||||
|
);
|
||||||
|
|
||||||
|
genvar i;
|
||||||
|
generate for (i = 0; i < Y_WIDTH; i = i + 1) begin: slice
|
||||||
|
if(i==Y_WIDTH-1) begin
|
||||||
|
(* keep *)
|
||||||
|
AL_MAP_ADDER #(
|
||||||
|
.ALUTYPE("ADD"))
|
||||||
|
adder_cout (
|
||||||
|
.c(C[Y_WIDTH]),
|
||||||
|
.o(COx[Y_WIDTH])
|
||||||
|
);
|
||||||
|
assign CO = COx[Y_WIDTH];
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
(* keep *)
|
||||||
|
AL_MAP_ADDER #(
|
||||||
|
.ALUTYPE("ADD")
|
||||||
|
) adder_i (
|
||||||
|
.a(AA[i]),
|
||||||
|
.b(BB[i]),
|
||||||
|
.c(C[i+1]),
|
||||||
|
.o({COx[i+1],Y[i]})
|
||||||
|
);
|
||||||
|
end
|
||||||
|
end: slice
|
||||||
|
endgenerate
|
||||||
|
/* End implementation */
|
||||||
|
assign X = AA ^ BB;
|
||||||
|
endmodule
|
|
@ -0,0 +1,49 @@
|
||||||
|
module \$_DFF_N_ (input D, C, output Q); AL_MAP_SEQ #(.DFFMODE("FF"), .REGSET("RESET"), .SRMUX("SR"), .SRMODE("SYNC")) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(~C), .ce(1'b1), .sr(1'b0)); endmodule
|
||||||
|
module \$_DFF_P_ (input D, C, output Q); AL_MAP_SEQ #(.DFFMODE("FF"), .REGSET("RESET"), .SRMUX("SR"), .SRMODE("SYNC")) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(C), .ce(1'b1), .sr(1'b0)); endmodule
|
||||||
|
|
||||||
|
module \$_DFFE_NN_ (input D, C, E, output Q); AL_MAP_SEQ #(.DFFMODE("FF"), .REGSET("RESET"), .SRMUX("SR"), .SRMODE("SYNC")) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(~C), .ce(E), .sr(1'b0)); endmodule
|
||||||
|
module \$_DFFE_NP_ (input D, C, E, output Q); AL_MAP_SEQ #(.DFFMODE("FF"), .REGSET("RESET"), .SRMUX("SR"), .SRMODE("SYNC")) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(~C), .ce(E), .sr(1'b0)); endmodule
|
||||||
|
module \$_DFFE_PN_ (input D, C, E, output Q); AL_MAP_SEQ #(.DFFMODE("FF"), .REGSET("RESET"), .SRMUX("SR"), .SRMODE("SYNC")) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(C), .ce(E), .sr(1'b0)); endmodule
|
||||||
|
module \$_DFFE_PP_ (input D, C, E, output Q); AL_MAP_SEQ #(.DFFMODE("FF"), .REGSET("RESET"), .SRMUX("SR"), .SRMODE("SYNC")) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(C), .ce(E), .sr(1'b0)); endmodule
|
||||||
|
|
||||||
|
module \$_DFF_NN0_ (input D, C, R, output Q); AL_MAP_SEQ #(.DFFMODE("FF"), .REGSET("RESET"), .SRMUX("INV"), .SRMODE("SYNC")) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(~C), .ce(1'b1), .sr(R)); endmodule
|
||||||
|
module \$_DFF_NN1_ (input D, C, R, output Q); AL_MAP_SEQ #(.DFFMODE("FF"), .REGSET("SET"), .SRMUX("INV"), .SRMODE("SYNC")) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(~C), .ce(1'b1), .sr(R)); endmodule
|
||||||
|
module \$_DFF_NP0_ (input D, C, R, output Q); AL_MAP_SEQ #(.DFFMODE("FF"), .REGSET("RESET"), .SRMUX("SR"), .SRMODE("SYNC")) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(~C), .ce(1'b1), .sr(R)); endmodule
|
||||||
|
module \$_DFF_NP1_ (input D, C, R, output Q); AL_MAP_SEQ #(.DFFMODE("FF"), .REGSET("SET"), .SRMUX("SR"), .SRMODE("SYNC")) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(~C), .ce(1'b1), .sr(R)); endmodule
|
||||||
|
module \$_DFF_PN0_ (input D, C, R, output Q); AL_MAP_SEQ #(.DFFMODE("FF"), .REGSET("RESET"), .SRMUX("INV"), .SRMODE("SYNC")) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(C) , .ce(1'b1), .sr(R)); endmodule
|
||||||
|
module \$_DFF_PN1_ (input D, C, R, output Q); AL_MAP_SEQ #(.DFFMODE("FF"), .REGSET("SET"), .SRMUX("INV"), .SRMODE("SYNC")) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(C), .ce(1'b1), .sr(R)); endmodule
|
||||||
|
module \$_DFF_PP0_ (input D, C, R, output Q); AL_MAP_SEQ #(.DFFMODE("FF"), .REGSET("RESET"), .SRMUX("SR"), .SRMODE("SYNC")) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(C), .ce(1'b1), .sr(R)); endmodule
|
||||||
|
module \$_DFF_PP1_ (input D, C, R, output Q); AL_MAP_SEQ #(.DFFMODE("FF"), .REGSET("SET"), .SRMUX("SR"), . SRMODE("SYNC")) _TECHMAP_REPLACE_ (.d(D), .q(Q), .clk(C), .ce(1'b1), .sr(R)); endmodule
|
||||||
|
|
||||||
|
`ifndef NO_LUT
|
||||||
|
module \$lut (A, Y);
|
||||||
|
parameter WIDTH = 0;
|
||||||
|
parameter LUT = 0;
|
||||||
|
|
||||||
|
input [WIDTH-1:0] A;
|
||||||
|
output Y;
|
||||||
|
|
||||||
|
generate
|
||||||
|
if (WIDTH == 1) begin
|
||||||
|
AL_MAP_LUT1 #(.EQN(""),.INIT(LUT)) _TECHMAP_REPLACE_ (.o(Y), .a(A[0]));
|
||||||
|
end else
|
||||||
|
if (WIDTH == 2) begin
|
||||||
|
AL_MAP_LUT2 #(.EQN(""),.INIT(LUT)) _TECHMAP_REPLACE_ (.o(Y), .a(A[0]), .b(A[1]));
|
||||||
|
end else
|
||||||
|
if (WIDTH == 3) begin
|
||||||
|
AL_MAP_LUT3 #(.EQN(""),.INIT(LUT)) _TECHMAP_REPLACE_ (.o(Y), .a(A[0]), .b(A[1]), .c(A[2]));
|
||||||
|
end else
|
||||||
|
if (WIDTH == 4) begin
|
||||||
|
AL_MAP_LUT4 #(.EQN(""),.INIT(LUT)) _TECHMAP_REPLACE_ (.o(Y), .a(A[0]), .b(A[1]), .c(A[2]), .d(A[3]));
|
||||||
|
end else
|
||||||
|
if (WIDTH == 5) begin
|
||||||
|
AL_MAP_LUT5 #(.EQN(""),.INIT(LUT)) _TECHMAP_REPLACE_ (.o(Y), .a(A[0]), .b(A[1]), .c(A[2]), .d(A[3]), .e(A[4]));
|
||||||
|
end else
|
||||||
|
if (WIDTH == 6) begin
|
||||||
|
AL_MAP_LUT6 #(.EQN(""),.INIT(LUT)) _TECHMAP_REPLACE_ (.o(Y), .a(A[0]), .b(A[1]), .c(A[2]), .d(A[3]), .e(A[4]), .f(A[5]));
|
||||||
|
end else begin
|
||||||
|
wire _TECHMAP_FAIL_ = 1;
|
||||||
|
end
|
||||||
|
endgenerate
|
||||||
|
endmodule
|
||||||
|
`endif
|
|
@ -0,0 +1,103 @@
|
||||||
|
module AL_MAP_SEQ (
|
||||||
|
output q,
|
||||||
|
input ce,
|
||||||
|
input clk,
|
||||||
|
input sr,
|
||||||
|
input d
|
||||||
|
);
|
||||||
|
parameter DFFMODE = "FF"; //FF,LATCH
|
||||||
|
parameter REGSET = "RESET"; //RESET/SET
|
||||||
|
parameter SRMUX = "SR"; //SR/INV
|
||||||
|
parameter SRMODE = "SYNC"; //SYNC/ASYNC
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
module AL_MAP_LUT1 (
|
||||||
|
output o,
|
||||||
|
input a
|
||||||
|
);
|
||||||
|
parameter [1:0] INIT = 2'h0;
|
||||||
|
parameter EQN = "(A)";
|
||||||
|
assign Y = INIT >> A;
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
module AL_MAP_LUT2 (
|
||||||
|
output o,
|
||||||
|
input a,
|
||||||
|
input b
|
||||||
|
);
|
||||||
|
parameter [3:0] INIT = 4'h0;
|
||||||
|
parameter EQN = "(A)";
|
||||||
|
assign o = INIT >> {b, a};
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
module AL_MAP_LUT3 (
|
||||||
|
output o,
|
||||||
|
input a,
|
||||||
|
input b,
|
||||||
|
input c
|
||||||
|
);
|
||||||
|
parameter [7:0] INIT = 8'h0;
|
||||||
|
parameter EQN = "(A)";
|
||||||
|
assign o = INIT >> {c, b, a};
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
module AL_MAP_LUT4 (
|
||||||
|
output o,
|
||||||
|
input a,
|
||||||
|
input b,
|
||||||
|
input c,
|
||||||
|
input d
|
||||||
|
);
|
||||||
|
parameter [15:0] INIT = 16'h0;
|
||||||
|
parameter EQN = "(A)";
|
||||||
|
assign o = INIT >> {d, c, b, a};
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
module AL_MAP_LUT5 (
|
||||||
|
output o,
|
||||||
|
input a,
|
||||||
|
input b,
|
||||||
|
input c,
|
||||||
|
input d,
|
||||||
|
input e
|
||||||
|
);
|
||||||
|
parameter [31:0] INIT = 32'h0;
|
||||||
|
parameter EQN = "(A)";
|
||||||
|
assign o = INIT >> {e, d, c, b, a};
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
|
||||||
|
module AL_MAP_LUT6 (
|
||||||
|
output o,
|
||||||
|
input a,
|
||||||
|
input b,
|
||||||
|
input c,
|
||||||
|
input d,
|
||||||
|
input e,
|
||||||
|
input f
|
||||||
|
);
|
||||||
|
parameter [63:0] INIT = 64'h0;
|
||||||
|
parameter EQN = "(A)";
|
||||||
|
assign o = INIT >> {f, e, d, c, b, a};
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
module AL_MAP_ALU2B (
|
||||||
|
input cin,
|
||||||
|
input a0, b0, c0, d0,
|
||||||
|
input a1, b1, c1, d1,
|
||||||
|
output s0, s1, cout
|
||||||
|
);
|
||||||
|
parameter [15:0] INIT0 = 16'h0000;
|
||||||
|
parameter [15:0] INIT1 = 16'h0000;
|
||||||
|
parameter FUNC0 = "NO";
|
||||||
|
parameter FUNC1 = "NO";
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
module AL_MAP_ADDER (
|
||||||
|
input a,
|
||||||
|
input b,
|
||||||
|
input c,
|
||||||
|
output [1:0] o
|
||||||
|
);
|
||||||
|
parameter ALUTYPE = "ADD";
|
||||||
|
endmodule
|
|
@ -0,0 +1,716 @@
|
||||||
|
// Anlogic Eagle - Blackbox cells
|
||||||
|
// FIXME: Create sim models
|
||||||
|
|
||||||
|
(* blackbox *)
|
||||||
|
module EG_PHY_BRAM(
|
||||||
|
output [8:0] doa,
|
||||||
|
output [8:0] dob,
|
||||||
|
input [8:0] dia,
|
||||||
|
input [8:0] dib,
|
||||||
|
input [2:0] csa,
|
||||||
|
input [2:0] csb,
|
||||||
|
input cea,
|
||||||
|
input ocea,
|
||||||
|
input clka,
|
||||||
|
input wea,
|
||||||
|
input rsta,
|
||||||
|
input ceb,
|
||||||
|
input oceb,
|
||||||
|
input clkb,
|
||||||
|
input web,
|
||||||
|
input rstb,
|
||||||
|
input [12:0] addra,
|
||||||
|
input [12:0] addrb
|
||||||
|
);
|
||||||
|
parameter MODE = "DP8K";
|
||||||
|
parameter DATA_WIDTH_A = "9";
|
||||||
|
parameter DATA_WIDTH_B = "9";
|
||||||
|
parameter READBACK = "OFF";
|
||||||
|
parameter REGMODE_A = "NOREG";
|
||||||
|
parameter REGMODE_B = "NOREG";
|
||||||
|
parameter WRITEMODE_A = "NORMAL";
|
||||||
|
parameter WRITEMODE_B = "NORMAL";
|
||||||
|
parameter GSR = "ENABLE";
|
||||||
|
parameter RESETMODE = "SYNC";
|
||||||
|
parameter ASYNC_RESET_RELEASE = "SYNC";
|
||||||
|
parameter CEAMUX = "SIG";
|
||||||
|
parameter CEBMUX = "SIG";
|
||||||
|
parameter OCEAMUX = "SIG";
|
||||||
|
parameter OCEBMUX = "SIG";
|
||||||
|
parameter RSTAMUX = "SIG";
|
||||||
|
parameter RSTBMUX = "SIG";
|
||||||
|
parameter CLKAMUX = "SIG";
|
||||||
|
parameter CLKBMUX = "SIG";
|
||||||
|
parameter WEAMUX = "SIG";
|
||||||
|
parameter WEBMUX = "SIG";
|
||||||
|
parameter CSA0 = "SIG" ;
|
||||||
|
parameter CSA1 = "SIG" ;
|
||||||
|
parameter CSA2 = "SIG" ;
|
||||||
|
parameter CSB0 = "SIG" ;
|
||||||
|
parameter CSB1 = "SIG" ;
|
||||||
|
parameter CSB2 = "SIG" ;
|
||||||
|
parameter INIT_FILE = "NONE";
|
||||||
|
parameter INITP_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INITP_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INITP_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INITP_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
(* blackbox *)
|
||||||
|
module EG_PHY_BRAM32K(
|
||||||
|
output [15:0] doa,
|
||||||
|
output [15:0] dob,
|
||||||
|
input [15:0] dia,
|
||||||
|
input [15:0] dib,
|
||||||
|
input [10:0] addra,
|
||||||
|
input [10:0] addrb,
|
||||||
|
input bytea,
|
||||||
|
input bytewea,
|
||||||
|
input byteb,
|
||||||
|
input byteweb,
|
||||||
|
input csa,
|
||||||
|
input wea,
|
||||||
|
input csb,
|
||||||
|
input web,
|
||||||
|
input clka,
|
||||||
|
input rsta,
|
||||||
|
input clkb,
|
||||||
|
input rstb,
|
||||||
|
input ocea,
|
||||||
|
input oceb
|
||||||
|
);
|
||||||
|
parameter MODE = "DP16K";
|
||||||
|
parameter DATA_WIDTH_A = "16";
|
||||||
|
parameter DATA_WIDTH_B = "16";
|
||||||
|
parameter REGMODE_A = "NOREG";
|
||||||
|
parameter REGMODE_B = "NOREG";
|
||||||
|
parameter WRITEMODE_A = "NORMAL";
|
||||||
|
parameter WRITEMODE_B = "NORMAL";
|
||||||
|
parameter SRMODE = "SYNC";
|
||||||
|
parameter CSAMUX = "SIG";
|
||||||
|
parameter CSBMUX = "SIG";
|
||||||
|
parameter OCEAMUX = "SIG";
|
||||||
|
parameter OCEBMUX = "SIG";
|
||||||
|
parameter RSTAMUX = "SIG";
|
||||||
|
parameter RSTBMUX = "SIG";
|
||||||
|
parameter CLKAMUX = "SIG";
|
||||||
|
parameter CLKBMUX = "SIG";
|
||||||
|
parameter WEAMUX = "SIG";
|
||||||
|
parameter WEBMUX = "SIG";
|
||||||
|
parameter READBACK = "OFF";
|
||||||
|
parameter INIT_FILE = "";
|
||||||
|
parameter INIT_00 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_01 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_02 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_03 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_04 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_05 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_06 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_07 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_08 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_09 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_0A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_0B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_0C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_0D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_0E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_0F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_14 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_15 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_16 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_17 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_18 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_19 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_1A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_1B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_1C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_1D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_1E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_1F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_20 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_21 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_22 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_23 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_24 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_25 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_26 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_27 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_28 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_29 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_2A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_2B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_2C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_2D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_2E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_2F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_30 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_31 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_32 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_33 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_34 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_35 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_36 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_37 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_38 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_39 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_3A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_3B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_3C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_3D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_3E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_3F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_40 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_41 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_42 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_43 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_44 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_45 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_46 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_47 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_48 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_49 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_4A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_4B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_4C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_4D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_4E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_4F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_50 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_51 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_52 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_53 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_54 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_55 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_56 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_57 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_58 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_59 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_5A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_5B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_5C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_5D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_5E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_5F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_60 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_61 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_62 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_63 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_64 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_65 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_66 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_67 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_68 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_69 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_6A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_6B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_6C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_6D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_6E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_6F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_70 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_71 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_72 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_73 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_74 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_75 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_76 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_77 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_78 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_79 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_7A = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_7B = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_7C = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_7D = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_7E = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
parameter INIT_7F = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
(* blackbox *)
|
||||||
|
module EG_PHY_FIFO(
|
||||||
|
input [8:0] dia,
|
||||||
|
input [8:0] dib,
|
||||||
|
input [2:0] csr,
|
||||||
|
input [2:0] csw,
|
||||||
|
input we,
|
||||||
|
input re,
|
||||||
|
input clkw,
|
||||||
|
input clkr,
|
||||||
|
input rst,
|
||||||
|
input rprst,
|
||||||
|
input orea,
|
||||||
|
input oreb,
|
||||||
|
output [8:0] dob,
|
||||||
|
output [8:0] doa,
|
||||||
|
output empty_flag,
|
||||||
|
output aempty_flag,
|
||||||
|
output afull_flag,
|
||||||
|
output full_flag
|
||||||
|
);
|
||||||
|
parameter MODE = "FIFO8K";
|
||||||
|
parameter DATA_WIDTH_A = "18";
|
||||||
|
parameter DATA_WIDTH_B = "18";
|
||||||
|
parameter READBACK = "OFF";
|
||||||
|
parameter REGMODE_A = "NOREG";
|
||||||
|
parameter REGMODE_B = "NOREG";
|
||||||
|
parameter [13:0] AE = 14'b00000001100000;
|
||||||
|
parameter [13:0] AF = 14'b01111110010000;
|
||||||
|
parameter [13:0] F = 14'b01111111110000;
|
||||||
|
parameter [13:0] AEP1 = 14'b00000001110000;
|
||||||
|
parameter [13:0] AFM1 = 14'b01111110000000;
|
||||||
|
parameter [13:0] FM1 = 14'b01111111100000;
|
||||||
|
parameter [4:0] E = 5'b00000;
|
||||||
|
parameter [5:0] EP1 = 6'b010000;
|
||||||
|
parameter GSR = "ENABLE";
|
||||||
|
parameter RESETMODE = "ASYNC";
|
||||||
|
parameter ASYNC_RESET_RELEASE = "SYNC";
|
||||||
|
parameter CEA = "SIG";
|
||||||
|
parameter CEB = "SIG";
|
||||||
|
parameter OCEA = "SIG";
|
||||||
|
parameter OCEB = "SIG";
|
||||||
|
parameter RSTA = "SIG";
|
||||||
|
parameter RSTB = "SIG";
|
||||||
|
parameter CLKA = "SIG";
|
||||||
|
parameter CLKB = "SIG";
|
||||||
|
parameter WEA = "SIG";
|
||||||
|
parameter WEB = "SIG";
|
||||||
|
parameter CSA0 = "SIG";
|
||||||
|
parameter CSA1 = "SIG";
|
||||||
|
parameter CSA2 = "SIG";
|
||||||
|
parameter CSB0 = "SIG";
|
||||||
|
parameter CSB1 = "SIG";
|
||||||
|
parameter CSB2 = "SIG";
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
(* blackbox *)
|
||||||
|
module EG_PHY_MULT18(
|
||||||
|
output [17:0] acout,
|
||||||
|
output [17:0] bcout,
|
||||||
|
output [35:0] p,
|
||||||
|
input signeda,
|
||||||
|
input signedb,
|
||||||
|
input [17:0] a,
|
||||||
|
input [17:0] b,
|
||||||
|
input [17:0] acin,
|
||||||
|
input [17:0] bcin,
|
||||||
|
input cea,
|
||||||
|
input ceb,
|
||||||
|
input cepd,
|
||||||
|
input clk,
|
||||||
|
input rstan,
|
||||||
|
input rstbn,
|
||||||
|
input rstpdn,
|
||||||
|
input sourcea,
|
||||||
|
input sourceb
|
||||||
|
);
|
||||||
|
parameter INPUTREGA = "ENABLE";
|
||||||
|
parameter INPUTREGB = "ENABLE";
|
||||||
|
parameter OUTPUTREG = "ENABLE";
|
||||||
|
parameter SRMODE = "ASYNC";
|
||||||
|
parameter MODE = "MULT18X18C";
|
||||||
|
parameter CEAMUX = "SIG";
|
||||||
|
parameter CEBMUX = "SIG";
|
||||||
|
parameter CEPDMUX = "SIG";
|
||||||
|
parameter RSTANMUX = "SIG";
|
||||||
|
parameter RSTBNMUX = "SIG";
|
||||||
|
parameter RSTPDNMUX = "SIG";
|
||||||
|
parameter CLKMUX = "SIG";
|
||||||
|
parameter SIGNEDAMUX = "SIG";
|
||||||
|
parameter SIGNEDBMUX = "SIG";
|
||||||
|
parameter SOURCEAMUX = "SIG";
|
||||||
|
parameter SOURCEBMUX = "SIG";
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
(* blackbox *)
|
||||||
|
module EG_PHY_GCLK(
|
||||||
|
input clki,
|
||||||
|
output clko
|
||||||
|
);
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
(* blackbox *)
|
||||||
|
module EG_PHY_IOCLK(
|
||||||
|
input clki,
|
||||||
|
input stop,
|
||||||
|
output clko
|
||||||
|
);
|
||||||
|
parameter STOPCLK = "DISABLE";
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
(* blackbox *)
|
||||||
|
module EG_PHY_CLKDIV(
|
||||||
|
output clkdiv1,
|
||||||
|
output clkdivx,
|
||||||
|
input clki,
|
||||||
|
input rst,
|
||||||
|
input rls
|
||||||
|
);
|
||||||
|
parameter GSR = "DISABLE";
|
||||||
|
parameter DIV = 2;
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
(* blackbox *)
|
||||||
|
module EG_PHY_CONFIG(
|
||||||
|
output jrstn,
|
||||||
|
output [1:0] jrti,
|
||||||
|
output jshift,
|
||||||
|
output jtck,
|
||||||
|
output jtdi,
|
||||||
|
output jupdate,
|
||||||
|
output [1:0] jscanen,
|
||||||
|
output jtms,
|
||||||
|
input [1:0] jtdo,
|
||||||
|
input [7:0] jtag8_ipa,
|
||||||
|
input [7:0] jtag8_ipb,
|
||||||
|
output done,
|
||||||
|
output highz,
|
||||||
|
output cclk,
|
||||||
|
input cclk_en,
|
||||||
|
input gsrn_sync_clk,
|
||||||
|
input usr_gsrn,
|
||||||
|
output dna_dout,
|
||||||
|
input dna_clk,
|
||||||
|
input dna_din,
|
||||||
|
input dna_shift_en,
|
||||||
|
input mboot_rebootn,
|
||||||
|
input [7:0] mboot_dynamic_addr
|
||||||
|
);
|
||||||
|
parameter MBOOT_AUTO_SEL = "DISABLE";
|
||||||
|
parameter ADDR_SOURCE_SEL = "STATIC";
|
||||||
|
parameter STATIC_ADDR = 8'b0;
|
||||||
|
parameter DONE_PERSISTN = "ENABLE";
|
||||||
|
parameter INIT_PERSISTN = "ENABLE";
|
||||||
|
parameter PROGRAMN_PERSISTN = "DISABLE";
|
||||||
|
parameter JTAG_PERSISTN = "DISABLE";
|
||||||
|
parameter GSRN_SYNC_SEL = "DISABLE";
|
||||||
|
parameter FREQ = "2.5";
|
||||||
|
parameter USR_GSRN_EN = "DISABLE";
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
(* blackbox *)
|
||||||
|
module EG_PHY_OSC(
|
||||||
|
input osc_dis,
|
||||||
|
output osc_clk
|
||||||
|
);
|
||||||
|
parameter STDBY = "DISABLE";
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
(* blackbox *)
|
||||||
|
module EG_PHY_PWRMNT(
|
||||||
|
output pwr_dwn_n,
|
||||||
|
input sel_pwr,
|
||||||
|
input pwr_mnt_pd
|
||||||
|
);
|
||||||
|
parameter MNT_LVL = 0;
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
(* blackbox *)
|
||||||
|
module EG_PHY_DDR_8M_16(
|
||||||
|
input clk,
|
||||||
|
input clk_n,
|
||||||
|
input ras_n,
|
||||||
|
input cas_n,
|
||||||
|
input we_n,
|
||||||
|
input cs_n,
|
||||||
|
input [11:0] addr,
|
||||||
|
input [1:0] ba,
|
||||||
|
inout [15:0] dq,
|
||||||
|
input ldqs,
|
||||||
|
input udqs,
|
||||||
|
input ldm,
|
||||||
|
input udm,
|
||||||
|
input cke
|
||||||
|
);
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
(* blackbox *)
|
||||||
|
module EG_PHY_SDRAM_2M_32(
|
||||||
|
input clk,
|
||||||
|
input ras_n,
|
||||||
|
input cas_n,
|
||||||
|
input we_n,
|
||||||
|
input [10:0] addr,
|
||||||
|
input [1:0] ba,
|
||||||
|
inout [31:0] dq,
|
||||||
|
input cs_n,
|
||||||
|
input dm0,
|
||||||
|
input dm1,
|
||||||
|
input dm2,
|
||||||
|
input dm3,
|
||||||
|
input cke
|
||||||
|
);
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
(* blackbox *)
|
||||||
|
module EG_PHY_PAD(
|
||||||
|
input ipad,
|
||||||
|
output opad,
|
||||||
|
inout bpad,
|
||||||
|
input rst,
|
||||||
|
input ce,
|
||||||
|
input isclk,
|
||||||
|
input ipclk,
|
||||||
|
input osclk,
|
||||||
|
input opclk,
|
||||||
|
input ts,
|
||||||
|
input [3:0] do,
|
||||||
|
output di,
|
||||||
|
output [3:0] diq
|
||||||
|
);
|
||||||
|
parameter DEDCLK = "DISABLE";
|
||||||
|
parameter GSR = "ENABLE";
|
||||||
|
parameter SRMODE = "SYNC";
|
||||||
|
parameter TSMUX = "1";
|
||||||
|
parameter INSCLKMUX = "0";
|
||||||
|
parameter INPCLKMUX = "CLK";
|
||||||
|
parameter INCEMUX = "CE";
|
||||||
|
parameter INRSTMUX = "0";
|
||||||
|
parameter IN_REGSET = "RESET";
|
||||||
|
parameter IN_DFFMODE = "NONE";
|
||||||
|
parameter IDDRMODE = "OFF";
|
||||||
|
parameter IDDRPIPEMODE = "NONE";
|
||||||
|
parameter INDELMUX = "NODEL";
|
||||||
|
parameter INDEL = 0;
|
||||||
|
parameter OUTSCLKMUX = "0";
|
||||||
|
parameter OUTPCLKMUX = "CLK";
|
||||||
|
parameter OUTCEMUX = "CE";
|
||||||
|
parameter OUTRSTMUX = "0";
|
||||||
|
parameter DO_REGSET = "RESET";
|
||||||
|
parameter DO_DFFMODE = "NONE";
|
||||||
|
parameter ODDRMODE = "OFF";
|
||||||
|
parameter OUTDELMUX = "NODEL";
|
||||||
|
parameter OUTDEL = 0;
|
||||||
|
parameter TO_REGSET = "RESET";
|
||||||
|
parameter TO_DFFMODE = "NONE";
|
||||||
|
parameter MODE = "IN";
|
||||||
|
parameter DRIVE = "NONE";
|
||||||
|
parameter IOTYPE = "LVCMOS25";
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
(* blackbox *)
|
||||||
|
module EG_PHY_MSLICE(
|
||||||
|
input [1:0] a,
|
||||||
|
input [1:0] b,
|
||||||
|
input [1:0] c,
|
||||||
|
input [1:0] d,
|
||||||
|
input [1:0] mi,
|
||||||
|
input clk,
|
||||||
|
input ce,
|
||||||
|
input sr,
|
||||||
|
input fci,
|
||||||
|
output [1:0] f,
|
||||||
|
output [1:0] fx,
|
||||||
|
output [1:0] q,
|
||||||
|
output fco,
|
||||||
|
input dpram_mode,
|
||||||
|
input [1:0] dpram_di,
|
||||||
|
input dpram_we,
|
||||||
|
input dpram_wclk,
|
||||||
|
input [3:0] dpram_waddr
|
||||||
|
);
|
||||||
|
parameter INIT_LUT0 = 16'h0000;
|
||||||
|
parameter INIT_LUT1 = 16'h0000;
|
||||||
|
parameter MODE = "LOGIC";
|
||||||
|
parameter ALUTYPE = "ADD";
|
||||||
|
parameter MSFXMUX = "OFF";
|
||||||
|
parameter GSR = "ENABLE";
|
||||||
|
parameter TESTMODE = "OFF";
|
||||||
|
parameter CEMUX = "CE";
|
||||||
|
parameter SRMUX = "SR";
|
||||||
|
parameter CLKMUX = "CLK";
|
||||||
|
parameter SRMODE = "ASYNC";
|
||||||
|
parameter DFFMODE = "FF";
|
||||||
|
parameter REG0_SD = "MI";
|
||||||
|
parameter REG1_SD = "MI";
|
||||||
|
parameter REG0_REGSET = "SET";
|
||||||
|
parameter REG1_REGSET = "SET";
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
(* blackbox *)
|
||||||
|
module EG_PHY_LSLICE(
|
||||||
|
input [1:0] a,
|
||||||
|
input [1:0] b,
|
||||||
|
input [1:0] c,
|
||||||
|
input [1:0] d,
|
||||||
|
input [1:0] e,
|
||||||
|
input [1:0] mi,
|
||||||
|
input clk,
|
||||||
|
input ce,
|
||||||
|
input sr,
|
||||||
|
input fci,
|
||||||
|
output [1:0] f,
|
||||||
|
output [1:0] fx,
|
||||||
|
output [1:0] q,
|
||||||
|
output fco,
|
||||||
|
output [3:0] dpram_di,
|
||||||
|
output [3:0] dpram_waddr,
|
||||||
|
output dpram_wclk,
|
||||||
|
output dpram_we,
|
||||||
|
output dpram_mode
|
||||||
|
);
|
||||||
|
parameter INIT_LUTF0 = 16'h0000;
|
||||||
|
parameter INIT_LUTG0 = 16'h0000;
|
||||||
|
parameter INIT_LUTF1 = 16'h0000;
|
||||||
|
parameter INIT_LUTG1 = 16'h0000;
|
||||||
|
parameter MODE = "LOGIC";
|
||||||
|
parameter GSR = "ENABLE";
|
||||||
|
parameter TESTMODE = "OFF";
|
||||||
|
parameter CEMUX = "1";
|
||||||
|
parameter SRMUX = "SR";
|
||||||
|
parameter CLKMUX = "CLK";
|
||||||
|
parameter SRMODE = "ASYNC";
|
||||||
|
parameter DFFMODE = "FF";
|
||||||
|
parameter REG0_SD = "MI";
|
||||||
|
parameter REG1_SD = "MI";
|
||||||
|
parameter REG0_REGSET = "SET";
|
||||||
|
parameter REG1_REGSET = "SET";
|
||||||
|
parameter DEMUX0 = "D";
|
||||||
|
parameter DEMUX1 = "D";
|
||||||
|
parameter CMIMUX0 = "C";
|
||||||
|
parameter CMIMUX1 = "C";
|
||||||
|
parameter LSFMUX0 = "LUTF";
|
||||||
|
parameter LSFXMUX0 = "LUTG";
|
||||||
|
parameter LSFMUX1 = "LUTF";
|
||||||
|
parameter LSFXMUX1 = "LUTG";
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
(* blackbox *)
|
||||||
|
module EG_PHY_PLL(
|
||||||
|
output [4:0] clkc,
|
||||||
|
output extlock,
|
||||||
|
input stdby,
|
||||||
|
input refclk,
|
||||||
|
input fbclk,
|
||||||
|
input reset,
|
||||||
|
output psdone,
|
||||||
|
input psclk,
|
||||||
|
input psdown,
|
||||||
|
input psstep,
|
||||||
|
input [2:0] psclksel,
|
||||||
|
output [7:0] do,
|
||||||
|
input dclk,
|
||||||
|
input dcs,
|
||||||
|
input dwe,
|
||||||
|
input [7:0] di,
|
||||||
|
input [5:0] daddr
|
||||||
|
);
|
||||||
|
parameter DYNCFG = "DISABLE";
|
||||||
|
parameter IF_ESCLKSTSW = "DISABLE";
|
||||||
|
parameter REFCLK_SEL = "INTERNAL";
|
||||||
|
parameter FIN = "100.0000";
|
||||||
|
parameter REFCLK_DIV = 1;
|
||||||
|
parameter FBCLK_DIV = 1;
|
||||||
|
parameter CLKC0_DIV = 1;
|
||||||
|
parameter CLKC1_DIV = 1;
|
||||||
|
parameter CLKC2_DIV = 1;
|
||||||
|
parameter CLKC3_DIV = 1;
|
||||||
|
parameter CLKC4_DIV = 1;
|
||||||
|
parameter CLKC0_ENABLE = "DISABLE";
|
||||||
|
parameter CLKC1_ENABLE = "DISABLE";
|
||||||
|
parameter CLKC2_ENABLE = "DISABLE";
|
||||||
|
parameter CLKC3_ENABLE = "DISABLE";
|
||||||
|
parameter CLKC4_ENABLE = "DISABLE";
|
||||||
|
parameter CLKC0_DIV2_ENABLE = "DISABLE";
|
||||||
|
parameter CLKC1_DIV2_ENABLE = "DISABLE";
|
||||||
|
parameter CLKC2_DIV2_ENABLE = "DISABLE";
|
||||||
|
parameter CLKC3_DIV2_ENABLE = "DISABLE";
|
||||||
|
parameter CLKC4_DIV2_ENABLE = "DISABLE";
|
||||||
|
parameter FEEDBK_MODE = "NORMAL";
|
||||||
|
parameter FEEDBK_PATH = "VCO_PHASE_0";
|
||||||
|
parameter STDBY_ENABLE = "ENABLE";
|
||||||
|
parameter CLKC0_FPHASE = 0;
|
||||||
|
parameter CLKC1_FPHASE = 0;
|
||||||
|
parameter CLKC2_FPHASE = 0;
|
||||||
|
parameter CLKC3_FPHASE = 0;
|
||||||
|
parameter CLKC4_FPHASE = 0;
|
||||||
|
parameter CLKC0_CPHASE = 1;
|
||||||
|
parameter CLKC1_CPHASE = 1;
|
||||||
|
parameter CLKC2_CPHASE = 1;
|
||||||
|
parameter CLKC3_CPHASE = 1;
|
||||||
|
parameter CLKC4_CPHASE = 1;
|
||||||
|
parameter GMC_GAIN = 7;
|
||||||
|
parameter GMC_TEST = 14;
|
||||||
|
parameter ICP_CURRENT = 14;
|
||||||
|
parameter KVCO = 7;
|
||||||
|
parameter LPF_CAPACITOR = 3;
|
||||||
|
parameter LPF_RESISTOR = 1;
|
||||||
|
parameter PLLRST_ENA = "ENABLE";
|
||||||
|
parameter PLLMRST_ENA = "DISABLE";
|
||||||
|
parameter PLLC2RST_ENA = "DISABLE";
|
||||||
|
parameter PLLC34RST_ENA = "DISABLE";
|
||||||
|
parameter PREDIV_MUXC0 = "VCO";
|
||||||
|
parameter PREDIV_MUXC1 = "VCO";
|
||||||
|
parameter PREDIV_MUXC2 = "VCO";
|
||||||
|
parameter PREDIV_MUXC3 = "VCO";
|
||||||
|
parameter PREDIV_MUXC4 = "VCO";
|
||||||
|
parameter ODIV_MUXC0 = "DIV";
|
||||||
|
parameter ODIV_MUXC1 = "DIV";
|
||||||
|
parameter ODIV_MUXC2 = "DIV";
|
||||||
|
parameter ODIV_MUXC3 = "DIV";
|
||||||
|
parameter ODIV_MUXC4 = "DIV";
|
||||||
|
parameter FREQ_LOCK_ACCURACY = 2;
|
||||||
|
parameter PLL_LOCK_MODE = 0;
|
||||||
|
parameter INTFB_WAKE = "DISABLE";
|
||||||
|
parameter DPHASE_SOURCE = "DISABLE";
|
||||||
|
parameter VCO_NORESET = "DISABLE";
|
||||||
|
parameter STDBY_VCO_ENA = "DISABLE";
|
||||||
|
parameter NORESET = "DISABLE";
|
||||||
|
parameter SYNC_ENABLE = "ENABLE";
|
||||||
|
parameter DERIVE_PLL_CLOCKS = "DISABLE";
|
||||||
|
parameter GEN_BASIC_CLOCK = "DISABLE";
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
(* blackbox *)
|
||||||
|
module EG_PHY_ADC(
|
||||||
|
input clk,
|
||||||
|
input pd,
|
||||||
|
input [2:0] s,
|
||||||
|
input soc,
|
||||||
|
output eoc,
|
||||||
|
output [11:0] dout
|
||||||
|
);
|
||||||
|
parameter CH0 = "DISABLE";
|
||||||
|
parameter CH1 = "DISABLE";
|
||||||
|
parameter CH2 = "DISABLE";
|
||||||
|
parameter CH3 = "DISABLE";
|
||||||
|
parameter CH4 = "DISABLE";
|
||||||
|
parameter CH5 = "DISABLE";
|
||||||
|
parameter CH6 = "DISABLE";
|
||||||
|
parameter CH7 = "DISABLE";
|
||||||
|
parameter VREF = "DISABLE";
|
||||||
|
endmodule
|
|
@ -0,0 +1,205 @@
|
||||||
|
/*
|
||||||
|
* yosys -- Yosys Open SYnthesis Suite
|
||||||
|
*
|
||||||
|
* Copyright (C) 2018 Miodrag Milanovic <miodrag@symbioticeda.com>
|
||||||
|
* Copyright (C) 2018 Clifford Wolf <clifford@clifford.at>
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and/or distribute this software for any
|
||||||
|
* purpose with or without fee is hereby granted, provided that the above
|
||||||
|
* copyright notice and this permission notice appear in all copies.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "kernel/register.h"
|
||||||
|
#include "kernel/celltypes.h"
|
||||||
|
#include "kernel/rtlil.h"
|
||||||
|
#include "kernel/log.h"
|
||||||
|
|
||||||
|
USING_YOSYS_NAMESPACE
|
||||||
|
PRIVATE_NAMESPACE_BEGIN
|
||||||
|
|
||||||
|
struct SynthAnlogicPass : public ScriptPass
|
||||||
|
{
|
||||||
|
SynthAnlogicPass() : ScriptPass("synth_anlogic", "synthesis for Anlogic FPGAs") { }
|
||||||
|
|
||||||
|
void help() YS_OVERRIDE
|
||||||
|
{
|
||||||
|
// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|
|
||||||
|
log("\n");
|
||||||
|
log(" synth_anlogic [options]\n");
|
||||||
|
log("\n");
|
||||||
|
log("This command runs synthesis for Anlogic FPGAs.\n");
|
||||||
|
log("\n");
|
||||||
|
log(" -top <module>\n");
|
||||||
|
log(" use the specified module as top module\n");
|
||||||
|
log("\n");
|
||||||
|
log(" -edif <file>\n");
|
||||||
|
log(" write the design to the specified EDIF file. writing of an output file\n");
|
||||||
|
log(" is omitted if this parameter is not specified.\n");
|
||||||
|
log("\n");
|
||||||
|
log(" -json <file>\n");
|
||||||
|
log(" write the design to the specified JSON file. writing of an output file\n");
|
||||||
|
log(" is omitted if this parameter is not specified.\n");
|
||||||
|
log("\n");
|
||||||
|
log(" -run <from_label>:<to_label>\n");
|
||||||
|
log(" only run the commands between the labels (see below). an empty\n");
|
||||||
|
log(" from label is synonymous to 'begin', and empty to label is\n");
|
||||||
|
log(" synonymous to the end of the command list.\n");
|
||||||
|
log("\n");
|
||||||
|
log(" -noflatten\n");
|
||||||
|
log(" do not flatten design before synthesis\n");
|
||||||
|
log("\n");
|
||||||
|
log(" -retime\n");
|
||||||
|
log(" run 'abc' with -dff option\n");
|
||||||
|
log("\n");
|
||||||
|
log("\n");
|
||||||
|
log("The following commands are executed by this synthesis command:\n");
|
||||||
|
help_script();
|
||||||
|
log("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
string top_opt, edif_file, json_file;
|
||||||
|
bool flatten, retime;
|
||||||
|
|
||||||
|
void clear_flags() YS_OVERRIDE
|
||||||
|
{
|
||||||
|
top_opt = "-auto-top";
|
||||||
|
edif_file = "";
|
||||||
|
json_file = "";
|
||||||
|
flatten = true;
|
||||||
|
retime = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void execute(std::vector<std::string> args, RTLIL::Design *design) YS_OVERRIDE
|
||||||
|
{
|
||||||
|
string run_from, run_to;
|
||||||
|
clear_flags();
|
||||||
|
|
||||||
|
size_t argidx;
|
||||||
|
for (argidx = 1; argidx < args.size(); argidx++)
|
||||||
|
{
|
||||||
|
if (args[argidx] == "-top" && argidx+1 < args.size()) {
|
||||||
|
top_opt = "-top " + args[++argidx];
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (args[argidx] == "-edif" && argidx+1 < args.size()) {
|
||||||
|
edif_file = args[++argidx];
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (args[argidx] == "-json" && argidx+1 < args.size()) {
|
||||||
|
json_file = args[++argidx];
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (args[argidx] == "-run" && argidx+1 < args.size()) {
|
||||||
|
size_t pos = args[argidx+1].find(':');
|
||||||
|
if (pos == std::string::npos)
|
||||||
|
break;
|
||||||
|
run_from = args[++argidx].substr(0, pos);
|
||||||
|
run_to = args[argidx].substr(pos+1);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (args[argidx] == "-noflatten") {
|
||||||
|
flatten = false;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (args[argidx] == "-retime") {
|
||||||
|
retime = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
extra_args(args, argidx, design);
|
||||||
|
|
||||||
|
if (!design->full_selection())
|
||||||
|
log_cmd_error("This comannd only operates on fully selected designs!\n");
|
||||||
|
|
||||||
|
log_header(design, "Executing SYNTH_ANLOGIC pass.\n");
|
||||||
|
log_push();
|
||||||
|
|
||||||
|
run_script(design, run_from, run_to);
|
||||||
|
|
||||||
|
log_pop();
|
||||||
|
}
|
||||||
|
|
||||||
|
void script() YS_OVERRIDE
|
||||||
|
{
|
||||||
|
if (check_label("begin"))
|
||||||
|
{
|
||||||
|
run("read_verilog -lib +/anlogic/cells_sim.v +/anlogic/eagle_bb.v");
|
||||||
|
run(stringf("hierarchy -check %s", help_mode ? "-top <top>" : top_opt.c_str()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (flatten && check_label("flatten", "(unless -noflatten)"))
|
||||||
|
{
|
||||||
|
run("proc");
|
||||||
|
run("flatten");
|
||||||
|
run("tribuf -logic");
|
||||||
|
run("deminout");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (check_label("coarse"))
|
||||||
|
{
|
||||||
|
run("synth -run coarse");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (check_label("fine"))
|
||||||
|
{
|
||||||
|
run("opt -fast -mux_undef -undriven -fine");
|
||||||
|
run("memory_map");
|
||||||
|
run("opt -undriven -fine");
|
||||||
|
run("techmap -map +/techmap.v -map +/anlogic/arith_map.v");
|
||||||
|
if (retime || help_mode)
|
||||||
|
run("abc -dff", "(only if -retime)");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (check_label("map_ffs"))
|
||||||
|
{
|
||||||
|
run("dffsr2dff");
|
||||||
|
run("techmap -D NO_LUT -map +/anlogic/cells_map.v");
|
||||||
|
run("opt_expr -mux_undef");
|
||||||
|
run("simplemap");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (check_label("map_luts"))
|
||||||
|
{
|
||||||
|
run("abc -lut 6");
|
||||||
|
run("clean");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (check_label("map_cells"))
|
||||||
|
{
|
||||||
|
run("techmap -map +/anlogic/cells_map.v");
|
||||||
|
run("clean");
|
||||||
|
run("anlogic_eqn");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (check_label("check"))
|
||||||
|
{
|
||||||
|
run("hierarchy -check");
|
||||||
|
run("stat");
|
||||||
|
run("check -noinit");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (check_label("edif"))
|
||||||
|
{
|
||||||
|
if (!edif_file.empty() || help_mode)
|
||||||
|
run(stringf("write_edif %s", help_mode ? "<file-name>" : edif_file.c_str()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (check_label("json"))
|
||||||
|
{
|
||||||
|
if (!json_file.empty() || help_mode)
|
||||||
|
run(stringf("write_json %s", help_mode ? "<file-name>" : json_file.c_str()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} SynthAnlogicPass;
|
||||||
|
|
||||||
|
PRIVATE_NAMESPACE_END
|
Loading…
Reference in New Issue