3
0
Fork 0
mirror of https://github.com/YosysHQ/yosys synced 2025-09-10 19:51:27 +00:00

rtlil: add textual roundtrip test

This commit is contained in:
Emil J. Tywoniak 2025-09-02 19:50:15 +02:00
parent d7a80c6165
commit c12b485135
7 changed files with 1554 additions and 0 deletions

View file

@ -874,6 +874,7 @@ MK_TEST_DIRS += tests/sim
MK_TEST_DIRS += tests/svtypes
MK_TEST_DIRS += tests/techmap
MK_TEST_DIRS += tests/various
MK_TEST_DIRS += tests/rtlil
ifeq ($(ENABLE_VERIFIC),1)
ifneq ($(YOSYS_NOVERIFIC),1)
MK_TEST_DIRS += tests/verific

2
tests/rtlil/.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
*.tmp.il
*.tmp.il.bak

40
tests/rtlil/everything.v Normal file
View file

@ -0,0 +1,40 @@
module alu(
input clk,
input [7:0] A,
input [7:0] B,
input [3:0] operation,
output reg [7:0] result,
output reg CF,
output reg ZF,
output reg SF
);
localparam ALU_OP_ADD = 4'b0000;
localparam ALU_OP_SUB = 4'b0001;
reg [8:0] tmp;
always @(posedge clk)
begin
case (operation)
ALU_OP_ADD :
tmp = A + B;
ALU_OP_SUB :
tmp = A - B;
endcase
CF <= tmp[8];
ZF <= tmp[7:0] == 0;
SF <= tmp[7];
result <= tmp[7:0];
end
endmodule
module foo(
input [7:0] a, input [7:0] b, output [7:0] y
);
wire [7:0] bb;
assign b = bb;
assign y = a + bb;
endmodule

View file

