Skip to content

Commit 94104ae

Browse files
committed
nuterm using libtorch
Initial prototype of neural ranking function synthesis for liveness properties.
1 parent 5a36ef4 commit 94104ae

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+2266
-32
lines changed

.github/workflows/pull-request-checks.yaml

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,3 +191,52 @@ jobs:
191191
run: make -C regression/verilog test-z3
192192
- name: Print ccache stats
193193
run: ccache -s
194+
195+
# This job takes approximately 1 minute
196+
check-ubuntu-22_04-nuterm:
197+
runs-on: ubuntu-22.04
198+
steps:
199+
- uses: actions/checkout@v3
200+
with:
201+
submodules: recursive
202+
- name: Fetch dependencies
203+
env:
204+
# This is needed in addition to -yq to prevent apt-get from asking for
205+
# user input
206+
DEBIAN_FRONTEND: noninteractive
207+
run: |
208+
sudo apt-get update
209+
sudo apt-get install --no-install-recommends -yq gcc g++ ccache cmake
210+
- name: Prepare ccache
211+
uses: actions/cache@v3
212+
with:
213+
path: .ccache
214+
key: ${{ runner.os }}-22.04-nuterm-${{ github.ref }}-${{ github.sha }}-PR
215+
restore-keys: |
216+
${{ runner.os }}-22.04-nuterm-${{ github.ref }}
217+
${{ runner.os }}-22.04-nuterm
218+
- name: ccache environment
219+
run: |
220+
echo "CCACHE_BASEDIR=$PWD" >> $GITHUB_ENV
221+
echo "CCACHE_DIR=$PWD/.ccache" >> $GITHUB_ENV
222+
- name: Zero ccache stats and limit in size
223+
run: ccache -z --max-size=500M
224+
- name: Get pytorch
225+
run: |
226+
cd src/nuterm
227+
wget -q https://download.pytorch.org/libtorch/cpu/libtorch-cxx11-abi-shared-with-deps-2.1.2%2Bcpu.zip
228+
unzip -q *.zip
229+
- name: Build with cmake
230+
run: |
231+
cd src/nuterm
232+
LIBTORCH=`pwd`/libtorch
233+
mkdir build
234+
cd build
235+
cmake -DCMAKE_PREFIX_PATH=$LIBTORCH -DCMAKE_CXX_COMPILER_LAUNCHER=ccache ..
236+
cmake --build . --config Release
237+
- name: Run the unit tests
238+
run: src/nuterm/build/pytorch_tests
239+
- name: Run the system tests
240+
run: make -C regression/nuterm
241+
- name: Print ccache stats
242+
run: ccache -s

