@ -10,6 +10,8 @@ port = 2020
|
||||
privkey = /home/joppe/.ssh/id_rsa
|
||||
pubkey = /home/joppe/.ssh/id_rsa.pub
|
||||
|
||||
# ######################################
|
||||
# Basic synthesis
|
||||
[target.synth]
|
||||
toolchain = ISE
|
||||
|
||||
@ -31,3 +33,41 @@ toplevel = toplevel
|
||||
files_vhdl = RTL/toplevel.vhd
|
||||
#files_verilog =
|
||||
files_con = CON/toplevel.ucf
|
||||
# ######################################
|
||||
|
||||
# ######################################
|
||||
# Behavioural simulation
|
||||
[target.sim]
|
||||
toolchain = isim
|
||||
|
||||
# Toolchain settings
|
||||
toplevel = tb_toplevel
|
||||
vcdlevels = 20
|
||||
runtime = all
|
||||
#fuse_opts =
|
||||
#isim_opts =
|
||||
|
||||
# Fileset
|
||||
files_vhdl = RTL/toplevel.vhd
|
||||
SIM/tb_toplevel.vhd
|
||||
#files_verilog =
|
||||
# ######################################
|
||||
|
||||
# ######################################
|
||||
# Post synthesis simulation (synth must have ran first)
|
||||
[target.psim]
|
||||
toolchain = isim
|
||||
|
||||
# Toolchain settings
|
||||
toplevel = tb_toplevel
|
||||
vcdlevels = 20
|
||||
runtime = all
|
||||
fuse_opts = --maxdelay work.glbl
|
||||
isim_opts = -sdfmax /tb_toplevel/c_toplevel=%%D%%/OUT/synth/synth.sdf
|
||||
# %%D%% is replaced with the top directory of the project
|
||||
|
||||
# Fileset
|
||||
files_vhdl = SIM/tb_toplevel.vhd
|
||||
files_verilog = OUT/synth/synth.v
|
||||
files_other = OUT/synth/synth.sdf
|
||||
# ######################################
|
83
remotesyn/toolchains/isim.py
Normal file
83
remotesyn/toolchains/isim.py
Normal file
@ -0,0 +1,83 @@
|
||||
import shutil
|
||||
import os
|
||||
import time
|
||||
import subprocess
|
||||
|
||||
def do(config, target, log, subprocesses, prefix='.'):
|
||||
log(" - parsing options")
|
||||
toplevel = config.get(f'target.{target}', 'toplevel', fallback='toplevel')
|
||||
vcdlevels = config.get(f'target.{target}', 'vcdlevels', fallback='1')
|
||||
runtime = config.get(f'target.{target}', 'runtime', fallback='100 ns')
|
||||
fuse_opts = config.get(f'target.{target}', 'fuse_opts', fallback='')
|
||||
isim_opts = config.get(f'target.{target}', 'isim_opts', fallback='')
|
||||
files_vhdl = config.get(f'target.{target}', 'files_vhdl', fallback='').split()
|
||||
files_verilog = config.get(f'target.{target}', 'files_verilog', fallback='').split()
|
||||
build_dir = config.get(f'project', 'build_dir', fallback='build')
|
||||
out_dir = config.get(f'project', 'out_dir', fallback='out')
|
||||
|
||||
prefix = f'{os.getcwd()}/{prefix}'
|
||||
build_dir = f'{prefix}/{build_dir}'
|
||||
out_dir = f'{prefix}/{out_dir}/{target}'
|
||||
|
||||
fuse_opts = fuse_opts.replace("%D%", prefix)
|
||||
isim_opts = isim_opts.replace("%D%", prefix)
|
||||
|
||||
log(" - creating output directories")
|
||||
os.makedirs(build_dir, exist_ok=True)
|
||||
os.makedirs(out_dir, exist_ok=True)
|
||||
|
||||
log(" - writing project file")
|
||||
with open(f'{build_dir}/sim.prj', 'w') as f:
|
||||
for s in files_vhdl:
|
||||
if s=='':
|
||||
continue
|
||||
f.write(f"vhdl work {prefix}/{s}\n")
|
||||
for s in files_verilog:
|
||||
if s=='':
|
||||
continue
|
||||
f.write(f"verilog work {prefix}/{s}\n")
|
||||
|
||||
log(" - run fuse")
|
||||
p = subprocess.Popen(f"fuse -v 2 {fuse_opts} {toplevel} -prj sim.prj -o sim -incremental > ffuse.log",
|
||||
shell=True, cwd=build_dir,
|
||||
stdin=subprocess.DEVNULL, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
|
||||
subprocesses.append(p)
|
||||
while p.poll() is None:
|
||||
time.sleep(1)
|
||||
res = p.returncode
|
||||
|
||||
log(" - copy logs")
|
||||
shutil.copy(f'{build_dir}/ffuse.log', f'{out_dir}/fuse.log')
|
||||
|
||||
if res!=0:
|
||||
log("ERROR: fuse returned with:", res)
|
||||
return res
|
||||
|
||||
log(" - writing simulation file")
|
||||
with open(f'{build_dir}/sim.tcl', 'w') as f:
|
||||
f.write("onerror {resume}\n")
|
||||
f.write("vcd dumpfile sim.vcd\n")
|
||||
f.write(f"vcd dumpvars -m {toplevel} -l {vcdlevels}\n")
|
||||
f.write("vcd dumpon\n")
|
||||
f.write(f"run {runtime}\n")
|
||||
f.write("vcd dumpflush\nquit\n")
|
||||
|
||||
log(" - run sim")
|
||||
p = subprocess.Popen(f"./sim {isim_opts} -tclbatch sim.tcl > sim.log",
|
||||
shell=True, cwd=build_dir,
|
||||
stdin=subprocess.DEVNULL, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
|
||||
subprocesses.append(p)
|
||||
while p.poll() is None:
|
||||
time.sleep(1)
|
||||
res = p.returncode
|
||||
|
||||
log(" - copy logs")
|
||||
shutil.copy(f'{build_dir}/sim.log', f'{out_dir}/sim.log')
|
||||
|
||||
if res==0:
|
||||
log(" - copy output files")
|
||||
shutil.copy(f'{build_dir}/sim.vcd', f'{out_dir}/{target}.vcd')
|
||||
else:
|
||||
log("ERROR: sim returned with:", res)
|
||||
|
||||
return res
|
@ -9,7 +9,7 @@ def ngdbuild(config, target, log, subprocesses, prefix='.') -> int:
|
||||
package = config.get(f'target.{target}', 'package', fallback='')
|
||||
speedgrade = config.get(f'target.{target}', 'speedgrade', fallback='')
|
||||
ngdbuild_opts = config.get(f'target.{target}', 'ngdbuild_opts', fallback='')
|
||||
files_con = config.get(f'target.{target}', 'files_con', fallback='').split(' ')
|
||||
files_con = config.get(f'target.{target}', 'files_con', fallback='').split()
|
||||
build_dir = config.get(f'project', 'build_dir', fallback='build')
|
||||
out_dir = config.get(f'project', 'out_dir', fallback='out')
|
||||
|
||||
|
@ -10,8 +10,8 @@ def xst(config, target, log, subprocesses, prefix='.') -> int:
|
||||
speedgrade = config.get(f'target.{target}', 'speedgrade', fallback='')
|
||||
toplevel = config.get(f'target.{target}', 'toplevel', fallback='toplevel')
|
||||
xst_opts = config.get(f'target.{target}', 'xst_opts', fallback='')
|
||||
files_vhdl = config.get(f'target.{target}', 'files_vhdl', fallback='').split(' ')
|
||||
files_verilog = config.get(f'target.{target}', 'files_verilog', fallback='').split(' ')
|
||||
files_vhdl = config.get(f'target.{target}', 'files_vhdl', fallback='').split()
|
||||
files_verilog = config.get(f'target.{target}', 'files_verilog', fallback='').split()
|
||||
build_dir = config.get(f'project', 'build_dir', fallback='build')
|
||||
out_dir = config.get(f'project', 'out_dir', fallback='out')
|
||||
|
||||
|
Reference in New Issue
Block a user