-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcompile_rtl.py
74 lines (67 loc) · 2.77 KB
/
compile_rtl.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import sys
import filecmp
import subprocess
import sys
import os
# 主函数
def main():
rtl_dir = sys.argv[1]
if rtl_dir != r'..':
tb_file = r'/tb/compliance_test/tinyriscv_soc_tb.v'
else:
tb_file = r'/tb/tinyriscv_soc_tb.v'
# iverilog程序
iverilog_cmd = ['iverilog']
# 顶层模块
#iverilog_cmd += ['-s', r'tinyriscv_soc_tb']
# 编译生成文件
iverilog_cmd += ['-o', r'out.vvp']
# 头文件(defines.vh)路径
iverilog_cmd += ['-I', rtl_dir + r'/rtl/header']
# 宏定义,仿真输出文件
iverilog_cmd += ['-D', r'OUTPUT="signature.output"']
# testbench文件
iverilog_cmd.append(rtl_dir + tb_file)
# ../rtl/core
iverilog_cmd.append(rtl_dir + r'/rtl/core/clint.v')
iverilog_cmd.append(rtl_dir + r'/rtl/core/csr_reg.v')
iverilog_cmd.append(rtl_dir + r'/rtl/core/ctrl.v')
iverilog_cmd.append(rtl_dir + r'/rtl/core/div.v')
iverilog_cmd.append(rtl_dir + r'/rtl/core/ex.v')
iverilog_cmd.append(rtl_dir + r'/rtl/core/id.v')
iverilog_cmd.append(rtl_dir + r'/rtl/core/id_ex.v')
iverilog_cmd.append(rtl_dir + r'/rtl/core/if_id.v')
iverilog_cmd.append(rtl_dir + r'/rtl/core/pc_reg.v')
iverilog_cmd.append(rtl_dir + r'/rtl/core/regs.v')
iverilog_cmd.append(rtl_dir + r'/rtl/core/rib.v')
iverilog_cmd.append(rtl_dir + r'/rtl/core/tinyriscv.v')
iverilog_cmd.append(rtl_dir + r'/rtl/core/pre_id.v')
iverilog_cmd.append(rtl_dir + r'/rtl/core/bpu.v')
# ../rtl/perips
iverilog_cmd.append(rtl_dir + r'/rtl/perips/ram.v')
iverilog_cmd.append(rtl_dir + r'/rtl/perips/rom.v')
iverilog_cmd.append(rtl_dir + r'/rtl/perips/timer.v')
iverilog_cmd.append(rtl_dir + r'/rtl/perips/uart.v')
iverilog_cmd.append(rtl_dir + r'/rtl/perips/gpio.v')
iverilog_cmd.append(rtl_dir + r'/rtl/perips/spi.v')
iverilog_cmd.append(rtl_dir + r'/rtl/perips/pwm.v')
iverilog_cmd.append(rtl_dir + r'/rtl/perips/i2c.v')
# ../rtl/debug
iverilog_cmd.append(rtl_dir + r'/rtl/debug/jtag_dm.v')
iverilog_cmd.append(rtl_dir + r'/rtl/debug/jtag_driver.v')
iverilog_cmd.append(rtl_dir + r'/rtl/debug/jtag_top.v')
iverilog_cmd.append(rtl_dir + r'/rtl/debug/uart_debug.v')
# ../rtl/soc
iverilog_cmd.append(rtl_dir + r'/rtl/soc/tinyriscv_soc_top.v')
# ../rtl/utils
iverilog_cmd.append(rtl_dir + r'/rtl/utils/full_handshake_rx.v')
iverilog_cmd.append(rtl_dir + r'/rtl/utils/full_handshake_tx.v')
iverilog_cmd.append(rtl_dir + r'/rtl/utils/gen_buf.v')
iverilog_cmd.append(rtl_dir + r'/rtl/utils/gen_dff.v')
iverilog_cmd.append(rtl_dir + r'/rtl/utils/gen_pulse.v')
iverilog_cmd.append(rtl_dir + r'/rtl/header/defines.vh')
# 编译
process = subprocess.Popen(iverilog_cmd)
process.wait(timeout=5)
if __name__ == '__main__':
sys.exit(main())