|
13 | 13 | from amaranth.hdl._dsl import * |
14 | 14 | from amaranth.hdl._ir import * |
15 | 15 | from amaranth.sim import * |
| 16 | +from amaranth.sim._pyeval import eval_format |
16 | 17 | from amaranth.lib.memory import Memory |
17 | | -from amaranth.lib.data import View, StructLayout |
18 | | -from amaranth.lib import enum |
| 18 | +from amaranth.lib import enum, data |
19 | 19 |
|
20 | 20 | from .utils import * |
21 | 21 | from amaranth._utils import _ignore_deprecated |
@@ -1302,6 +1302,44 @@ def testbench(): |
1302 | 1302 | with sim.write_vcd("test.vcd", fs_per_delta=1): |
1303 | 1303 | sim.run() |
1304 | 1304 |
|
| 1305 | + def test_eval_format(self): |
| 1306 | + class MyEnum(enum.Enum, shape=2): |
| 1307 | + A = 0 |
| 1308 | + B = 1 |
| 1309 | + C = 2 |
| 1310 | + |
| 1311 | + sig = Signal(8) |
| 1312 | + sig2 = Signal(MyEnum) |
| 1313 | + sig3 = Signal(data.StructLayout({"a": signed(3), "b": 2})) |
| 1314 | + sig4 = Signal(data.ArrayLayout(2, 4)) |
| 1315 | + sig5 = Signal(32, init=0x44434241) |
| 1316 | + |
| 1317 | + def testbench(): |
| 1318 | + state = sim._engine._state |
| 1319 | + yield sig.eq(123) |
| 1320 | + self.assertEqual(eval_format(state, sig._format), "123") |
| 1321 | + self.assertEqual(eval_format(state, Format("{:#04x}", sig)), "0x7b") |
| 1322 | + self.assertEqual(eval_format(state, Format("sig={}", sig)), "sig=123") |
| 1323 | + |
| 1324 | + self.assertEqual(eval_format(state, sig2.as_value()._format), "A") |
| 1325 | + yield sig2.eq(1) |
| 1326 | + self.assertEqual(eval_format(state, sig2.as_value()._format), "B") |
| 1327 | + yield sig2.eq(3) |
| 1328 | + self.assertEqual(eval_format(state, sig2.as_value()._format), "[unknown]") |
| 1329 | + |
| 1330 | + yield sig3.eq(0xc) |
| 1331 | + self.assertEqual(eval_format(state, sig3.as_value()._format), "{a=-4, b=1}") |
| 1332 | + |
| 1333 | + yield sig4.eq(0x1e) |
| 1334 | + self.assertEqual(eval_format(state, sig4.as_value()._format), "[2, 3, 1, 0]") |
| 1335 | + |
| 1336 | + self.assertEqual(eval_format(state, Format("{:s}", sig5)), "ABCD") |
| 1337 | + self.assertEqual(eval_format(state, Format("{:<5s}", sig5)), "ABCD ") |
| 1338 | + |
| 1339 | + sim = Simulator(Module()) |
| 1340 | + sim.add_testbench(testbench) |
| 1341 | + with sim.write_vcd("test.vcd", fs_per_delta=1): |
| 1342 | + sim.run() |
1305 | 1343 |
|
1306 | 1344 | class SimulatorRegressionTestCase(FHDLTestCase): |
1307 | 1345 | def test_bug_325(self): |
|
0 commit comments