3
0
Fork 0
mirror of https://github.com/YosysHQ/yosys synced 2025-04-23 17:15:33 +00:00

Merge pull request #60 from alaindargelas/peepopt_neg_sub

neg-sub peepopt pass
This commit is contained in:
Akash Levy 2025-03-10 15:48:49 -07:00 committed by GitHub
commit 4d4e574ebb
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 212 additions and 0 deletions

148
tests/peepopt/neg_sub.ys Normal file
View file

@ -0,0 +1,148 @@
log -header "Test simple positive case"
log -push
design -reset
read_verilog <<EOF
module equation_example (
input signed [7:0] a,
input signed [7:0] b,
output signed [8:0] result
);
assign result = - (a - b);
endmodule
EOF
check -assert
equiv_opt -assert -post peepopt
select -assert-none t:$neg
select -assert-any t:$sub
design -reset
log -pop
log -header "Test positive case with intermediate signal"
log -push
design -reset
read_verilog <<EOF
module equation_example (
input signed [7:0] a,
input signed [7:0] b,
output signed [8:0] result
);
wire signed [8:0] difference;
assign difference = a - b;
assign result = - difference;
endmodule
EOF
check -assert
equiv_opt -assert -post peepopt
select -assert-none t:$neg
select -assert-any t:$sub
design -reset
log -pop
log -header "Test negative case (fanout)"
log -push
design -reset
read_verilog <<EOF
module equation_example (
input signed [7:0] a,
input signed [7:0] b,
output signed [8:0] result,
output signed [8:0] not_diff
);
wire signed [8:0] difference;
assign difference = a - b;
assign result = -difference;
assign not_diff = ~difference;
endmodule
EOF
check -assert
equiv_opt -assert -post peepopt
select -assert-any t:$neg
select -assert-any t:$sub
design -reset
log -pop
log -header "Test negative case (unsigned intermediate signal)"
log -push
design -reset
read_verilog <<EOF
module equation_example (
input signed [7:0] a,
input signed [7:0] b,
output signed [8:0] result
);
wire [8:0] difference;
assign difference = a - b;
assign result = -difference;
endmodule
EOF
check -assert
equiv_opt -assert -post peepopt
select -assert-any t:$neg
select -assert-any t:$sub
design -reset
log -pop
log -header "Test negative case, inputs are not signed"
log -push
design -reset
read_verilog <<EOF
module equation_example (
input [7:0] a,
input [7:0] b,
output signed [8:0] result
);
assign result = - (a - b);
endmodule
EOF
check -assert
equiv_opt -assert -post peepopt
select -assert-any t:$neg
select -assert-any t:$sub
design -reset
log -pop
log -header "Negative case with disconnected intermediate signal (operator in the middle)"
log -push
design -reset
read_verilog <<EOF
module equation_example (
input signed [7:0] a,
input signed [7:0] b,
output signed [8:0] result
);
wire signed [8:0] difference;
wire signed [8:0] c;
assign difference = a - b;
assign c = ~difference;
assign result = - c;
endmodule
EOF
check -assert
equiv_opt -assert -post peepopt
select -assert-any t:$neg
select -assert-any t:$sub
design -reset
log -pop
log -header "Negative case with disconnected intermediate signal"
log -push
design -reset
read_verilog <<EOF
module equation_example (
input signed [7:0] a,
input signed [7:0] b,
output signed [8:0] result
);
wire signed [8:0] difference;
wire signed [8:0] c;
assign difference = a - b;
assign c = a + b ;
assign result = - c;
endmodule
EOF
check -assert
equiv_opt -assert -post peepopt
select -assert-any t:$neg
select -assert-any t:$sub
design -reset
log -pop