yowasp-yosys 0.39.0.165.post702.dev0__py3-none-any.whl → 0.39.0.183.post706.dev0__py3-none-any.whl
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.
- yowasp_yosys/sby.py +1 -2
- yowasp_yosys/share/choices/kogge-stone.v +54 -0
- yowasp_yosys/share/efinix/cells_sim.v +25 -24
- yowasp_yosys/share/include/kernel/log.h +4 -2
- yowasp_yosys/share/include/kernel/register.h +3 -2
- yowasp_yosys/share/include/kernel/rtlil.h +3 -2
- yowasp_yosys/share/include/kernel/yosys.h +1 -345
- yowasp_yosys/share/include/kernel/yosys_common.h +379 -0
- yowasp_yosys/share/quicklogic/qlf_k6n10f/bram_types_sim.v +1 -1
- yowasp_yosys/share/simlib.v +52 -4
- yowasp_yosys/share/techmap.v +1 -1
- yowasp_yosys/yosys.wasm +0 -0
- {yowasp_yosys-0.39.0.165.post702.dev0.dist-info → yowasp_yosys-0.39.0.183.post706.dev0.dist-info}/METADATA +1 -1
- {yowasp_yosys-0.39.0.165.post702.dev0.dist-info → yowasp_yosys-0.39.0.183.post706.dev0.dist-info}/RECORD +17 -15
- {yowasp_yosys-0.39.0.165.post702.dev0.dist-info → yowasp_yosys-0.39.0.183.post706.dev0.dist-info}/WHEEL +0 -0
- {yowasp_yosys-0.39.0.165.post702.dev0.dist-info → yowasp_yosys-0.39.0.183.post706.dev0.dist-info}/entry_points.txt +0 -0
- {yowasp_yosys-0.39.0.165.post702.dev0.dist-info → yowasp_yosys-0.39.0.183.post706.dev0.dist-info}/top_level.txt +0 -0
yowasp_yosys/sby.py
CHANGED
|
@@ -422,8 +422,7 @@ def start_task(taskloop, taskname):
|
|
|
422
422
|
|
|
423
423
|
if opt_force and not reusedir:
|
|
424
424
|
early_log(my_workdir, f"Removing directory '{os.path.abspath(my_workdir)}'.")
|
|
425
|
-
|
|
426
|
-
shutil.rmtree(my_workdir, ignore_errors=True)
|
|
425
|
+
shutil.rmtree(my_workdir, ignore_errors=True)
|
|
427
426
|
|
|
428
427
|
if reusedir:
|
|
429
428
|
pass
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* yosys -- Yosys Open SYnthesis Suite
|
|
3
|
+
*
|
|
4
|
+
* Copyright (C) 2024 Martin Povišer <povik@cutebit.org>
|
|
5
|
+
*
|
|
6
|
+
* Permission to use, copy, modify, and/or distribute this software for any
|
|
7
|
+
* purpose with or without fee is hereby granted, provided that the above
|
|
8
|
+
* copyright notice and this permission notice appear in all copies.
|
|
9
|
+
*
|
|
10
|
+
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
11
|
+
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
12
|
+
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
13
|
+
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
14
|
+
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
15
|
+
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
16
|
+
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
17
|
+
*
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
(* techmap_celltype = "$lcu" *)
|
|
21
|
+
module _80_lcu_kogge_stone (P, G, CI, CO);
|
|
22
|
+
parameter WIDTH = 2;
|
|
23
|
+
|
|
24
|
+
(* force_downto *)
|
|
25
|
+
input [WIDTH-1:0] P, G;
|
|
26
|
+
input CI;
|
|
27
|
+
|
|
28
|
+
(* force_downto *)
|
|
29
|
+
output [WIDTH-1:0] CO;
|
|
30
|
+
|
|
31
|
+
integer i, j;
|
|
32
|
+
(* force_downto *)
|
|
33
|
+
reg [WIDTH-1:0] p, g;
|
|
34
|
+
|
|
35
|
+
wire [1023:0] _TECHMAP_DO_ = "proc; opt -fast";
|
|
36
|
+
|
|
37
|
+
always @* begin
|
|
38
|
+
p = P;
|
|
39
|
+
g = G;
|
|
40
|
+
|
|
41
|
+
// in almost all cases CI will be constant zero
|
|
42
|
+
g[0] = g[0] | (p[0] & CI);
|
|
43
|
+
|
|
44
|
+
for (i = 0; i < $clog2(WIDTH); i = i + 1) begin
|
|
45
|
+
// iterate in reverse so we don't confuse a result from this stage and the previous
|
|
46
|
+
for (j = WIDTH - 1; j >= 2**i; j = j - 1) begin
|
|
47
|
+
g[j] = g[j] | p[j] & g[j - 2**i];
|
|
48
|
+
p[j] = p[j] & p[j - 2**i];
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
assign CO = g;
|
|
54
|
+
endmodule
|
|
@@ -113,7 +113,31 @@ module EFX_GBUFCE(
|
|
|
113
113
|
|
|
114
114
|
endmodule
|
|
115
115
|
|
|
116
|
-
module EFX_RAM_5K
|
|
116
|
+
module EFX_RAM_5K
|
|
117
|
+
# (
|
|
118
|
+
parameter READ_WIDTH = 20,
|
|
119
|
+
parameter WRITE_WIDTH = 20,
|
|
120
|
+
localparam READ_ADDR_WIDTH =
|
|
121
|
+
(READ_WIDTH == 16) ? 8 : // 256x16
|
|
122
|
+
(READ_WIDTH == 8) ? 9 : // 512x8
|
|
123
|
+
(READ_WIDTH == 4) ? 10 : // 1024x4
|
|
124
|
+
(READ_WIDTH == 2) ? 11 : // 2048x2
|
|
125
|
+
(READ_WIDTH == 1) ? 12 : // 4096x1
|
|
126
|
+
(READ_WIDTH == 20) ? 8 : // 256x20
|
|
127
|
+
(READ_WIDTH == 10) ? 9 : // 512x10
|
|
128
|
+
(READ_WIDTH == 5) ? 10 : -1, // 1024x5
|
|
129
|
+
|
|
130
|
+
localparam WRITE_ADDR_WIDTH =
|
|
131
|
+
(WRITE_WIDTH == 16) ? 8 : // 256x16
|
|
132
|
+
(WRITE_WIDTH == 8) ? 9 : // 512x8
|
|
133
|
+
(WRITE_WIDTH == 4) ? 10 : // 1024x4
|
|
134
|
+
(WRITE_WIDTH == 2) ? 11 : // 2048x2
|
|
135
|
+
(WRITE_WIDTH == 1) ? 12 : // 4096x1
|
|
136
|
+
(WRITE_WIDTH == 20) ? 8 : // 256x20
|
|
137
|
+
(WRITE_WIDTH == 10) ? 9 : // 512x10
|
|
138
|
+
(WRITE_WIDTH == 5) ? 10 : -1 // 1024x5
|
|
139
|
+
)
|
|
140
|
+
(
|
|
117
141
|
input [WRITE_WIDTH-1:0] WDATA,
|
|
118
142
|
input [WRITE_ADDR_WIDTH-1:0] WADDR,
|
|
119
143
|
input WE,
|
|
@@ -126,8 +150,6 @@ module EFX_RAM_5K(
|
|
|
126
150
|
(* clkbuf_sink *)
|
|
127
151
|
input RCLK
|
|
128
152
|
);
|
|
129
|
-
parameter READ_WIDTH = 20;
|
|
130
|
-
parameter WRITE_WIDTH = 20;
|
|
131
153
|
parameter OUTPUT_REG = 1'b0;
|
|
132
154
|
parameter RCLK_POLARITY = 1'b1;
|
|
133
155
|
parameter RE_POLARITY = 1'b1;
|
|
@@ -155,25 +177,4 @@ module EFX_RAM_5K(
|
|
|
155
177
|
parameter INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
156
178
|
parameter INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
157
179
|
parameter INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000;
|
|
158
|
-
|
|
159
|
-
localparam READ_ADDR_WIDTH =
|
|
160
|
-
(READ_WIDTH == 16) ? 8 : // 256x16
|
|
161
|
-
(READ_WIDTH == 8) ? 9 : // 512x8
|
|
162
|
-
(READ_WIDTH == 4) ? 10 : // 1024x4
|
|
163
|
-
(READ_WIDTH == 2) ? 11 : // 2048x2
|
|
164
|
-
(READ_WIDTH == 1) ? 12 : // 4096x1
|
|
165
|
-
(READ_WIDTH == 20) ? 8 : // 256x20
|
|
166
|
-
(READ_WIDTH == 10) ? 9 : // 512x10
|
|
167
|
-
(READ_WIDTH == 5) ? 10 : -1; // 1024x5
|
|
168
|
-
|
|
169
|
-
localparam WRITE_ADDR_WIDTH =
|
|
170
|
-
(WRITE_WIDTH == 16) ? 8 : // 256x16
|
|
171
|
-
(WRITE_WIDTH == 8) ? 9 : // 512x8
|
|
172
|
-
(WRITE_WIDTH == 4) ? 10 : // 1024x4
|
|
173
|
-
(WRITE_WIDTH == 2) ? 11 : // 2048x2
|
|
174
|
-
(WRITE_WIDTH == 1) ? 12 : // 4096x1
|
|
175
|
-
(WRITE_WIDTH == 20) ? 8 : // 256x20
|
|
176
|
-
(WRITE_WIDTH == 10) ? 9 : // 512x10
|
|
177
|
-
(WRITE_WIDTH == 5) ? 10 : -1; // 1024x5
|
|
178
|
-
|
|
179
180
|
endmodule
|
|
@@ -17,11 +17,11 @@
|
|
|
17
17
|
*
|
|
18
18
|
*/
|
|
19
19
|
|
|
20
|
-
#include "kernel/yosys.h"
|
|
21
|
-
|
|
22
20
|
#ifndef LOG_H
|
|
23
21
|
#define LOG_H
|
|
24
22
|
|
|
23
|
+
#include "kernel/yosys_common.h"
|
|
24
|
+
|
|
25
25
|
#include <time.h>
|
|
26
26
|
|
|
27
27
|
#include <regex>
|
|
@@ -449,4 +449,6 @@ void log_dump_args_worker(const char *p, T first, Args ... args)
|
|
|
449
449
|
|
|
450
450
|
YOSYS_NAMESPACE_END
|
|
451
451
|
|
|
452
|
+
#include "kernel/yosys.h"
|
|
453
|
+
|
|
452
454
|
#endif
|
|
@@ -39,323 +39,7 @@
|
|
|
39
39
|
#ifndef YOSYS_H
|
|
40
40
|
#define YOSYS_H
|
|
41
41
|
|
|
42
|
-
#include
|
|
43
|
-
#include <set>
|
|
44
|
-
#include <tuple>
|
|
45
|
-
#include <vector>
|
|
46
|
-
#include <string>
|
|
47
|
-
#include <algorithm>
|
|
48
|
-
#include <functional>
|
|
49
|
-
#include <unordered_map>
|
|
50
|
-
#include <unordered_set>
|
|
51
|
-
#include <initializer_list>
|
|
52
|
-
#include <stdexcept>
|
|
53
|
-
#include <memory>
|
|
54
|
-
#include <cmath>
|
|
55
|
-
#include <cstddef>
|
|
56
|
-
|
|
57
|
-
#include <sstream>
|
|
58
|
-
#include <fstream>
|
|
59
|
-
#include <istream>
|
|
60
|
-
#include <ostream>
|
|
61
|
-
#include <iostream>
|
|
62
|
-
|
|
63
|
-
#include <stdarg.h>
|
|
64
|
-
#include <stdlib.h>
|
|
65
|
-
#include <string.h>
|
|
66
|
-
#include <stdint.h>
|
|
67
|
-
#include <stdio.h>
|
|
68
|
-
#include <limits.h>
|
|
69
|
-
#include <sys/stat.h>
|
|
70
|
-
#include <errno.h>
|
|
71
|
-
|
|
72
|
-
#ifdef WITH_PYTHON
|
|
73
|
-
#include <Python.h>
|
|
74
|
-
#endif
|
|
75
|
-
|
|
76
|
-
#ifndef _YOSYS_
|
|
77
|
-
# error It looks like you are trying to build Yosys without the config defines set. \
|
|
78
|
-
When building Yosys with a custom make system, make sure you set all the \
|
|
79
|
-
defines the Yosys Makefile would set for your build configuration.
|
|
80
|
-
#endif
|
|
81
|
-
|
|
82
|
-
#ifdef YOSYS_ENABLE_TCL
|
|
83
|
-
# include <tcl.h>
|
|
84
|
-
# ifdef YOSYS_MXE_HACKS
|
|
85
|
-
extern Tcl_Command Tcl_CreateCommand(Tcl_Interp *interp, const char *cmdName, Tcl_CmdProc *proc, ClientData clientData, Tcl_CmdDeleteProc *deleteProc);
|
|
86
|
-
extern Tcl_Interp *Tcl_CreateInterp(void);
|
|
87
|
-
extern void Tcl_Preserve(ClientData data);
|
|
88
|
-
extern void Tcl_Release(ClientData clientData);
|
|
89
|
-
extern int Tcl_InterpDeleted(Tcl_Interp *interp);
|
|
90
|
-
extern void Tcl_DeleteInterp(Tcl_Interp *interp);
|
|
91
|
-
extern int Tcl_Eval(Tcl_Interp *interp, const char *script);
|
|
92
|
-
extern int Tcl_EvalFile(Tcl_Interp *interp, const char *fileName);
|
|
93
|
-
extern void Tcl_Finalize(void);
|
|
94
|
-
extern int Tcl_GetCommandInfo(Tcl_Interp *interp, const char *cmdName, Tcl_CmdInfo *infoPtr);
|
|
95
|
-
extern const char *Tcl_GetStringResult(Tcl_Interp *interp);
|
|
96
|
-
extern Tcl_Obj *Tcl_NewStringObj(const char *bytes, int length);
|
|
97
|
-
extern Tcl_Obj *Tcl_NewIntObj(int intValue);
|
|
98
|
-
extern Tcl_Obj *Tcl_NewListObj(int objc, Tcl_Obj *const objv[]);
|
|
99
|
-
extern Tcl_Obj *Tcl_ObjSetVar2(Tcl_Interp *interp, Tcl_Obj *part1Ptr, Tcl_Obj *part2Ptr, Tcl_Obj *newValuePtr, int flags);
|
|
100
|
-
# endif
|
|
101
|
-
# undef CONST
|
|
102
|
-
# undef INLINE
|
|
103
|
-
#endif
|
|
104
|
-
|
|
105
|
-
#ifdef _WIN32
|
|
106
|
-
# undef NOMINMAX
|
|
107
|
-
# define NOMINMAX 1
|
|
108
|
-
# undef YY_NO_UNISTD_H
|
|
109
|
-
# define YY_NO_UNISTD_H 1
|
|
110
|
-
|
|
111
|
-
# include <windows.h>
|
|
112
|
-
# include <io.h>
|
|
113
|
-
# include <direct.h>
|
|
114
|
-
|
|
115
|
-
# define strtok_r strtok_s
|
|
116
|
-
# define strdup _strdup
|
|
117
|
-
# define snprintf _snprintf
|
|
118
|
-
# define getcwd _getcwd
|
|
119
|
-
# define mkdir _mkdir
|
|
120
|
-
# define popen _popen
|
|
121
|
-
# define pclose _pclose
|
|
122
|
-
|
|
123
|
-
# ifndef __MINGW32__
|
|
124
|
-
# define PATH_MAX MAX_PATH
|
|
125
|
-
# define isatty _isatty
|
|
126
|
-
# define fileno _fileno
|
|
127
|
-
# endif
|
|
128
|
-
|
|
129
|
-
// The following defines conflict with our identifiers:
|
|
130
|
-
# undef CONST
|
|
131
|
-
// `wingdi.h` defines a TRANSPARENT macro that conflicts with X(TRANSPARENT) entry in kernel/constids.inc
|
|
132
|
-
# undef TRANSPARENT
|
|
133
|
-
#endif
|
|
134
|
-
|
|
135
|
-
#ifndef PATH_MAX
|
|
136
|
-
# define PATH_MAX 4096
|
|
137
|
-
#endif
|
|
138
|
-
|
|
139
|
-
#define YOSYS_NAMESPACE Yosys
|
|
140
|
-
#define PRIVATE_NAMESPACE_BEGIN namespace {
|
|
141
|
-
#define PRIVATE_NAMESPACE_END }
|
|
142
|
-
#define YOSYS_NAMESPACE_BEGIN namespace Yosys {
|
|
143
|
-
#define YOSYS_NAMESPACE_END }
|
|
144
|
-
#define YOSYS_NAMESPACE_PREFIX Yosys::
|
|
145
|
-
#define USING_YOSYS_NAMESPACE using namespace Yosys;
|
|
146
|
-
|
|
147
|
-
#if defined(__GNUC__) || defined(__clang__)
|
|
148
|
-
# define YS_ATTRIBUTE(...) __attribute__((__VA_ARGS__))
|
|
149
|
-
#elif defined(_MSC_VER)
|
|
150
|
-
# define YS_ATTRIBUTE(...)
|
|
151
|
-
#else
|
|
152
|
-
# define YS_ATTRIBUTE(...)
|
|
153
|
-
#endif
|
|
154
|
-
|
|
155
|
-
#if defined(__GNUC__) || defined(__clang__)
|
|
156
|
-
# define YS_MAYBE_UNUSED __attribute__((__unused__))
|
|
157
|
-
#else
|
|
158
|
-
# define YS_MAYBE_UNUSED
|
|
159
|
-
#endif
|
|
160
|
-
|
|
161
|
-
#if __cplusplus >= 201703L
|
|
162
|
-
# define YS_FALLTHROUGH [[fallthrough]];
|
|
163
|
-
#elif defined(__clang__)
|
|
164
|
-
# define YS_FALLTHROUGH [[clang::fallthrough]];
|
|
165
|
-
#elif defined(__GNUC__)
|
|
166
|
-
# define YS_FALLTHROUGH [[gnu::fallthrough]];
|
|
167
|
-
#else
|
|
168
|
-
# define YS_FALLTHROUGH
|
|
169
|
-
#endif
|
|
170
|
-
|
|
171
|
-
YOSYS_NAMESPACE_BEGIN
|
|
172
|
-
|
|
173
|
-
// Note: All headers included in hashlib.h must be included
|
|
174
|
-
// outside of YOSYS_NAMESPACE before this or bad things will happen.
|
|
175
|
-
#ifdef HASHLIB_H
|
|
176
|
-
# undef HASHLIB_H
|
|
177
|
-
# include "kernel/hashlib.h"
|
|
178
|
-
#else
|
|
179
|
-
# include "kernel/hashlib.h"
|
|
180
|
-
# undef HASHLIB_H
|
|
181
|
-
#endif
|
|
182
|
-
|
|
183
|
-
using std::vector;
|
|
184
|
-
using std::string;
|
|
185
|
-
using std::tuple;
|
|
186
|
-
using std::pair;
|
|
187
|
-
|
|
188
|
-
using std::make_tuple;
|
|
189
|
-
using std::make_pair;
|
|
190
|
-
using std::get;
|
|
191
|
-
using std::min;
|
|
192
|
-
using std::max;
|
|
193
|
-
|
|
194
|
-
// A primitive shared string implementation that does not
|
|
195
|
-
// move its .c_str() when the object is copied or moved.
|
|
196
|
-
struct shared_str {
|
|
197
|
-
std::shared_ptr<string> content;
|
|
198
|
-
shared_str() { }
|
|
199
|
-
shared_str(string s) { content = std::shared_ptr<string>(new string(s)); }
|
|
200
|
-
shared_str(const char *s) { content = std::shared_ptr<string>(new string(s)); }
|
|
201
|
-
const char *c_str() const { return content->c_str(); }
|
|
202
|
-
const string &str() const { return *content; }
|
|
203
|
-
bool operator==(const shared_str &other) const { return *content == *other.content; }
|
|
204
|
-
unsigned int hash() const { return hashlib::hash_ops<std::string>::hash(*content); }
|
|
205
|
-
};
|
|
206
|
-
|
|
207
|
-
using hashlib::mkhash;
|
|
208
|
-
using hashlib::mkhash_init;
|
|
209
|
-
using hashlib::mkhash_add;
|
|
210
|
-
using hashlib::mkhash_xorshift;
|
|
211
|
-
using hashlib::hash_ops;
|
|
212
|
-
using hashlib::hash_cstr_ops;
|
|
213
|
-
using hashlib::hash_ptr_ops;
|
|
214
|
-
using hashlib::hash_obj_ops;
|
|
215
|
-
using hashlib::dict;
|
|
216
|
-
using hashlib::idict;
|
|
217
|
-
using hashlib::pool;
|
|
218
|
-
using hashlib::mfp;
|
|
219
|
-
|
|
220
|
-
namespace RTLIL {
|
|
221
|
-
struct IdString;
|
|
222
|
-
struct Const;
|
|
223
|
-
struct SigBit;
|
|
224
|
-
struct SigSpec;
|
|
225
|
-
struct Wire;
|
|
226
|
-
struct Cell;
|
|
227
|
-
struct Memory;
|
|
228
|
-
struct Process;
|
|
229
|
-
struct Module;
|
|
230
|
-
struct Design;
|
|
231
|
-
struct Monitor;
|
|
232
|
-
enum State : unsigned char;
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
namespace AST {
|
|
236
|
-
struct AstNode;
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
using RTLIL::IdString;
|
|
240
|
-
using RTLIL::Const;
|
|
241
|
-
using RTLIL::SigBit;
|
|
242
|
-
using RTLIL::SigSpec;
|
|
243
|
-
using RTLIL::Wire;
|
|
244
|
-
using RTLIL::Cell;
|
|
245
|
-
using RTLIL::Module;
|
|
246
|
-
using RTLIL::Design;
|
|
247
|
-
|
|
248
|
-
namespace hashlib {
|
|
249
|
-
template<> struct hash_ops<RTLIL::Wire*> : hash_obj_ops {};
|
|
250
|
-
template<> struct hash_ops<RTLIL::Cell*> : hash_obj_ops {};
|
|
251
|
-
template<> struct hash_ops<RTLIL::Memory*> : hash_obj_ops {};
|
|
252
|
-
template<> struct hash_ops<RTLIL::Process*> : hash_obj_ops {};
|
|
253
|
-
template<> struct hash_ops<RTLIL::Module*> : hash_obj_ops {};
|
|
254
|
-
template<> struct hash_ops<RTLIL::Design*> : hash_obj_ops {};
|
|
255
|
-
template<> struct hash_ops<RTLIL::Monitor*> : hash_obj_ops {};
|
|
256
|
-
template<> struct hash_ops<AST::AstNode*> : hash_obj_ops {};
|
|
257
|
-
|
|
258
|
-
template<> struct hash_ops<const RTLIL::Wire*> : hash_obj_ops {};
|
|
259
|
-
template<> struct hash_ops<const RTLIL::Cell*> : hash_obj_ops {};
|
|
260
|
-
template<> struct hash_ops<const RTLIL::Memory*> : hash_obj_ops {};
|
|
261
|
-
template<> struct hash_ops<const RTLIL::Process*> : hash_obj_ops {};
|
|
262
|
-
template<> struct hash_ops<const RTLIL::Module*> : hash_obj_ops {};
|
|
263
|
-
template<> struct hash_ops<const RTLIL::Design*> : hash_obj_ops {};
|
|
264
|
-
template<> struct hash_ops<const RTLIL::Monitor*> : hash_obj_ops {};
|
|
265
|
-
template<> struct hash_ops<const AST::AstNode*> : hash_obj_ops {};
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
void memhasher_on();
|
|
269
|
-
void memhasher_off();
|
|
270
|
-
void memhasher_do();
|
|
271
|
-
|
|
272
|
-
extern bool memhasher_active;
|
|
273
|
-
inline void memhasher() { if (memhasher_active) memhasher_do(); }
|
|
274
|
-
|
|
275
|
-
void yosys_banner();
|
|
276
|
-
int ceil_log2(int x) YS_ATTRIBUTE(const);
|
|
277
|
-
|
|
278
|
-
inline std::string vstringf(const char *fmt, va_list ap)
|
|
279
|
-
{
|
|
280
|
-
// For the common case of strings shorter than 128, save a heap
|
|
281
|
-
// allocation by using a stack allocated buffer.
|
|
282
|
-
const int kBufSize = 128;
|
|
283
|
-
char buf[kBufSize];
|
|
284
|
-
buf[0] = '\0';
|
|
285
|
-
va_list apc;
|
|
286
|
-
va_copy(apc, ap);
|
|
287
|
-
int n = vsnprintf(buf, kBufSize, fmt, apc);
|
|
288
|
-
va_end(apc);
|
|
289
|
-
if (n < kBufSize)
|
|
290
|
-
return std::string(buf);
|
|
291
|
-
|
|
292
|
-
std::string string;
|
|
293
|
-
char *str = NULL;
|
|
294
|
-
#if defined(_WIN32 )|| defined(__CYGWIN__)
|
|
295
|
-
int sz = 2 * kBufSize, rc;
|
|
296
|
-
while (1) {
|
|
297
|
-
va_copy(apc, ap);
|
|
298
|
-
str = (char*)realloc(str, sz);
|
|
299
|
-
rc = vsnprintf(str, sz, fmt, apc);
|
|
300
|
-
va_end(apc);
|
|
301
|
-
if (rc >= 0 && rc < sz)
|
|
302
|
-
break;
|
|
303
|
-
sz *= 2;
|
|
304
|
-
}
|
|
305
|
-
if (str != NULL) {
|
|
306
|
-
string = str;
|
|
307
|
-
free(str);
|
|
308
|
-
}
|
|
309
|
-
return string;
|
|
310
|
-
#else
|
|
311
|
-
if (vasprintf(&str, fmt, ap) < 0)
|
|
312
|
-
str = NULL;
|
|
313
|
-
if (str != NULL) {
|
|
314
|
-
string = str;
|
|
315
|
-
free(str);
|
|
316
|
-
}
|
|
317
|
-
return string;
|
|
318
|
-
#endif
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
std::string stringf(const char *fmt, ...) YS_ATTRIBUTE(format(printf, 1, 2));
|
|
322
|
-
|
|
323
|
-
inline std::string stringf(const char *fmt, ...)
|
|
324
|
-
{
|
|
325
|
-
std::string string;
|
|
326
|
-
va_list ap;
|
|
327
|
-
|
|
328
|
-
va_start(ap, fmt);
|
|
329
|
-
string = vstringf(fmt, ap);
|
|
330
|
-
va_end(ap);
|
|
331
|
-
|
|
332
|
-
return string;
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
int readsome(std::istream &f, char *s, int n);
|
|
336
|
-
std::string next_token(std::string &text, const char *sep = " \t\r\n", bool long_strings = false);
|
|
337
|
-
std::vector<std::string> split_tokens(const std::string &text, const char *sep = " \t\r\n");
|
|
338
|
-
bool patmatch(const char *pattern, const char *string);
|
|
339
|
-
#if !defined(YOSYS_DISABLE_SPAWN)
|
|
340
|
-
int run_command(const std::string &command, std::function<void(const std::string&)> process_line = std::function<void(const std::string&)>());
|
|
341
|
-
#endif
|
|
342
|
-
std::string get_base_tmpdir();
|
|
343
|
-
std::string make_temp_file(std::string template_str = get_base_tmpdir() + "/yosys_XXXXXX");
|
|
344
|
-
std::string make_temp_dir(std::string template_str = get_base_tmpdir() + "/yosys_XXXXXX");
|
|
345
|
-
bool check_file_exists(std::string filename, bool is_exec = false);
|
|
346
|
-
bool check_directory_exists(const std::string& dirname);
|
|
347
|
-
bool is_absolute_path(std::string filename);
|
|
348
|
-
void remove_directory(std::string dirname);
|
|
349
|
-
bool create_directory(const std::string& dirname);
|
|
350
|
-
std::string escape_filename_spaces(const std::string& filename);
|
|
351
|
-
|
|
352
|
-
template<typename T> int GetSize(const T &obj) { return obj.size(); }
|
|
353
|
-
inline int GetSize(RTLIL::Wire *wire);
|
|
354
|
-
|
|
355
|
-
extern int autoidx;
|
|
356
|
-
extern int yosys_xtrace;
|
|
357
|
-
|
|
358
|
-
YOSYS_NAMESPACE_END
|
|
42
|
+
#include "kernel/yosys_common.h"
|
|
359
43
|
|
|
360
44
|
#include "kernel/log.h"
|
|
361
45
|
#include "kernel/rtlil.h"
|
|
@@ -363,14 +47,6 @@ YOSYS_NAMESPACE_END
|
|
|
363
47
|
|
|
364
48
|
YOSYS_NAMESPACE_BEGIN
|
|
365
49
|
|
|
366
|
-
using RTLIL::State;
|
|
367
|
-
using RTLIL::SigChunk;
|
|
368
|
-
using RTLIL::SigSig;
|
|
369
|
-
|
|
370
|
-
namespace hashlib {
|
|
371
|
-
template<> struct hash_ops<RTLIL::State> : hash_ops<int> {};
|
|
372
|
-
}
|
|
373
|
-
|
|
374
50
|
void yosys_setup();
|
|
375
51
|
|
|
376
52
|
#ifdef WITH_PYTHON
|
|
@@ -385,26 +61,6 @@ Tcl_Interp *yosys_get_tcl_interp();
|
|
|
385
61
|
|
|
386
62
|
extern RTLIL::Design *yosys_design;
|
|
387
63
|
|
|
388
|
-
RTLIL::IdString new_id(std::string file, int line, std::string func);
|
|
389
|
-
RTLIL::IdString new_id_suffix(std::string file, int line, std::string func, std::string suffix);
|
|
390
|
-
|
|
391
|
-
#define NEW_ID \
|
|
392
|
-
YOSYS_NAMESPACE_PREFIX new_id(__FILE__, __LINE__, __FUNCTION__)
|
|
393
|
-
#define NEW_ID_SUFFIX(suffix) \
|
|
394
|
-
YOSYS_NAMESPACE_PREFIX new_id_suffix(__FILE__, __LINE__, __FUNCTION__, suffix)
|
|
395
|
-
|
|
396
|
-
// Create a statically allocated IdString object, using for example ID::A or ID($add).
|
|
397
|
-
//
|
|
398
|
-
// Recipe for Converting old code that is using conversion of strings like ID::A and
|
|
399
|
-
// "$add" for creating IdStrings: Run below SED command on the .cc file and then use for
|
|
400
|
-
// example "meld foo.cc foo.cc.orig" to manually compile errors, if necessary.
|
|
401
|
-
//
|
|
402
|
-
// sed -i.orig -r 's/"\\\\([a-zA-Z0-9_]+)"/ID(\1)/g; s/"(\$[a-zA-Z0-9_]+)"/ID(\1)/g;' <filename>
|
|
403
|
-
//
|
|
404
|
-
#define ID(_id) ([]() { const char *p = "\\" #_id, *q = p[1] == '$' ? p+1 : p; \
|
|
405
|
-
static const YOSYS_NAMESPACE_PREFIX RTLIL::IdString id(q); return id; })()
|
|
406
|
-
namespace ID = RTLIL::ID;
|
|
407
|
-
|
|
408
64
|
RTLIL::Design *yosys_get_design();
|
|
409
65
|
std::string proc_self_dirname();
|
|
410
66
|
std::string proc_share_dirname();
|
|
@@ -0,0 +1,379 @@
|
|
|
1
|
+
/* -*- c++ -*-
|
|
2
|
+
* yosys -- Yosys Open SYnthesis Suite
|
|
3
|
+
*
|
|
4
|
+
* Copyright (C) 2012 Claire Xenia Wolf <claire@yosyshq.com>
|
|
5
|
+
*
|
|
6
|
+
* Permission to use, copy, modify, and/or distribute this software for any
|
|
7
|
+
* purpose with or without fee is hereby granted, provided that the above
|
|
8
|
+
* copyright notice and this permission notice appear in all copies.
|
|
9
|
+
*
|
|
10
|
+
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
11
|
+
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
12
|
+
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
13
|
+
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
14
|
+
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
15
|
+
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
16
|
+
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
17
|
+
*
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
#ifndef YOSYS_COMMON_H
|
|
21
|
+
#define YOSYS_COMMON_H
|
|
22
|
+
|
|
23
|
+
#include <map>
|
|
24
|
+
#include <set>
|
|
25
|
+
#include <tuple>
|
|
26
|
+
#include <vector>
|
|
27
|
+
#include <string>
|
|
28
|
+
#include <algorithm>
|
|
29
|
+
#include <functional>
|
|
30
|
+
#include <unordered_map>
|
|
31
|
+
#include <unordered_set>
|
|
32
|
+
#include <initializer_list>
|
|
33
|
+
#include <stdexcept>
|
|
34
|
+
#include <memory>
|
|
35
|
+
#include <cmath>
|
|
36
|
+
#include <cstddef>
|
|
37
|
+
|
|
38
|
+
#include <sstream>
|
|
39
|
+
#include <fstream>
|
|
40
|
+
#include <istream>
|
|
41
|
+
#include <ostream>
|
|
42
|
+
#include <iostream>
|
|
43
|
+
|
|
44
|
+
#include <stdarg.h>
|
|
45
|
+
#include <stdlib.h>
|
|
46
|
+
#include <string.h>
|
|
47
|
+
#include <stdint.h>
|
|
48
|
+
#include <stdio.h>
|
|
49
|
+
#include <limits.h>
|
|
50
|
+
#include <sys/stat.h>
|
|
51
|
+
#include <errno.h>
|
|
52
|
+
|
|
53
|
+
#ifdef WITH_PYTHON
|
|
54
|
+
#include <Python.h>
|
|
55
|
+
#endif
|
|
56
|
+
|
|
57
|
+
#ifndef _YOSYS_
|
|
58
|
+
# error It looks like you are trying to build Yosys without the config defines set. \
|
|
59
|
+
When building Yosys with a custom make system, make sure you set all the \
|
|
60
|
+
defines the Yosys Makefile would set for your build configuration.
|
|
61
|
+
#endif
|
|
62
|
+
|
|
63
|
+
#ifdef YOSYS_ENABLE_TCL
|
|
64
|
+
# include <tcl.h>
|
|
65
|
+
# ifdef YOSYS_MXE_HACKS
|
|
66
|
+
extern Tcl_Command Tcl_CreateCommand(Tcl_Interp *interp, const char *cmdName, Tcl_CmdProc *proc, ClientData clientData, Tcl_CmdDeleteProc *deleteProc);
|
|
67
|
+
extern Tcl_Interp *Tcl_CreateInterp(void);
|
|
68
|
+
extern void Tcl_Preserve(ClientData data);
|
|
69
|
+
extern void Tcl_Release(ClientData clientData);
|
|
70
|
+
extern int Tcl_InterpDeleted(Tcl_Interp *interp);
|
|
71
|
+
extern void Tcl_DeleteInterp(Tcl_Interp *interp);
|
|
72
|
+
extern int Tcl_Eval(Tcl_Interp *interp, const char *script);
|
|
73
|
+
extern int Tcl_EvalFile(Tcl_Interp *interp, const char *fileName);
|
|
74
|
+
extern void Tcl_Finalize(void);
|
|
75
|
+
extern int Tcl_GetCommandInfo(Tcl_Interp *interp, const char *cmdName, Tcl_CmdInfo *infoPtr);
|
|
76
|
+
extern const char *Tcl_GetStringResult(Tcl_Interp *interp);
|
|
77
|
+
extern Tcl_Obj *Tcl_NewStringObj(const char *bytes, int length);
|
|
78
|
+
extern Tcl_Obj *Tcl_NewIntObj(int intValue);
|
|
79
|
+
extern Tcl_Obj *Tcl_NewListObj(int objc, Tcl_Obj *const objv[]);
|
|
80
|
+
extern Tcl_Obj *Tcl_ObjSetVar2(Tcl_Interp *interp, Tcl_Obj *part1Ptr, Tcl_Obj *part2Ptr, Tcl_Obj *newValuePtr, int flags);
|
|
81
|
+
# endif
|
|
82
|
+
# undef CONST
|
|
83
|
+
# undef INLINE
|
|
84
|
+
#endif
|
|
85
|
+
|
|
86
|
+
#ifdef _WIN32
|
|
87
|
+
# undef NOMINMAX
|
|
88
|
+
# define NOMINMAX 1
|
|
89
|
+
# undef YY_NO_UNISTD_H
|
|
90
|
+
# define YY_NO_UNISTD_H 1
|
|
91
|
+
|
|
92
|
+
# include <windows.h>
|
|
93
|
+
# include <io.h>
|
|
94
|
+
# include <direct.h>
|
|
95
|
+
|
|
96
|
+
# define strtok_r strtok_s
|
|
97
|
+
# define strdup _strdup
|
|
98
|
+
# define snprintf _snprintf
|
|
99
|
+
# define getcwd _getcwd
|
|
100
|
+
# define mkdir _mkdir
|
|
101
|
+
# define popen _popen
|
|
102
|
+
# define pclose _pclose
|
|
103
|
+
|
|
104
|
+
# ifndef __MINGW32__
|
|
105
|
+
# define PATH_MAX MAX_PATH
|
|
106
|
+
# define isatty _isatty
|
|
107
|
+
# define fileno _fileno
|
|
108
|
+
# endif
|
|
109
|
+
|
|
110
|
+
// The following defines conflict with our identifiers:
|
|
111
|
+
# undef CONST
|
|
112
|
+
// `wingdi.h` defines a TRANSPARENT macro that conflicts with X(TRANSPARENT) entry in kernel/constids.inc
|
|
113
|
+
# undef TRANSPARENT
|
|
114
|
+
#endif
|
|
115
|
+
|
|
116
|
+
#ifndef PATH_MAX
|
|
117
|
+
# define PATH_MAX 4096
|
|
118
|
+
#endif
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
#define YOSYS_NAMESPACE Yosys
|
|
122
|
+
#define PRIVATE_NAMESPACE_BEGIN namespace {
|
|
123
|
+
#define PRIVATE_NAMESPACE_END }
|
|
124
|
+
#define YOSYS_NAMESPACE_BEGIN namespace Yosys {
|
|
125
|
+
#define YOSYS_NAMESPACE_END }
|
|
126
|
+
#define YOSYS_NAMESPACE_PREFIX Yosys::
|
|
127
|
+
#define USING_YOSYS_NAMESPACE using namespace Yosys;
|
|
128
|
+
|
|
129
|
+
#if defined(__GNUC__) || defined(__clang__)
|
|
130
|
+
# define YS_ATTRIBUTE(...) __attribute__((__VA_ARGS__))
|
|
131
|
+
#elif defined(_MSC_VER)
|
|
132
|
+
# define YS_ATTRIBUTE(...)
|
|
133
|
+
#else
|
|
134
|
+
# define YS_ATTRIBUTE(...)
|
|
135
|
+
#endif
|
|
136
|
+
|
|
137
|
+
#if defined(__GNUC__) || defined(__clang__)
|
|
138
|
+
# define YS_MAYBE_UNUSED __attribute__((__unused__))
|
|
139
|
+
#else
|
|
140
|
+
# define YS_MAYBE_UNUSED
|
|
141
|
+
#endif
|
|
142
|
+
|
|
143
|
+
#if __cplusplus >= 201703L
|
|
144
|
+
# define YS_FALLTHROUGH [[fallthrough]];
|
|
145
|
+
#elif defined(__clang__)
|
|
146
|
+
# define YS_FALLTHROUGH [[clang::fallthrough]];
|
|
147
|
+
#elif defined(__GNUC__)
|
|
148
|
+
# define YS_FALLTHROUGH [[gnu::fallthrough]];
|
|
149
|
+
#else
|
|
150
|
+
# define YS_FALLTHROUGH
|
|
151
|
+
#endif
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
YOSYS_NAMESPACE_BEGIN
|
|
155
|
+
|
|
156
|
+
// Note: All headers included in hashlib.h must be included
|
|
157
|
+
// outside of YOSYS_NAMESPACE before this or bad things will happen.
|
|
158
|
+
#ifdef HASHLIB_H
|
|
159
|
+
# undef HASHLIB_H
|
|
160
|
+
# include "kernel/hashlib.h"
|
|
161
|
+
#else
|
|
162
|
+
# include "kernel/hashlib.h"
|
|
163
|
+
# undef HASHLIB_H
|
|
164
|
+
#endif
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
using std::vector;
|
|
168
|
+
using std::string;
|
|
169
|
+
using std::tuple;
|
|
170
|
+
using std::pair;
|
|
171
|
+
|
|
172
|
+
using std::make_tuple;
|
|
173
|
+
using std::make_pair;
|
|
174
|
+
using std::get;
|
|
175
|
+
using std::min;
|
|
176
|
+
using std::max;
|
|
177
|
+
|
|
178
|
+
// A primitive shared string implementation that does not
|
|
179
|
+
// move its .c_str() when the object is copied or moved.
|
|
180
|
+
struct shared_str {
|
|
181
|
+
std::shared_ptr<string> content;
|
|
182
|
+
shared_str() { }
|
|
183
|
+
shared_str(string s) { content = std::shared_ptr<string>(new string(s)); }
|
|
184
|
+
shared_str(const char *s) { content = std::shared_ptr<string>(new string(s)); }
|
|
185
|
+
const char *c_str() const { return content->c_str(); }
|
|
186
|
+
const string &str() const { return *content; }
|
|
187
|
+
bool operator==(const shared_str &other) const { return *content == *other.content; }
|
|
188
|
+
unsigned int hash() const { return hashlib::hash_ops<std::string>::hash(*content); }
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
using hashlib::mkhash;
|
|
192
|
+
using hashlib::mkhash_init;
|
|
193
|
+
using hashlib::mkhash_add;
|
|
194
|
+
using hashlib::mkhash_xorshift;
|
|
195
|
+
using hashlib::hash_ops;
|
|
196
|
+
using hashlib::hash_cstr_ops;
|
|
197
|
+
using hashlib::hash_ptr_ops;
|
|
198
|
+
using hashlib::hash_obj_ops;
|
|
199
|
+
using hashlib::dict;
|
|
200
|
+
using hashlib::idict;
|
|
201
|
+
using hashlib::pool;
|
|
202
|
+
using hashlib::mfp;
|
|
203
|
+
|
|
204
|
+
namespace RTLIL {
|
|
205
|
+
struct IdString;
|
|
206
|
+
struct Const;
|
|
207
|
+
struct SigBit;
|
|
208
|
+
struct SigSpec;
|
|
209
|
+
struct Wire;
|
|
210
|
+
struct Cell;
|
|
211
|
+
struct Memory;
|
|
212
|
+
struct Process;
|
|
213
|
+
struct Module;
|
|
214
|
+
struct Design;
|
|
215
|
+
struct Monitor;
|
|
216
|
+
struct Selection;
|
|
217
|
+
struct SigChunk;
|
|
218
|
+
enum State : unsigned char;
|
|
219
|
+
|
|
220
|
+
typedef std::pair<SigSpec, SigSpec> SigSig;
|
|
221
|
+
|
|
222
|
+
namespace ID {}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
namespace AST {
|
|
226
|
+
struct AstNode;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
using RTLIL::IdString;
|
|
230
|
+
using RTLIL::Const;
|
|
231
|
+
using RTLIL::SigBit;
|
|
232
|
+
using RTLIL::SigSpec;
|
|
233
|
+
using RTLIL::Wire;
|
|
234
|
+
using RTLIL::Cell;
|
|
235
|
+
using RTLIL::Module;
|
|
236
|
+
using RTLIL::Design;
|
|
237
|
+
|
|
238
|
+
using RTLIL::State;
|
|
239
|
+
using RTLIL::SigChunk;
|
|
240
|
+
using RTLIL::SigSig;
|
|
241
|
+
|
|
242
|
+
namespace hashlib {
|
|
243
|
+
template<> struct hash_ops<RTLIL::Wire*> : hash_obj_ops {};
|
|
244
|
+
template<> struct hash_ops<RTLIL::Cell*> : hash_obj_ops {};
|
|
245
|
+
template<> struct hash_ops<RTLIL::Memory*> : hash_obj_ops {};
|
|
246
|
+
template<> struct hash_ops<RTLIL::Process*> : hash_obj_ops {};
|
|
247
|
+
template<> struct hash_ops<RTLIL::Module*> : hash_obj_ops {};
|
|
248
|
+
template<> struct hash_ops<RTLIL::Design*> : hash_obj_ops {};
|
|
249
|
+
template<> struct hash_ops<RTLIL::Monitor*> : hash_obj_ops {};
|
|
250
|
+
template<> struct hash_ops<AST::AstNode*> : hash_obj_ops {};
|
|
251
|
+
|
|
252
|
+
template<> struct hash_ops<const RTLIL::Wire*> : hash_obj_ops {};
|
|
253
|
+
template<> struct hash_ops<const RTLIL::Cell*> : hash_obj_ops {};
|
|
254
|
+
template<> struct hash_ops<const RTLIL::Memory*> : hash_obj_ops {};
|
|
255
|
+
template<> struct hash_ops<const RTLIL::Process*> : hash_obj_ops {};
|
|
256
|
+
template<> struct hash_ops<const RTLIL::Module*> : hash_obj_ops {};
|
|
257
|
+
template<> struct hash_ops<const RTLIL::Design*> : hash_obj_ops {};
|
|
258
|
+
template<> struct hash_ops<const RTLIL::Monitor*> : hash_obj_ops {};
|
|
259
|
+
template<> struct hash_ops<const AST::AstNode*> : hash_obj_ops {};
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
void memhasher_on();
|
|
263
|
+
void memhasher_off();
|
|
264
|
+
void memhasher_do();
|
|
265
|
+
|
|
266
|
+
extern bool memhasher_active;
|
|
267
|
+
inline void memhasher() { if (memhasher_active) memhasher_do(); }
|
|
268
|
+
|
|
269
|
+
void yosys_banner();
|
|
270
|
+
int ceil_log2(int x) YS_ATTRIBUTE(const);
|
|
271
|
+
|
|
272
|
+
inline std::string vstringf(const char *fmt, va_list ap)
|
|
273
|
+
{
|
|
274
|
+
// For the common case of strings shorter than 128, save a heap
|
|
275
|
+
// allocation by using a stack allocated buffer.
|
|
276
|
+
const int kBufSize = 128;
|
|
277
|
+
char buf[kBufSize];
|
|
278
|
+
buf[0] = '\0';
|
|
279
|
+
va_list apc;
|
|
280
|
+
va_copy(apc, ap);
|
|
281
|
+
int n = vsnprintf(buf, kBufSize, fmt, apc);
|
|
282
|
+
va_end(apc);
|
|
283
|
+
if (n < kBufSize)
|
|
284
|
+
return std::string(buf);
|
|
285
|
+
|
|
286
|
+
std::string string;
|
|
287
|
+
char *str = NULL;
|
|
288
|
+
#if defined(_WIN32 )|| defined(__CYGWIN__)
|
|
289
|
+
int sz = 2 * kBufSize, rc;
|
|
290
|
+
while (1) {
|
|
291
|
+
va_copy(apc, ap);
|
|
292
|
+
str = (char*)realloc(str, sz);
|
|
293
|
+
rc = vsnprintf(str, sz, fmt, apc);
|
|
294
|
+
va_end(apc);
|
|
295
|
+
if (rc >= 0 && rc < sz)
|
|
296
|
+
break;
|
|
297
|
+
sz *= 2;
|
|
298
|
+
}
|
|
299
|
+
if (str != NULL) {
|
|
300
|
+
string = str;
|
|
301
|
+
free(str);
|
|
302
|
+
}
|
|
303
|
+
return string;
|
|
304
|
+
#else
|
|
305
|
+
if (vasprintf(&str, fmt, ap) < 0)
|
|
306
|
+
str = NULL;
|
|
307
|
+
if (str != NULL) {
|
|
308
|
+
string = str;
|
|
309
|
+
free(str);
|
|
310
|
+
}
|
|
311
|
+
return string;
|
|
312
|
+
#endif
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
std::string stringf(const char *fmt, ...) YS_ATTRIBUTE(format(printf, 1, 2));
|
|
316
|
+
|
|
317
|
+
inline std::string stringf(const char *fmt, ...)
|
|
318
|
+
{
|
|
319
|
+
std::string string;
|
|
320
|
+
va_list ap;
|
|
321
|
+
|
|
322
|
+
va_start(ap, fmt);
|
|
323
|
+
string = vstringf(fmt, ap);
|
|
324
|
+
va_end(ap);
|
|
325
|
+
|
|
326
|
+
return string;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
int readsome(std::istream &f, char *s, int n);
|
|
330
|
+
std::string next_token(std::string &text, const char *sep = " \t\r\n", bool long_strings = false);
|
|
331
|
+
std::vector<std::string> split_tokens(const std::string &text, const char *sep = " \t\r\n");
|
|
332
|
+
bool patmatch(const char *pattern, const char *string);
|
|
333
|
+
#if !defined(YOSYS_DISABLE_SPAWN)
|
|
334
|
+
int run_command(const std::string &command, std::function<void(const std::string&)> process_line = std::function<void(const std::string&)>());
|
|
335
|
+
#endif
|
|
336
|
+
std::string get_base_tmpdir();
|
|
337
|
+
std::string make_temp_file(std::string template_str = get_base_tmpdir() + "/yosys_XXXXXX");
|
|
338
|
+
std::string make_temp_dir(std::string template_str = get_base_tmpdir() + "/yosys_XXXXXX");
|
|
339
|
+
bool check_file_exists(std::string filename, bool is_exec = false);
|
|
340
|
+
bool check_directory_exists(const std::string& dirname);
|
|
341
|
+
bool is_absolute_path(std::string filename);
|
|
342
|
+
void remove_directory(std::string dirname);
|
|
343
|
+
bool create_directory(const std::string& dirname);
|
|
344
|
+
std::string escape_filename_spaces(const std::string& filename);
|
|
345
|
+
|
|
346
|
+
template<typename T> int GetSize(const T &obj) { return obj.size(); }
|
|
347
|
+
inline int GetSize(RTLIL::Wire *wire);
|
|
348
|
+
|
|
349
|
+
extern int autoidx;
|
|
350
|
+
extern int yosys_xtrace;
|
|
351
|
+
|
|
352
|
+
RTLIL::IdString new_id(std::string file, int line, std::string func);
|
|
353
|
+
RTLIL::IdString new_id_suffix(std::string file, int line, std::string func, std::string suffix);
|
|
354
|
+
|
|
355
|
+
#define NEW_ID \
|
|
356
|
+
YOSYS_NAMESPACE_PREFIX new_id(__FILE__, __LINE__, __FUNCTION__)
|
|
357
|
+
#define NEW_ID_SUFFIX(suffix) \
|
|
358
|
+
YOSYS_NAMESPACE_PREFIX new_id_suffix(__FILE__, __LINE__, __FUNCTION__, suffix)
|
|
359
|
+
|
|
360
|
+
// Create a statically allocated IdString object, using for example ID::A or ID($add).
|
|
361
|
+
//
|
|
362
|
+
// Recipe for Converting old code that is using conversion of strings like ID::A and
|
|
363
|
+
// "$add" for creating IdStrings: Run below SED command on the .cc file and then use for
|
|
364
|
+
// example "meld foo.cc foo.cc.orig" to manually compile errors, if necessary.
|
|
365
|
+
//
|
|
366
|
+
// sed -i.orig -r 's/"\\\\([a-zA-Z0-9_]+)"/ID(\1)/g; s/"(\$[a-zA-Z0-9_]+)"/ID(\1)/g;' <filename>
|
|
367
|
+
//
|
|
368
|
+
#define ID(_id) ([]() { const char *p = "\\" #_id, *q = p[1] == '$' ? p+1 : p; \
|
|
369
|
+
static const YOSYS_NAMESPACE_PREFIX RTLIL::IdString id(q); return id; })()
|
|
370
|
+
namespace ID = RTLIL::ID;
|
|
371
|
+
|
|
372
|
+
namespace hashlib {
|
|
373
|
+
template<> struct hash_ops<RTLIL::State> : hash_ops<int> {};
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
|
|
377
|
+
YOSYS_NAMESPACE_END
|
|
378
|
+
|
|
379
|
+
#endif
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// **AUTOGENERATED FILE** **DO NOT EDIT**
|
|
2
|
-
// Generated by ../yosys-src/techlibs/quicklogic/qlf_k6n10f/generate_bram_types_sim.py at 2024-
|
|
2
|
+
// Generated by ../yosys-src/techlibs/quicklogic/qlf_k6n10f/generate_bram_types_sim.py at 2024-05-06 12:11:30.079562+00:00
|
|
3
3
|
`timescale 1ns /10ps
|
|
4
4
|
|
|
5
5
|
module TDP36K_BRAM_A_X1_B_X1_nonsplit (
|
yowasp_yosys/share/simlib.v
CHANGED
|
@@ -902,18 +902,34 @@ endgenerate
|
|
|
902
902
|
endmodule
|
|
903
903
|
|
|
904
904
|
// --------------------------------------------------------
|
|
905
|
-
|
|
905
|
+
// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|
|
|
906
|
+
//-
|
|
907
|
+
//- $macc (A, B, Y)
|
|
908
|
+
//-
|
|
909
|
+
//- Multiply and accumulate.
|
|
910
|
+
//- A building block for summing any number of negated and unnegated signals
|
|
911
|
+
//- and arithmetic products of pairs of signals. Cell port A concatenates pairs
|
|
912
|
+
//- of signals to be multiplied together. When the second signal in a pair is zero
|
|
913
|
+
//- length, a constant 1 is used instead as the second factor. Cell port B
|
|
914
|
+
//- concatenates 1-bit-wide signals to also be summed, such as "carry in" in adders.
|
|
915
|
+
//- Typically created by the `alumacc` pass, which transforms $add and $mul
|
|
916
|
+
//- into $macc cells.
|
|
906
917
|
module \$macc (A, B, Y);
|
|
907
918
|
|
|
908
919
|
parameter A_WIDTH = 0;
|
|
909
920
|
parameter B_WIDTH = 0;
|
|
910
921
|
parameter Y_WIDTH = 0;
|
|
922
|
+
// CONFIG determines the layout of A, as explained below
|
|
911
923
|
parameter CONFIG = 4'b0000;
|
|
912
924
|
parameter CONFIG_WIDTH = 4;
|
|
913
925
|
|
|
914
|
-
|
|
915
|
-
input
|
|
916
|
-
|
|
926
|
+
// In the terms used for this cell, there's mixed meanings for the term "port". To disambiguate:
|
|
927
|
+
// A cell port is for example the A input (it is constructed in C++ as cell->setPort(ID::A, ...))
|
|
928
|
+
// Multiplier ports are pairs of multiplier inputs ("factors").
|
|
929
|
+
// If the second signal in such a pair is zero length, no multiplication is necessary, and the first signal is just added to the sum.
|
|
930
|
+
input [A_WIDTH-1:0] A; // Cell port A is the concatenation of all arithmetic ports
|
|
931
|
+
input [B_WIDTH-1:0] B; // Cell port B is the concatenation of single-bit unsigned signals to be also added to the sum
|
|
932
|
+
output reg [Y_WIDTH-1:0] Y; // Output sum
|
|
917
933
|
|
|
918
934
|
// Xilinx XSIM does not like $clog2() below..
|
|
919
935
|
function integer my_clog2;
|
|
@@ -929,10 +945,42 @@ function integer my_clog2;
|
|
|
929
945
|
end
|
|
930
946
|
endfunction
|
|
931
947
|
|
|
948
|
+
// Bits that a factor's length field in CONFIG per factor in cell port A
|
|
932
949
|
localparam integer num_bits = CONFIG[3:0] > 0 ? CONFIG[3:0] : 1;
|
|
950
|
+
// Number of multiplier ports
|
|
933
951
|
localparam integer num_ports = (CONFIG_WIDTH-4) / (2 + 2*num_bits);
|
|
952
|
+
// Minium bit width of an induction variable to iterate over all bits of cell port A
|
|
934
953
|
localparam integer num_abits = my_clog2(A_WIDTH) > 0 ? my_clog2(A_WIDTH) : 1;
|
|
935
954
|
|
|
955
|
+
// In this pseudocode, u(foo) means an unsigned int that's foo bits long.
|
|
956
|
+
// The CONFIG parameter carries the following information:
|
|
957
|
+
// struct CONFIG {
|
|
958
|
+
// u4 num_bits;
|
|
959
|
+
// struct port_field {
|
|
960
|
+
// bool is_signed;
|
|
961
|
+
// bool is_subtract;
|
|
962
|
+
// u(num_bits) factor1_len;
|
|
963
|
+
// u(num_bits) factor2_len;
|
|
964
|
+
// }[num_ports];
|
|
965
|
+
// };
|
|
966
|
+
|
|
967
|
+
// The A cell port carries the following information:
|
|
968
|
+
// struct A {
|
|
969
|
+
// u(CONFIG.port_field[0].factor1_len) port0factor1;
|
|
970
|
+
// u(CONFIG.port_field[0].factor2_len) port0factor2;
|
|
971
|
+
// u(CONFIG.port_field[1].factor1_len) port1factor1;
|
|
972
|
+
// u(CONFIG.port_field[1].factor2_len) port1factor2;
|
|
973
|
+
// ...
|
|
974
|
+
// };
|
|
975
|
+
// and log(sizeof(A)) is num_abits.
|
|
976
|
+
// No factor1 may have a zero length.
|
|
977
|
+
// A factor2 having a zero length implies factor2 is replaced with a constant 1.
|
|
978
|
+
|
|
979
|
+
// Additionally, B is an array of 1-bit-wide unsigned integers to also be summed up.
|
|
980
|
+
// Finally, we have:
|
|
981
|
+
// Y = port0factor1 * port0factor2 + port1factor1 * port1factor2 + ...
|
|
982
|
+
// * B[0] + B[1] + ...
|
|
983
|
+
|
|
936
984
|
function [2*num_ports*num_abits-1:0] get_port_offsets;
|
|
937
985
|
input [CONFIG_WIDTH-1:0] cfg;
|
|
938
986
|
integer i, cursor;
|
yowasp_yosys/share/techmap.v
CHANGED
yowasp_yosys/yosys.wasm
CHANGED
|
Binary file
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
yowasp_yosys/__init__.py,sha256=x--xPTzLWZNoX6H0B2E3a1HMZMk3di10gVnWVLJ92xc,1325
|
|
2
|
-
yowasp_yosys/sby.py,sha256=
|
|
2
|
+
yowasp_yosys/sby.py,sha256=5T0BrIqJ5vobWMd9nOEClXq0rlRxCXNPYycGGS0l7zc,18414
|
|
3
3
|
yowasp_yosys/smtbmc.py,sha256=bGnVDnvEGCRWuNdHfsqwMdCNJ9GJqdeBuxehh8N9M64,73159
|
|
4
4
|
yowasp_yosys/witness.py,sha256=m3iV2Nydm0p4G79VRaaX3lGul-nGnuxeKnx20MCJgi0,17279
|
|
5
|
-
yowasp_yosys/yosys.wasm,sha256=
|
|
5
|
+
yowasp_yosys/yosys.wasm,sha256=Vv3RvojGPkT56QyYdkNEddCGeNsBGYKRR3IddREjlro,21712677
|
|
6
6
|
yowasp_yosys/share/abc9_map.v,sha256=uWDqMpBQTeeadH1BlHVwkCy2StKF892xbgBgMKLK5-w,923
|
|
7
7
|
yowasp_yosys/share/abc9_model.v,sha256=IfMyEGOEUBdZyiVule0wMhrVYVYQpmSIcxygbgtHItI,653
|
|
8
8
|
yowasp_yosys/share/abc9_unmap.v,sha256=w107Y3iJjMU6D_6_aYLf2NziXTnAhpa5_CFAwaYO1iU,638
|
|
@@ -16,9 +16,9 @@ yowasp_yosys/share/gate2lut.v,sha256=j5EJAuBnWNw15j0sjK-Seq2BTgleebDF3aAN0pc-8L0
|
|
|
16
16
|
yowasp_yosys/share/mul2dsp.v,sha256=TL_2F12hxIt-rnnbbZ-1xYv9VXJEUdGW8n_sFpvpFFg,9065
|
|
17
17
|
yowasp_yosys/share/pmux2mux.v,sha256=P7McDtR51FZIuX5nSlejXkt2Ez7I1nOY2JBxeaT5L78,342
|
|
18
18
|
yowasp_yosys/share/simcells.v,sha256=2fUcWGwHGP-Ci6d0DU574952S-8sVG8LxS1lWUupA0Q,87795
|
|
19
|
-
yowasp_yosys/share/simlib.v,sha256=
|
|
19
|
+
yowasp_yosys/share/simlib.v,sha256=zLHzu739KBF83mNdnpdwjaIzszx-feUHzq8R2_RFmDM,67614
|
|
20
20
|
yowasp_yosys/share/smtmap.v,sha256=Dqqww6UyTcww0FA8w6Vx9dT7E_6m-8GBUe-ylP95nKw,654
|
|
21
|
-
yowasp_yosys/share/techmap.v,sha256=
|
|
21
|
+
yowasp_yosys/share/techmap.v,sha256=LFR-fsOUcZpZX4YDgNmgQERcpExCxxmUG9YqpWfWcOY,16940
|
|
22
22
|
yowasp_yosys/share/achronix/speedster22i/cells_map.v,sha256=l_JkNqebLyY9xHVkaLa5JDHExiERD72W-TeKAqHeUqU,2629
|
|
23
23
|
yowasp_yosys/share/achronix/speedster22i/cells_sim.v,sha256=WAAXWao0YxFMgWIUavUsPh-r3dYkQpyiqAwdgXzDvEM,2343
|
|
24
24
|
yowasp_yosys/share/anlogic/arith_map.v,sha256=uYS7PW7EJm6e3EEy2qV3OKjaEV4lw3PEPYhFmSRVuv8,2473
|
|
@@ -29,6 +29,7 @@ yowasp_yosys/share/anlogic/cells_sim.v,sha256=epraJHHQBEbx_kSaj_0dGS6pbRc0IrP_2g
|
|
|
29
29
|
yowasp_yosys/share/anlogic/eagle_bb.v,sha256=ZQhWneKSL-AebbaZj3hUv2sjPpzrtR4CXCwfg25fiME,33586
|
|
30
30
|
yowasp_yosys/share/anlogic/lutrams.txt,sha256=96pdcT_NpWWTcX1v5HEhniLH2BTgD8dYJkK6BZpzcN0,151
|
|
31
31
|
yowasp_yosys/share/anlogic/lutrams_map.v,sha256=WEvqKXQvd0TdhPyS1DuPwOA3lbxcdqBZ2RHT0LHW16Y,661
|
|
32
|
+
yowasp_yosys/share/choices/kogge-stone.v,sha256=0XaGBM8mOlk3Mjtm99KbiO5_6lHS42sTExueb5KJ6No,1583
|
|
32
33
|
yowasp_yosys/share/coolrunner2/cells_counter_map.v,sha256=zi0Ya0lPJ1w8ynIkGSFEAMqPDXYrnxv1jZoF_cUrWQc,4884
|
|
33
34
|
yowasp_yosys/share/coolrunner2/cells_latch.v,sha256=PG04D2pJ2xV7QpopzvbMazWRhpXWLCyzuHwgN8YAkFM,367
|
|
34
35
|
yowasp_yosys/share/coolrunner2/cells_sim.v,sha256=kwVGEh-gQ2jP8RcQq0qvm0W5tJt5CiEE9o35KWUKzc8,5435
|
|
@@ -50,7 +51,7 @@ yowasp_yosys/share/efinix/arith_map.v,sha256=0oifXq1BMAnabb58BJKJtESKw1yXA1bDpjO
|
|
|
50
51
|
yowasp_yosys/share/efinix/brams.txt,sha256=AlQhnLckQAb_OmZeWrr5dEPFi0dKdA0lhojdtTu8aYM,296
|
|
51
52
|
yowasp_yosys/share/efinix/brams_map.v,sha256=XUIm7DMwnrfmf51qqe0QzjtXpFV-CiEKQ8m-6yqPOOA,3603
|
|
52
53
|
yowasp_yosys/share/efinix/cells_map.v,sha256=BitbqxY_Yv9JgyX1BAorTjHA2v1xB50TxAtZv6aeJgs,2693
|
|
53
|
-
yowasp_yosys/share/efinix/cells_sim.v,sha256=
|
|
54
|
+
yowasp_yosys/share/efinix/cells_sim.v,sha256=JOepXYOVqJA5iO51ba1ugaHIuUjIJWSIwIn1wQrW7Yw,5392
|
|
54
55
|
yowasp_yosys/share/efinix/gbuf_map.v,sha256=ETBAD1_tZzIm9dk2iU2LbRFGRH1qO3YEGi6J-AWMj9E,131
|
|
55
56
|
yowasp_yosys/share/fabulous/arith_map.v,sha256=zmTbG0T8lKptz3B0KwL95u07lkIlifFd_eUeH6ZHYbU,1385
|
|
56
57
|
yowasp_yosys/share/fabulous/cells_map.v,sha256=16DG5BRVff-GuZ4ojWx4Gt0arSE6Lu9Kx9SYMagI9no,1063
|
|
@@ -126,19 +127,20 @@ yowasp_yosys/share/include/kernel/ffmerge.h,sha256=I3mXyytzRyP92T9XhSQTlv7EN2G31
|
|
|
126
127
|
yowasp_yosys/share/include/kernel/fmt.h,sha256=0UT-aDVX7_KnzlaNyK3iMsSzoICa4Q0HhqsFIrwHBMw,2790
|
|
127
128
|
yowasp_yosys/share/include/kernel/hashlib.h,sha256=puZr8kGY10J_g2M7j3pPFJQk9aGDFWwqVLO3nHf4sCQ,30207
|
|
128
129
|
yowasp_yosys/share/include/kernel/json.h,sha256=tE3AgUslbZd5TRFEipj0HptYjWgNfMjzV44l3A5zAu8,2851
|
|
129
|
-
yowasp_yosys/share/include/kernel/log.h,sha256=
|
|
130
|
+
yowasp_yosys/share/include/kernel/log.h,sha256=qNxXQdisMGuJU1mjSnASyDjmlTNcyvg_Jj_ooRT8-KA,15373
|
|
130
131
|
yowasp_yosys/share/include/kernel/macc.h,sha256=WOUw0yARLUqxZw6HhZV47zRwUA2X8X7mwD_jb1yUZzE,6991
|
|
131
132
|
yowasp_yosys/share/include/kernel/mem.h,sha256=kCejpLHHg7E2O8EcQx0Wi8PRNcULDm-7t_QEYsXoNNc,9176
|
|
132
133
|
yowasp_yosys/share/include/kernel/modtools.h,sha256=W2d-ZsAggrjlva6cAQsMKCRpzss_AlnYXUEPWDd2xWE,14281
|
|
133
134
|
yowasp_yosys/share/include/kernel/qcsat.h,sha256=ibhpJRu0youjDXPllXrDJi851VpwW1kbJ_y94_X6JhU,2804
|
|
134
|
-
yowasp_yosys/share/include/kernel/register.h,sha256=
|
|
135
|
-
yowasp_yosys/share/include/kernel/rtlil.h,sha256=
|
|
135
|
+
yowasp_yosys/share/include/kernel/register.h,sha256=2xAbUndqoXwACqtqowqmfmRQQFlwEpV82wy2ejSGwUY,5482
|
|
136
|
+
yowasp_yosys/share/include/kernel/rtlil.h,sha256=utslquUEYNUwyUSSIDZsZZzIoXKBeQ7POXRPI9Wn-iQ,84899
|
|
136
137
|
yowasp_yosys/share/include/kernel/satgen.h,sha256=zx8LptIgds0Z9sxXx6HGxNNYuk05dHqQZy1aXFWEXC0,10483
|
|
137
138
|
yowasp_yosys/share/include/kernel/scopeinfo.h,sha256=Oc1lOh6b7qNL9zD4DVq5rvlkur6-IXALhx32ewD1UHk,11230
|
|
138
139
|
yowasp_yosys/share/include/kernel/sigtools.h,sha256=qC0CgK3OJwam_ljqtW-kauA3djylLLoI2rbSs4Zhn5s,7504
|
|
139
140
|
yowasp_yosys/share/include/kernel/timinginfo.h,sha256=9MI3ve19pJouYXKng1EBlrryAKy-OaH6Hc8VbLu0GYY,7100
|
|
140
141
|
yowasp_yosys/share/include/kernel/utils.h,sha256=r5GUGry9LEcyasrGnI6luII_8wgf-Iri0H8_FgwWzRY,6824
|
|
141
|
-
yowasp_yosys/share/include/kernel/yosys.h,sha256=
|
|
142
|
+
yowasp_yosys/share/include/kernel/yosys.h,sha256=TRn6yuZGWcBQkrB1nc7dvUhISz3dnS8eMKvVynyBko8,3421
|
|
143
|
+
yowasp_yosys/share/include/kernel/yosys_common.h,sha256=FnNXDxs7oQEbDuZ9mWuM7TQS_ex0Z5pn67egEs0gEWM,11332
|
|
142
144
|
yowasp_yosys/share/include/kernel/yw.h,sha256=jibYunDP1ZMYwCxo616nHgdGyPGis_8TO9fYmYdHfd4,5429
|
|
143
145
|
yowasp_yosys/share/include/libs/ezsat/ezminisat.h,sha256=bSrDL6VRinpXdULoR8P9lQaT1Dy4kAEZfTcKjRKOdjg,2098
|
|
144
146
|
yowasp_yosys/share/include/libs/ezsat/ezsat.h,sha256=eggeGwS9pFyxSYGT0RtOqX189pbXFAKDfPZzIYTmqIk,14523
|
|
@@ -243,7 +245,7 @@ yowasp_yosys/share/quicklogic/pp3/latches_map.v,sha256=UrGzRlwwITwA7mMlXhHlDFPiw
|
|
|
243
245
|
yowasp_yosys/share/quicklogic/pp3/lut_map.v,sha256=BmijMS4EqVQPP2BPo2zgKStKPPhRLTf5kbcAtGKZEVs,928
|
|
244
246
|
yowasp_yosys/share/quicklogic/qlf_k6n10f/TDP18K_FIFO.v,sha256=k1AVrwpOQ3vpxoWAbchRpmNbncYCYtVfDExz6VcmtBg,10404
|
|
245
247
|
yowasp_yosys/share/quicklogic/qlf_k6n10f/arith_map.v,sha256=Ea7aX3l71nFxP1Az5NHtca-ZPnQmUmUvlWI-tVl4Bkk,2560
|
|
246
|
-
yowasp_yosys/share/quicklogic/qlf_k6n10f/bram_types_sim.v,sha256=
|
|
248
|
+
yowasp_yosys/share/quicklogic/qlf_k6n10f/bram_types_sim.v,sha256=nFhv0WklhJ1rHHUMdumwAv-QT7k6PdW3h1J9yrcOeBs,2551774
|
|
247
249
|
yowasp_yosys/share/quicklogic/qlf_k6n10f/brams_map.v,sha256=Iqj4w3Vna6W80liLUtDhAQKwciQNZWX3aFr9FDBU5o4,103558
|
|
248
250
|
yowasp_yosys/share/quicklogic/qlf_k6n10f/brams_sim.v,sha256=mJXEws9AvJLeUBr3eJzxTEvN7Y89zpkNsoR2tpjLu-w,339634
|
|
249
251
|
yowasp_yosys/share/quicklogic/qlf_k6n10f/cells_sim.v,sha256=70GVgjrXbld6c2yITFriyoJLqO8CAcHDyA8oUPfkItg,7347
|
|
@@ -292,8 +294,8 @@ yowasp_yosys/share/xilinx/xc5v_dsp_map.v,sha256=I4lg0RQ54fBBba_7NNvUgwS4tQ1yLIsU
|
|
|
292
294
|
yowasp_yosys/share/xilinx/xc6s_dsp_map.v,sha256=gTxHocB-Dn5G4BplWgri_tLhT6DIO2S0X-yu4iBKYyk,562
|
|
293
295
|
yowasp_yosys/share/xilinx/xc7_dsp_map.v,sha256=zrzreQi7mElrAMtrayxtiO_Bw00S6zsjSjSVcjmJPH0,884
|
|
294
296
|
yowasp_yosys/share/xilinx/xcu_dsp_map.v,sha256=gzCgl1emrHGcigVmU0nP0pW7dlhQ01SaWwXzHHcqt-o,882
|
|
295
|
-
yowasp_yosys-0.39.0.
|
|
296
|
-
yowasp_yosys-0.39.0.
|
|
297
|
-
yowasp_yosys-0.39.0.
|
|
298
|
-
yowasp_yosys-0.39.0.
|
|
299
|
-
yowasp_yosys-0.39.0.
|
|
297
|
+
yowasp_yosys-0.39.0.183.post706.dev0.dist-info/METADATA,sha256=KcuH57pTraepjYmRvDvmpmIM1wPLc7FQ_QCOe4W3ytM,2614
|
|
298
|
+
yowasp_yosys-0.39.0.183.post706.dev0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
|
299
|
+
yowasp_yosys-0.39.0.183.post706.dev0.dist-info/entry_points.txt,sha256=p_9sIVi2ZqsqgYYo14PywYkwHYTa76fMEq3LxweXJpc,220
|
|
300
|
+
yowasp_yosys-0.39.0.183.post706.dev0.dist-info/top_level.txt,sha256=_yiNT8kLYkcD1TEuUCzQ_MkON1c3xuIRV59zXds4zd4,13
|
|
301
|
+
yowasp_yosys-0.39.0.183.post706.dev0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|