Системная консоль через JTAG не может выполнить master_write_32 — нельзя ли это сделать, пока работает цель?

У меня был простой контроллер, написанный на Verilog, который конфигурировал Altera TSE MAC. До этого момента все было довольно просто. Однако, что я хотел сделать дальше, так это установить множество настроек Marvel PHY, а также продолжать отслеживать как PHY, так и MAC для статистики и ошибок и т. д. Делать это в HW кажется излишним, поэтому я решил включить Nios ПРОЦЕССОР. Но прежде чем приступить к реализации компонента в программном обеспечении, я хотел быстро создать прототип идеи с помощью системной консоли. Во всяком случае, вот моя базовая система QSys:

введите здесь описание изображения

Экземпляр MAC называется tse_mac, и идея состоит в том, чтобы настроить его путем чтения/записи в control_port через data_master процессора.

После запуска системы я подключился к ней с помощью системной консоли. Я предполагаю, что это обычно работает, потому что он может получить master путь к сервису:

% get_service_paths master
{/devices/EP2AGX260@1#7-1/(link)/JTAG/(70:34 v3 #0)/nios2_0}

Тоже нормально открывается. Однако при попытке записать 32-битное значение сразу происходит сбой:

% get_service_paths master
{/devices/EP2AGX260@1#7-1/(link)/JTAG/(70:34 v3 #0)/nios2_0}
% open_service master "/devices/EP2AGX260@1#7-1/(link)/JTAG/(70:34 v3 #0)/nios2_0"

% master_write_32 "/devices/EP2AGX260@1#7-1/(link)/JTAG/(70:34 v3 #0)/nios2_0" 0x400 0x00000000;
error: com.altera.systemconsole.internal.plugin.jtag.oci.Nios2DebugException: Can't do this while target is running
    while executing
"master_write_32 {/devices/EP2AGX260@1#7-1/(link)/JTAG/(70:34 v3 #0)/nios2_0} {0x400} {0x00000000}"
    while executing
"master_write_32 "/devices/EP2AGX260@1#7-1/(link)/JTAG/(70:34 v3 #0)/nios2_0" 0x400 0x00000000"
% 

Вот исключение:

Jul 22, 2012 12:17:39 PM com.altera.systemconsole.internal.core.SystemConsole logSevere
SEVERE: com.altera.systemconsole.internal.plugin.jtag.oci.Nios2DebugException: Can't do this while target is running
java.util.concurrent.ExecutionException: com.altera.systemconsole.internal.plugin.jtag.oci.Nios2DebugException: Can't do this while target is running
    at com.altera.systemconsole.internal.core.SimpleFuture$Sync.innerGet(SimpleFuture.java:169)
    at com.altera.systemconsole.internal.core.SimpleFuture.get(SimpleFuture.java:66)
    at com.altera.systemconsole.scripting.StandardCommandSet.waitForFutureResponse(StandardCommandSet.java:233)
    at com.altera.systemconsole.scripting.StandardCommandSet.peekMemoryService(StandardCommandSet.java:161)
    at com.altera.systemconsole.scripting.StandardCommandSet.readByte(StandardCommandSet.java:120)
    at com.altera.systemconsole.scripting.ScriptEngine$16.execute(ScriptEngine.java:1117)
    at com.altera.systemconsole.scripting.ScriptEngine$LegacyCommandAdapter.execute2(ScriptEngine.java:199)
    at com.altera.systemconsole.scripting.SystemConsoleThreadTCLInterpreter$2$1.run(SystemConsoleThreadTCLInterpreter.java:181)
    at com.altera.systemconsole.internal.core.SystemExecutor$4.run(SystemExecutor.java:516)
    at com.altera.systemconsole.internal.core.SystemExecutor$ComparableTask.run(SystemExecutor.java:148)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: com.altera.systemconsole.internal.plugin.jtag.oci.Nios2DebugException: Can't do this while target is running
    at com.altera.systemconsole.internal.plugin.jtag.oci.Nios2Debug.readMemoryIndirect(Native Method)
    at com.altera.systemconsole.internal.plugin.jtag.oci.Nios2Debug.readMemory(Nios2Debug.java:186)
    at com.altera.systemconsole.internal.plugin.jtag.oci.OciMemoryService.peek(OciMemoryService.java:158)
    at com.altera.systemconsole.internal.core.legacymaster.LegacyMasterChannel$1.run(LegacyMasterChannel.java:88)
    at com.altera.systemconsole.internal.core.SystemExecutor.addTaskIfNecessary(SystemExecutor.java:536)
    at com.altera.systemconsole.internal.core.legacymaster.LegacyMasterChannel.doReadMemory(LegacyMasterChannel.java:77)
    at com.altera.systemconsole.internal.core.legacymaster.LegacyMasterChannel.readMemory(LegacyMasterChannel.java:69)
    at com.altera.systemconsole.scripting.StandardCommandSet.peekMemoryService(StandardCommandSet.java:157)
    ... 9 more

Я никогда раньше не пользовался системной консолью и не мог найти ничего подобного в Интернете или в руководстве. Так вот вопрос - какой проступок я совершаю? Любая помощь в решении проблемы приветствуется.


person Community    schedule 22.07.2012    source источник


Ответы (1)


Исключение означает, что вам нужно приостановить/остановить ЦП, чтобы выполнить master_write_32. Чтобы ЦП продолжал работать, необходимо использовать JTAG to Avalon Master Bridge. Он будет экспортирован как другой сервис (то есть с индексом 1) и может использоваться для связи с компонентом Avalon MM. Ответ предоставляется парням с форума Altera.

person Community    schedule 24.07.2012