@ -0,0 +1,283 @@
autoidx 15
attribute \src "everything.v:1.1-32.10"
attribute \cells_not_processed 1
module \alu
attribute \src "everything.v:2.8-2.11"
wire input 1 \clk
attribute \src "everything.v:3.14-3.15"
wire width 8 input 2 \A
attribute \src "everything.v:4.14-4.15"
wire width 8 input 3 \B
attribute \src "everything.v:5.14-5.23"
wire width 4 input 4 \operation
attribute \src "everything.v:6.19-6.25"
wire width 8 output 5 \result
attribute \src "everything.v:7.13-7.15"
wire output 6 \CF
attribute \src "everything.v:8.13-8.15"
wire output 7 \ZF
attribute \src "everything.v:9.13-9.15"
wire output 8 \SF
attribute \src "everything.v:15.12-15.15"
wire width 9 \tmp
attribute \src "everything.v:17.2-31.5"
wire width 8 $0\result[7:0]
attribute \src "everything.v:17.2-31.5"
wire $0\CF[0:0]
attribute \src "everything.v:17.2-31.5"
wire $0\ZF[0:0]
attribute \src "everything.v:17.2-31.5"
wire $0\SF[0:0]
attribute \src "everything.v:17.2-31.5"
wire width 9 $0\tmp[8:0]
attribute \src "everything.v:17.2-31.5"
wire width 9 $1\tmp[8:0]
attribute \src "everything.v:21.11-21.16"
wire width 9 $add$everything.v:21$2_Y
attribute \src "everything.v:23.11-23.16"
wire width 9 $sub$everything.v:23$3_Y
attribute \src "everything.v:27.9-27.22"
wire $eq$everything.v:27$4_Y
attribute \src "everything.v:21.11-21.16"
cell $add $add$everything.v:21$2
parameter \A_SIGNED 0
parameter \B_SIGNED 0
parameter \A_WIDTH 8
parameter \B_WIDTH 8
parameter \Y_WIDTH 9
connect \A \A
connect \B \B
connect \Y $add$everything.v:21$2_Y
end
attribute \src "everything.v:23.11-23.16"
cell $sub $sub$everything.v:23$3
parameter \A_SIGNED 0
parameter \B_SIGNED 0
parameter \A_WIDTH 8
parameter \B_WIDTH 8
parameter \Y_WIDTH 9
connect \A \A
connect \B \B
connect \Y $sub$everything.v:23$3_Y
end
attribute \src "everything.v:27.9-27.22"
cell $eq $eq$everything.v:27$4
parameter \A_SIGNED 0
parameter \B_SIGNED 0
parameter \A_WIDTH 8
parameter \B_WIDTH 32
parameter \Y_WIDTH 1
connect \A $1\tmp[8:0] [7:0]
connect \B 0
connect \Y $eq$everything.v:27$4_Y
end
attribute \src "everything.v:17.2-31.5"
process $proc$everything.v:17$1
assign { } { }
assign { } { }
assign { } { }
assign { } { }
assign { } { }
assign $0\tmp[8:0] $1\tmp[8:0]
assign $0\CF[0:0] $1\tmp[8:0] [8]
assign $0\ZF[0:0] $eq$everything.v:27$4_Y
assign $0\SF[0:0] $1\tmp[8:0] [7]
assign $0\result[7:0] $1\tmp[8:0] [7:0]
attribute \src "everything.v:19.3-24.10"
switch \operation
attribute \src "everything.v:19.19-19.19"
case 4'0000
assign { } { }
assign $1\tmp[8:0] $add$everything.v:21$2_Y
attribute \src "everything.v:21.17-21.17"
case 4'0001
assign { } { }
assign $1\tmp[8:0] $sub$everything.v:23$3_Y
case
assign $1\tmp[8:0] \tmp
end
sync posedge \clk
update \result $0\result[7:0]
update \CF $0\CF[0:0]
update \ZF $0\ZF[0:0]
update \SF $0\SF[0:0]
update \tmp $0\tmp[8:0]
end
end
attribute \src "everything.v:34.1-40.10"
attribute \cells_not_processed 1
module \foo
attribute \src "everything.v:35.17-35.18"
wire width 8 input 1 \a
attribute \src "everything.v:35.32-35.33"
wire width 8 input 2 \b
attribute \src "everything.v:35.48-35.49"
wire width 8 output 3 \y
attribute \src "everything.v:37.16-37.18"
wire width 8 \bb
attribute \src "everything.v:39.16-39.22"
wire width 8 $add$everything.v:39$5_Y
attribute \src "everything.v:39.16-39.22"
cell $add $add$everything.v:39$5
parameter \A_SIGNED 0
parameter \B_SIGNED 0
parameter \A_WIDTH 8
parameter \B_WIDTH 8
parameter \Y_WIDTH 8
connect \A \a
connect \B \bb
connect \Y $add$everything.v:39$5_Y
end
connect \b \bb
connect \y $add$everything.v:39$5_Y
end
attribute \cells_not_processed 1
attribute \src "everything.v:1.1-32.10"
module \zzz
attribute \src "everything.v:27.9-27.22"
wire $eq$everything.v:27$4_Y
attribute \src "everything.v:23.11-23.16"
wire width 9 $sub$everything.v:23$3_Y
attribute \src "everything.v:21.11-21.16"
wire width 9 $add$everything.v:21$2_Y
attribute \src "everything.v:17.2-31.5"
wire width 9 $1\tmp[8:0]
attribute \src "everything.v:17.2-31.5"
wire width 9 $0\tmp[8:0]
attribute \src "everything.v:17.2-31.5"
wire $0\SF[0:0]
attribute \src "everything.v:17.2-31.5"
wire $0\ZF[0:0]
attribute \src "everything.v:17.2-31.5"
wire $0\CF[0:0]
attribute \src "everything.v:17.2-31.5"
wire width 8 $0\result[7:0]
attribute \src "everything.v:15.12-15.15"
wire width 9 \tmp
attribute \src "everything.v:9.13-9.15"
wire output 8 \SF
attribute \src "everything.v:8.13-8.15"
wire output 7 \ZF
attribute \src "everything.v:7.13-7.15"
wire output 6 \CF
attribute \src "everything.v:6.19-6.25"
wire width 8 output 5 \result
attribute \src "everything.v:5.14-5.23"
wire width 4 input 4 \operation
attribute \src "everything.v:4.14-4.15"
wire width 8 input 3 \B
attribute \src "everything.v:3.14-3.15"
wire width 8 input 2 \A
attribute \src "everything.v:2.8-2.11"
wire input 1 \clk
wire $procmux$8_CMP
wire width 9 $procmux$7_Y
wire $procmux$9_CMP
attribute \src "everything.v:27.9-27.22"
cell $logic_not $eq$everything.v:27$4
parameter \A_SIGNED 0
parameter \Y_WIDTH 1
parameter \A_WIDTH 8
connect \A $1\tmp[8:0] [7:0]
connect \Y $eq$everything.v:27$4_Y
end
attribute \src "everything.v:23.11-23.16"
cell $sub $sub$everything.v:23$3
parameter \A_SIGNED 0
parameter \B_SIGNED 0
parameter \A_WIDTH 8
parameter \B_WIDTH 8
parameter \Y_WIDTH 9
connect \A \A
connect \B \B
connect \Y $sub$everything.v:23$3_Y
end
attribute \src "everything.v:21.11-21.16"
cell $add $add$everything.v:21$2
parameter \A_SIGNED 0
parameter \B_SIGNED 0
parameter \A_WIDTH 8
parameter \B_WIDTH 8
parameter \Y_WIDTH 9
connect \A \A
connect \B \B
connect \Y $add$everything.v:21$2_Y
end
attribute \src "everything.v:19.3-24.10"
attribute \full_case 1
cell $eq $procmux$8_CMP0
parameter \A_SIGNED 0
parameter \B_SIGNED 0
parameter \A_WIDTH 4
parameter \B_WIDTH 4
parameter \Y_WIDTH 1
connect \A \operation
connect \B 4'0001
connect \Y $procmux$8_CMP
end
attribute \src "everything.v:19.3-24.10"
attribute \full_case 1
cell $pmux $procmux$7
parameter \WIDTH 9
parameter \S_WIDTH 2
connect \A \tmp
connect \B { $add$everything.v:21$2_Y $sub$everything.v:23$3_Y }
connect \S { $procmux$9_CMP $procmux$8_CMP }
connect \Y $procmux$7_Y
end
attribute \src "everything.v:19.3-24.10"
attribute \full_case 1
cell $logic_not $procmux$9_CMP0
parameter \A_SIGNED 0
parameter \Y_WIDTH 1
parameter \A_WIDTH 4
connect \A \operation
connect \Y $procmux$9_CMP
end
attribute \src "everything.v:17.2-31.5"
cell $dff $procdff$10
parameter \WIDTH 8
parameter \CLK_POLARITY 1'1
connect \D $procmux$7_Y [7:0]
connect \Q \result
connect \CLK \clk
end
attribute \src "everything.v:17.2-31.5"
cell $dff $procdff$11
parameter \WIDTH 1
parameter \CLK_POLARITY 1'1
connect \D $procmux$7_Y [8]
connect \Q \CF
connect \CLK \clk
end
attribute \src "everything.v:17.2-31.5"
cell $dff $procdff$12
parameter \WIDTH 1
parameter \CLK_POLARITY 1'1
connect \D $eq$everything.v:27$4_Y
connect \Q \ZF
connect \CLK \clk
end
attribute \src "everything.v:17.2-31.5"
cell $dff $procdff$13
parameter \WIDTH 1
parameter \CLK_POLARITY 1'1
connect \D $procmux$7_Y [7]
connect \Q \SF
connect \CLK \clk
end
attribute \src "everything.v:17.2-31.5"
cell $dff $procdff$14
parameter \WIDTH 9
parameter \CLK_POLARITY 1'1
connect \D $procmux$7_Y
connect \Q \tmp
connect \CLK \clk
end
connect $0\result[7:0] $1\tmp[8:0] [7:0]
connect $0\SF[0:0] $1\tmp[8:0] [7]
connect $0\ZF[0:0] $eq$everything.v:27$4_Y
connect $0\CF[0:0] $1\tmp[8:0] [8]
connect $0\tmp[8:0] $1\tmp[8:0]
connect $1\tmp[8:0] $procmux$7_Y
end

