UNPKG

edacation

Version:

Library and CLI for interacting with Yosys and nextpnr.

81 lines 3.74 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getFlasherWorkerOptions = exports.getFlasherOptions = exports.parseFlasherArguments = void 0; const string_args_parser_1 = require("string-args-parser"); const devices_js_1 = require("./devices.js"); const target_js_1 = require("./target.js"); const DEFAULT_OPTIONS = { board: undefined, programToFlash: false, }; const parseFlasherArguments = (args) => args.flatMap((arg) => (0, string_args_parser_1.parseArgs)(arg)); exports.parseFlasherArguments = parseFlasherArguments; const getFlasherOptions = (configuration, targetId) => (0, target_js_1.getOptions)(configuration, targetId, 'flasher', DEFAULT_OPTIONS); exports.getFlasherOptions = getFlasherOptions; const getFlasherWorkerOptions = (project, targetId) => { const configuration = project.getConfiguration(); const target = (0, target_js_1.getTarget)(configuration, targetId); const options = (0, exports.getFlasherOptions)(configuration, targetId); const vendor = devices_js_1.VENDORS[target.vendor]; const family = vendor.families[target.family]; const generatedInputFiles = []; const generatedOutputFiles = []; let packerTool; const generatedPackerArgs = []; const generatedFlasherArgs = []; if (options.board) { generatedFlasherArgs.push('-b', options.board); } if (options.programToFlash) { generatedFlasherArgs.push('-f'); } switch (family.architecture) { case 'ecp5': { const bitstreamFile = (0, target_js_1.getTargetFile)(target, `${family.architecture}.config`); generatedInputFiles.push(bitstreamFile); const packedFile = (0, target_js_1.getTargetFile)(target, `${family.architecture}.bit`); generatedOutputFiles.push(packedFile); packerTool = 'ecppack'; generatedPackerArgs.push(bitstreamFile, packedFile); generatedFlasherArgs.push(packedFile); break; } case 'ice40': { const bitstreamFile = (0, target_js_1.getTargetFile)(target, `${family.architecture}.asc`); generatedInputFiles.push(bitstreamFile); const packedFile = (0, target_js_1.getTargetFile)(target, `${family.architecture}.bin`); generatedOutputFiles.push(packedFile); packerTool = 'icepack'; generatedPackerArgs.push(bitstreamFile, packedFile); generatedFlasherArgs.push(packedFile); break; } default: { throw new Error(`Packing not supported for architecture "${family.architecture}"`); } } const inputFiles = (0, target_js_1.getCombined)(configuration, targetId, 'flasher', 'inputFiles', generatedInputFiles).filter((f) => !!f); const outputFiles = (0, target_js_1.getCombined)(configuration, targetId, 'flasher', 'outputFiles', generatedOutputFiles).filter((f) => !!f); const packerArgs = (0, target_js_1.getCombined)(configuration, targetId, 'flasher', 'packerArguments', generatedPackerArgs, exports.parseFlasherArguments); const flasherArgs = (0, target_js_1.getCombined)(configuration, targetId, 'flasher', 'flasherArguments', generatedFlasherArgs, exports.parseFlasherArguments); return { inputFiles, outputFiles, target, options, steps: [ { id: 'pack', tool: packerTool, arguments: packerArgs }, { id: 'flash', tool: 'openFPGALoader', arguments: flasherArgs } ] }; }; exports.getFlasherWorkerOptions = getFlasherWorkerOptions; //# sourceMappingURL=flasher.js.map