Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
File renamed without changes.
151 changes: 0 additions & 151 deletions Roteador.py

This file was deleted.

5 changes: 2 additions & 3 deletions analysis.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
from collections import Counter, defaultdict
from dataclasses import dataclass, field

from util.MPSoCConfig import MPSoCConfig
from MPSoCConfig import MPSoCConfig

# ID usado para "tarefa" do kernel/injetor nos campos de tarefa do traffic_router.txt
KERNEL_TASK_ID = 0xFFFF
Expand Down Expand Up @@ -345,8 +345,7 @@ def pending_count(self):

def read_all_packets(mpsoc_config):
"""Todos os pacotes do traffic_router.txt, com um leitor próprio (não mexe na simulação)."""
from information.read_traffic_data import ReadTrafficData
from information.router_neighbors import RouterNeighbors
from information import ReadTrafficData, RouterNeighbors

reader = ReadTrafficData(mpsoc_config, RouterNeighbors.from_config(mpsoc_config))
packets = []
Expand Down
81 changes: 75 additions & 6 deletions help_dialogs.py → dialogs.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,26 @@
"""
Janelas do menu Help: "About" (util/AboutFrame.java) e "Packet Format"
(MainFrame.packetFormatMenuItemActionPerformed).
Diálogos dos menus Edit e Help.

- PlatformSetupDialog (Edit -> Platform Setup): refatoração de
PlatformSetupFrame.java do GraphicalDebugger original; permite trocar o
tamanho do flit, o período de clock e a largura da janela de checkpoint
(intervalo em que a % de uso dos enlaces é recalculada) sem editar o
platform.cfg. As mudanças valem até o próximo "Reset Simulation" ou
"New Debugging", que releem os arquivos.
- AboutDialog (util/AboutFrame.java) e show_packet_format
(MainFrame.packetFormatMenuItemActionPerformed), do menu Help.
"""

import os

from PySide6.QtCore import Qt
from PySide6.QtGui import QFont, QPixmap
from PySide6.QtWidgets import QDialog, QDialogButtonBox, QLabel, QMessageBox, QVBoxLayout
from PySide6.QtCore import QLocale, Qt
from PySide6.QtGui import QDoubleValidator, QFont, QIntValidator, QPixmap
from PySide6.QtWidgets import (QDialog, QDialogButtonBox, QGridLayout, QLabel, QLineEdit, QMessageBox,
QVBoxLayout)

ICON_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), "icon")

