blob: 0f245bf77bd9e56ef68401209a4a95a45b90d215 (
plain)
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
========= RENAME STRATEGY =========
Special chars ~!@#$%^*-_+=?/ get renamed to _XX, where XX is a hex representation of the symbol
a_x
=>
a_XXx
a_XXx
=>
a_XXXXx
This guarantees all symbols use a subset of the character set
Now, I need to rename duplicate symbols, so:
wire x
when p
wire x
=>
wire x%0
when p
wire x%1
We know that all new symbols are unique because they use a special character
At this point, all names are unique.
-- Bundle Expansion --
To deal with bundle expansion, use another different special character:
wire x : {a,b}
=>
wire x#a
wire x#b
-- Vector Expansion --
To deal with bundle expansion, use another different special character:
wire x : UInt<1>[3]
=>
wire x$0 : UInt<1>
wire x$1 : UInt<1>
wire x$2 : UInt<1>
-- Creating Temporaries --
To deal with creating temporaries, use another different special character:
node x = a + b * c
=>
node x!0 = b * c
node x!1 = a + x!0
node x = x!1
Finally, to deal with backends that only use subsets of the special characters, do another rename step to remove special characters (must remove $ again!)
ASCII Hex
_ 5F __
~ 7E _A
! 21 _B
@ 40 _C
# 23 _D
$ 24 _E
% 25 _F
^ 5E _G
* 2A _H
- 2D _I
+ 2B _J
= 3D _K
? 3F _L
/ 2F _M
|