Skip to content

Commit 109618a

Browse files
committed
Merge branch 'feature_windows' into develop
2 parents 5cbbb88 + 86c6b4c commit 109618a

File tree

1 file changed

+94
-123
lines changed

1 file changed

+94
-123
lines changed

veriloggen/simulation/simulation.py

Lines changed: 94 additions & 123 deletions
Original file line numberDiff line numberDiff line change
@@ -160,48 +160,38 @@ def run_iverilog(objs, display=False, top=None, outputfile=None,
160160
cmd.append(outputfile)
161161

162162
# encoding: 'utf-8' ?
163-
encode = sys.getdefaultencoding()
163+
encoding = sys.getdefaultencoding()
164164

165165
code = _to_code(objs)
166-
tmp = tempfile.NamedTemporaryFile()
167-
tmp.write(code.encode(encode))
166+
167+
if os.name == 'nt':
168+
fd, path = tempfile.mkstemp()
169+
os.close(fd)
170+
tmp = open(path, 'w+b')
171+
else:
172+
tmp = tempfile.NamedTemporaryFile()
173+
174+
tmp.write(code.encode(encoding))
168175
tmp.read()
169176
filename = tmp.name
170177

171178
cmd.append(filename)
172179

173180
# synthesis
174-
p = subprocess.Popen(' '.join(cmd), shell=True, stdout=subprocess.PIPE)
175-
syn_rslt = []
176-
while True:
177-
stdout_data = p.stdout.readline()
178-
syn_rslt.append(stdout_data.decode(encode))
179-
if display:
180-
print(stdout_data, end='')
181-
if not stdout_data:
182-
break
183-
p.wait()
184-
p.stdout.close()
185-
syn_rslt = ''.join(syn_rslt)
181+
syn_rslt = _exec(' '.join(cmd), encoding, display)
186182

187183
# simulation
188-
p = subprocess.Popen('./' + outputfile, shell=True,
189-
stdout=subprocess.PIPE)
190-
sim_rslt = []
191-
while True:
192-
stdout_data = p.stdout.readline()
193-
sim_rslt.append(stdout_data.decode(encode))
194-
if display:
195-
print(stdout_data, end='')
196-
if not stdout_data:
197-
break
198-
p.wait()
199-
p.stdout.close()
200-
sim_rslt = ''.join(sim_rslt)
184+
cmd = []
185+
cmd.append('vvp')
186+
cmd.append(outputfile)
187+
sim_rslt = _exec(' '.join(cmd), encoding, display)
201188

202189
# close temporal source code file
203190
tmp.close()
204191

192+
if os.name == 'nt':
193+
os.remove(path)
194+
205195
return ''.join([syn_rslt, sim_rslt])
206196

207197

@@ -255,48 +245,42 @@ def run_vcs(objs, display=False, top=None, outputfile=None,
255245
cmd.append(outputfile)
256246

257247
# encoding: 'utf-8' ?
258-
encode = sys.getdefaultencoding()
248+
encoding = sys.getdefaultencoding()
259249

260250
code = _to_code(objs)
261-
tmp = tempfile.NamedTemporaryFile()
262-
tmp.write(code.encode(encode))
251+
252+
if os.name == 'nt':
253+
fd, path = tempfile.mkstemp()
254+
os.close(fd)
255+
tmp = open(path, 'w+b')
256+
else:
257+
tmp = tempfile.NamedTemporaryFile()
258+
259+
tmp.write(code.encode(encoding))
263260
tmp.read()
264261
filename = tmp.name
265262

266263
cmd.append(filename)
267264

268265
# synthesis
269-
p = subprocess.Popen(' '.join(cmd), shell=True, stdout=subprocess.PIPE)
270-
syn_rslt = []
271-
while True:
272-
stdout_data = p.stdout.readline()
273-
syn_rslt.append(stdout_data.decode(encode))
274-
if display:
275-
print(stdout_data, end='')
276-
if not stdout_data:
277-
break
278-
p.wait()
279-
p.stdout.close()
280-
syn_rslt = ''.join(syn_rslt)
266+
syn_rslt = _exec(' '.join(cmd), encoding, display)
281267

282268
# simulation
283-
p = subprocess.Popen('./' + outputfile, shell=True,
284-
stdout=subprocess.PIPE)
285-
sim_rslt = []
286-
while True:
287-
stdout_data = p.stdout.readline()
288-
sim_rslt.append(stdout_data.decode(encode))
289-
if display:
290-
print(stdout_data, end='')
291-
if not stdout_data:
292-
break
293-
p.wait()
294-
p.stdout.close()
295-
sim_rslt = ''.join(sim_rslt)
269+
cmd = []
270+
271+
if os.name == 'nt':
272+
cmd.append(outputfile)
273+
else:
274+
cmd.append('./' + outputfile)
275+
276+
sim_rslt = _exec(' '.join(cmd), encoding, display)
296277

297278
# close temporal source code file
298279
tmp.close()
299280

281+
if os.name == 'nt':
282+
os.remove(path)
283+
300284
return ''.join([syn_rslt, sim_rslt])
301285

302286

@@ -339,48 +323,39 @@ def run_modelsim(objs, display=False, top=None, outputfile=None,
339323
cmd.append(l)
340324

341325
# encoding: 'utf-8' ?
342-
encode = sys.getdefaultencoding()
326+
encoding = sys.getdefaultencoding()
343327

344328
code = _to_code(objs)
345-
tmp = tempfile.NamedTemporaryFile()
346-
tmp.write(code.encode(encode))
329+
330+
if os.name == 'nt':
331+
fd, path = tempfile.mkstemp()
332+
os.close(fd)
333+
tmp = open(path, 'w+b')
334+
else:
335+
tmp = tempfile.NamedTemporaryFile()
336+
337+
tmp.write(code.encode(encoding))
347338
tmp.read()
348339
filename = tmp.name
349340

350341
cmd.append(filename)
351342

352343
# synthesis
353-
p = subprocess.Popen(' '.join(cmd), shell=True, stdout=subprocess.PIPE)
354-
syn_rslt = []
355-
while True:
356-
stdout_data = p.stdout.readline()
357-
syn_rslt.append(stdout_data.decode(encode))
358-
if display:
359-
print(stdout_data, end='')
360-
if not stdout_data:
361-
break
362-
p.wait()
363-
p.stdout.close()
364-
syn_rslt = ''.join(syn_rslt)
344+
syn_rslt = _exec(' '.join(cmd), encoding, display)
365345

366346
# simulation
367-
p = subprocess.Popen(
368-
'vsim -c ' + top + ' -do \"run -all\"', shell=True, stdout=subprocess.PIPE)
369-
sim_rslt = []
370-
while True:
371-
stdout_data = p.stdout.readline()
372-
sim_rslt.append(stdout_data.decode(encode))
373-
if display:
374-
print(stdout_data, end='')
375-
if not stdout_data:
376-
break
377-
p.wait()
378-
p.stdout.close()
379-
sim_rslt = ''.join(sim_rslt)
347+
cmd = []
348+
cmd.append('vsim -c')
349+
cmd.append(top)
350+
cmd.append('-do \"run -all\"')
351+
sim_rslt = _exec(' '.join(cmd), encoding, display)
380352

381353
# close temporal source code file
382354
tmp.close()
383355

356+
if os.name == 'nt':
357+
os.remove(path)
358+
384359
return ''.join([syn_rslt, sim_rslt])
385360

386361

@@ -579,53 +554,25 @@ def run_verilator(objs, display=False, top=None, outputfile=None,
579554
# cmd.append(clk.name)
580555

581556
# encoding: 'utf-8' ?
582-
encode = sys.getdefaultencoding()
557+
encoding = sys.getdefaultencoding()
583558

584559
# synthesis
585-
p = subprocess.Popen(' '.join(cmd), shell=True, stdout=subprocess.PIPE)
586-
syn_rslt = []
587-
while True:
588-
stdout_data = p.stdout.readline()
589-
syn_rslt.append(stdout_data.decode(encode))
590-
if display:
591-
print(stdout_data, end='')
592-
if not stdout_data:
593-
break
594-
p.wait()
595-
p.stdout.close()
596-
syn_rslt = ''.join(syn_rslt)
560+
syn_rslt = _exec(' '.join(cmd), encoding, display)
597561

598562
# make
599563
make = ['make -C', outputfile, '-j -f',
600564
'V' + verilog_prefix + '.mk', 'V' + verilog_prefix]
601-
602-
p = subprocess.Popen(' '.join(make), shell=True, stdout=subprocess.PIPE)
603-
make_rslt = []
604-
while True:
605-
stdout_data = p.stdout.readline()
606-
make_rslt.append(stdout_data.decode(encode))
607-
if display:
608-
print(stdout_data, end='')
609-
if not stdout_data:
610-
break
611-
p.wait()
612-
p.stdout.close()
613-
make_rslt = ''.join(make_rslt)
565+
make_rslt = _exec(' '.join(make), encoding, display)
614566

615567
# simulation
616-
p = subprocess.Popen('./' + outputfile + '/' + 'V' + verilog_prefix, shell=True,
617-
stdout=subprocess.PIPE)
618-
sim_rslt = []
619-
while True:
620-
stdout_data = p.stdout.readline()
621-
sim_rslt.append(stdout_data.decode(encode))
622-
if display:
623-
print(stdout_data, end='')
624-
if not stdout_data:
625-
break
626-
p.wait()
627-
p.stdout.close()
628-
sim_rslt = ''.join(sim_rslt)
568+
cmd = []
569+
570+
if os.name == 'nt':
571+
cmd.append(outputfile + '/' + 'V' + verilog_prefix)
572+
else:
573+
cmd.append('./' + outputfile + '/' + 'V' + verilog_prefix)
574+
575+
sim_rslt = _exec(' '.join(cmd), encoding, display)
629576

630577
# return ''.join([syn_rslt, make_rslt, sim_rslt])
631578
return sim_rslt
@@ -725,3 +672,27 @@ def view_waveform(self, filename='uut.vcd', background=False):
725672

726673
raise NotImplementedError(
727674
"not supported waveform viewer: '%s'" % self.wave)
675+
676+
677+
def _exec(cmd, encoding, display=False):
678+
if display:
679+
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
680+
rslt = []
681+
682+
while True:
683+
stdout_data = p.stdout.readline()
684+
out = stdout_data.decode(encoding)
685+
rslt.append(out)
686+
print(out, end='')
687+
if not stdout_data:
688+
break
689+
690+
p.wait()
691+
p.stdout.close()
692+
rslt = ''.join(rslt)
693+
694+
else:
695+
b = subprocess.check_output(cmd, shell=True)
696+
rslt = b.decode(encoding)
697+
698+
return rslt

0 commit comments

Comments
 (0)