examples/Benchmarks/run_nuterm

Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
#!/bin/sh
2+
3+
set -e
4+
5+
ebmc PWM_1.sv --neural-liveness --trace-steps 700 --traces 1
6+
ebmc PWM_2.sv --neural-liveness --trace-steps 1000 --traces 1
7+
ebmc PWM_3.sv --neural-liveness --trace-steps 3000 --traces 1
8+
ebmc PWM_4.sv --neural-liveness --trace-steps 5000 --traces 1
9+
ebmc PWM_5.sv --neural-liveness --trace-steps 10000 --traces 1
10+
ebmc PWM_6.sv --neural-liveness --trace-steps 20000 --traces 1
11+
ebmc PWM_7.sv --neural-liveness --trace-steps 40000 --traces 1
12+
ebmc PWM_8.sv --neural-liveness --trace-steps 80000 --traces 1
13+
ebmc PWM_9.sv --neural-liveness --trace-steps 160000 --traces 1
14+
15+
if false ; then
16+
ebmc delay_1.sv --neural-liveness "750-cnt"
17+
ebmc delay_2.sv --neural-liveness "1250-cnt"
18+
ebmc delay_3.sv --neural-liveness "2500-cnt"
19+
ebmc delay_4.sv --neural-liveness "5000-cnt"
20+
ebmc delay_5.sv --neural-liveness "7500-cnt"
21+
ebmc delay_6.sv --neural-liveness "10000-cnt"
22+
ebmc delay_7.sv --neural-liveness "12500-cnt"
23+
ebmc delay_8.sv --neural-liveness "15000-cnt"
24+
ebmc delay_9.sv --neural-liveness "17500-cnt"
25+
ebmc delay_10.sv --neural-liveness "20000-cnt"
26+
ebmc delay_11.sv --neural-liveness "22500-cnt"
27+
ebmc delay_12.sv --neural-liveness "25000-cnt"
28+
ebmc delay_13.sv --neural-liveness "50000-cnt"
29+
ebmc delay_14.sv --neural-liveness "100000-cnt"
30+
ebmc delay_15.sv --neural-liveness "200000-cnt"
31+
ebmc delay_16.sv --neural-liveness "400000-cnt"
32+
fi
33+
34+
ebmc gray_1.sv --neural-liveness
35+
ebmc gray_2.sv --neural-liveness
36+
ebmc gray_3.sv --neural-liveness
37+
ebmc gray_4.sv --neural-liveness
38+
ebmc gray_5.sv --neural-liveness
39+
ebmc gray_6.sv --neural-liveness
40+
ebmc gray_7.sv --neural-liveness
41+
ebmc gray_8.sv --neural-liveness
42+
ebmc gray_9.sv --neural-liveness
43+
ebmc gray_10.sv --neural-liveness
44+
ebmc gray_11.sv --neural-liveness
45+
46+
if false ; then
47+
ebmc i2c_1.sv --neural-liveness "2**9-cnt"
48+
ebmc i2c_2.sv --neural-liveness "2**10-cnt"
49+
ebmc i2c_3.sv --neural-liveness "2**11-cnt"
50+
ebmc i2c_4.sv --neural-liveness "2**12-cnt"
51+
ebmc i2c_5.sv --neural-liveness "2**13-cnt"
52+
ebmc i2c_6.sv --neural-liveness "2**14-cnt"
53+
ebmc i2c_7.sv --neural-liveness "2**15-cnt"
54+
ebmc i2c_8.sv --neural-liveness "2**16-cnt"
55+
ebmc i2c_9.sv --neural-liveness "2**17-cnt"
56+
ebmc i2c_10.sv --neural-liveness "2**18-cnt"
57+
ebmc i2c_11.sv --neural-liveness "2**19-cnt"
58+
ebmc i2c_12.sv --neural-liveness "2**10-cnt"
59+
ebmc i2c_13.sv --neural-liveness "2**10-cnt"
60+
ebmc i2c_14.sv --neural-liveness "2**10-cnt"
61+
ebmc i2c_15.sv --neural-liveness "2**10-cnt"
62+
ebmc i2c_16.sv --neural-liveness "2**10-cnt"
63+
ebmc i2c_17.sv --neural-liveness "2**10-cnt"
64+
ebmc i2c_18.sv --neural-liveness "2**10-cnt"
65+
ebmc i2c_19.sv --neural-liveness "2**10-cnt"
66+
ebmc i2c_20.sv --neural-liveness "2**19-cnt"
67+
fi
68+
69+
if false ; then
70+
ebmc lcd_1.sv --neural-liveness "{3-state,500-cnt}"
71+
ebmc lcd_2.sv --neural-liveness "{3-state,1000-cnt}"
72+
ebmc lcd_3.sv --neural-liveness "{3-state,1500-cnt}"
73+
ebmc lcd_4.sv --neural-liveness "{3-state,2500-cnt}"
74+
ebmc lcd_5.sv --neural-liveness "{3-state,5000-cnt}"
75+
ebmc lcd_6.sv --neural-liveness "{3-state,7500-cnt}"
76+
ebmc lcd_7.sv --neural-liveness "{3-state,10000-cnt}"
77+
ebmc lcd_8.sv --neural-liveness "{3-state,12500-cnt}"
78+
ebmc lcd_9.sv --neural-liveness "{3-state,15000-cnt}"
79+
ebmc lcd_10.sv --neural-liveness "{3-state,17500-cnt}"
80+
ebmc lcd_11.sv --neural-liveness "{3-state,20000-cnt}"
81+
ebmc lcd_12.sv --neural-liveness "{3-state,22500-cnt}"
82+
ebmc lcd_13.sv --neural-liveness "{3-state,90000-cnt}"
83+
ebmc lcd_14.sv --neural-liveness "{3-state,180000-cnt}"
84+
fi
85+
86+
ebmc seven_seg_1.sv --neural-liveness --property SEVEN.property.p1
87+
ebmc seven_seg_2.sv --neural-liveness --property SEVEN.property.p1
88+
ebmc seven_seg_3.sv --neural-liveness --property SEVEN.property.p1
89+
ebmc seven_seg_4.sv --neural-liveness --property SEVEN.property.p1
90+
ebmc seven_seg_5.sv --neural-liveness --property SEVEN.property.p1
91+
ebmc seven_seg_6.sv --neural-liveness --property SEVEN.property.p1
92+
ebmc seven_seg_7.sv --neural-liveness --property SEVEN.property.p1
93+
ebmc seven_seg_8.sv --neural-liveness --property SEVEN.property.p1
94+
ebmc seven_seg_9.sv --neural-liveness --property SEVEN.property.p1
95+
ebmc seven_seg_10.sv --neural-liveness --property SEVEN.property.p1
96+
ebmc seven_seg_11.sv --neural-liveness --property SEVEN.property.p1
97+
ebmc seven_seg_12.sv --neural-liveness --property SEVEN.property.p1
98+
ebmc seven_seg_16.sv --neural-liveness --property SEVEN.property.p1
99+
ebmc seven_seg_17.sv --neural-liveness --property SEVEN.property.p1
100+
ebmc seven_seg_18.sv --neural-liveness --property SEVEN.property.p1
101+
102+
if false ; then
103+
ebmc thermocouple_1.sv --neural-liveness "{2-state,2**5-cnt}"
104+
ebmc thermocouple_2.sv --neural-liveness "{2-state,2**9-cnt}"
105+
ebmc thermocouple_3.sv --neural-liveness "{2-state,2**10-cnt}"
106+
ebmc thermocouple_4.sv --neural-liveness "{2-state,2**10-cnt}"
107+
ebmc thermocouple_5.sv --neural-liveness "{2-state,2**11-cnt}"
108+
ebmc thermocouple_6.sv --neural-liveness "{2-state,2**11-cnt}"
109+
ebmc thermocouple_7.sv --neural-liveness "{2-state,2**12-cnt}"
110+
ebmc thermocouple_8.sv --neural-liveness "{2-state,2**12-cnt}"
111+
ebmc thermocouple_9.sv --neural-liveness "{2-state,2**13-cnt}"
112+
ebmc thermocouple_10.sv --neural-liveness "{2-state,2**14-cnt}"
113+
ebmc thermocouple_11.sv --neural-liveness "{2-state,2**14-cnt}"
114+
ebmc thermocouple_12.sv --neural-liveness "{2-state,2**14-cnt}"
115+
ebmc thermocouple_13.sv --neural-liveness "{2-state,2**15-cnt}"
116+
ebmc thermocouple_14.sv --neural-liveness "{2-state,2**16-cnt}"
117+
ebmc thermocouple_15.sv --neural-liveness "{2-state,2**17-cnt}"
118+
ebmc thermocouple_16.sv --neural-liveness "{2-state,2**18-cnt}"
119+
ebmc thermocouple_17.sv --neural-liveness "{2-state,2**19-cnt}"
120+
fi
121+
122+
ebmc uart_transmit_1.sv --neural-liveness --trace-steps 100 --traces 20
123+
ebmc uart_transmit_2.sv --neural-liveness --trace-steps 100 --traces 20
124+
ebmc uart_transmit_3.sv --neural-liveness --trace-steps 100 --traces 20
125+
ebmc uart_transmit_4.sv --neural-liveness --trace-steps 100 --traces 20
126+
ebmc uart_transmit_5.sv --neural-liveness --trace-steps 100 --traces 20
127+
ebmc uart_transmit_6.sv --neural-liveness --trace-steps 100 --traces 20
128+
ebmc uart_transmit_7.sv --neural-liveness --trace-steps 100 --traces 20
129+
ebmc uart_transmit_8.sv --neural-liveness --trace-steps 100 --traces 20
130+
ebmc uart_transmit_9.sv --neural-liveness --trace-steps 100 --traces 20
131+
ebmc uart_transmit_10.sv --neural-liveness --trace-steps 200 --traces 20
132+
ebmc uart_transmit_11.sv --neural-liveness --trace-steps 200 --traces 20
133+
ebmc uart_transmit_12.sv --neural-liveness --trace-steps 200 --traces 20
134+
135+
if false ; then
136+
ebmc vga_1.sv --neural-liveness "{2**5-v_cnt,2**7-h_cnt}"
137+
ebmc vga_2.sv --neural-liveness "{2**6-v_cnt,2**8-h_cnt}"
138+
ebmc vga_3.sv --neural-liveness "{2**6-v_cnt,2**8-h_cnt}"
139+
ebmc vga_4.sv --neural-liveness "{2**7-v_cnt,2**9-h_cnt}"
140+
ebmc vga_5.sv --neural-liveness "{2**8-v_cnt,2**9-h_cnt}"
141+
ebmc vga_6.sv --neural-liveness "{2**8-v_cnt,2**9-h_cnt}"
142+
ebmc vga_7.sv --neural-liveness "{2**8-v_cnt,2**10-h_cnt}"
143+
ebmc vga_8.sv --neural-liveness "{2**9-v_cnt,2**10-h_cnt}"
144+
ebmc vga_9.sv --neural-liveness "{2**9-v_cnt,2**11-h_cnt}"
145+
fi

