mirror of https://github.com/YosysHQ/yosys.git
Merge branch 'master' into eddie/fix_retime
This commit is contained in:
commit
0642baabbc
2
Makefile
2
Makefile
|
@ -111,7 +111,7 @@ OBJS = kernel/version_$(GIT_REV).o
|
|||
# is just a symlink to your actual ABC working directory, as 'make mrproper'
|
||||
# will remove the 'abc' directory and you do not want to accidentally
|
||||
# delete your work on ABC..
|
||||
ABCREV = 2ddc57d
|
||||
ABCREV = d1b6413
|
||||
ABCPULL = 1
|
||||
ABCURL ?= https://github.com/berkeley-abc/abc
|
||||
ABCMKARGS = CC="$(CXX)" CXX="$(CXX)" ABC_USE_LIBSTDCXX=1
|
||||
|
|
|
@ -312,10 +312,10 @@ Verilog Attributes and non-standard features
|
|||
passes to identify input and output ports of cells. The Verilog backend
|
||||
also does not output blackbox modules on default.
|
||||
|
||||
- The ``dynports'' attribute is used by the Verilog front-end to mark modules
|
||||
- The ``dynports`` attribute is used by the Verilog front-end to mark modules
|
||||
that have ports with a width that depends on a parameter.
|
||||
|
||||
- The ``hdlname'' attribute is used by some passes to document the original
|
||||
- The ``hdlname`` attribute is used by some passes to document the original
|
||||
(HDL) name of a module when renaming a module.
|
||||
|
||||
- The ``keep`` attribute on cells and wires is used to mark objects that should
|
||||
|
|
|
@ -340,7 +340,6 @@ RTLIL::SigSpec signal_to_mux_tree(RTLIL::Module *mod, SnippetSwCache &swcache, d
|
|||
// evaluate in reverse order to give the first entry the top priority
|
||||
RTLIL::SigSpec initial_val = result;
|
||||
RTLIL::Cell *last_mux_cell = NULL;
|
||||
bool shiftx = initial_val.is_fully_undef();
|
||||
for (size_t i = 0; i < sw->cases.size(); i++) {
|
||||
int case_idx = sw->cases.size() - i - 1;
|
||||
RTLIL::CaseRule *cs2 = sw->cases[case_idx];
|
||||
|
@ -349,33 +348,6 @@ RTLIL::SigSpec signal_to_mux_tree(RTLIL::Module *mod, SnippetSwCache &swcache, d
|
|||
append_pmux(mod, sw->signal, cs2->compare, value, last_mux_cell, sw, ifxmode);
|
||||
else
|
||||
result = gen_mux(mod, sw->signal, cs2->compare, value, result, last_mux_cell, sw, ifxmode);
|
||||
|
||||
// Ignore output values which are entirely don't care
|
||||
if (shiftx && !value.is_fully_undef()) {
|
||||
// Keep checking if case condition is the same as the current case index
|
||||
if (cs2->compare.size() == 1 && cs2->compare.front().is_fully_const())
|
||||
shiftx = (cs2->compare.front().as_int() == case_idx);
|
||||
else
|
||||
shiftx = false;
|
||||
}
|
||||
}
|
||||
|
||||
// Transform into a $shiftx where possible
|
||||
if (shiftx && last_mux_cell && last_mux_cell->type == "$pmux") {
|
||||
// Create bit-blasted $shiftx-es that shifts by the address line used in the case statement
|
||||
auto pmux_b_port = last_mux_cell->getPort("\\B");
|
||||
auto pmux_y_port = last_mux_cell->getPort("\\Y");
|
||||
int width = last_mux_cell->getParam("\\WIDTH").as_int();
|
||||
for (int i = 0; i < width; ++i) {
|
||||
RTLIL::SigSpec a_port;
|
||||
// Because we went in reverse order above, un-reverse $pmux's B port here
|
||||
for (int j = pmux_b_port.size()/width-1; j >= 0; --j)
|
||||
a_port.append(pmux_b_port.extract(j*width+i, 1));
|
||||
// Create a $shiftx that shifts by the address line used in the case statement
|
||||
mod->addShiftx(NEW_ID, a_port, sw->signal, pmux_y_port.extract(i, 1));
|
||||
}
|
||||
// Disconnect $pmux by replacing its output port with a floating wire
|
||||
last_mux_cell->setPort("\\Y", mod->addWire(NEW_ID, width));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -85,7 +85,7 @@ module cyclonev_lcell_comb
|
|||
begin
|
||||
upper_lut_value = lut4(mask[31:16], dataa, datab, datac, datad);
|
||||
lower_lut_value = lut4(mask[15:0], dataa, datab, datac, datad);
|
||||
lut5 = (datae) ? upper_mask_value : lower_mask_value;
|
||||
lut5 = (datae) ? upper_lut_value : lower_lut_value;
|
||||
end
|
||||
endfunction // lut5
|
||||
|
||||
|
@ -95,15 +95,16 @@ module cyclonev_lcell_comb
|
|||
input dataa, datab, datac, datad, datae, dataf;
|
||||
reg upper_lut_value;
|
||||
reg lower_lut_value;
|
||||
reg out_0, out_1, out_2, out_3;
|
||||
begin
|
||||
upper_lut_value = lut5(mask[63:32], dataa, datab, datac, datad, datae);
|
||||
lower_lut_value = lut5(mask[31:0], dataa, datab, datac, datad, datae);
|
||||
lut6 = (dataf) ? upper_mask_value : lower_mask_value;
|
||||
lut6 = (dataf) ? upper_lut_value : lower_lut_value;
|
||||
end
|
||||
endfunction // lut6
|
||||
|
||||
assign {mask_a, mask_b, mask_c, mask_d} = {lut_mask[15:0], lut_mask[31:16], lut_mask[47:32], lut_mask[63:48]};
|
||||
|
||||
`ifdef ADVANCED_ALM
|
||||
always @(*) begin
|
||||
if(extended_lut == "on")
|
||||
shared_lut_alm = datag;
|
||||
|
@ -115,6 +116,11 @@ module cyclonev_lcell_comb
|
|||
out_2 = lut4(mask_c, dataa, datab, datac, datad);
|
||||
out_3 = lut4(mask_d, dataa, datab, shared_lut_alm, datad);
|
||||
end
|
||||
`else
|
||||
`ifdef DEBUG
|
||||
initial $display("Advanced ALM lut combine is not implemented yet");
|
||||
`endif
|
||||
`endif
|
||||
endmodule // cyclonev_lcell_comb
|
||||
|
||||
|
||||
|
|
|
@ -30,10 +30,15 @@ module GND(output G);
|
|||
endmodule
|
||||
|
||||
module IBUF(output O, input I);
|
||||
parameter IOSTANDARD = "default";
|
||||
parameter IBUF_LOW_PWR = 0;
|
||||
assign O = I;
|
||||
endmodule
|
||||
|
||||
module OBUF(output O, input I);
|
||||
parameter IOSTANDARD = "default";
|
||||
parameter DRIVE = 12;
|
||||
parameter SLEW = "SLOW";
|
||||
assign O = I;
|
||||
endmodule
|
||||
|
||||
|
@ -41,6 +46,42 @@ module BUFG(output O, input I);
|
|||
assign O = I;
|
||||
endmodule
|
||||
|
||||
module BUFGCTRL(
|
||||
output O,
|
||||
input I0, input I1,
|
||||
input S0, input S1,
|
||||
input CE0, input CE1,
|
||||
input IGNORE0, input IGNORE1);
|
||||
|
||||
parameter [0:0] INIT_OUT = 1'b0;
|
||||
parameter PRESELECT_I0 = "FALSE";
|
||||
parameter PRESELECT_I1 = "FALSE";
|
||||
parameter [0:0] IS_CE0_INVERTED = 1'b0;
|
||||
parameter [0:0] IS_CE1_INVERTED = 1'b0;
|
||||
parameter [0:0] IS_S0_INVERTED = 1'b0;
|
||||
parameter [0:0] IS_S1_INVERTED = 1'b0;
|
||||
parameter [0:0] IS_IGNORE0_INVERTED = 1'b0;
|
||||
parameter [0:0] IS_IGNORE1_INVERTED = 1'b0;
|
||||
|
||||
wire I0_internal = ((CE0 ^ IS_CE0_INVERTED) ? I0 : INIT_OUT);
|
||||
wire I1_internal = ((CE1 ^ IS_CE1_INVERTED) ? I1 : INIT_OUT);
|
||||
wire S0_true = (S0 ^ IS_S0_INVERTED);
|
||||
wire S1_true = (S1 ^ IS_S1_INVERTED);
|
||||
|
||||
assign O = S0_true ? I0_internal : (S1_true ? I1_internal : INIT_OUT);
|
||||
|
||||
endmodule
|
||||
|
||||
module BUFHCE(output O, input I, input CE);
|
||||
|
||||
parameter [0:0] INIT_OUT = 1'b0;
|
||||
parameter CE_TYPE = "SYNC";
|
||||
parameter [0:0] IS_CE_INVERTED = 1'b0;
|
||||
|
||||
assign O = ((CE ^ IS_CE_INVERTED) ? I : INIT_OUT);
|
||||
|
||||
endmodule
|
||||
|
||||
// module OBUFT(output O, input I, T);
|
||||
// assign O = T ? 1'bz : I;
|
||||
// endmodule
|
||||
|
@ -98,6 +139,22 @@ module LUT6(output O, input I0, I1, I2, I3, I4, I5);
|
|||
assign O = I0 ? s1[1] : s1[0];
|
||||
endmodule
|
||||
|
||||
module LUT6_2(output O6, output O5, input I0, I1, I2, I3, I4, I5);
|
||||
parameter [63:0] INIT = 0;
|
||||
wire [31: 0] s5 = I5 ? INIT[63:32] : INIT[31: 0];
|
||||
wire [15: 0] s4 = I4 ? s5[31:16] : s5[15: 0];
|
||||
wire [ 7: 0] s3 = I3 ? s4[15: 8] : s4[ 7: 0];
|
||||
wire [ 3: 0] s2 = I2 ? s3[ 7: 4] : s3[ 3: 0];
|
||||
wire [ 1: 0] s1 = I1 ? s2[ 3: 2] : s2[ 1: 0];
|
||||
assign O6 = I0 ? s1[1] : s1[0];
|
||||
|
||||
wire [15: 0] s5_4 = I4 ? INIT[31:16] : INIT[15: 0];
|
||||
wire [ 7: 0] s5_3 = I3 ? s5_4[15: 8] : s5_4[ 7: 0];
|
||||
wire [ 3: 0] s5_2 = I2 ? s5_3[ 7: 4] : s5_3[ 3: 0];
|
||||
wire [ 1: 0] s5_1 = I1 ? s5_2[ 3: 2] : s5_2[ 1: 0];
|
||||
assign O5 = I0 ? s5_1[1] : s5_1[0];
|
||||
endmodule
|
||||
|
||||
module MUXCY(output O, input CI, DI, S);
|
||||
assign O = S ? CI : DI;
|
||||
endmodule
|
||||
|
|
|
@ -28,12 +28,12 @@ function xtract_cell_decl()
|
|||
# xtract_cell_decl BUFG
|
||||
xtract_cell_decl BUFGCE
|
||||
xtract_cell_decl BUFGCE_1
|
||||
xtract_cell_decl BUFGCTRL
|
||||
#xtract_cell_decl BUFGCTRL
|
||||
xtract_cell_decl BUFGMUX
|
||||
xtract_cell_decl BUFGMUX_1
|
||||
xtract_cell_decl BUFGMUX_CTRL
|
||||
xtract_cell_decl BUFH
|
||||
xtract_cell_decl BUFHCE
|
||||
#xtract_cell_decl BUFHCE
|
||||
xtract_cell_decl BUFIO
|
||||
xtract_cell_decl BUFMR
|
||||
xtract_cell_decl BUFMRCE
|
||||
|
@ -92,7 +92,7 @@ function xtract_cell_decl()
|
|||
# xtract_cell_decl LUT4
|
||||
# xtract_cell_decl LUT5
|
||||
# xtract_cell_decl LUT6
|
||||
xtract_cell_decl LUT6_2
|
||||
#xtract_cell_decl LUT6_2
|
||||
xtract_cell_decl MMCME2_ADV
|
||||
xtract_cell_decl MMCME2_BASE
|
||||
# xtract_cell_decl MUXF7
|
||||
|
|
|
@ -30,29 +30,6 @@ module BUFGCE_1 (...);
|
|||
input CE, I;
|
||||
endmodule
|
||||
|
||||
module BUFGCTRL (...);
|
||||
output O;
|
||||
input CE0;
|
||||
input CE1;
|
||||
input I0;
|
||||
input I1;
|
||||
input IGNORE0;
|
||||
input IGNORE1;
|
||||
input S0;
|
||||
input S1;
|
||||
parameter integer INIT_OUT = 0;
|
||||
parameter PRESELECT_I0 = "FALSE";
|
||||
parameter PRESELECT_I1 = "FALSE";
|
||||
parameter [0:0] IS_CE0_INVERTED = 1'b0;
|
||||
parameter [0:0] IS_CE1_INVERTED = 1'b0;
|
||||
parameter [0:0] IS_I0_INVERTED = 1'b0;
|
||||
parameter [0:0] IS_I1_INVERTED = 1'b0;
|
||||
parameter [0:0] IS_IGNORE0_INVERTED = 1'b0;
|
||||
parameter [0:0] IS_IGNORE1_INVERTED = 1'b0;
|
||||
parameter [0:0] IS_S0_INVERTED = 1'b0;
|
||||
parameter [0:0] IS_S1_INVERTED = 1'b0;
|
||||
endmodule
|
||||
|
||||
module BUFGMUX (...);
|
||||
parameter CLK_SEL_TYPE = "SYNC";
|
||||
output O;
|
||||
|
@ -77,15 +54,6 @@ module BUFH (...);
|
|||
input I;
|
||||
endmodule
|
||||
|
||||
module BUFHCE (...);
|
||||
parameter CE_TYPE = "SYNC";
|
||||
parameter integer INIT_OUT = 0;
|
||||
parameter [0:0] IS_CE_INVERTED = 1'b0;
|
||||
output O;
|
||||
input CE;
|
||||
input I;
|
||||
endmodule
|
||||
|
||||
module BUFIO (...);
|
||||
output O;
|
||||
input I;
|
||||
|
@ -2420,12 +2388,6 @@ module LDPE (...);
|
|||
input D, G, GE, PRE;
|
||||
endmodule
|
||||
|
||||
module LUT6_2 (...);
|
||||
parameter [63:0] INIT = 64'h0000000000000000;
|
||||
input I0, I1, I2, I3, I4, I5;
|
||||
output O5, O6;
|
||||
endmodule
|
||||
|
||||
module MMCME2_ADV (...);
|
||||
parameter BANDWIDTH = "OPTIMIZED";
|
||||
parameter real CLKFBOUT_MULT_F = 5.000;
|
||||
|
|
Loading…
Reference in New Issue