diff --git a/package-lock.json b/package-lock.json index 03d3602..3d6642d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,7 @@ "@yowasp/nextpnr-ice40": "^0.7.187-dev.514", "@yowasp/yosys": "^0.38.21-dev.654", "digitaljs": "github:EDAcation/digitaljs#next", - "edacation": "^0.3.4", + "edacation": "^0.3.5", "nextpnr": "^0.4.15", "nextpnr-viewer": "^0.6.1", "os-browserify": "^0.3.0", @@ -2119,9 +2119,9 @@ } }, "node_modules/edacation": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/edacation/-/edacation-0.3.4.tgz", - "integrity": "sha512-3VSdHYd10I1BbrqFcAwLnLn3OcgXVfxQQo9QP5m3k3qdRWtx7kAxa9i+Fc/QDSmi4qSNb+M+fg/RB1iEqQeuWA==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/edacation/-/edacation-0.3.5.tgz", + "integrity": "sha512-BeeOx/Iu9oFCKENAV3sUz+ZghxL8Z5+yW7TMaCbHSf7A+7M0O3JAH50Ok6Qy/lvTpq7QnDeoN4A81dmDlH4Lfw==", "dependencies": { "@types/node": "^20.11.0", "@types/yargs": "^17.0.32", diff --git a/package.json b/package.json index 3f191fe..20a7d28 100644 --- a/package.json +++ b/package.json @@ -360,7 +360,7 @@ "@yowasp/nextpnr-ice40": "^0.7.187-dev.514", "@yowasp/yosys": "^0.38.21-dev.654", "digitaljs": "github:EDAcation/digitaljs#next", - "edacation": "^0.3.4", + "edacation": "^0.3.5", "nextpnr": "^0.4.15", "nextpnr-viewer": "^0.6.1", "os-browserify": "^0.3.0", diff --git a/src/extension/tasks/yosys.ts b/src/extension/tasks/yosys.ts index aff1887..f12d164 100644 --- a/src/extension/tasks/yosys.ts +++ b/src/extension/tasks/yosys.ts @@ -170,11 +170,20 @@ class YosysSynthTerminalTask extends BaseYosysTerminalTask { async handleEnd(project: Project, outputFiles: TaskOutputFile[]) { await super.handleEnd(project, outputFiles); - // Open LUT file in DigitalJS editor + // Find LUT file const lutFile = outputFiles.find((file) => file.path.endsWith('luts.yosys.json')); - if (lutFile) { - const uri = vscode.Uri.joinPath(project.getRoot(), lutFile.path); - await vscode.commands.executeCommand('vscode.open', uri); - } + if (!lutFile) return; + const uri = vscode.Uri.joinPath(project.getRoot(), lutFile.path); + + // Update LUT file + const oldContent = await vscode.workspace.fs.readFile(uri); + const newContent = encodeJSON({ + type: 'luts', + data: decodeJSON(oldContent) + }); + await vscode.workspace.fs.writeFile(uri, newContent); + + // Open LUT file + await vscode.commands.executeCommand('vscode.open', uri); } } diff --git a/src/views/digitaljs/src/main.ts b/src/views/digitaljs/src/main.ts index 23dfc00..418a9c8 100644 --- a/src/views/digitaljs/src/main.ts +++ b/src/views/digitaljs/src/main.ts @@ -91,7 +91,7 @@ export class View { throw new Error('File is missing type or data keys.'); } - if (fileData['type'] === 'rtl') { + if (fileData['type'] === 'rtl' || fileData['type'] === 'luts') { return new DiagramViewer(this, fileData['data']); } else if (fileData['type'] === 'stats') { return new StatsViewer(this, fileData['data']); diff --git a/src/views/digitaljs/src/types.ts b/src/views/digitaljs/src/types.ts index 8b21771..220ad98 100644 --- a/src/views/digitaljs/src/types.ts +++ b/src/views/digitaljs/src/types.ts @@ -1,12 +1,5 @@ import type {yosys2digitaljs} from 'yosys2digitaljs'; -export type YosysRTL = Parameters[0]; - -interface YosysFileRTL { - type: 'rtl'; - data: YosysRTL; -} - export interface YosysModuleStats { num_wires: number; num_wire_bits: number; @@ -19,6 +12,13 @@ export interface YosysModuleStats { num_cells_by_type: Record; } +export type YosysRTL = Parameters[0]; + +interface YosysFileRTL { + type: 'rtl'; + data: YosysRTL; +} + export interface YosysStats { creator: string; invocation: string; @@ -30,4 +30,9 @@ interface YosysFileStats { data: YosysStats; } -export type YosysFile = YosysFileRTL | YosysFileStats; +interface YosysFileLuts { + type: 'luts'; + data: YosysRTL; +} + +export type YosysFile = YosysFileRTL | YosysFileStats | YosysFileLuts;