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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
|
; RUN: firrtl -i %s -o %s.v -X verilog -p c 2>&1 | tee %s.out | FileCheck %s
;CHECK: Done!
circuit DecoupledAdderTests :
module NewDecoupledAdder :
input clock : Clock
input reset : UInt<1>
output io : {flip in : {flip ready : UInt<1>, valid : UInt<1>, bits : {a : UInt<16>, b : UInt<16>}}, out : {flip ready : UInt<1>, valid : UInt<1>, bits : {c : UInt<16>}}}
io.out.bits.c <= UInt<1>("h00")
io.out.valid <= UInt<1>("h00")
io.in.ready <= UInt<1>("h00")
reg ready : UInt<1>, clock with :
reset => ( reset, ready)
reg busy : UInt<1>, clock with :
reset => ( reset, busy)
reg a_reg : UInt<16>, clock with :
reset => ( reset, a_reg)
reg b_reg : UInt<16>, clock with :
reset => ( reset, b_reg)
io.in.ready <= ready
when io.in.valid :
a_reg <= io.in.bits.a
b_reg <= io.in.bits.b
io.in.ready <= UInt<1>("h00")
ready <= UInt<1>("h00")
busy <= UInt<1>("h01")
skip
node T_45 = and(busy, io.out.ready)
when T_45 :
node T_46 = tail(add(a_reg, b_reg),1)
io.out.bits.c <= T_46
io.out.valid <= UInt<1>("h01")
io.in.ready <= UInt<1>("h01")
busy <= UInt<1>("h00")
skip
module DecoupledAdderTests :
input clock : Clock
input reset : UInt<1>
output io : {}
inst device_under_test of NewDecoupledAdder
device_under_test.io.out.ready <= UInt<1>("h00")
device_under_test.io.in.bits.b <= UInt<1>("h00")
device_under_test.io.in.bits.a <= UInt<1>("h00")
device_under_test.io.in.valid <= UInt<1>("h00")
device_under_test.clock <= clock
device_under_test.reset <= reset
reg T_10 : UInt<33>, clock with :
reset => ( reset, UInt<33>("h00"))
node T_12 = tail(add(T_10, UInt<1>("h01")),1)
T_10 <= T_12
node T_14 = eq(reset, UInt<1>("h00"))
when T_14 :
printf(clock,UInt(1), "ticker %d", T_10)
skip
node T_16 = gt(T_10, UInt<7>("h064"))
when T_16 :
node T_18 = eq(reset, UInt<1>("h00"))
when T_18 :
stop(clock,UInt(1), 0)
skip
skip
node T_20 = eq(reset, UInt<1>("h00"))
when T_20 :
printf(clock,UInt(1), "device out ready %d, valid %d", device_under_test.io.out.ready, device_under_test.io.out.valid)
skip
node T_22 = eq(reset, UInt<1>("h00"))
when T_22 :
printf(clock,UInt(1), "device in ready %d, valid %d", device_under_test.io.in.ready, device_under_test.io.in.valid)
skip
reg T_24 : UInt<1>, clock with :
reset => ( reset, UInt<1>("h00"))
reg T_26 : UInt<1>, clock with :
reset => ( reset, UInt<1>("h00"))
node T_27 = and(T_24, T_26)
when T_27 :
node T_29 = eq(reset, UInt<1>("h00"))
when T_29 :
stop(clock,UInt(1), 0)
skip
skip
reg T_31 : UInt<1>, clock with :
reset => ( reset, UInt<1>("h00"))
reg T_33 : UInt<1>, clock with :
reset => ( reset, UInt<1>("h00"))
wire T_43 : {flip ready : UInt<1>, valid : UInt<1>, bits : {a : UInt<16>, b : UInt<16>}}[1]
T_43[0].bits.b <= UInt(0)
T_43[0].bits.a <= UInt(1)
T_43[0].valid <= UInt(1)
device_under_test.io.in <- T_43[0]
wire T_64 : UInt<16>[1]
T_64[0] <= UInt<16>("h04")
node T_68 = eq(T_24, UInt<1>("h00"))
node T_78 = and(T_68, T_43[T_31].ready)
when T_78 :
node T_80 = eq(reset, UInt<1>("h00"))
when T_80 :
printf(clock,UInt(1), "input_event_counter %d", T_31)
skip
device_under_test.io.in.bits.a <= T_64[T_31]
skip
wire T_84 : UInt<16>[1]
T_84[0] <= UInt<16>("h07")
node T_88 = eq(T_24, UInt<1>("h00"))
node T_98 = and(T_88, T_43[T_31].ready)
when T_98 :
node T_100 = eq(reset, UInt<1>("h00"))
when T_100 :
printf(clock,UInt(1), "input_event_counter %d", T_31)
skip
device_under_test.io.in.bits.b <= T_84[T_31]
skip
node T_103 = eq(T_24, UInt<1>("h00"))
node T_113 = and(T_103, T_43[T_31].ready)
when T_113 :
T_43[T_31].valid <= UInt<1>("h01")
node T_125 = tail(add(T_31, UInt<1>("h01")),1)
T_31 <= T_125
node T_127 = geq(T_31, UInt<1>("h00"))
T_24 <= T_127
skip
node T_129 = eq(T_26, UInt<1>("h00"))
when T_129 :
node T_131 = tail(add(T_33, UInt<1>("h01")),1)
T_33 <= T_131
node T_133 = geq(T_33, UInt<1>("h00"))
T_26 <= T_133
skip
wire T_136 : UInt<1>[1]
T_136[0] <= UInt<1>("h01")
wire T_141 : UInt<16>[1]
T_141[0] <= UInt<16>("h03")
node T_145 = eq(T_26, UInt<1>("h00"))
node T_147 = and(T_145, T_136[T_33])
node T_148 = and(T_147, device_under_test.io.out.valid)
when T_148 :
node T_150 = eq(reset, UInt<1>("h00"))
when T_150 :
printf(clock,UInt(1), "output_event_counter %d", T_33)
skip
node T_152 = neq(device_under_test.io.out.bits.c, T_141[T_33])
when T_152 :
node T_155 = eq(reset, UInt<1>("h00"))
when T_155 :
printf(clock,UInt(1), "Error: event %d out.bits.c was %x should be %x", T_33, device_under_test.io.out.bits.c, T_141[T_33])
skip
skip
skip
|