edacation 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,292 @@
1
+ export interface Vendor {
2
+ name: string;
3
+ url?: string;
4
+ packages: Record<string, string>;
5
+ families: Record<string, Family>;
6
+ }
7
+ export type VendorId = keyof typeof VENDORS;
8
+ export interface Family {
9
+ name: string;
10
+ architecture: Architecture;
11
+ url?: string;
12
+ devices: Record<string, Device>;
13
+ }
14
+ export type Architecture = 'ecp5' | 'generic' | 'gowin' | 'ice40' | 'machxo2' | 'nexus';
15
+ export interface Device {
16
+ name: string;
17
+ device: string;
18
+ packages: string[];
19
+ }
20
+ export declare const VENDORS: {
21
+ generic: {
22
+ name: string;
23
+ url: string;
24
+ packages: {
25
+ generic: string;
26
+ };
27
+ families: {
28
+ generic: {
29
+ name: string;
30
+ architecture: "generic";
31
+ devices: {
32
+ generic: {
33
+ name: string;
34
+ device: string;
35
+ packages: string[];
36
+ };
37
+ };
38
+ };
39
+ };
40
+ };
41
+ gowin: {
42
+ name: string;
43
+ url: string;
44
+ packages: {
45
+ LQ144: string;
46
+ QFN48: string;
47
+ QN48: string;
48
+ QN48P: string;
49
+ QN88: string;
50
+ };
51
+ families: {
52
+ littlebee: {
53
+ name: string;
54
+ architecture: "gowin";
55
+ url: string;
56
+ devices: {
57
+ 'gw1n-1': {
58
+ name: string;
59
+ device: string;
60
+ packages: string[];
61
+ };
62
+ 'gw1n-4': {
63
+ name: string;
64
+ device: string;
65
+ packages: string[];
66
+ };
67
+ 'gw1nr-9': {
68
+ name: string;
69
+ device: string;
70
+ packages: string[];
71
+ };
72
+ 'gw1ns-2c': {
73
+ name: string;
74
+ device: string;
75
+ packages: string[];
76
+ };
77
+ 'gw1nz-1': {
78
+ name: string;
79
+ device: string;
80
+ packages: string[];
81
+ };
82
+ 'gw1nsr-4c': {
83
+ name: string;
84
+ device: string;
85
+ packages: string[];
86
+ };
87
+ };
88
+ };
89
+ };
90
+ };
91
+ lattice: {
92
+ name: string;
93
+ url: string;
94
+ packages: {
95
+ ASG256: string;
96
+ BBG484: string;
97
+ BFG484: string;
98
+ bg121: string;
99
+ 'bg121:4k': string;
100
+ caBGA256: string;
101
+ caBGA381: string;
102
+ caBGA400: string;
103
+ caBGA554: string;
104
+ caBGA756: string;
105
+ cb81: string;
106
+ cb121: string;
107
+ cb132: string;
108
+ 'cb132:4k': string;
109
+ CBG256: string;
110
+ cm36: string;
111
+ cm49: string;
112
+ cm81: string;
113
+ 'cm81:4k': string;
114
+ cm121: string;
115
+ 'cm121:4k': string;
116
+ cm225: string;
117
+ 'cm225:4k': string;
118
+ ct121: string;
119
+ ct256: string;
120
+ csfBGA121: string;
121
+ csfBGA285: string;
122
+ csfBGA289: string;
123
+ LFG672: string;
124
+ QFN32: string;
125
+ QFN48: string;
126
+ QFN72: string;
127
+ qn32: string;
128
+ qn84: string;
129
+ swg16tr: string;
130
+ tq144: string;
131
+ 'tq144:4k': string;
132
+ TQFP100: string;
133
+ TQFP144: string;
134
+ vq100: string;
135
+ };
136
+ families: {
137
+ 'crosslink-nx': {
138
+ name: string;
139
+ architecture: "nexus";
140
+ url: string;
141
+ devices: {
142
+ 'lifcl-17': {
143
+ name: string;
144
+ device: string;
145
+ packages: string[];
146
+ };
147
+ 'lifcl-40': {
148
+ name: string;
149
+ device: string;
150
+ packages: string[];
151
+ };
152
+ };
153
+ };
154
+ ecp5: {
155
+ name: string;
156
+ architecture: "ecp5";
157
+ url: string;
158
+ devices: {
159
+ 'lfe5u-12': {
160
+ name: string;
161
+ device: string;
162
+ packages: string[];
163
+ };
164
+ 'lfe5u-25': {
165
+ name: string;
166
+ device: string;
167
+ packages: string[];
168
+ };
169
+ 'lfe5u-45': {
170
+ name: string;
171
+ device: string;
172
+ packages: string[];
173
+ };
174
+ 'lfe5u-85': {
175
+ name: string;
176
+ device: string;
177
+ packages: string[];
178
+ };
179
+ 'lfe5um-25': {
180
+ name: string;
181
+ device: string;
182
+ packages: string[];
183
+ };
184
+ 'lfe5um-45': {
185
+ name: string;
186
+ device: string;
187
+ packages: string[];
188
+ };
189
+ 'lfe5um-85': {
190
+ name: string;
191
+ device: string;
192
+ packages: string[];
193
+ };
194
+ 'lfe5um5g-25': {
195
+ name: string;
196
+ device: string;
197
+ packages: string[];
198
+ };
199
+ 'lfe5um5g-45': {
200
+ name: string;
201
+ device: string;
202
+ packages: string[];
203
+ };
204
+ 'lfe5um5g-85': {
205
+ name: string;
206
+ device: string;
207
+ packages: string[];
208
+ };
209
+ };
210
+ };
211
+ ice40: {
212
+ name: string;
213
+ architecture: "ice40";
214
+ url: string;
215
+ devices: {
216
+ lp384: {
217
+ name: string;
218
+ device: string;
219
+ packages: string[];
220
+ };
221
+ lp1k: {
222
+ name: string;
223
+ device: string;
224
+ packages: string[];
225
+ };
226
+ lp4k: {
227
+ name: string;
228
+ device: string;
229
+ packages: string[];
230
+ };
231
+ lp8k: {
232
+ name: string;
233
+ device: string;
234
+ packages: string[];
235
+ };
236
+ hx1k: {
237
+ name: string;
238
+ device: string;
239
+ packages: string[];
240
+ };
241
+ hx4k: {
242
+ name: string;
243
+ device: string;
244
+ packages: string[];
245
+ };
246
+ hx8k: {
247
+ name: string;
248
+ device: string;
249
+ packages: string[];
250
+ };
251
+ };
252
+ };
253
+ machxo2: {
254
+ name: string;
255
+ architecture: "machxo2";
256
+ url: string;
257
+ devices: {
258
+ 'xo2-256': {
259
+ name: string;
260
+ device: string;
261
+ packages: string[];
262
+ };
263
+ 'xo2-640': {
264
+ name: string;
265
+ device: string;
266
+ packages: string[];
267
+ };
268
+ 'xo2-1200': {
269
+ name: string;
270
+ device: string;
271
+ packages: string[];
272
+ };
273
+ 'xo2-2000': {
274
+ name: string;
275
+ device: string;
276
+ packages: string[];
277
+ };
278
+ 'xo2-4000': {
279
+ name: string;
280
+ device: string;
281
+ packages: string[];
282
+ };
283
+ 'xo2-7000': {
284
+ name: string;
285
+ device: string;
286
+ packages: string[];
287
+ };
288
+ };
289
+ };
290
+ };
291
+ };
292
+ };
@@ -0,0 +1,5 @@
1
+ export * from './configuration.js';
2
+ export * from './devices.js';
3
+ export * from './nextpnr.js';
4
+ export * from './project.js';
5
+ export * from './yosys.js';
@@ -0,0 +1,7 @@
1
+ import { Project } from './project.js';
2
+ export declare const generateNextpnrWorker: (project: Project, targetId: string) => {
3
+ inputFiles: any[];
4
+ outputFiles: any[];
5
+ tool: string;
6
+ arguments: any[];
7
+ };
@@ -0,0 +1,114 @@
1
+ import { ProjectConfiguration } from './configuration.js';
2
+ export declare class Project {
3
+ private name;
4
+ private inputFiles;
5
+ private outputFiles;
6
+ private configuration;
7
+ constructor(name: string, inputFiles?: string[], outputFiles?: string[], configuration?: ProjectConfiguration);
8
+ getName(): string;
9
+ getInputFiles(): string[];
10
+ hasInputFile(filePath: string): boolean;
11
+ addInputFiles(filePaths: string[]): Promise<void>;
12
+ removeInputFiles(filePaths: string[]): Promise<void>;
13
+ getOutputFiles(): string[];
14
+ hasOutputFile(filePath: string): boolean;
15
+ addOutputFiles(filePaths: string[]): Promise<void>;
16
+ removeOutputFiles(filePaths: string[]): Promise<void>;
17
+ getConfiguration(): {
18
+ targets: {
19
+ id: string;
20
+ name: string;
21
+ vendor: string;
22
+ family: string;
23
+ device: string;
24
+ package: string;
25
+ directory?: string | undefined;
26
+ yosys?: {
27
+ inputFiles?: {
28
+ useGenerated: boolean;
29
+ values: string[];
30
+ useDefault: boolean;
31
+ } | undefined;
32
+ outputFiles?: {
33
+ useGenerated: boolean;
34
+ values: string[];
35
+ useDefault: boolean;
36
+ } | undefined;
37
+ commands?: {
38
+ useGenerated: boolean;
39
+ values: string[];
40
+ useDefault: boolean;
41
+ } | undefined;
42
+ options?: {
43
+ optimize?: boolean | undefined;
44
+ } | undefined;
45
+ } | undefined;
46
+ nextpnr?: {
47
+ inputFiles?: {
48
+ useGenerated: boolean;
49
+ values: string[];
50
+ useDefault: boolean;
51
+ } | undefined;
52
+ outputFiles?: {
53
+ useGenerated: boolean;
54
+ values: string[];
55
+ useDefault: boolean;
56
+ } | undefined;
57
+ arguments?: {
58
+ useGenerated: boolean;
59
+ values: string[];
60
+ useDefault: boolean;
61
+ } | undefined;
62
+ options?: {
63
+ placedSvg?: boolean | undefined;
64
+ routedSvg?: boolean | undefined;
65
+ routedJson?: boolean | undefined;
66
+ } | undefined;
67
+ } | undefined;
68
+ }[];
69
+ defaults?: {
70
+ yosys?: {
71
+ inputFiles?: {
72
+ useGenerated: boolean;
73
+ values: string[];
74
+ } | undefined;
75
+ outputFiles?: {
76
+ useGenerated: boolean;
77
+ values: string[];
78
+ } | undefined;
79
+ commands?: {
80
+ useGenerated: boolean;
81
+ values: string[];
82
+ } | undefined;
83
+ options?: {
84
+ optimize?: boolean | undefined;
85
+ } | undefined;
86
+ } | undefined;
87
+ nextpnr?: {
88
+ inputFiles?: {
89
+ useGenerated: boolean;
90
+ values: string[];
91
+ } | undefined;
92
+ outputFiles?: {
93
+ useGenerated: boolean;
94
+ values: string[];
95
+ } | undefined;
96
+ arguments?: {
97
+ useGenerated: boolean;
98
+ values: string[];
99
+ } | undefined;
100
+ options?: {
101
+ placedSvg?: boolean | undefined;
102
+ routedSvg?: boolean | undefined;
103
+ routedJson?: boolean | undefined;
104
+ } | undefined;
105
+ } | undefined;
106
+ } | undefined;
107
+ };
108
+ updateConfiguration(configuration: Partial<ProjectConfiguration>): void;
109
+ private save;
110
+ static serialize(project: Project): any;
111
+ static deserialize(data: any): Project;
112
+ static load(rawData: Uint8Array): Promise<Project>;
113
+ static store(project: Project): Promise<Uint8Array>;
114
+ }
@@ -0,0 +1,11 @@
1
+ import { NextpnrOptions, ProjectConfiguration, TargetConfiguration, TargetDefaultsConfiguration, WorkerId, YosysOptions } from './configuration.js';
2
+ export declare const getTargetDefaults: (configuration: ProjectConfiguration) => TargetDefaultsConfiguration;
3
+ export declare const getTarget: (configuration: ProjectConfiguration, targetId: string) => TargetConfiguration;
4
+ export declare const getTargetFile: (target: TargetConfiguration, file: string) => string;
5
+ type WorkerOptionTypes = {
6
+ yosys: YosysOptions;
7
+ nextpnr: NextpnrOptions;
8
+ };
9
+ export declare const getOptions: <W extends WorkerId>(configuration: ProjectConfiguration, targetId: string, workerId: W, defaultValues: WorkerOptionTypes[W]) => WorkerOptionTypes[W];
10
+ export declare const getCombined: (configuration: ProjectConfiguration, targetId: string, workerId: WorkerId, configId: string, generated: string[]) => any[];
11
+ export {};
@@ -0,0 +1,9 @@
1
+ import { Project } from './project.js';
2
+ export declare const generateYosysWorker: (project: Project, targetId: string) => {
3
+ inputFiles: any[];
4
+ outputFiles: any[];
5
+ tool: string;
6
+ commands: any[];
7
+ };
8
+ export declare const generateYosysRTLCommands: (inputFiles: string[]) => string[];
9
+ export declare const generateYosysSynthCommands: (inputFiles: string[]) => string[];
package/dist/util.d.ts ADDED
@@ -0,0 +1,12 @@
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ /// <reference types="node" resolution-mode="require"/>
3
+ /// <reference types="node" resolution-mode="require"/>
4
+ /// <reference types="node" resolution-mode="require"/>
5
+ export type ArrayElement<ArrayType extends readonly unknown[]> = ArrayType extends readonly (infer ElementType)[] ? ElementType : never;
6
+ export declare const encodeText: (input: string) => Uint8Array;
7
+ export declare const encodeJSON: (input: unknown, pretty?: boolean) => Uint8Array;
8
+ export declare const decodeText: (input: NodeJS.ArrayBufferView | ArrayBuffer) => string;
9
+ export declare const decodeJSON: (input: NodeJS.ArrayBufferView | ArrayBuffer) => any;
10
+ export declare const FILE_EXTENSIONS_VERILOG: string[];
11
+ export declare const FILE_EXTENSIONS_VHDL: string[];
12
+ export declare const FILE_EXTENSIONS_HDL: string[];
package/dist/util.js CHANGED
@@ -1,13 +1,3 @@
1
- import { access } from 'fs/promises';
2
- export const exists = async (...args) => {
3
- try {
4
- await access(...args);
5
- return true;
6
- }
7
- catch (err) {
8
- return false;
9
- }
10
- };
11
1
  const textEncoder = new TextEncoder();