View file

@ -0,0 +1,30 @@
set -euo pipefail
YS=../../yosys
# write_rtlil and dump are equivalent
$YS -p "read_verilog -sv everything.v; copy alu zzz; proc zzz; dump -o roundtrip-text.dump.tmp.il; write_rtlil roundtrip-text.write.tmp.il"
sed '/^$/d' -i.bak roundtrip-text.dump.tmp.il
sed '/^$/d' -i.bak roundtrip-text.write.tmp.il
# Trim first line ("Generated by Yosys ...")
tail -n +2 roundtrip-text.write.tmp.il > roundtrip-text.write-nogen.tmp.il
diff roundtrip-text.dump.tmp.il roundtrip-text.write-nogen.tmp.il
diff roundtrip-text.dump.tmp.il roundtrip-text.ref.il
# Loading and writing it out again doesn't change the RTLIL
$YS -p "read_rtlil roundtrip-text.dump.tmp.il; write_rtlil roundtrip-text.reload.tmp.il"
sed '/^$/d' -i.bak roundtrip-text.reload.tmp.il
tail -n +2 roundtrip-text.reload.tmp.il > roundtrip-text.reload-nogen.tmp.il
diff roundtrip-text.dump.tmp.il roundtrip-text.reload-nogen.tmp.il
# Hashing differences don't change the RTLIL
$YS --hash-seed=2345678 -p "read_rtlil roundtrip-text.dump.tmp.il; write_rtlil roundtrip-text.reload-hash.tmp.il"
sed '/^$/d' -i.bak roundtrip-text.reload-hash.tmp.il
tail -n +2 roundtrip-text.reload-hash.tmp.il > roundtrip-text.reload-hash-nogen.tmp.il
diff roundtrip-text.dump.tmp.il roundtrip-text.reload-hash-nogen.tmp.il
echo "Without ABC, we don't get any irreproducibility and can pin that"
echo "Has this test case started failing for you? Consider updating the reference"
$YS -p "read_verilog -sv everything.v; synth -noabc; write_rtlil roundtrip-text.synth.tmp.il"
sed '/^$/d' -i.bak roundtrip-text.synth.tmp.il
tail -n +2 roundtrip-text.synth.tmp.il > roundtrip-text.synth-nogen.tmp.il
diff roundtrip-text.synth-nogen.tmp.il roundtrip-text.synth.ref.il

File diff suppressed because it is too large Load diff

4
tests/rtlil/run-test.sh Executable file
View file

@ -0,0 +1,4 @@
#!/usr/bin/env bash
set -eu
source ../gen-tests-makefile.sh
generate_mk --bash