mirror of https://github.com/YosysHQ/yosys.git
Adding tests for dynamic part select optimisation
This commit is contained in:
parent
e86ba3b94d
commit
87910732f1
|
@ -0,0 +1,19 @@
|
|||
module forloop_select #(parameter WIDTH=256, SELW=4)
|
||||
(input clk ,
|
||||
input [9:0] ctrl ,
|
||||
input [15:0] din ,
|
||||
input en,
|
||||
output reg [WIDTH-1:0] dout);
|
||||
|
||||
reg [SELW-1:0] sel;
|
||||
localparam SLICE = WIDTH/(SELW**2);
|
||||
|
||||
always @(posedge clk)
|
||||
begin
|
||||
if (en) begin
|
||||
for (sel = 0; sel < 4'hf; sel=sel+1'b1)
|
||||
dout[(ctrl*sel)+:SLICE] <= din;
|
||||
end
|
||||
end
|
||||
endmodule
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
module multiple_blocking #(parameter WIDTH=256, SELW=2)
|
||||
(input clk ,
|
||||
input [9:0] ctrl ,
|
||||
input [15:0] din ,
|
||||
input [SELW-1:0] sel ,
|
||||
output reg [WIDTH:0] dout);
|
||||
|
||||
localparam SLICE = WIDTH/(SELW**2);
|
||||
reg [9:0] a;
|
||||
reg [SELW-1:0] b;
|
||||
reg [15:0] c;
|
||||
always @(posedge clk) begin
|
||||
a = ctrl + 1;
|
||||
b = sel - 1;
|
||||
c = ~din;
|
||||
dout = dout + 1;
|
||||
dout[a*b+:SLICE] = c;
|
||||
end
|
||||
endmodule
|
|
@ -0,0 +1,14 @@
|
|||
module nonblocking #(parameter WIDTH=256, SELW=2)
|
||||
(input clk ,
|
||||
input [9:0] ctrl ,
|
||||
input [15:0] din ,
|
||||
input [SELW-1:0] sel ,
|
||||
output reg [WIDTH-1:0] dout);
|
||||
|
||||
localparam SLICE = WIDTH/(SELW**2);
|
||||
always @(posedge clk) begin
|
||||
dout <= dout + 1;
|
||||
dout[ctrl*sel+:SLICE] <= din ;
|
||||
end
|
||||
|
||||
endmodule
|
|
@ -0,0 +1,13 @@
|
|||
module original #(parameter WIDTH=256, SELW=2)
|
||||
(input clk ,
|
||||
input [9:0] ctrl ,
|
||||
input [15:0] din ,
|
||||
input [SELW-1:0] sel ,
|
||||
output reg [WIDTH-1:0] dout);
|
||||
|
||||
localparam SLICE = WIDTH/(SELW**2);
|
||||
always @(posedge clk)
|
||||
begin
|
||||
dout[ctrl*sel+:SLICE] <= din ;
|
||||
end
|
||||
endmodule
|
|
@ -0,0 +1,24 @@
|
|||
module reset_test #(parameter WIDTH=256, SELW=2)
|
||||
(input clk ,
|
||||
input [9:0] ctrl ,
|
||||
input [15:0] din ,
|
||||
input [SELW-1:0] sel ,
|
||||
input wire reset,
|
||||
output reg [WIDTH-1:0] dout);
|
||||
|
||||
reg [5:0] i;
|
||||
wire [SELW-1:0] rval = {reset, {SELW-1{1'b0}}};
|
||||
localparam SLICE = WIDTH/(SELW**2);
|
||||
// Doing exotic reset. masking 2 LSB bits to 0, 6 MSB bits to 1 for
|
||||
// whatever reason.
|
||||
always @(posedge clk) begin
|
||||
if (reset) begin: reset_mask
|
||||
for (i = 0; i < 16; i=i+1) begin
|
||||
dout[i*rval+:SLICE] <= 32'hDEAD;
|
||||
end
|
||||
end
|
||||
//else begin
|
||||
dout[ctrl*sel+:SLICE] <= din;
|
||||
//end
|
||||
end
|
||||
endmodule
|
|
@ -0,0 +1,13 @@
|
|||
module reversed #(parameter WIDTH=256, SELW=2)
|
||||
(input clk ,
|
||||
input [9:0] ctrl ,
|
||||
input [15:0] din ,
|
||||
input [SELW-1:0] sel ,
|
||||
output reg [WIDTH-1:0] dout);
|
||||
|
||||
localparam SLICE = WIDTH/(SELW**2);
|
||||
always @(posedge clk) begin
|
||||
dout[(1024-ctrl*sel)-:SLICE] <= din;
|
||||
end
|
||||
endmodule
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
#### Original testcase ###
|
||||
read_verilog ../common/dynamic_part_select/original.v
|
||||
hierarchy -top original
|
||||
prep -flatten -top original
|
||||
design -save gold
|
||||
|
||||
equiv_opt -run :prove -map +/xilinx/cells_sim.v synth_xilinx -noiopad
|
||||
miter -equiv -make_assert -flatten gold gate miter
|
||||
sat -verify -prove-asserts -show-public -seq 10 -prove-skip 1 miter
|
||||
|
||||
### Multiple blocking assingments ###
|
||||
read_verilog ../common/dynamic_part_select/multiple_blocking.v
|
||||
hierarchy -top multiple_blocking
|
||||
prep -flatten -top multiple_blocking
|
||||
design -save gold
|
||||
|
||||
equiv_opt -run :prove -map +/xilinx/cells_sim.v synth_xilinx -noiopad
|
||||
miter -equiv -make_assert -flatten gold gate miter
|
||||
sat -verify -prove-asserts -show-public -seq 10 -prove-skip 1 miter
|
||||
|
||||
### Non-blocking to the same output register ###
|
||||
read_verilog ../common/dynamic_part_select/nonblocking.v
|
||||
hierarchy -top nonblocking
|
||||
prep -flatten -top nonblocking
|
||||
design -save gold
|
||||
|
||||
equiv_opt -run :prove -map +/xilinx/cells_sim.v synth_xilinx -noiopad
|
||||
miter -equiv -make_assert -flatten gold gate miter
|
||||
sat -verify -prove-asserts -show-public -seq 10 -prove-skip 1 miter
|
||||
|
||||
### For-loop select, one dynamic input
|
||||
read_verilog ../common/dynamic_part_select/forloop_select.v
|
||||
hierarchy -top forloop_select
|
||||
prep -flatten -top forloop_select
|
||||
design -save gold
|
||||
|
||||
equiv_opt -run :prove -map +/xilinx/cells_sim.v synth_xilinx -noiopad
|
||||
miter -equiv -make_assert -flatten gold gate miter
|
||||
sat -verify -prove-asserts -show-public -seq 5 -prove-skip 1 miter
|
||||
|
||||
### Double loop (part-select, reset) ###
|
||||
read_verilog ../common/dynamic_part_select/reset_test.v
|
||||
hierarchy -top reset_test
|
||||
prep -flatten -top reset_test
|
||||
design -save gold
|
||||
|
||||
equiv_opt -run :prove -map +/xilinx/cells_sim.v synth_xilinx -noiopad
|
||||
miter -equiv -make_assert -flatten gold gate miter
|
||||
sat -verify -prove-asserts -show-public -seq 10 -prove-skip 1 miter
|
||||
|
||||
### Reversed part-select case ###
|
||||
read_verilog ../common/dynamic_part_select/reversed.v
|
||||
hierarchy -top reversed
|
||||
prep -flatten -top reversed
|
||||
design -save gold
|
||||
|
||||
equiv_opt -run :prove -map +/xilinx/cells_sim.v synth_xilinx -noiopad
|
||||
miter -equiv -make_assert -flatten gold gate miter
|
||||
sat -verify -prove-asserts -show-public -seq 20 -prove-skip 1 miter
|
Loading…
Reference in New Issue