aboutsummaryrefslogtreecommitdiffstats
path: root/tests/arch/common/dynamic_part_select
diff options
context:
space:
mode:
authordiego <diego@symbioticeda.com>2020-04-16 13:31:05 -0500
committerdiego <diego@symbioticeda.com>2020-04-16 13:31:05 -0500
commit87910732f15c900cbd752158258a8af12720d277 (patch)
treeb4e9eec2b14a1f93315e9869b5413c2832eacd6c /tests/arch/common/dynamic_part_select
parente86ba3b94d7285ded20b4280ad52821cbca504fc (diff)
downloadyosys-87910732f15c900cbd752158258a8af12720d277.tar.gz
yosys-87910732f15c900cbd752158258a8af12720d277.tar.bz2
yosys-87910732f15c900cbd752158258a8af12720d277.zip
Adding tests for dynamic part select optimisation
Diffstat (limited to 'tests/arch/common/dynamic_part_select')
-rw-r--r--tests/arch/common/dynamic_part_select/forloop_select.v19
-rw-r--r--tests/arch/common/dynamic_part_select/multiple_blocking.v19
-rw-r--r--tests/arch/common/dynamic_part_select/nonblocking.v14
-rw-r--r--tests/arch/common/dynamic_part_select/original.v13
-rw-r--r--tests/arch/common/dynamic_part_select/reset_test.v24
-rw-r--r--tests/arch/common/dynamic_part_select/reversed.v13
6 files changed, 102 insertions, 0 deletions
diff --git a/tests/arch/common/dynamic_part_select/forloop_select.v b/tests/arch/common/dynamic_part_select/forloop_select.v
new file mode 100644
index 000000000..9276a3ed8
--- /dev/null
+++ b/tests/arch/common/dynamic_part_select/forloop_select.v
@@ -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
+
diff --git a/tests/arch/common/dynamic_part_select/multiple_blocking.v b/tests/arch/common/dynamic_part_select/multiple_blocking.v
new file mode 100644
index 000000000..7861722d4
--- /dev/null
+++ b/tests/arch/common/dynamic_part_select/multiple_blocking.v
@@ -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
diff --git a/tests/arch/common/dynamic_part_select/nonblocking.v b/tests/arch/common/dynamic_part_select/nonblocking.v
new file mode 100644
index 000000000..89c399522
--- /dev/null
+++ b/tests/arch/common/dynamic_part_select/nonblocking.v
@@ -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
diff --git a/tests/arch/common/dynamic_part_select/original.v b/tests/arch/common/dynamic_part_select/original.v
new file mode 100644
index 000000000..bd7654ef5
--- /dev/null
+++ b/tests/arch/common/dynamic_part_select/original.v
@@ -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
diff --git a/tests/arch/common/dynamic_part_select/reset_test.v b/tests/arch/common/dynamic_part_select/reset_test.v
new file mode 100644
index 000000000..5a3a9b9fc
--- /dev/null
+++ b/tests/arch/common/dynamic_part_select/reset_test.v
@@ -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
diff --git a/tests/arch/common/dynamic_part_select/reversed.v b/tests/arch/common/dynamic_part_select/reversed.v
new file mode 100644
index 000000000..6ef0e10be
--- /dev/null
+++ b/tests/arch/common/dynamic_part_select/reversed.v
@@ -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
+