aboutsummaryrefslogtreecommitdiff
path: root/notes/notes.03.18.15.txt
blob: 7fdb1c3b6842281c653c5a74f1a3800983cf5224 (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
WHEN EXPANSION

Goal:
reg r
wire w
when p1 :
  w := b
  r.init := x
    when p2 :
      w := c
      r := d
r := e

==>

1. Remove last connect semantics
2. Remove conditional blocks
3. Eliminate concept of scoping

Exp    | Value
--------------
r      | e
w      | mux(p1,mux(p2,c,b),null)
r.init | mux(p1,x,null)

==>

Symbolic Value - what can appear in value column
sv = e
   | null
   | svmux(e,sv1,sv2)

State:
{
  r => void
  r.init => p1
  w => svmux(e,_,_)
}

==>

Build two tables, one mapping symbols to symbolic values, and another mapping symbols to declared types

if w is a wire:
merge {r=>x, w=>y} with {r=>x} under p : {r=>svmux(p,x,x), w=>y}

if s is a reg:
merge {r=>x,s=>y} with {r=>x} under p : {r=>svmux(p,x,x), s=>svmux(p,y,void)}