mirror of https://github.com/YosysHQ/yosys.git
Merge pull request #2133 from dh73/nodev_head
Adding latch tests for shift&mask AST dynamic part-select enhancements
This commit is contained in:
commit
cf67e6a397
|
@ -21,18 +21,18 @@ read_verilog ./dynamic_part_select/multiple_blocking.v
|
||||||
proc
|
proc
|
||||||
rename -top gold
|
rename -top gold
|
||||||
design -stash gold
|
design -stash gold
|
||||||
|
|
||||||
read_verilog ./dynamic_part_select/multiple_blocking_gate.v
|
read_verilog ./dynamic_part_select/multiple_blocking_gate.v
|
||||||
proc
|
proc
|
||||||
rename -top gate
|
rename -top gate
|
||||||
design -stash gate
|
design -stash gate
|
||||||
|
|
||||||
design -copy-from gold -as gold gold
|
design -copy-from gold -as gold gold
|
||||||
design -copy-from gate -as gate gate
|
design -copy-from gate -as gate gate
|
||||||
|
|
||||||
miter -equiv -make_assert -make_outcmp -flatten gold gate equiv
|
miter -equiv -make_assert -make_outcmp -flatten gold gate equiv
|
||||||
sat -prove-asserts -seq 10 -show-public -verify -set-init-zero equiv
|
sat -prove-asserts -seq 10 -show-public -verify -set-init-zero equiv
|
||||||
|
|
||||||
### Non-blocking to the same output register ###
|
### Non-blocking to the same output register ###
|
||||||
design -reset
|
design -reset
|
||||||
read_verilog ./dynamic_part_select/nonblocking.v
|
read_verilog ./dynamic_part_select/nonblocking.v
|
||||||
|
@ -44,13 +44,13 @@ read_verilog ./dynamic_part_select/nonblocking_gate.v
|
||||||
proc
|
proc
|
||||||
rename -top gate
|
rename -top gate
|
||||||
design -stash gate
|
design -stash gate
|
||||||
|
|
||||||
design -copy-from gold -as gold gold
|
design -copy-from gold -as gold gold
|
||||||
design -copy-from gate -as gate gate
|
design -copy-from gate -as gate gate
|
||||||
|
|
||||||
miter -equiv -make_assert -make_outcmp -flatten gold gate equiv
|
miter -equiv -make_assert -make_outcmp -flatten gold gate equiv
|
||||||
sat -prove-asserts -seq 10 -show-public -verify -set-init-zero equiv
|
sat -prove-asserts -seq 10 -show-public -verify -set-init-zero equiv
|
||||||
|
|
||||||
### For-loop select, one dynamic input
|
### For-loop select, one dynamic input
|
||||||
design -reset
|
design -reset
|
||||||
read_verilog ./dynamic_part_select/forloop_select.v
|
read_verilog ./dynamic_part_select/forloop_select.v
|
||||||
|
@ -62,13 +62,13 @@ read_verilog ./dynamic_part_select/forloop_select_gate.v
|
||||||
proc
|
proc
|
||||||
rename -top gate
|
rename -top gate
|
||||||
design -stash gate
|
design -stash gate
|
||||||
|
|
||||||
design -copy-from gold -as gold gold
|
design -copy-from gold -as gold gold
|
||||||
design -copy-from gate -as gate gate
|
design -copy-from gate -as gate gate
|
||||||
|
|
||||||
miter -equiv -make_assert -make_outcmp -flatten gold gate equiv
|
miter -equiv -make_assert -make_outcmp -flatten gold gate equiv
|
||||||
sat -prove-asserts -seq 10 -show-public -verify -set-init-zero equiv
|
sat -prove-asserts -seq 10 -show-public -verify -set-init-zero equiv
|
||||||
|
|
||||||
#### Double loop (part-select, reset) ###
|
#### Double loop (part-select, reset) ###
|
||||||
design -reset
|
design -reset
|
||||||
read_verilog ./dynamic_part_select/reset_test.v
|
read_verilog ./dynamic_part_select/reset_test.v
|
||||||
|
@ -83,10 +83,10 @@ design -stash gate
|
||||||
|
|
||||||
design -copy-from gold -as gold gold
|
design -copy-from gold -as gold gold
|
||||||
design -copy-from gate -as gate gate
|
design -copy-from gate -as gate gate
|
||||||
|
|
||||||
miter -equiv -make_assert -make_outcmp -flatten gold gate equiv
|
miter -equiv -make_assert -make_outcmp -flatten gold gate equiv
|
||||||
sat -prove-asserts -seq 10 -show-public -verify -set-init-zero equiv
|
sat -prove-asserts -seq 10 -show-public -verify -set-init-zero equiv
|
||||||
|
|
||||||
### Reversed part-select case ###
|
### Reversed part-select case ###
|
||||||
design -reset
|
design -reset
|
||||||
read_verilog ./dynamic_part_select/reversed.v
|
read_verilog ./dynamic_part_select/reversed.v
|
||||||
|
@ -101,6 +101,62 @@ design -stash gate
|
||||||
|
|
||||||
design -copy-from gold -as gold gold
|
design -copy-from gold -as gold gold
|
||||||
design -copy-from gate -as gate gate
|
design -copy-from gate -as gate gate
|
||||||
|
|
||||||
|
miter -equiv -make_assert -make_outcmp -flatten gold gate equiv
|
||||||
|
sat -prove-asserts -seq 10 -show-public -verify -set-init-zero equiv
|
||||||
|
|
||||||
|
### Latches
|
||||||
|
## Issue 1990
|
||||||
|
design -reset
|
||||||
|
read_verilog ./dynamic_part_select/latch_1990.v
|
||||||
|
hierarchy -top latch_1990; prep; async2sync
|
||||||
|
rename -top gold
|
||||||
|
design -stash gold
|
||||||
|
|
||||||
|
read_verilog ./dynamic_part_select/latch_1990_gate.v
|
||||||
|
hierarchy -top latch_1990_gate; prep
|
||||||
|
rename -top gate
|
||||||
|
design -stash gate
|
||||||
|
|
||||||
|
design -copy-from gold -as gold gold
|
||||||
|
design -copy-from gate -as gate gate
|
||||||
|
|
||||||
|
miter -equiv -make_assert -make_outcmp -flatten gold gate equiv
|
||||||
|
sat -prove-asserts -show-public -verify -set-init-zero equiv
|
||||||
|
|
||||||
|
###
|
||||||
|
## Part select with obvious latch, expected to fail due comparison with old shift&mask AST transformation
|
||||||
|
design -reset
|
||||||
|
read_verilog ./dynamic_part_select/latch_002.v
|
||||||
|
hierarchy -top latch_002; prep; async2sync
|
||||||
|
rename -top gold
|
||||||
|
design -stash gold
|
||||||
|
|
||||||
|
read_verilog ./dynamic_part_select/latch_002_gate.v
|
||||||
|
hierarchy -top latch_002_gate; prep; async2sync
|
||||||
|
rename -top gate
|
||||||
|
design -stash gate
|
||||||
|
|
||||||
|
design -copy-from gold -as gold gold
|
||||||
|
design -copy-from gate -as gate gate
|
||||||
|
|
||||||
|
miter -equiv -make_assert -make_outcmp -flatten gold gate equiv
|
||||||
|
sat -prove-asserts -seq 10 -show-public -falsify -set-init-zero equiv
|
||||||
|
|
||||||
|
## Part select + latch, with no shift&mask
|
||||||
|
design -reset
|
||||||
|
read_verilog ./dynamic_part_select/latch_002.v
|
||||||
|
hierarchy -top latch_002; prep; async2sync
|
||||||
|
rename -top gold
|
||||||
|
design -stash gold
|
||||||
|
|
||||||
|
read_verilog ./dynamic_part_select/latch_002_gate_good.v
|
||||||
|
hierarchy -top latch_002_gate; prep; async2sync
|
||||||
|
rename -top gate
|
||||||
|
design -stash gate
|
||||||
|
|
||||||
|
design -copy-from gold -as gold gold
|
||||||
|
design -copy-from gate -as gate gate
|
||||||
|
|
||||||
miter -equiv -make_assert -make_outcmp -flatten gold gate equiv
|
miter -equiv -make_assert -make_outcmp -flatten gold gate equiv
|
||||||
sat -prove-asserts -seq 10 -show-public -verify -set-init-zero equiv
|
sat -prove-asserts -seq 10 -show-public -verify -set-init-zero equiv
|
||||||
|
|
|
@ -1,13 +1,14 @@
|
||||||
|
`default_nettype none
|
||||||
module forloop_select #(parameter WIDTH=16, SELW=4, CTRLW=$clog2(WIDTH), DINW=2**SELW)
|
module forloop_select #(parameter WIDTH=16, SELW=4, CTRLW=$clog2(WIDTH), DINW=2**SELW)
|
||||||
(input clk,
|
(input wire clk,
|
||||||
input [CTRLW-1:0] ctrl,
|
input wire [CTRLW-1:0] ctrl,
|
||||||
input [DINW-1:0] din,
|
input wire [DINW-1:0] din,
|
||||||
input en,
|
input wire en,
|
||||||
output reg [WIDTH-1:0] dout);
|
output reg [WIDTH-1:0] dout);
|
||||||
|
|
||||||
reg [SELW:0] sel;
|
reg [SELW:0] sel;
|
||||||
localparam SLICE = WIDTH/(SELW**2);
|
localparam SLICE = WIDTH/(SELW**2);
|
||||||
|
|
||||||
always @(posedge clk)
|
always @(posedge clk)
|
||||||
begin
|
begin
|
||||||
if (en) begin
|
if (en) begin
|
||||||
|
@ -16,4 +17,3 @@ module forloop_select #(parameter WIDTH=16, SELW=4, CTRLW=$clog2(WIDTH), DINW=2*
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
endmodule
|
endmodule
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
|
`default_nettype none
|
||||||
module forloop_select_gate (clk, ctrl, din, en, dout);
|
module forloop_select_gate (clk, ctrl, din, en, dout);
|
||||||
input clk;
|
input wire clk;
|
||||||
input [3:0] ctrl;
|
input wire [3:0] ctrl;
|
||||||
input [15:0] din;
|
input wire [15:0] din;
|
||||||
input en;
|
input wire en;
|
||||||
output reg [15:0] dout;
|
output reg [15:0] dout;
|
||||||
reg [4:0] sel;
|
reg [4:0] sel;
|
||||||
always @(posedge clk)
|
always @(posedge clk)
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
`default_nettype none
|
||||||
|
module latch_002
|
||||||
|
(dword, sel, st, vect);
|
||||||
|
output reg [63:0] dword;
|
||||||
|
input wire [7:0] vect;
|
||||||
|
input wire [7:0] sel;
|
||||||
|
input wire st;
|
||||||
|
|
||||||
|
always @(*) begin
|
||||||
|
if (st)
|
||||||
|
dword[8*sel +:8] <= vect[7:0];
|
||||||
|
end
|
||||||
|
endmodule // latch_002
|
|
@ -0,0 +1,18 @@
|
||||||
|
`default_nettype none
|
||||||
|
module latch_002_gate(dword, vect, sel, st);
|
||||||
|
output reg [63:0] dword;
|
||||||
|
input wire [7:0] vect;
|
||||||
|
input wire [7:0] sel;
|
||||||
|
input wire st;
|
||||||
|
reg [63:0] mask;
|
||||||
|
reg [63:0] data;
|
||||||
|
always @*
|
||||||
|
case (|(st))
|
||||||
|
1'b 1:
|
||||||
|
begin
|
||||||
|
mask = (8'b 11111111)<<((((8)*(sel)))+(0));
|
||||||
|
data = ((8'b 11111111)&(vect[7:0]))<<((((8)*(sel)))+(0));
|
||||||
|
dword <= ((dword)&(~(mask)))|(data);
|
||||||
|
end
|
||||||
|
endcase
|
||||||
|
endmodule
|
|
@ -0,0 +1,141 @@
|
||||||
|
`default_nettype none
|
||||||
|
module latch_002_gate (dword, vect, sel, st);
|
||||||
|
output reg [63:0] dword;
|
||||||
|
input wire [7:0] vect;
|
||||||
|
input wire [7:0] sel;
|
||||||
|
input st;
|
||||||
|
always @*
|
||||||
|
case (|(st))
|
||||||
|
1'b 1:
|
||||||
|
case ((((8)*(sel)))+(0))
|
||||||
|
0:
|
||||||
|
dword[7:0] <= vect[7:0];
|
||||||
|
1:
|
||||||
|
dword[8:1] <= vect[7:0];
|
||||||
|
2:
|
||||||
|
dword[9:2] <= vect[7:0];
|
||||||
|
3:
|
||||||
|
dword[10:3] <= vect[7:0];
|
||||||
|
4:
|
||||||
|
dword[11:4] <= vect[7:0];
|
||||||
|
5:
|
||||||
|
dword[12:5] <= vect[7:0];
|
||||||
|
6:
|
||||||
|
dword[13:6] <= vect[7:0];
|
||||||
|
7:
|
||||||
|
dword[14:7] <= vect[7:0];
|
||||||
|
8:
|
||||||
|
dword[15:8] <= vect[7:0];
|
||||||
|
9:
|
||||||
|
dword[16:9] <= vect[7:0];
|
||||||
|
10:
|
||||||
|
dword[17:10] <= vect[7:0];
|
||||||
|
11:
|
||||||
|
dword[18:11] <= vect[7:0];
|
||||||
|
12:
|
||||||
|
dword[19:12] <= vect[7:0];
|
||||||
|
13:
|
||||||
|
dword[20:13] <= vect[7:0];
|
||||||
|
14:
|
||||||
|
dword[21:14] <= vect[7:0];
|
||||||
|
15:
|
||||||
|
dword[22:15] <= vect[7:0];
|
||||||
|
16:
|
||||||
|
dword[23:16] <= vect[7:0];
|
||||||
|
17:
|
||||||
|
dword[24:17] <= vect[7:0];
|
||||||
|
18:
|
||||||
|
dword[25:18] <= vect[7:0];
|
||||||
|
19:
|
||||||
|
dword[26:19] <= vect[7:0];
|
||||||
|
20:
|
||||||
|
dword[27:20] <= vect[7:0];
|
||||||
|
21:
|
||||||
|
dword[28:21] <= vect[7:0];
|
||||||
|
22:
|
||||||
|
dword[29:22] <= vect[7:0];
|
||||||
|
23:
|
||||||
|
dword[30:23] <= vect[7:0];
|
||||||
|
24:
|
||||||
|
dword[31:24] <= vect[7:0];
|
||||||
|
25:
|
||||||
|
dword[32:25] <= vect[7:0];
|
||||||
|
26:
|
||||||
|
dword[33:26] <= vect[7:0];
|
||||||
|
27:
|
||||||
|
dword[34:27] <= vect[7:0];
|
||||||
|
28:
|
||||||
|
dword[35:28] <= vect[7:0];
|
||||||
|
29:
|
||||||
|
dword[36:29] <= vect[7:0];
|
||||||
|
30:
|
||||||
|
dword[37:30] <= vect[7:0];
|
||||||
|
31:
|
||||||
|
dword[38:31] <= vect[7:0];
|
||||||
|
32:
|
||||||
|
dword[39:32] <= vect[7:0];
|
||||||
|
33:
|
||||||
|
dword[40:33] <= vect[7:0];
|
||||||
|
34:
|
||||||
|
dword[41:34] <= vect[7:0];
|
||||||
|
35:
|
||||||
|
dword[42:35] <= vect[7:0];
|
||||||
|
36:
|
||||||
|
dword[43:36] <= vect[7:0];
|
||||||
|
37:
|
||||||
|
dword[44:37] <= vect[7:0];
|
||||||
|
38:
|
||||||
|
dword[45:38] <= vect[7:0];
|
||||||
|
39:
|
||||||
|
dword[46:39] <= vect[7:0];
|
||||||
|
40:
|
||||||
|
dword[47:40] <= vect[7:0];
|
||||||
|
41:
|
||||||
|
dword[48:41] <= vect[7:0];
|
||||||
|
42:
|
||||||
|
dword[49:42] <= vect[7:0];
|
||||||
|
43:
|
||||||
|
dword[50:43] <= vect[7:0];
|
||||||
|
44:
|
||||||
|
dword[51:44] <= vect[7:0];
|
||||||
|
45:
|
||||||
|
dword[52:45] <= vect[7:0];
|
||||||
|
46:
|
||||||
|
dword[53:46] <= vect[7:0];
|
||||||
|
47:
|
||||||
|
dword[54:47] <= vect[7:0];
|
||||||
|
48:
|
||||||
|
dword[55:48] <= vect[7:0];
|
||||||
|
49:
|
||||||
|
dword[56:49] <= vect[7:0];
|
||||||
|
50:
|
||||||
|
dword[57:50] <= vect[7:0];
|
||||||
|
51:
|
||||||
|
dword[58:51] <= vect[7:0];
|
||||||
|
52:
|
||||||
|
dword[59:52] <= vect[7:0];
|
||||||
|
53:
|
||||||
|
dword[60:53] <= vect[7:0];
|
||||||
|
54:
|
||||||
|
dword[61:54] <= vect[7:0];
|
||||||
|
55:
|
||||||
|
dword[62:55] <= vect[7:0];
|
||||||
|
56:
|
||||||
|
dword[63:56] <= vect[7:0];
|
||||||
|
57:
|
||||||
|
dword[63:57] <= vect[7:0];
|
||||||
|
58:
|
||||||
|
dword[63:58] <= vect[7:0];
|
||||||
|
59:
|
||||||
|
dword[63:59] <= vect[7:0];
|
||||||
|
60:
|
||||||
|
dword[63:60] <= vect[7:0];
|
||||||
|
61:
|
||||||
|
dword[63:61] <= vect[7:0];
|
||||||
|
62:
|
||||||
|
dword[63:62] <= vect[7:0];
|
||||||
|
63:
|
||||||
|
dword[63:63] <= vect[7:0];
|
||||||
|
endcase
|
||||||
|
endcase
|
||||||
|
endmodule
|
|
@ -0,0 +1,12 @@
|
||||||
|
module latch_1990 #(
|
||||||
|
parameter BUG = 1
|
||||||
|
) (
|
||||||
|
(* nowrshmsk = !BUG *)
|
||||||
|
output reg [1:0] x
|
||||||
|
);
|
||||||
|
wire z = 0;
|
||||||
|
integer i;
|
||||||
|
always @*
|
||||||
|
for (i = 0; i < 2; i=i+1)
|
||||||
|
x[z^i] = z^i;
|
||||||
|
endmodule
|
|
@ -0,0 +1,6 @@
|
||||||
|
`default_nettype none
|
||||||
|
module latch_1990_gate
|
||||||
|
(output wire [1:0] x);
|
||||||
|
assign x = 2'b10;
|
||||||
|
endmodule // latch_1990_gate
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
|
`default_nettype none
|
||||||
module multiple_blocking #(parameter WIDTH=32, SELW=1, CTRLW=$clog2(WIDTH), DINW=2**SELW)
|
module multiple_blocking #(parameter WIDTH=32, SELW=1, CTRLW=$clog2(WIDTH), DINW=2**SELW)
|
||||||
(input clk,
|
(input wire clk,
|
||||||
input [CTRLW-1:0] ctrl,
|
input wire [CTRLW-1:0] ctrl,
|
||||||
input [DINW-1:0] din,
|
input wire [DINW-1:0] din,
|
||||||
input [SELW-1:0] sel,
|
input wire [SELW-1:0] sel,
|
||||||
output reg [WIDTH-1:0] dout);
|
output reg [WIDTH-1:0] dout);
|
||||||
|
|
||||||
localparam SLICE = WIDTH/(SELW**2);
|
localparam SLICE = WIDTH/(SELW**2);
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
|
`default_nettype none
|
||||||
module multiple_blocking_gate (clk, ctrl, din, sel, dout);
|
module multiple_blocking_gate (clk, ctrl, din, sel, dout);
|
||||||
input clk;
|
input wire clk;
|
||||||
input [4:0] ctrl;
|
input wire [4:0] ctrl;
|
||||||
input [1:0] din;
|
input wire [1:0] din;
|
||||||
input [0:0] sel;
|
input wire [0:0] sel;
|
||||||
output reg [31:0] dout;
|
output reg [31:0] dout;
|
||||||
reg [5:0] a;
|
reg [5:0] a;
|
||||||
reg [0:0] b;
|
reg [0:0] b;
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
|
`default_nettype none
|
||||||
module nonblocking #(parameter WIDTH=32, SELW=1, CTRLW=$clog2(WIDTH), DINW=2**SELW)
|
module nonblocking #(parameter WIDTH=32, SELW=1, CTRLW=$clog2(WIDTH), DINW=2**SELW)
|
||||||
(input clk,
|
(input wire clk,
|
||||||
input [CTRLW-1:0] ctrl,
|
input wire [CTRLW-1:0] ctrl,
|
||||||
input [DINW-1:0] din,
|
input wire [DINW-1:0] din,
|
||||||
input [SELW-1:0] sel,
|
input wire [SELW-1:0] sel,
|
||||||
output reg [WIDTH-1:0] dout);
|
output reg [WIDTH-1:0] dout);
|
||||||
|
|
||||||
localparam SLICE = WIDTH/(SELW**2);
|
localparam SLICE = WIDTH/(SELW**2);
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
|
`default_nettype none
|
||||||
module nonblocking_gate (clk, ctrl, din, sel, dout);
|
module nonblocking_gate (clk, ctrl, din, sel, dout);
|
||||||
input clk;
|
input wire clk;
|
||||||
input [4:0] ctrl;
|
input wire [4:0] ctrl;
|
||||||
input [1:0] din;
|
input wire [1:0] din;
|
||||||
input [0:0] sel;
|
input wire [0:0] sel;
|
||||||
output reg [31:0] dout;
|
output reg [31:0] dout;
|
||||||
always @(posedge clk)
|
always @(posedge clk)
|
||||||
begin
|
begin
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
|
`default_nettype none
|
||||||
module original #(parameter WIDTH=32, SELW=1, CTRLW=$clog2(WIDTH), DINW=2**SELW)
|
module original #(parameter WIDTH=32, SELW=1, CTRLW=$clog2(WIDTH), DINW=2**SELW)
|
||||||
(input clk,
|
(input wire clk,
|
||||||
input [CTRLW-1:0] ctrl,
|
input wire [CTRLW-1:0] ctrl,
|
||||||
input [DINW-1:0] din,
|
input wire [DINW-1:0] din,
|
||||||
input [SELW-1:0] sel,
|
input wire [SELW-1:0] sel,
|
||||||
output reg [WIDTH-1:0] dout);
|
output reg [WIDTH-1:0] dout);
|
||||||
localparam SLICE = WIDTH/(SELW**2);
|
localparam SLICE = WIDTH/(SELW**2);
|
||||||
always @(posedge clk)
|
always @(posedge clk)
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
|
`default_nettype none
|
||||||
module original_gate (clk, ctrl, din, sel, dout);
|
module original_gate (clk, ctrl, din, sel, dout);
|
||||||
input clk;
|
input wire clk;
|
||||||
input [4:0] ctrl;
|
input wire [4:0] ctrl;
|
||||||
input [1:0] din;
|
input wire [1:0] din;
|
||||||
input [0:0] sel;
|
input wire [0:0] sel;
|
||||||
output reg [31:0] dout;
|
output reg [31:0] dout;
|
||||||
always @(posedge clk)
|
always @(posedge clk)
|
||||||
case (({(ctrl)*(sel)})+(0))
|
case (({(ctrl)*(sel)})+(0))
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
|
`default_nettype none
|
||||||
module reset_test #(parameter WIDTH=32, SELW=1, CTRLW=$clog2(WIDTH), DINW=2**SELW)
|
module reset_test #(parameter WIDTH=32, SELW=1, CTRLW=$clog2(WIDTH), DINW=2**SELW)
|
||||||
(input clk,
|
(input wire clk,
|
||||||
input [CTRLW-1:0] ctrl,
|
input wire reset,
|
||||||
input [DINW-1:0] din,
|
input wire [CTRLW-1:0] ctrl,
|
||||||
input [SELW-1:0] sel,
|
input wire [DINW-1:0] din,
|
||||||
|
input wire [SELW-1:0] sel,
|
||||||
output reg [WIDTH-1:0] dout);
|
output reg [WIDTH-1:0] dout);
|
||||||
|
|
||||||
reg [SELW:0] i;
|
reg [SELW:0] i;
|
||||||
|
@ -16,8 +18,6 @@ module reset_test #(parameter WIDTH=32, SELW=1, CTRLW=$clog2(WIDTH), DINW=2**SE
|
||||||
dout[i*rval+:SLICE] <= 32'hDEAD;
|
dout[i*rval+:SLICE] <= 32'hDEAD;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
//else begin
|
|
||||||
dout[ctrl*sel+:SLICE] <= din;
|
dout[ctrl*sel+:SLICE] <= din;
|
||||||
//end
|
|
||||||
end
|
end
|
||||||
endmodule
|
endmodule
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
module reset_test_gate (clk, ctrl, din, sel, dout);
|
`default_nettype none
|
||||||
input clk;
|
module reset_test_gate (clk, reset, ctrl, din, sel, dout);
|
||||||
input [4:0] ctrl;
|
input wire clk;
|
||||||
input [1:0] din;
|
input wire reset;
|
||||||
input [0:0] sel;
|
input wire [4:0] ctrl;
|
||||||
|
input wire [1:0] din;
|
||||||
|
input wire [0:0] sel;
|
||||||
output reg [31:0] dout;
|
output reg [31:0] dout;
|
||||||
reg [1:0] i;
|
reg [1:0] i;
|
||||||
wire [0:0] rval;
|
wire [0:0] rval;
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
|
`default_nettype none
|
||||||
module reversed #(parameter WIDTH=32, SELW=4, CTRLW=$clog2(WIDTH), DINW=2**SELW)
|
module reversed #(parameter WIDTH=32, SELW=4, CTRLW=$clog2(WIDTH), DINW=2**SELW)
|
||||||
(input clk,
|
(input wire clk,
|
||||||
input [CTRLW-1:0] ctrl,
|
input wire [CTRLW-1:0] ctrl,
|
||||||
input [DINW-1:0] din,
|
input wire [DINW-1:0] din,
|
||||||
input [SELW-1:0] sel,
|
input wire [SELW-1:0] sel,
|
||||||
output reg [WIDTH-1:0] dout);
|
output reg [WIDTH-1:0] dout);
|
||||||
|
|
||||||
localparam SLICE = WIDTH/(SELW**2);
|
localparam SLICE = WIDTH/(SELW**2);
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
|
`default_nettype none
|
||||||
module reversed_gate (clk, ctrl, din, sel, dout);
|
module reversed_gate (clk, ctrl, din, sel, dout);
|
||||||
input clk;
|
input wire clk;
|
||||||
input [4:0] ctrl;
|
input wire [4:0] ctrl;
|
||||||
input [15:0] din;
|
input wire [15:0] din;
|
||||||
input [3:0] sel;
|
input wire [3:0] sel;
|
||||||
output reg [31:0] dout;
|
output reg [31:0] dout;
|
||||||
always @(posedge clk)
|
always @(posedge clk)
|
||||||
case ((({(32)-((ctrl)*(sel))})+(1))-(2))
|
case ((({(32)-((ctrl)*(sel))})+(1))-(2))
|
||||||
|
|
Loading…
Reference in New Issue