@@ -110,38 +110,37 @@ def elaborate(self, platform):
110
110
sim = Simulator (uart )
111
111
sim .add_clock (1e-6 )
112
112
113
- def loopback_proc ():
114
- yield Passive ()
115
- while True :
116
- yield uart .rx_i .eq ((yield uart .tx_o ))
117
- yield
118
- sim .add_sync_process (loopback_proc )
119
-
120
- def transmit_proc ():
121
- assert (yield uart .tx_ack )
122
- assert not (yield uart .rx_rdy )
123
-
124
- yield uart .tx_data .eq (0x5A )
125
- yield uart .tx_rdy .eq (1 )
126
- yield
127
- yield uart .tx_rdy .eq (0 )
128
- yield
129
- assert not (yield uart .tx_ack )
130
-
131
- for _ in range (uart .divisor * 12 ): yield
132
-
133
- assert (yield uart .tx_ack )
134
- assert (yield uart .rx_rdy )
135
- assert not (yield uart .rx_err )
136
- assert (yield uart .rx_data ) == 0x5A
137
-
138
- yield uart .rx_ack .eq (1 )
139
- yield
140
- yield uart .rx_ack .eq (0 )
141
- yield
142
- assert not (yield uart .rx_rdy )
143
-
144
- sim .add_sync_process (transmit_proc )
113
+ async def testbench_loopback (ctx ):
114
+ async for val in ctx .changed (uart .tx_o ):
115
+ ctx .set (uart .rx_i , val )
116
+
117
+ sim .add_testbench (testbench_loopback , background = True )
118
+
119
+ async def testbench_transmit (ctx ):
120
+ assert ctx .get (uart .tx_ack )
121
+ assert not ctx .get (uart .rx_rdy )
122
+
123
+ ctx .set (uart .tx_data , 0x5A )
124
+ ctx .set (uart .tx_rdy , 1 )
125
+ await ctx .tick ()
126
+ ctx .set (uart .tx_rdy , 0 )
127
+ await ctx .tick ()
128
+ assert not ctx .get (uart .tx_ack )
129
+
130
+ await ctx .tick ().repeat (uart .divisor * 12 )
131
+
132
+ assert ctx .get (uart .tx_ack )
133
+ assert ctx .get (uart .rx_rdy )
134
+ assert not ctx .get (uart .rx_err )
135
+ assert ctx .get (uart .rx_data ) == 0x5A
136
+
137
+ ctx .set (uart .rx_ack , 1 )
138
+ await ctx .tick ()
139
+ ctx .set (uart .rx_ack , 0 )
140
+ await ctx .tick ()
141
+ assert not ctx .get (uart .rx_rdy )
142
+
143
+ sim .add_testbench (testbench_transmit )
145
144
146
145
with sim .write_vcd ("uart.vcd" , "uart.gtkw" ):
147
146
sim .run ()
0 commit comments