mirror of https://github.com/YosysHQ/yosys.git
Added tests/various/constmsk_test.ys
This commit is contained in:
parent
f5a40e7043
commit
01ef34c147
|
@ -0,0 +1,4 @@
|
||||||
|
module test(input [3:0] A, output [3:0] Y1, Y2);
|
||||||
|
assign Y1 = |{A[3], 1'b0, A[1]};
|
||||||
|
assign Y2 = |{A[2], 1'b1, A[0]};
|
||||||
|
endmodule
|
|
@ -0,0 +1,15 @@
|
||||||
|
read_verilog constmsk_test.v
|
||||||
|
|
||||||
|
copy test gold
|
||||||
|
rename test gate
|
||||||
|
|
||||||
|
cd gate
|
||||||
|
techmap -map constmsk_testmap.v;;
|
||||||
|
cd ..
|
||||||
|
|
||||||
|
select -assert-count 2 gold/r:A_WIDTH=3
|
||||||
|
select -assert-count 1 gate/r:A_WIDTH=2
|
||||||
|
select -assert-count 1 gate/c:*
|
||||||
|
|
||||||
|
miter -equiv -flatten gold gate miter
|
||||||
|
sat -verify -prove trigger 0 miter
|
|
@ -0,0 +1,49 @@
|
||||||
|
(* techmap_celltype = "$reduce_or" *)
|
||||||
|
module my_opt_reduce_or(...);
|
||||||
|
parameter A_SIGNED = 0;
|
||||||
|
parameter A_WIDTH = 1;
|
||||||
|
parameter Y_WIDTH = 1;
|
||||||
|
|
||||||
|
input [A_WIDTH-1:0] A;
|
||||||
|
output reg [Y_WIDTH-1:0] Y;
|
||||||
|
|
||||||
|
parameter _TECHMAP_CONSTMSK_A_ = 0;
|
||||||
|
parameter _TECHMAP_CONSTVAL_A_ = 0;
|
||||||
|
|
||||||
|
wire _TECHMAP_FAIL_ = count_nonconst_bits() == A_WIDTH;
|
||||||
|
wire [1024:0] _TECHMAP_DO_ = "proc;;";
|
||||||
|
|
||||||
|
function integer count_nonconst_bits;
|
||||||
|
integer i;
|
||||||
|
begin
|
||||||
|
count_nonconst_bits = 0;
|
||||||
|
for (i = 0; i < A_WIDTH; i=i+1)
|
||||||
|
if (!_TECHMAP_CONSTMSK_A_[i])
|
||||||
|
count_nonconst_bits = count_nonconst_bits+1;
|
||||||
|
end
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function has_const_one;
|
||||||
|
integer i;
|
||||||
|
begin
|
||||||
|
has_const_one = 0;
|
||||||
|
for (i = 0; i < A_WIDTH; i=i+1)
|
||||||
|
if (_TECHMAP_CONSTMSK_A_[i] && _TECHMAP_CONSTVAL_A_[i] === 1'b1)
|
||||||
|
has_const_one = 1;
|
||||||
|
end
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
integer i;
|
||||||
|
reg [count_nonconst_bits()-1:0] tmp;
|
||||||
|
|
||||||
|
always @* begin
|
||||||
|
if (has_const_one()) begin
|
||||||
|
Y = 1;
|
||||||
|
end else begin
|
||||||
|
for (i = 0; i < A_WIDTH; i=i+1)
|
||||||
|
if (!_TECHMAP_CONSTMSK_A_[i])
|
||||||
|
tmp = {A[i], tmp[count_nonconst_bits()-1:1]};
|
||||||
|
Y = |tmp;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
endmodule
|
Loading…
Reference in New Issue