abc9: generate $abc9_holes design instead of <name>$holes
[yosys.git] / techlibs / sf2 / cells_sim.v
1 // https://coredocs.s3.amazonaws.com/Libero/12_0_0/Tool/sf2_mlg.pdf
2
3 module ADD2 (
4
5 input A, B,
6 output Y
7 );
8 assign Y = A & B;
9 endmodule
10
11 module ADD3 (
12 input A, B, C,
13 output Y
14 );
15 assign Y = A & B & C;
16 endmodule
17
18 module ADD4 (
19 input A, B, C, D,
20 output Y
21 );
22 assign Y = A & B & C & D;
23 endmodule
24
25 module CFG1 (
26 output Y,
27 input A
28 );
29 parameter [1:0] INIT = 2'h0;
30 assign Y = INIT >> A;
31 endmodule
32
33 module CFG2 (
34 output Y,
35 input A,
36 input B
37 );
38 parameter [3:0] INIT = 4'h0;
39 assign Y = INIT >> {B, A};
40 endmodule
41
42 module CFG3 (
43 output Y,
44 input A,
45 input B,
46 input C
47 );
48 parameter [7:0] INIT = 8'h0;
49 assign Y = INIT >> {C, B, A};
50 endmodule
51
52 module CFG4 (
53 output Y,
54 input A,
55 input B,
56 input C,
57 input D
58 );
59 parameter [15:0] INIT = 16'h0;
60 assign Y = INIT >> {D, C, B, A};
61 endmodule
62
63 module BUFF (
64 input A,
65 output Y
66 );
67 assign Y = A;
68 endmodule
69
70 module BUFD (
71 input A,
72 output Y
73 );
74 assign Y = A;
75 endmodule
76
77 module CLKINT (
78 input A,
79 output Y
80 );
81 assign Y = A;
82 endmodule
83
84 module CLKINT_PRESERVE (
85 input A,
86 output Y
87 );
88 assign Y = A;
89 endmodule
90
91 module GCLKINT (
92 input A, EN,
93 output Y
94 );
95 assign Y = A & EN;
96 endmodule
97
98 module RCLKINT (
99 input A,
100 output Y
101 );
102 assign Y = A;
103 endmodule
104
105 module RGCLKINT (
106 input A, EN,
107 output Y
108 );
109 assign Y = A & EN;
110 endmodule
111
112 module SLE (
113 output Q,
114 input ADn,
115 input ALn,
116 input CLK,
117 input D,
118 input LAT,
119 input SD,
120 input EN,
121 input SLn
122 );
123 reg q_latch, q_ff;
124
125 always @(posedge CLK, negedge ALn) begin
126 if (!ALn) begin
127 q_ff <= !ADn;
128 end else if (EN) begin
129 if (!SLn)
130 q_ff <= SD;
131 else
132 q_ff <= D;
133 end
134 end
135
136 always @* begin
137 if (!ALn) begin
138 q_latch <= !ADn;
139 end else if (CLK && EN) begin
140 if (!SLn)
141 q_ff <= SD;
142 else
143 q_ff <= D;
144 end
145 end
146
147 assign Q = LAT ? q_latch : q_ff;
148 endmodule
149
150 // module AR1
151 // module FCEND_BUFF
152 // module FCINIT_BUFF
153 // module FLASH_FREEZE
154 // module OSCILLATOR
155 // module SYSRESET
156 // module SYSCTRL_RESET_STATUS
157 // module LIVE_PROBE_FB
158 // module GCLKBUF
159 // module GCLKBUF_DIFF
160 // module GCLKBIBUF
161 // module DFN1
162 // module DFN1C0
163 // module DFN1E1
164 // module DFN1E1C0
165 // module DFN1E1P0
166 // module DFN1P0
167 // module DLN1
168 // module DLN1C0
169 // module DLN1P0
170
171 module INV (
172 input A,
173 output Y
174 );
175 assign Y = !A;
176 endmodule
177
178 module INVD (
179 input A,
180 output Y
181 );
182 assign Y = !A;
183 endmodule
184
185 module MX2 (
186 input A, B, S,
187 output Y
188 );
189 assign Y = S ? B : A;
190 endmodule
191
192 module MX4 (
193 input D0, D1, D2, D3, S0, S1,
194 output Y
195 );
196 assign Y = S1 ? (S0 ? D3 : D2) : (S0 ? D1 : D0);
197 endmodule
198
199 module NAND2 (
200 input A, B,
201 output Y
202 );
203 assign Y = !(A & B);
204 endmodule
205
206 module NAND3 (
207 input A, B, C,
208 output Y
209 );
210 assign Y = !(A & B & C);
211 endmodule
212
213 module NAND4 (
214 input A, B, C, D,
215 output Y
216 );
217 assign Y = !(A & B & C & D);
218 endmodule
219
220 module NOR2 (
221 input A, B,
222 output Y
223 );
224 assign Y = !(A | B);
225 endmodule
226
227 module NOR3 (
228 input A, B, C,
229 output Y
230 );
231 assign Y = !(A | B | C);
232 endmodule
233
234 module NOR4 (
235 input A, B, C, D,
236 output Y
237 );
238 assign Y = !(A | B | C | D);
239 endmodule
240
241 module OR2 (
242 input A, B,
243 output Y
244 );
245 assign Y = A | B;
246 endmodule
247
248 module OR3 (
249 input A, B, C,
250 output Y
251 );
252 assign Y = A | B | C;
253 endmodule
254
255 module OR4 (
256 input A, B, C, D,
257 output Y
258 );
259 assign Y = A | B | C | D;
260 endmodule
261
262 module XOR2 (
263 input A, B,
264 output Y
265 );
266 assign Y = A ^ B;
267 endmodule
268
269 module XOR3 (
270 input A, B, C,
271 output Y
272 );
273 assign Y = A ^ B ^ C;
274 endmodule
275
276 module XOR4 (
277 input A, B, C, D,
278 output Y
279 );
280 assign Y = A ^ B ^ C ^ D;
281 endmodule
282
283 module XOR8 (
284 input A, B, C, D, E, F, G, H,
285 output Y
286 );
287 assign Y = A ^ B ^ C ^ D ^ E ^ F ^ G ^ H;
288 endmodule
289
290 // module UJTAG
291 // module BIBUF
292 // module BIBUF_DIFF
293 // module CLKBIBUF
294
295 module CLKBUF (
296 input PAD,
297 output Y
298 );
299 assign Y = PAD;
300 endmodule
301
302 // module CLKBUF_DIFF
303
304 module INBUF (
305 input PAD,
306 output Y
307 );
308 assign Y = PAD;
309 endmodule
310
311 // module INBUF_DIFF
312
313 module OUTBUF (
314 input D,
315 output PAD
316 );
317 assign PAD = D;
318 endmodule
319
320 // module OUTBUF_DIFF
321 // module TRIBUFF
322 // module TRIBUFF_DIFF
323 // module DDR_IN
324 // module DDR_OUT
325 // module RAM1K18
326 // module RAM64x18
327 // module MACC