regression/ebmc/neural-liveness/counter1.desc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
counter1.sv
3-
--traces 2 --neural-liveness --neural-engine "echo Candidate: counter\\\\n"
3+
--traces 2 --neural-liveness --neural-engine "echo RESULT: counter\\\\n"
44
^\[main\.property\.p0\] always s_eventually main.counter == 0: PROVED$
55
^EXIT=0$
66
^SIGNAL=0$
Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
CORE
22
counter1.sv
33
--traces 1 --neural-liveness --show-traces
4-
^nuterm::live@0 = 0$
5-
^nuterm::live@1 = 0$
6-
^nuterm::live@2 = 0$
7-
^nuterm::live@3 = 0$
8-
^nuterm::live@4 = 0$
9-
^nuterm::live@5 = 0$
10-
^nuterm::live@6 = 0$
11-
^nuterm::live@7 = 0$
12-
^nuterm::live@8 = 0$
13-
^nuterm::live@9 = 0$
14-
^nuterm::live@10 = 1$
4+
^Verilog::main\.\$live@0 = 0$
5+
^Verilog::main\.\$live@1 = 0$
6+
^Verilog::main\.\$live@2 = 0$
7+
^Verilog::main\.\$live@3 = 0$
8+
^Verilog::main\.\$live@4 = 0$
9+
^Verilog::main\.\$live@5 = 0$
10+
^Verilog::main\.\$live@6 = 0$
11+
^Verilog::main\.\$live@7 = 0$
12+
^Verilog::main\.\$live@8 = 0$
13+
^Verilog::main\.\$live@9 = 0$
14+
^Verilog::main\.\$live@10 = 1$
1515
^EXIT=0$
1616
^SIGNAL=0$
1717
--