# Formato de cada linha do traffic_router.txt, como lido em information/read_traffic_data.py
# Formato de cada linha do traffic_router.txt, como lido em information.py (ReadTrafficData)
PACKET_FORMAT = """\
<p>Each line of <b>traffic_router.txt</b> is a packet header captured by a router, with tab-separated fields:</p>
<p><code>Time | Current Router Address | Service | Payload size | Packet bandwidth | Input port |
Expand Down Expand Up @@ -82,3 +91,63 @@ def __init__(self, parent=None):
layout.addWidget(label)
layout.addWidget(buttons)
layout.setSizeConstraint(QVBoxLayout.SizeConstraint.SetFixedSize)


class PlatformSetupDialog(QDialog):
def __init__(self, mpsoc_config, checkpoint, parent=None):
super().__init__(parent)
self.mpsoc_config = mpsoc_config
self.checkpoint = checkpoint
self.setWindowTitle("Platform Setup")

self.flit_size_edit = QLineEdit(str(mpsoc_config.flit_size))
self.flit_size_edit.setValidator(QIntValidator(1, 1024, self))

self.clock_edit = QLineEdit(str(mpsoc_config.clock_period_in_ns))
self.clock_edit.setValidator(QIntValidator(1, 1_000_000, self))

# Largura da janela em us, como no Java (guardada em ms no controlador)
self.window_width_edit = QLineEdit(f"{checkpoint.window_size_ms * 1000:g}")
window_validator = QDoubleValidator(0.001, 1e9, 3, self)
window_validator.setNotation(QDoubleValidator.Notation.StandardNotation)
window_validator.setLocale(QLocale.c()) # aceita ponto decimal em qualquer idioma
self.window_width_edit.setValidator(window_validator)

form = QGridLayout()
rows = (("Flit Size", self.flit_size_edit, "bits"),
("Clock Period", self.clock_edit, "ns"),
("Window Width", self.window_width_edit, "us"))
for row, (caption, edit, unit) in enumerate(rows):
form.addWidget(QLabel(caption), row, 0)
form.addWidget(edit, row, 1)
form.addWidget(QLabel(unit), row, 2)

buttons = QDialogButtonBox()
buttons.addButton("Confirm", QDialogButtonBox.ButtonRole.AcceptRole)
buttons.addButton("Cancel", QDialogButtonBox.ButtonRole.RejectRole)
buttons.accepted.connect(self.accept)
buttons.rejected.connect(self.reject)

layout = QVBoxLayout(self)
layout.addLayout(form)
layout.addWidget(buttons)
layout.setSizeConstraint(QVBoxLayout.SizeConstraint.SetFixedSize) # não redimensionável, como no Java

def accept(self):
edits = (self.flit_size_edit, self.clock_edit, self.window_width_edit)
invalid = next((edit for edit in edits if not edit.hasAcceptableInput()), None)
if invalid is not None:
QMessageBox.warning(self, "Platform Setup", "Enter only valid positive numbers.")
invalid.setFocus()
invalid.selectAll()
return

clock_period = int(self.clock_edit.text())
self.mpsoc_config.flit_size = int(self.flit_size_edit.text())
self.mpsoc_config.clock_period_in_ns = clock_period
# O Java esquecia de repassar o clock ao CheckpointController
self.checkpoint.clock_period_ns = clock_period
self.checkpoint.window_size_ms = float(self.window_width_edit.text()) / 1000.0

QMessageBox.information(self, "Platform Setup", "Settings applied")
super().accept()
27 changes: 10 additions & 17 deletions documentation/implementacoes.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ Este documento descreve as funcionalidades portadas do [GraphicalDebugger origin
1. [Visão geral](#1-visão-geral)
2. [Estrutura de arquivos](#2-estrutura-de-arquivos)
3. [Abrindo um debug](#3-abrindo-um-debug)
4. [Configuração da plataforma — `util/MPSoCConfig.py`](#4-configuração-da-plataforma--utilmpsocconfigpy)
4. [Configuração da plataforma — `MPSoCConfig.py`](#4-configuração-da-plataforma--mpsocconfigpy)
5. [Task List e Services List](#5-task-list-e-services-list)
6. [Modelo de tráfego — pacote `information/`](#6-modelo-de-tráfego--pacote-information)
6. [Modelo de tráfego — `information.py`](#6-modelo-de-tráfego--informationpy)
7. [Matriz de roteadores — `router_matrix.py`](#7-matriz-de-roteadores--router_matrixpy)
8. [Simulação — `simulation.py`](#8-simulação--simulationpy)
9. [Interface da simulação — `main.py`](#9-interface-da-simulação--mainpy)
Expand Down Expand Up @@ -43,12 +43,11 @@ diretório debug/
| `main.py` | Janela principal: menus, botões, tabelas, ligação com a simulação | `MainFrame.java` |
| `simulation.py` | Controle da simulação e janelas de checkpoint | `MainFrame.java` (parte de simulação), `CheckpointController.java` |
| `overview_windows.py` | Janelas Communication Overview, Task Mapping Overview e Message Log, atualizadas durante a simulação | `CommunicationOverview.java`, `TaskMappingFrame.java`, `MainFrame.showMessageList` |
| `slave_matrix.py` / `pe_matrix.py` | Células das grades das duas janelas acima | — |
| `overview_matrices.py` | Células das grades das duas janelas acima (`SlaveMatrixWidget`, `PEMatrixWidget`) | — |
| `router_info_window.py` | Janela "Router Information" (clique num roteador): abas Log, Applications, Scheduling e Traffic, janela Task Information e gráfico de escalonamento | `RouterInfoFrame.java`, `PETextLog.java`, `SchedulingTab.java`, `scheduling/SchedulingPanel.java`, `TaskInfoFrame.java` |
| `platform_setup.py` | Janela Platform Setup (menu Edit): flit size, período de clock e largura da janela de checkpoint | `PlatformSetupFrame.java` |
| `filter_window.py` | Janela Service and PE Filter (menu Filters, Ctrl+F): escolhe quais pacotes a simulação processa, por serviço (Only/Except) e por PE | `FilterForm.java` |
| `projects.py` | Projetos salvos (`.hdf`): File → Save / Open / Delete Project | `MainFrame.java` (save/open/deleteMenuItem) |
| `help_dialogs.py` | Help → About e Help → Packet Format | `util/AboutFrame.java`, `MainFrame.packetFormatMenuItemActionPerformed` |
| `dialogs.py` | Janela Platform Setup (menu Edit: flit size, período de clock e largura da janela de checkpoint), Help → About e Help → Packet Format | `PlatformSetupFrame.java`, `util/AboutFrame.java`, `MainFrame.packetFormatMenuItemActionPerformed` |
| `analysis.py` | Análises sem interface: aplicação de cada pacote, latência (casamento injeção → entrega), vazão em Mbps e linha do tempo da admissão de aplicações | — (métricas do artigo do Memphis, DAES 2019) |
| `statistics_windows.py` | Janelas Traffic Statistics (Links, Applications, Messages, Routing, Blocked) e Application Timeline (menu Tools) | — |
| `path_view.py` | Liga as janelas de análise à malha principal: duplo clique num pacote pinta o caminho dele e destaca o roteador | — |
Expand All @@ -58,15 +57,9 @@ diretório debug/
| `deloream.py` | Deloream: leitor das mensagens `$$$` das tarefas nos logs dos processadores | `deloream/DeloreamMainFrame.java`, `deloream/TaskMessage.java` |
| `theme.py` | Paletas dos temas claro/escuro, cores da grade e preferência salva | — |
| `router_matrix.py` | Desenho da grade e de cada roteador (imagens, setas, %) | `Roteador.java`, `UJPanelImagem.java`, `MainFrame.createNoCPanel` |
| `util/MPSoCConfig.py` | Leitura de `platform.cfg` e `services.cfg`, constantes e endereçamento | `util/MPSoCConfig.java` |
| `information/packet_information.py` | Um pacote do `traffic_router.txt` | `PacketInformation.java` |
| `information/task_information.py` | Um evento de tarefa em um PE | `TaskInformation.java` |
| `information/port_information.py` | Volume/banda acumulados por porta | `PortInformation.java` |
| `information/router_information.py` | Pacotes, portas e tarefas de um roteador | `RouterInformation.java` |
| `information/router_neighbors.py` | Vizinhos e conversão XY ↔ hamiltoniano | `RouterNeighbors.java` |
| `information/read_traffic_data.py` | Leitura sob demanda do `traffic_router.txt` | `ReadTrafficData.java` |
| `information/mpsoc_information.py` | Estado de todos os roteadores do MPSoC | `MPSoCInformation.java` |
| `Roteador.py` / `ui_mainwindow.py` | Interfaces geradas a partir dos `.ui` (não editar à mão) | — |
| `MPSoCConfig.py` | Leitura de `platform.cfg` e `services.cfg`, constantes e endereçamento | `util/MPSoCConfig.java` |
| `information.py` | Modelo de tráfego: `PacketInformation` (um pacote), `TaskInformation` (evento de tarefa), `PortInformation` (volume/banda por porta), `RouterInformation` (pacotes, portas e tarefas de um roteador), `RouterNeighbors` (vizinhos e conversão XY ↔ hamiltoniano), `ReadTrafficData` (leitura sob demanda do `traffic_router.txt`) e `MPSoCInformation` (estado de todos os roteadores) | `PacketInformation.java`, `TaskInformation.java`, `PortInformation.java`, `RouterInformation.java`, `RouterNeighbors.java`, `ReadTrafficData.java`, `MPSoCInformation.java` |
| `ui_mainwindow.py` / `commsUi.py` / `taskmap.py` | Interfaces geradas a partir dos `.ui` (não editar à mão) | — |

---

Expand All @@ -90,7 +83,7 @@ diretório debug/

---

## 4. Configuração da plataforma — `util/MPSoCConfig.py`
## 4. Configuração da plataforma — `MPSoCConfig.py`

### 4.1 Leitura do `platform.cfg`

Expand Down Expand Up @@ -172,7 +165,7 @@ As linhas `$TASK_…` do `services.cfg` não aparecem na Services List (não sã

---

## 6. Modelo de tráfego — pacote `information/`
## 6. Modelo de tráfego — `information.py`

### 6.1 Formato do `traffic_router.txt`

Expand Down Expand Up @@ -240,7 +233,7 @@ Com `router_addressing XY`, os endereços das colunas 1 e 6 são convertidos par

### 7.2 `RouterWidget`

Reaproveita o layout do `Roteador.py` (gerado de `Roteador.ui`) e acrescenta:
Reproduz o layout do `Roteador.ui` e acrescenta:

| Recurso | Descrição |
|---|---|
Expand Down
2 changes: 1 addition & 1 deletion filter_window.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
QMessageBox, QPushButton, QRadioButton, QTabWidget, QVBoxLayout, QWidget)

import analysis
from util.MPSoCConfig import MPSoCConfig
from MPSoCConfig import MPSoCConfig

# Serviço sempre descartado pelo filtro do Java
IGNORED_SERVICE = "SLACK_TIME_REPORT"
Expand Down
Loading
Loading