12
2
  const textDecoder = new TextDecoder();
13
3
  export const encodeText = (input) => textEncoder.encode(input.endsWith('\n') ? input : `${input}\n`);
package/dist/util.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AAInC,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,EAAE,GAAG,IAA+B,EAAE,EAAE;IAC/D,IAAI;QACA,MAAM,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;KACf;IAAC,OAAO,GAAG,EAAE;QACV,OAAO,KAAK,CAAC;KAChB;AACL,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AACtC,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AAEtC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC;AAC7G,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAc,EAAE,SAAkB,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AAE5I,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAA2C,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrG,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAA2C,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AAEzG,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AAChE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAAK,CAAC,CAAC;AAC5C,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,GAAG,uBAAuB,EAAE,GAAG,oBAAoB,CAAC,CAAC"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AACtC,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AAEtC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC;AAC7G,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAc,EAAE,SAAkB,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AAE5I,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAA2C,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrG,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAA2C,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AAEzG,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AAChE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAAK,CAAC,CAAC;AAC5C,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,GAAG,uBAAuB,EAAE,GAAG,oBAAoB,CAAC,CAAC"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "edacation",
3
3
  "description": "Library and CLI for interacting with Yosys and nextpnr.",
4
4
  "license": "MIT",
5
- "version": "0.1.2",
5
+ "version": "0.1.3",
6
6
  "contributors": [
7
7
  "Danielle Huisman <danielle@huisman.me> (https://github.com/DanielleHuisman)"
8
8
  ],
package/dist/tool.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"tool.js","sourceRoot":"","sources":["../src/tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAC,MAAM,eAAe,CAAC;AAEpC,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,IAAc,EAAE,GAAW,EAAE,EAAE,CAAC,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;IAC5G,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE;QACxB,GAAG;QACH,KAAK,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC;KACxC,CAAC,CAAC;IAEH,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;QAClB,MAAM,CAAC,GAAG,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;QACd,OAAO,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
File without changes