system console使い方
FPGA システム・デバッグ・ツール "System Console" を使ってみよう - 半導体事業 - マクニカ
準備
・jtag masterが入ったqsysファイルを作る
・system consoleを立ち上げる
・sofをダウンロード
tclコンソール上でのコマンド
get_service_paths master set mpath [lindex [get_service_paths master] 0] claim_service master $mpath "" set master_path [claim_service master $mpath ""]
master_write_8 $master_path 0x00010 0x1F master_read_8 $master_path 0x00010 1
set mpath [lindex [get_service_paths master] 0]
*この番号は制御したいマスターの番号。
複数ある場合は変える必要があるかも。
pythonからsystem consoleをいじる
PythonからSystem Console経由でデバッグしてみた - Qiita
import subprocess
system_console_path = '/eda/intel/20.2/quartus/sopc_builder/bin/system-console'
class altera_system_console:
def __init__(self):
sc_path = [system_console_path, '--cli', '--disable_readline']
self.console = subprocess.Popen(sc_path, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
self.cmd_count = 1
self.read_output()
def __del__(self):
self.console.terminate()
def read_output(self, print_flag=True):
if self.cmd_count == 0:
print('cmd_count is zero')
return ''
txt = ''
while True:
r = self.console.stdout.read(1)
if r == b'%':
self.console.stdout.read(1)
if print_flag:
print(txt)
break
txt += r.decode("utf8")
self.cmd_count -= 1
return txt
def cmd(self, cmd_string, print_flag=True):
self.console.stdin.write(bytes(cmd_string + '\n', 'utf-8'))
self.console.stdin.flush()
self.cmd_count += 1
return self.read_output(print_flag)
def write(self, addr, data, bits=32, print_flag=True):
if not bits in [8, 16, 32]:
print('bits is an invalid value')
return self.cmd('master_write_{} $master_path 0x{:x} 0x{:x}'.format(bits, addr, data), print_flag=print_flag)
def read(self, addr, length, bits=32, print_flag=True):
if not bits in [8, 16, 32]:
print('bits is an invalid value')
self.cmd('master_read_{} $master_path 0x{:x} 0x{:x}'.format(bits, addr, length), print_flag=print_flag)
c = altera_system_console()