1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
; SPDX-License-Identifier: Apache-2.0
circuit Ops:
module Ops:
input sel: UInt<4>
input is: SInt<8>
input iu: UInt<8>
output os: SInt<14>
output ou: UInt<13>
output obool: UInt<1>
os <= SInt(0)
ou <= UInt(0)
obool <= UInt(0)
when eq(sel, UInt(0)):
os <= add(is, is)
ou <= add(iu, iu)
else:
when eq(sel, UInt(1)):
os <= sub(is, is)
ou <= sub(iu, iu)
else:
when eq(sel, UInt(2)):
os <= mux(eq(is, SInt(0)), SInt(1), div(is, is))
ou <= mux(eq(iu, UInt(0)), UInt(1), div(iu, iu))
else:
when eq(sel, UInt(3)):
os <= rem(is, is)
ou <= rem(iu, iu)
else:
when eq(sel, UInt(4)):
ou <= add(and(is, is), and(iu, iu))
else:
when eq(sel, UInt(5)):
ou <= add(or(is, is), or(iu, iu))
else:
when eq(sel, UInt(4)):
ou <= add(xor(is, is), xor(iu, iu))
else:
when eq(sel, UInt(5)):
ou <= add(eq(is, is), eq(iu, iu))
else:
when eq(sel, UInt(4)):
ou <= add(neq(is, is), neq(iu, iu))
else:
when eq(sel, UInt(5)):
ou <= add(geq(is, is), geq(iu, iu))
else:
when eq(sel, UInt(4)):
ou <= add(leq(is, is), leq(iu, iu))
else:
when eq(sel, UInt(5)):
ou <= add(gt(is, is), gt(iu, iu))
else:
ou <= add(lt(is, is), lt(iu, iu))
|