regression/nuterm/Makefile

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
default: test
2+
3+
TEST_PL = ../../lib/cbmc/regression/test.pl
4+
5+
test:
6+
@$(TEST_PL) -c ../../../src/nuterm/build/nuterm
7+

regression/nuterm/counters/README

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Sample as follows:
2+
3+
ebmc FILE.v --random-traces --vcd FILE/trace
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
CORE
2+
counter1
3+
4+
^weight clk = 0 .*$
5+
^weight counter = 1 .*$
6+
^bias: 0 .*$
7+
^RESULT: counter$
8+
^EXIT=0$
9+
^SIGNAL=0$

regression/nuterm/counters/counter1.v

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
module main(input clk);
2+
3+
reg [31:0] counter;
4+
5+
always @(posedge clk)
6+
if(counter != 0)
7+
counter = counter - 1;
8+
9+
wire \$live = counter == 0;
10+
11+
endmodule
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
$date
2+
Mon May 20 17:39:58 2024
3+
$end
4+
$timescale
5+
1ns
6+
$end
7+
$scope module Verilog::main $end
8+
$var wire 1 main.clk clk $end
9+
$var reg 32 main.counter counter [31:0] $end
10+
$var wire 1 main.$live $live $end
11+
$upscope $end
12+
$enddefinitions $end
13+
#0
14+
0main.clk
15+
b00010000000000000000000000000000 main.counter
16+
0main.$live
17+
#1
18+
1main.clk
19+
b00001111111111111111111111111111 main.counter
20+
#2
21+
b00001111111111111111111111111110 main.counter
22+
#3
23+
0main.clk
24+
b00001111111111111111111111111101 main.counter
25+
#4
26+
1main.clk
27+
b00001111111111111111111111111100 main.counter
28+
#5
29+
b00001111111111111111111111111011 main.counter
30+
#6
31+
b00001111111111111111111111111010 main.counter
32+
#7
33+
b00001111111111111111111111111001 main.counter
34+
#8
35+
b00001111111111111111111111111000 main.counter
36+
#9
37+
b00001111111111111111111111110111 main.counter
38+
#10
39+
b00001111111111111111111111110110 main.counter
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
$date
2+
Mon May 20 17:39:58 2024
3+
$end
4+
$timescale
5+
1ns
6+
$end
7+
$scope module Verilog::main $end
8+
$var wire 1 main.clk clk $end
9+
$var reg 32 main.counter counter [31:0] $end
10+
$var wire 1 main.$live $live $end
11+
$upscope $end
12+
$enddefinitions $end
13+
#0
14+
0main.clk
15+
b00010000000000000000000000000000 main.counter
16+
0main.$live
17+
#1
18+
1main.clk
19+
b00001111111111111111111111111111 main.counter
20+
#2
21+
0main.clk
22+
b00001111111111111111111111111110 main.counter
23+
#3
24+
b00001111111111111111111111111101 main.counter
25+
#4
26+
1main.clk
27+
b00001111111111111111111111111100 main.counter
28+
#5
29+
0main.clk
30+
b00001111111111111111111111111011 main.counter
31+
#6
32+
b00001111111111111111111111111010 main.counter
33+
#7
34+
b00001111111111111111111111111001 main.counter
35+
#8
36+
1main.clk
37+
b00001111111111111111111111111000 main.counter
38+
#9
39+
b00001111111111111111111111110111 main.counter
40+
#10
41+
0main.clk
42+
b00001111111111111111111111110110 main.counter
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
$date
2+
Mon May 20 17:39:58 2024
3+
$end
4+
$timescale
5+
1ns
6+
$end
7+
$scope module Verilog::main $end
8+
$var wire 1 main.clk clk $end
9+
$var reg 32 main.counter counter [31:0] $end
10+
$var wire 1 main.$live $live $end
11+
$upscope $end
12+
$enddefinitions $end
13+
#0
14+
0main.clk
15+
b00010000000000000000000000000000 main.counter
16+
0main.$live
17+
#1
18+
b00001111111111111111111111111111 main.counter
19+
#2
20+
1main.clk
21+
b00001111111111111111111111111110 main.counter
22+
#3
23+
0main.clk
24+
b00001111111111111111111111111101 main.counter
25+
#4
26+
b00001111111111111111111111111100 main.counter
27+
#5
28+
b00001111111111111111111111111011 main.counter
29+
#6
30+
b00001111111111111111111111111010 main.counter
31+
#7
32+
b00001111111111111111111111111001 main.counter
33+
#8
34+
1main.clk
35+
b00001111111111111111111111111000 main.counter
36+
#9
37+
0main.clk
38+
b00001111111111111111111111110111 main.counter
39+
#10
40+
1main.clk
41+
b00001111111111111111111111110110 main.counter

0 commit comments

Comments
 (0)