edacation
Version:
Library and CLI for interacting with Yosys and nextpnr.
81 lines • 3.74 kB
JavaScript
;
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