tests/sim: split expected output text into separate files
This commit is contained in:
parent
643816d5b5
commit
259bee39c2
File diff suppressed because it is too large
Load diff
130
crates/fayalite/tests/sim/expected/connect_const.txt
Normal file
130
crates/fayalite/tests/sim/expected/connect_const.txt
Normal file
|
@ -0,0 +1,130 @@
|
||||||
|
Simulation {
|
||||||
|
state: State {
|
||||||
|
insns: Insns {
|
||||||
|
state_layout: StateLayout {
|
||||||
|
ty: TypeLayout {
|
||||||
|
small_slots: StatePartAllocationLayout<SmallSlots> {
|
||||||
|
len: 0,
|
||||||
|
debug_data: [],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
big_slots: StatePartAllocationLayout<BigSlots> {
|
||||||
|
len: 2,
|
||||||
|
debug_data: [
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(connect_const: connect_const).connect_const::o",
|
||||||
|
ty: UInt<8>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: UInt<8>,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
insns: [
|
||||||
|
// at: module-XXXXXXXXXX.rs:1:1
|
||||||
|
Const {
|
||||||
|
dest: StatePartIndex<BigSlots>(1), // SlotDebugData { name: "", ty: UInt<8> },
|
||||||
|
value: 5,
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:3:1
|
||||||
|
Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(0), // SlotDebugData { name: "InstantiatedModule(connect_const: connect_const).connect_const::o", ty: UInt<8> },
|
||||||
|
src: StatePartIndex<BigSlots>(1), // SlotDebugData { name: "", ty: UInt<8> },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:1:1
|
||||||
|
Return,
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
pc: 2,
|
||||||
|
small_slots: StatePart {
|
||||||
|
value: [],
|
||||||
|
},
|
||||||
|
big_slots: StatePart {
|
||||||
|
value: [
|
||||||
|
5,
|
||||||
|
5,
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
io: Instance {
|
||||||
|
name: <simulator>::connect_const,
|
||||||
|
instantiated: Module {
|
||||||
|
name: connect_const,
|
||||||
|
..
|
||||||
|
},
|
||||||
|
},
|
||||||
|
uninitialized_inputs: {},
|
||||||
|
io_targets: {
|
||||||
|
Instance {
|
||||||
|
name: <simulator>::connect_const,
|
||||||
|
instantiated: Module {
|
||||||
|
name: connect_const,
|
||||||
|
..
|
||||||
|
},
|
||||||
|
}.o: CompiledValue {
|
||||||
|
layout: CompiledTypeLayout {
|
||||||
|
ty: UInt<8>,
|
||||||
|
layout: TypeLayout {
|
||||||
|
small_slots: StatePartAllocationLayout<SmallSlots> {
|
||||||
|
len: 0,
|
||||||
|
debug_data: [],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
big_slots: StatePartAllocationLayout<BigSlots> {
|
||||||
|
len: 1,
|
||||||
|
debug_data: [
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(connect_const: connect_const).connect_const::o",
|
||||||
|
ty: UInt<8>,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
},
|
||||||
|
body: Scalar,
|
||||||
|
},
|
||||||
|
range: TypeIndexRange {
|
||||||
|
small_slots: StatePartIndexRange<SmallSlots> { start: 0, len: 0 },
|
||||||
|
big_slots: StatePartIndexRange<BigSlots> { start: 0, len: 1 },
|
||||||
|
},
|
||||||
|
write: None,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
made_initial_step: true,
|
||||||
|
needs_settle: false,
|
||||||
|
trace_decls: TraceModule {
|
||||||
|
name: "connect_const",
|
||||||
|
children: [
|
||||||
|
TraceModuleIO {
|
||||||
|
name: "o",
|
||||||
|
child: TraceUInt {
|
||||||
|
id: TraceScalarId(0),
|
||||||
|
name: "o",
|
||||||
|
ty: UInt<8>,
|
||||||
|
flow: Sink,
|
||||||
|
},
|
||||||
|
ty: UInt<8>,
|
||||||
|
flow: Sink,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
traces: [
|
||||||
|
SimTrace {
|
||||||
|
id: TraceScalarId(0),
|
||||||
|
kind: BigUInt {
|
||||||
|
index: StatePartIndex<BigSlots>(0),
|
||||||
|
ty: UInt<8>,
|
||||||
|
},
|
||||||
|
state: 0x05,
|
||||||
|
last_state: 0x05,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
trace_writers: [],
|
||||||
|
instant: 0 s,
|
||||||
|
clocks_triggered: [],
|
||||||
|
}
|
217
crates/fayalite/tests/sim/expected/connect_const_reset.txt
Normal file
217
crates/fayalite/tests/sim/expected/connect_const_reset.txt
Normal file
|
@ -0,0 +1,217 @@
|
||||||
|
Simulation {
|
||||||
|
state: State {
|
||||||
|
insns: Insns {
|
||||||
|
state_layout: StateLayout {
|
||||||
|
ty: TypeLayout {
|
||||||
|
small_slots: StatePartAllocationLayout<SmallSlots> {
|
||||||
|
len: 0,
|
||||||
|
debug_data: [],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
big_slots: StatePartAllocationLayout<BigSlots> {
|
||||||
|
len: 5,
|
||||||
|
debug_data: [
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(connect_const_reset: connect_const_reset).connect_const_reset::reset_out",
|
||||||
|
ty: AsyncReset,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(connect_const_reset: connect_const_reset).connect_const_reset::bit_out",
|
||||||
|
ty: Bool,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: Bool,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: AsyncReset,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: Bool,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
insns: [
|
||||||
|
// at: module-XXXXXXXXXX.rs:1:1
|
||||||
|
Const {
|
||||||
|
dest: StatePartIndex<BigSlots>(2), // SlotDebugData { name: "", ty: Bool },
|
||||||
|
value: 1,
|
||||||
|
},
|
||||||
|
Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(3), // SlotDebugData { name: "", ty: AsyncReset },
|
||||||
|
src: StatePartIndex<BigSlots>(2), // SlotDebugData { name: "", ty: Bool },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:4:1
|
||||||
|
Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(0), // SlotDebugData { name: "InstantiatedModule(connect_const_reset: connect_const_reset).connect_const_reset::reset_out", ty: AsyncReset },
|
||||||
|
src: StatePartIndex<BigSlots>(3), // SlotDebugData { name: "", ty: AsyncReset },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:1:1
|
||||||
|
Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(4), // SlotDebugData { name: "", ty: Bool },
|
||||||
|
src: StatePartIndex<BigSlots>(0), // SlotDebugData { name: "InstantiatedModule(connect_const_reset: connect_const_reset).connect_const_reset::reset_out", ty: AsyncReset },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:5:1
|
||||||
|
Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(1), // SlotDebugData { name: "InstantiatedModule(connect_const_reset: connect_const_reset).connect_const_reset::bit_out", ty: Bool },
|
||||||
|
src: StatePartIndex<BigSlots>(4), // SlotDebugData { name: "", ty: Bool },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:1:1
|
||||||
|
Return,
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
pc: 5,
|
||||||
|
small_slots: StatePart {
|
||||||
|
value: [],
|
||||||
|
},
|
||||||
|
big_slots: StatePart {
|
||||||
|
value: [
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
io: Instance {
|
||||||
|
name: <simulator>::connect_const_reset,
|
||||||
|
instantiated: Module {
|
||||||
|
name: connect_const_reset,
|
||||||
|
..
|
||||||
|
},
|
||||||
|
},
|
||||||
|
uninitialized_inputs: {},
|
||||||
|
io_targets: {
|
||||||
|
Instance {
|
||||||
|
name: <simulator>::connect_const_reset,
|
||||||
|
instantiated: Module {
|
||||||
|
name: connect_const_reset,
|
||||||
|
..
|
||||||
|
},
|
||||||
|
}.bit_out: CompiledValue {
|
||||||
|
layout: CompiledTypeLayout {
|
||||||
|
ty: Bool,
|
||||||
|
layout: TypeLayout {
|
||||||
|
small_slots: StatePartAllocationLayout<SmallSlots> {
|
||||||
|
len: 0,
|
||||||
|
debug_data: [],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
big_slots: StatePartAllocationLayout<BigSlots> {
|
||||||
|
len: 1,
|
||||||
|
debug_data: [
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(connect_const_reset: connect_const_reset).connect_const_reset::bit_out",
|
||||||
|
ty: Bool,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
},
|
||||||
|
body: Scalar,
|
||||||
|
},
|
||||||
|
range: TypeIndexRange {
|
||||||
|
small_slots: StatePartIndexRange<SmallSlots> { start: 0, len: 0 },
|
||||||
|
big_slots: StatePartIndexRange<BigSlots> { start: 1, len: 1 },
|
||||||
|
},
|
||||||
|
write: None,
|
||||||
|
},
|
||||||
|
Instance {
|
||||||
|
name: <simulator>::connect_const_reset,
|
||||||
|
instantiated: Module {
|
||||||
|
name: connect_const_reset,
|
||||||
|
..
|
||||||
|
},
|
||||||
|
}.reset_out: CompiledValue {
|
||||||
|
layout: CompiledTypeLayout {
|
||||||
|
ty: AsyncReset,
|
||||||
|
layout: TypeLayout {
|
||||||
|
small_slots: StatePartAllocationLayout<SmallSlots> {
|
||||||
|
len: 0,
|
||||||
|
debug_data: [],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
big_slots: StatePartAllocationLayout<BigSlots> {
|
||||||
|
len: 1,
|
||||||
|
debug_data: [
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(connect_const_reset: connect_const_reset).connect_const_reset::reset_out",
|
||||||
|
ty: AsyncReset,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
},
|
||||||
|
body: Scalar,
|
||||||
|
},
|
||||||
|
range: TypeIndexRange {
|
||||||
|
small_slots: StatePartIndexRange<SmallSlots> { start: 0, len: 0 },
|
||||||
|
big_slots: StatePartIndexRange<BigSlots> { start: 0, len: 1 },
|
||||||
|
},
|
||||||
|
write: None,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
made_initial_step: true,
|
||||||
|
needs_settle: false,
|
||||||
|
trace_decls: TraceModule {
|
||||||
|
name: "connect_const_reset",
|
||||||
|
children: [
|
||||||
|
TraceModuleIO {
|
||||||
|
name: "reset_out",
|
||||||
|
child: TraceAsyncReset {
|
||||||
|
id: TraceScalarId(0),
|
||||||
|
name: "reset_out",
|
||||||
|
flow: Sink,
|
||||||
|
},
|
||||||
|
ty: AsyncReset,
|
||||||
|
flow: Sink,
|
||||||
|
},
|
||||||
|
TraceModuleIO {
|
||||||
|
name: "bit_out",
|
||||||
|
child: TraceBool {
|
||||||
|
id: TraceScalarId(1),
|
||||||
|
name: "bit_out",
|
||||||
|
flow: Sink,
|
||||||
|
},
|
||||||
|
ty: Bool,
|
||||||
|
flow: Sink,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
traces: [
|
||||||
|
SimTrace {
|
||||||
|
id: TraceScalarId(0),
|
||||||
|
kind: BigAsyncReset {
|
||||||
|
index: StatePartIndex<BigSlots>(0),
|
||||||
|
},
|
||||||
|
state: 0x1,
|
||||||
|
last_state: 0x1,
|
||||||
|
},
|
||||||
|
SimTrace {
|
||||||
|
id: TraceScalarId(1),
|
||||||
|
kind: BigBool {
|
||||||
|
index: StatePartIndex<BigSlots>(1),
|
||||||
|
},
|
||||||
|
state: 0x1,
|
||||||
|
last_state: 0x1,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
trace_writers: [
|
||||||
|
Running(
|
||||||
|
VcdWriter {
|
||||||
|
finished_init: true,
|
||||||
|
timescale: 1 ps,
|
||||||
|
..
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
instant: 1 μs,
|
||||||
|
clocks_triggered: [],
|
||||||
|
}
|
11
crates/fayalite/tests/sim/expected/connect_const_reset.vcd
Normal file
11
crates/fayalite/tests/sim/expected/connect_const_reset.vcd
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
$timescale 1 ps $end
|
||||||
|
$scope module connect_const_reset $end
|
||||||
|
$var wire 1 ! reset_out $end
|
||||||
|
$var wire 1 " bit_out $end
|
||||||
|
$upscope $end
|
||||||
|
$enddefinitions $end
|
||||||
|
$dumpvars
|
||||||
|
1!
|
||||||
|
1"
|
||||||
|
$end
|
||||||
|
#1000000
|
509
crates/fayalite/tests/sim/expected/counter_async.txt
Normal file
509
crates/fayalite/tests/sim/expected/counter_async.txt
Normal file
|
@ -0,0 +1,509 @@
|
||||||
|
Simulation {
|
||||||
|
state: State {
|
||||||
|
insns: Insns {
|
||||||
|
state_layout: StateLayout {
|
||||||
|
ty: TypeLayout {
|
||||||
|
small_slots: StatePartAllocationLayout<SmallSlots> {
|
||||||
|
len: 4,
|
||||||
|
debug_data: [
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: Bool,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: Bool,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: Bool,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: Bool,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
big_slots: StatePartAllocationLayout<BigSlots> {
|
||||||
|
len: 10,
|
||||||
|
debug_data: [
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(counter: counter).counter::cd.clk",
|
||||||
|
ty: Clock,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(counter: counter).counter::cd.rst",
|
||||||
|
ty: AsyncReset,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(counter: counter).counter::count",
|
||||||
|
ty: UInt<4>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(counter: counter).counter::count_reg",
|
||||||
|
ty: UInt<4>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(counter: counter).counter::count_reg$next",
|
||||||
|
ty: UInt<4>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: UInt<4>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: Bool,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: UInt<1>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: UInt<5>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: UInt<4>,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
insns: [
|
||||||
|
// at: module-XXXXXXXXXX.rs:1:1
|
||||||
|
Const {
|
||||||
|
dest: StatePartIndex<BigSlots>(7), // SlotDebugData { name: "", ty: UInt<1> },
|
||||||
|
value: 1,
|
||||||
|
},
|
||||||
|
Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(6), // SlotDebugData { name: "", ty: Bool },
|
||||||
|
src: StatePartIndex<BigSlots>(1), // SlotDebugData { name: "InstantiatedModule(counter: counter).counter::cd.rst", ty: AsyncReset },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:3:1
|
||||||
|
IsNonZeroDestIsSmall {
|
||||||
|
dest: StatePartIndex<SmallSlots>(3), // SlotDebugData { name: "", ty: Bool },
|
||||||
|
src: StatePartIndex<BigSlots>(1), // SlotDebugData { name: "InstantiatedModule(counter: counter).counter::cd.rst", ty: AsyncReset },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:1:1
|
||||||
|
Const {
|
||||||
|
dest: StatePartIndex<BigSlots>(5), // SlotDebugData { name: "", ty: UInt<4> },
|
||||||
|
value: 3,
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:3:1
|
||||||
|
BranchIfZero {
|
||||||
|
target: 6,
|
||||||
|
value: StatePartIndex<BigSlots>(6), // SlotDebugData { name: "", ty: Bool },
|
||||||
|
},
|
||||||
|
Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(3), // SlotDebugData { name: "InstantiatedModule(counter: counter).counter::count_reg", ty: UInt<4> },
|
||||||
|
src: StatePartIndex<BigSlots>(5), // SlotDebugData { name: "", ty: UInt<4> },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:1:1
|
||||||
|
Add {
|
||||||
|
dest: StatePartIndex<BigSlots>(8), // SlotDebugData { name: "", ty: UInt<5> },
|
||||||
|
lhs: StatePartIndex<BigSlots>(3), // SlotDebugData { name: "InstantiatedModule(counter: counter).counter::count_reg", ty: UInt<4> },
|
||||||
|
rhs: StatePartIndex<BigSlots>(7), // SlotDebugData { name: "", ty: UInt<1> },
|
||||||
|
},
|
||||||
|
CastToUInt {
|
||||||
|
dest: StatePartIndex<BigSlots>(9), // SlotDebugData { name: "", ty: UInt<4> },
|
||||||
|
src: StatePartIndex<BigSlots>(8), // SlotDebugData { name: "", ty: UInt<5> },
|
||||||
|
dest_width: 4,
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:4:1
|
||||||
|
Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(4), // SlotDebugData { name: "InstantiatedModule(counter: counter).counter::count_reg$next", ty: UInt<4> },
|
||||||
|
src: StatePartIndex<BigSlots>(9), // SlotDebugData { name: "", ty: UInt<4> },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:6:1
|
||||||
|
Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(2), // SlotDebugData { name: "InstantiatedModule(counter: counter).counter::count", ty: UInt<4> },
|
||||||
|
src: StatePartIndex<BigSlots>(3), // SlotDebugData { name: "InstantiatedModule(counter: counter).counter::count_reg", ty: UInt<4> },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:3:1
|
||||||
|
IsNonZeroDestIsSmall {
|
||||||
|
dest: StatePartIndex<SmallSlots>(2), // SlotDebugData { name: "", ty: Bool },
|
||||||
|
src: StatePartIndex<BigSlots>(0), // SlotDebugData { name: "InstantiatedModule(counter: counter).counter::cd.clk", ty: Clock },
|
||||||
|
},
|
||||||
|
AndSmall {
|
||||||
|
dest: StatePartIndex<SmallSlots>(1), // SlotDebugData { name: "", ty: Bool },
|
||||||
|
lhs: StatePartIndex<SmallSlots>(2), // SlotDebugData { name: "", ty: Bool },
|
||||||
|
rhs: StatePartIndex<SmallSlots>(0), // SlotDebugData { name: "", ty: Bool },
|
||||||
|
},
|
||||||
|
BranchIfSmallNonZero {
|
||||||
|
target: 16,
|
||||||
|
value: StatePartIndex<SmallSlots>(3), // SlotDebugData { name: "", ty: Bool },
|
||||||
|
},
|
||||||
|
BranchIfSmallZero {
|
||||||
|
target: 17,
|
||||||
|
value: StatePartIndex<SmallSlots>(1), // SlotDebugData { name: "", ty: Bool },
|
||||||
|
},
|
||||||
|
Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(3), // SlotDebugData { name: "InstantiatedModule(counter: counter).counter::count_reg", ty: UInt<4> },
|
||||||
|
src: StatePartIndex<BigSlots>(4), // SlotDebugData { name: "InstantiatedModule(counter: counter).counter::count_reg$next", ty: UInt<4> },
|
||||||
|
},
|
||||||
|
Branch {
|
||||||
|
target: 17,
|
||||||
|
},
|
||||||
|
Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(3), // SlotDebugData { name: "InstantiatedModule(counter: counter).counter::count_reg", ty: UInt<4> },
|
||||||
|
src: StatePartIndex<BigSlots>(5), // SlotDebugData { name: "", ty: UInt<4> },
|
||||||
|
},
|
||||||
|
NotSmall {
|
||||||
|
dest: StatePartIndex<SmallSlots>(0), // SlotDebugData { name: "", ty: Bool },
|
||||||
|
src: StatePartIndex<SmallSlots>(2), // SlotDebugData { name: "", ty: Bool },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:1:1
|
||||||
|
Return,
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
pc: 18,
|
||||||
|
small_slots: StatePart {
|
||||||
|
value: [
|
||||||
|
18446744073709551614,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
],
|
||||||
|
},
|
||||||
|
big_slots: StatePart {
|
||||||
|
value: [
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
3,
|
||||||
|
3,
|
||||||
|
4,
|
||||||
|
3,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
4,
|
||||||
|
4,
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
io: Instance {
|
||||||
|
name: <simulator>::counter,
|
||||||
|
instantiated: Module {
|
||||||
|
name: counter,
|
||||||
|
..
|
||||||
|
},
|
||||||
|
},
|
||||||
|
uninitialized_inputs: {},
|
||||||
|
io_targets: {
|
||||||
|
Instance {
|
||||||
|
name: <simulator>::counter,
|
||||||
|
instantiated: Module {
|
||||||
|
name: counter,
|
||||||
|
..
|
||||||
|
},
|
||||||
|
}.cd: CompiledValue {
|
||||||
|
layout: CompiledTypeLayout {
|
||||||
|
ty: Bundle {
|
||||||
|
/* offset = 0 */
|
||||||
|
clk: Clock,
|
||||||
|
/* offset = 1 */
|
||||||
|
rst: AsyncReset,
|
||||||
|
},
|
||||||
|
layout: TypeLayout {
|
||||||
|
small_slots: StatePartAllocationLayout<SmallSlots> {
|
||||||
|
len: 0,
|
||||||
|
debug_data: [],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
big_slots: StatePartAllocationLayout<BigSlots> {
|
||||||
|
len: 2,
|
||||||
|
debug_data: [
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(counter: counter).counter::cd.clk",
|
||||||
|
ty: Clock,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(counter: counter).counter::cd.rst",
|
||||||
|
ty: AsyncReset,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
},
|
||||||
|
body: Bundle {
|
||||||
|
fields: [
|
||||||
|
CompiledBundleField {
|
||||||
|
offset: TypeIndex {
|
||||||
|
small_slots: StatePartIndex<SmallSlots>(0),
|
||||||
|
big_slots: StatePartIndex<BigSlots>(0),
|
||||||
|
},
|
||||||
|
ty: CompiledTypeLayout {
|
||||||
|
ty: Clock,
|
||||||
|
layout: TypeLayout {
|
||||||
|
small_slots: StatePartAllocationLayout<SmallSlots> {
|
||||||
|
len: 0,
|
||||||
|
debug_data: [],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
big_slots: StatePartAllocationLayout<BigSlots> {
|
||||||
|
len: 1,
|
||||||
|
debug_data: [
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: Clock,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
},
|
||||||
|
body: Scalar,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
CompiledBundleField {
|
||||||
|
offset: TypeIndex {
|
||||||
|
small_slots: StatePartIndex<SmallSlots>(0),
|
||||||
|
big_slots: StatePartIndex<BigSlots>(1),
|
||||||
|
},
|
||||||
|
ty: CompiledTypeLayout {
|
||||||
|
ty: AsyncReset,
|
||||||
|
layout: TypeLayout {
|
||||||
|
small_slots: StatePartAllocationLayout<SmallSlots> {
|
||||||
|
len: 0,
|
||||||
|
debug_data: [],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
big_slots: StatePartAllocationLayout<BigSlots> {
|
||||||
|
len: 1,
|
||||||
|
debug_data: [
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: AsyncReset,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
},
|
||||||
|
body: Scalar,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
range: TypeIndexRange {
|
||||||
|
small_slots: StatePartIndexRange<SmallSlots> { start: 0, len: 0 },
|
||||||
|
big_slots: StatePartIndexRange<BigSlots> { start: 0, len: 2 },
|
||||||
|
},
|
||||||
|
write: None,
|
||||||
|
},
|
||||||
|
Instance {
|
||||||
|
name: <simulator>::counter,
|
||||||
|
instantiated: Module {
|
||||||
|
name: counter,
|
||||||
|
..
|
||||||
|
},
|
||||||
|
}.cd.clk: CompiledValue {
|
||||||
|
layout: CompiledTypeLayout {
|
||||||
|
ty: Clock,
|
||||||
|
layout: TypeLayout {
|
||||||
|
small_slots: StatePartAllocationLayout<SmallSlots> {
|
||||||
|
len: 0,
|
||||||
|
debug_data: [],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
big_slots: StatePartAllocationLayout<BigSlots> {
|
||||||
|
len: 1,
|
||||||
|
debug_data: [
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: Clock,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
},
|
||||||
|
body: Scalar,
|
||||||
|
},
|
||||||
|
range: TypeIndexRange {
|
||||||
|
small_slots: StatePartIndexRange<SmallSlots> { start: 0, len: 0 },
|
||||||
|
big_slots: StatePartIndexRange<BigSlots> { start: 0, len: 1 },
|
||||||
|
},
|
||||||
|
write: None,
|
||||||
|
},
|
||||||
|
Instance {
|
||||||
|
name: <simulator>::counter,
|
||||||
|
instantiated: Module {
|
||||||
|
name: counter,
|
||||||
|
..
|
||||||
|
},
|
||||||
|
}.cd.rst: CompiledValue {
|
||||||
|
layout: CompiledTypeLayout {
|
||||||
|
ty: AsyncReset,
|
||||||
|
layout: TypeLayout {
|
||||||
|
small_slots: StatePartAllocationLayout<SmallSlots> {
|
||||||
|
len: 0,
|
||||||
|
debug_data: [],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
big_slots: StatePartAllocationLayout<BigSlots> {
|
||||||
|
len: 1,
|
||||||
|
debug_data: [
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: AsyncReset,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
},
|
||||||
|
body: Scalar,
|
||||||
|
},
|
||||||
|
range: TypeIndexRange {
|
||||||
|
small_slots: StatePartIndexRange<SmallSlots> { start: 0, len: 0 },
|
||||||
|
big_slots: StatePartIndexRange<BigSlots> { start: 1, len: 1 },
|
||||||
|
},
|
||||||
|
write: None,
|
||||||
|
},
|
||||||
|
Instance {
|
||||||
|
name: <simulator>::counter,
|
||||||
|
instantiated: Module {
|
||||||
|
name: counter,
|
||||||
|
..
|
||||||
|
},
|
||||||
|
}.count: CompiledValue {
|
||||||
|
layout: CompiledTypeLayout {
|
||||||
|
ty: UInt<4>,
|
||||||
|
layout: TypeLayout {
|
||||||
|
small_slots: StatePartAllocationLayout<SmallSlots> {
|
||||||
|
len: 0,
|
||||||
|
debug_data: [],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
big_slots: StatePartAllocationLayout<BigSlots> {
|
||||||
|
len: 1,
|
||||||
|
debug_data: [
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(counter: counter).counter::count",
|
||||||
|
ty: UInt<4>,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
},
|
||||||
|
body: Scalar,
|
||||||
|
},
|
||||||
|
range: TypeIndexRange {
|
||||||
|
small_slots: StatePartIndexRange<SmallSlots> { start: 0, len: 0 },
|
||||||
|
big_slots: StatePartIndexRange<BigSlots> { start: 2, len: 1 },
|
||||||
|
},
|
||||||
|
write: None,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
made_initial_step: true,
|
||||||
|
needs_settle: false,
|
||||||
|
trace_decls: TraceModule {
|
||||||
|
name: "counter",
|
||||||
|
children: [
|
||||||
|
TraceModuleIO {
|
||||||
|
name: "cd",
|
||||||
|
child: TraceBundle {
|
||||||
|
name: "cd",
|
||||||
|
fields: [
|
||||||
|
TraceClock {
|
||||||
|
id: TraceScalarId(0),
|
||||||
|
name: "clk",
|
||||||
|
flow: Source,
|
||||||
|
},
|
||||||
|
TraceAsyncReset {
|
||||||
|
id: TraceScalarId(1),
|
||||||
|
name: "rst",
|
||||||
|
flow: Source,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
ty: Bundle {
|
||||||
|
/* offset = 0 */
|
||||||
|
clk: Clock,
|
||||||
|
/* offset = 1 */
|
||||||
|
rst: AsyncReset,
|
||||||
|
},
|
||||||
|
flow: Source,
|
||||||
|
},
|
||||||
|
ty: Bundle {
|
||||||
|
/* offset = 0 */
|
||||||
|
clk: Clock,
|
||||||
|
/* offset = 1 */
|
||||||
|
rst: AsyncReset,
|
||||||
|
},
|
||||||
|
flow: Source,
|
||||||
|
},
|
||||||
|
TraceModuleIO {
|
||||||
|
name: "count",
|
||||||
|
child: TraceUInt {
|
||||||
|
id: TraceScalarId(2),
|
||||||
|
name: "count",
|
||||||
|
ty: UInt<4>,
|
||||||
|
flow: Sink,
|
||||||
|
},
|
||||||
|
ty: UInt<4>,
|
||||||
|
flow: Sink,
|
||||||
|
},
|
||||||
|
TraceReg {
|
||||||
|
name: "count_reg",
|
||||||
|
child: TraceUInt {
|
||||||
|
id: TraceScalarId(3),
|
||||||
|
name: "count_reg",
|
||||||
|
ty: UInt<4>,
|
||||||
|
flow: Duplex,
|
||||||
|
},
|
||||||
|
ty: UInt<4>,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
traces: [
|
||||||
|
SimTrace {
|
||||||
|
id: TraceScalarId(0),
|
||||||
|
kind: BigClock {
|
||||||
|
index: StatePartIndex<BigSlots>(0),
|
||||||
|
},
|
||||||
|
state: 0x1,
|
||||||
|
last_state: 0x1,
|
||||||
|
},
|
||||||
|
SimTrace {
|
||||||
|
id: TraceScalarId(1),
|
||||||
|
kind: BigAsyncReset {
|
||||||
|
index: StatePartIndex<BigSlots>(1),
|
||||||
|
},
|
||||||
|
state: 0x0,
|
||||||
|
last_state: 0x0,
|
||||||
|
},
|
||||||
|
SimTrace {
|
||||||
|
id: TraceScalarId(2),
|
||||||
|
kind: BigUInt {
|
||||||
|
index: StatePartIndex<BigSlots>(2),
|
||||||
|
ty: UInt<4>,
|
||||||
|
},
|
||||||
|
state: 0x3,
|
||||||
|
last_state: 0x2,
|
||||||
|
},
|
||||||
|
SimTrace {
|
||||||
|
id: TraceScalarId(3),
|
||||||
|
kind: BigUInt {
|
||||||
|
index: StatePartIndex<BigSlots>(3),
|
||||||
|
ty: UInt<4>,
|
||||||
|
},
|
||||||
|
state: 0x3,
|
||||||
|
last_state: 0x3,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
trace_writers: [
|
||||||
|
Running(
|
||||||
|
VcdWriter {
|
||||||
|
finished_init: true,
|
||||||
|
timescale: 1 ps,
|
||||||
|
..
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
instant: 66 μs,
|
||||||
|
clocks_triggered: [
|
||||||
|
StatePartIndex<SmallSlots>(1),
|
||||||
|
],
|
||||||
|
}
|
217
crates/fayalite/tests/sim/expected/counter_async.vcd
Normal file
217
crates/fayalite/tests/sim/expected/counter_async.vcd
Normal file
|
@ -0,0 +1,217 @@
|
||||||
|
$timescale 1 ps $end
|
||||||
|
$scope module counter $end
|
||||||
|
$scope struct cd $end
|
||||||
|
$var wire 1 ! clk $end
|
||||||
|
$var wire 1 " rst $end
|
||||||
|
$upscope $end
|
||||||
|
$var wire 4 # count $end
|
||||||
|
$var reg 4 $ count_reg $end
|
||||||
|
$upscope $end
|
||||||
|
$enddefinitions $end
|
||||||
|
$dumpvars
|
||||||
|
0!
|
||||||
|
0"
|
||||||
|
b0 #
|
||||||
|
b0 $
|
||||||
|
$end
|
||||||
|
#500000
|
||||||
|
1"
|
||||||
|
b11 #
|
||||||
|
b11 $
|
||||||
|
#1000000
|
||||||
|
1!
|
||||||
|
#1500000
|
||||||
|
0"
|
||||||
|
#2000000
|
||||||
|
0!
|
||||||
|
#3000000
|
||||||
|
1!
|
||||||
|
b100 $
|
||||||
|
b100 #
|
||||||
|
#4000000
|
||||||
|
0!
|
||||||
|
#5000000
|
||||||
|
1!
|
||||||
|
b101 $
|
||||||
|
b101 #
|
||||||
|
#6000000
|
||||||
|
0!
|
||||||
|
#7000000
|
||||||
|
1!
|
||||||
|
b110 $
|
||||||
|
b110 #
|
||||||
|
#8000000
|
||||||
|
0!
|
||||||
|
#9000000
|
||||||
|
1!
|
||||||
|
b111 $
|
||||||
|
b111 #
|
||||||
|
#10000000
|
||||||
|
0!
|
||||||
|
#11000000
|
||||||
|
1!
|
||||||
|
b1000 $
|
||||||
|
b1000 #
|
||||||
|
#12000000
|
||||||
|
0!
|
||||||
|
#13000000
|
||||||
|
1!
|
||||||
|
b1001 $
|
||||||
|
b1001 #
|
||||||
|
#14000000
|
||||||
|
0!
|
||||||
|
#15000000
|
||||||
|
1!
|
||||||
|
b1010 $
|
||||||
|
b1010 #
|
||||||
|
#16000000
|
||||||
|
0!
|
||||||
|
#17000000
|
||||||
|
1!
|
||||||
|
b1011 $
|
||||||
|
b1011 #
|
||||||
|
#18000000
|
||||||
|
0!
|
||||||
|
#19000000
|
||||||
|
1!
|
||||||
|
b1100 $
|
||||||
|
b1100 #
|
||||||
|
#20000000
|
||||||
|
0!
|
||||||
|
#21000000
|
||||||
|
1!
|
||||||
|
b1101 $
|
||||||
|
b1101 #
|
||||||
|
#22000000
|
||||||
|
0!
|
||||||
|
#23000000
|
||||||
|
1!
|
||||||
|
b1110 $
|
||||||
|
b1110 #
|
||||||
|
#24000000
|
||||||
|
0!
|
||||||
|
#25000000
|
||||||
|
1!
|
||||||
|
b1111 $
|
||||||
|
b1111 #
|
||||||
|
#26000000
|
||||||
|
0!
|
||||||
|
#27000000
|
||||||
|
1!
|
||||||
|
b0 $
|
||||||
|
b0 #
|
||||||
|
#28000000
|
||||||
|
0!
|
||||||
|
#29000000
|
||||||
|
1!
|
||||||
|
b1 $
|
||||||
|
b1 #
|
||||||
|
#30000000
|
||||||
|
0!
|
||||||
|
#31000000
|
||||||
|
1!
|
||||||
|
b10 $
|
||||||
|
b10 #
|
||||||
|
#32000000
|
||||||
|
0!
|
||||||
|
#33000000
|
||||||
|
1!
|
||||||
|
b11 $
|
||||||
|
b11 #
|
||||||
|
#34000000
|
||||||
|
0!
|
||||||
|
#35000000
|
||||||
|
1!
|
||||||
|
b100 $
|
||||||
|
b100 #
|
||||||
|
#36000000
|
||||||
|
0!
|
||||||
|
#37000000
|
||||||
|
1!
|
||||||
|
b101 $
|
||||||
|
b101 #
|
||||||
|
#38000000
|
||||||
|
0!
|
||||||
|
#39000000
|
||||||
|
1!
|
||||||
|
b110 $
|
||||||
|
b110 #
|
||||||
|
#40000000
|
||||||
|
0!
|
||||||
|
#41000000
|
||||||
|
1!
|
||||||
|
b111 $
|
||||||
|
b111 #
|
||||||
|
#42000000
|
||||||
|
0!
|
||||||
|
#43000000
|
||||||
|
1!
|
||||||
|
b1000 $
|
||||||
|
b1000 #
|
||||||
|
#44000000
|
||||||
|
0!
|
||||||
|
#45000000
|
||||||
|
1!
|
||||||
|
b1001 $
|
||||||
|
b1001 #
|
||||||
|
#46000000
|
||||||
|
0!
|
||||||
|
#47000000
|
||||||
|
1!
|
||||||
|
b1010 $
|
||||||
|
b1010 #
|
||||||
|
#48000000
|
||||||
|
0!
|
||||||
|
#49000000
|
||||||
|
1!
|
||||||
|
b1011 $
|
||||||
|
b1011 #
|
||||||
|
#50000000
|
||||||
|
0!
|
||||||
|
#51000000
|
||||||
|
1!
|
||||||
|
b1100 $
|
||||||
|
b1100 #
|
||||||
|
#52000000
|
||||||
|
0!
|
||||||
|
#53000000
|
||||||
|
1!
|
||||||
|
b1101 $
|
||||||
|
b1101 #
|
||||||
|
#54000000
|
||||||
|
0!
|
||||||
|
#55000000
|
||||||
|
1!
|
||||||
|
b1110 $
|
||||||
|
b1110 #
|
||||||
|
#56000000
|
||||||
|
0!
|
||||||
|
#57000000
|
||||||
|
1!
|
||||||
|
b1111 $
|
||||||
|
b1111 #
|
||||||
|
#58000000
|
||||||
|
0!
|
||||||
|
#59000000
|
||||||
|
1!
|
||||||
|
b0 $
|
||||||
|
b0 #
|
||||||
|
#60000000
|
||||||
|
0!
|
||||||
|
#61000000
|
||||||
|
1!
|
||||||
|
b1 $
|
||||||
|
b1 #
|
||||||
|
#62000000
|
||||||
|
0!
|
||||||
|
#63000000
|
||||||
|
1!
|
||||||
|
b10 $
|
||||||
|
b10 #
|
||||||
|
#64000000
|
||||||
|
0!
|
||||||
|
#65000000
|
||||||
|
1!
|
||||||
|
b11 $
|
||||||
|
b11 #
|
||||||
|
#66000000
|
490
crates/fayalite/tests/sim/expected/counter_sync.txt
Normal file
490
crates/fayalite/tests/sim/expected/counter_sync.txt
Normal file
|
@ -0,0 +1,490 @@
|
||||||
|
Simulation {
|
||||||
|
state: State {
|
||||||
|
insns: Insns {
|
||||||
|
state_layout: StateLayout {
|
||||||
|
ty: TypeLayout {
|
||||||
|
small_slots: StatePartAllocationLayout<SmallSlots> {
|
||||||
|
len: 4,
|
||||||
|
debug_data: [
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: Bool,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: Bool,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: Bool,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: Bool,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
big_slots: StatePartAllocationLayout<BigSlots> {
|
||||||
|
len: 9,
|
||||||
|
debug_data: [
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(counter: counter).counter::cd.clk",
|
||||||
|
ty: Clock,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(counter: counter).counter::cd.rst",
|
||||||
|
ty: SyncReset,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(counter: counter).counter::count",
|
||||||
|
ty: UInt<4>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(counter: counter).counter::count_reg",
|
||||||
|
ty: UInt<4>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(counter: counter).counter::count_reg$next",
|
||||||
|
ty: UInt<4>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: UInt<4>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: UInt<1>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: UInt<5>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: UInt<4>,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
insns: [
|
||||||
|
// at: module-XXXXXXXXXX.rs:6:1
|
||||||
|
Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(2), // SlotDebugData { name: "InstantiatedModule(counter: counter).counter::count", ty: UInt<4> },
|
||||||
|
src: StatePartIndex<BigSlots>(3), // SlotDebugData { name: "InstantiatedModule(counter: counter).counter::count_reg", ty: UInt<4> },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:1:1
|
||||||
|
Const {
|
||||||
|
dest: StatePartIndex<BigSlots>(6), // SlotDebugData { name: "", ty: UInt<1> },
|
||||||
|
value: 1,
|
||||||
|
},
|
||||||
|
Add {
|
||||||
|
dest: StatePartIndex<BigSlots>(7), // SlotDebugData { name: "", ty: UInt<5> },
|
||||||
|
lhs: StatePartIndex<BigSlots>(3), // SlotDebugData { name: "InstantiatedModule(counter: counter).counter::count_reg", ty: UInt<4> },
|
||||||
|
rhs: StatePartIndex<BigSlots>(6), // SlotDebugData { name: "", ty: UInt<1> },
|
||||||
|
},
|
||||||
|
CastToUInt {
|
||||||
|
dest: StatePartIndex<BigSlots>(8), // SlotDebugData { name: "", ty: UInt<4> },
|
||||||
|
src: StatePartIndex<BigSlots>(7), // SlotDebugData { name: "", ty: UInt<5> },
|
||||||
|
dest_width: 4,
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:4:1
|
||||||
|
Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(4), // SlotDebugData { name: "InstantiatedModule(counter: counter).counter::count_reg$next", ty: UInt<4> },
|
||||||
|
src: StatePartIndex<BigSlots>(8), // SlotDebugData { name: "", ty: UInt<4> },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:3:1
|
||||||
|
IsNonZeroDestIsSmall {
|
||||||
|
dest: StatePartIndex<SmallSlots>(3), // SlotDebugData { name: "", ty: Bool },
|
||||||
|
src: StatePartIndex<BigSlots>(1), // SlotDebugData { name: "InstantiatedModule(counter: counter).counter::cd.rst", ty: SyncReset },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:1:1
|
||||||
|
Const {
|
||||||
|
dest: StatePartIndex<BigSlots>(5), // SlotDebugData { name: "", ty: UInt<4> },
|
||||||
|
value: 3,
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:3:1
|
||||||
|
IsNonZeroDestIsSmall {
|
||||||
|
dest: StatePartIndex<SmallSlots>(2), // SlotDebugData { name: "", ty: Bool },
|
||||||
|
src: StatePartIndex<BigSlots>(0), // SlotDebugData { name: "InstantiatedModule(counter: counter).counter::cd.clk", ty: Clock },
|
||||||
|
},
|
||||||
|
AndSmall {
|
||||||
|
dest: StatePartIndex<SmallSlots>(1), // SlotDebugData { name: "", ty: Bool },
|
||||||
|
lhs: StatePartIndex<SmallSlots>(2), // SlotDebugData { name: "", ty: Bool },
|
||||||
|
rhs: StatePartIndex<SmallSlots>(0), // SlotDebugData { name: "", ty: Bool },
|
||||||
|
},
|
||||||
|
BranchIfSmallZero {
|
||||||
|
target: 14,
|
||||||
|
value: StatePartIndex<SmallSlots>(1), // SlotDebugData { name: "", ty: Bool },
|
||||||
|
},
|
||||||
|
BranchIfSmallNonZero {
|
||||||
|
target: 13,
|
||||||
|
value: StatePartIndex<SmallSlots>(3), // SlotDebugData { name: "", ty: Bool },
|
||||||
|
},
|
||||||
|
Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(3), // SlotDebugData { name: "InstantiatedModule(counter: counter).counter::count_reg", ty: UInt<4> },
|
||||||
|
src: StatePartIndex<BigSlots>(4), // SlotDebugData { name: "InstantiatedModule(counter: counter).counter::count_reg$next", ty: UInt<4> },
|
||||||
|
},
|
||||||
|
Branch {
|
||||||
|
target: 14,
|
||||||
|
},
|
||||||
|
Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(3), // SlotDebugData { name: "InstantiatedModule(counter: counter).counter::count_reg", ty: UInt<4> },
|
||||||
|
src: StatePartIndex<BigSlots>(5), // SlotDebugData { name: "", ty: UInt<4> },
|
||||||
|
},
|
||||||
|
NotSmall {
|
||||||
|
dest: StatePartIndex<SmallSlots>(0), // SlotDebugData { name: "", ty: Bool },
|
||||||
|
src: StatePartIndex<SmallSlots>(2), // SlotDebugData { name: "", ty: Bool },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:1:1
|
||||||
|
Return,
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
pc: 15,
|
||||||
|
small_slots: StatePart {
|
||||||
|
value: [
|
||||||
|
18446744073709551614,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
],
|
||||||
|
},
|
||||||
|
big_slots: StatePart {
|
||||||
|
value: [
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
3,
|
||||||
|
3,
|
||||||
|
4,
|
||||||
|
3,
|
||||||
|
1,
|
||||||
|
4,
|
||||||
|
4,
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
io: Instance {
|
||||||
|
name: <simulator>::counter,
|
||||||
|
instantiated: Module {
|
||||||
|
name: counter,
|
||||||
|
..
|
||||||
|
},
|
||||||
|
},
|
||||||
|
uninitialized_inputs: {},
|
||||||
|
io_targets: {
|
||||||
|
Instance {
|
||||||
|
name: <simulator>::counter,
|
||||||
|
instantiated: Module {
|
||||||
|
name: counter,
|
||||||
|
..
|
||||||
|
},
|
||||||
|
}.cd: CompiledValue {
|
||||||
|
layout: CompiledTypeLayout {
|
||||||
|
ty: Bundle {
|
||||||
|
/* offset = 0 */
|
||||||
|
clk: Clock,
|
||||||
|
/* offset = 1 */
|
||||||
|
rst: SyncReset,
|
||||||
|
},
|
||||||
|
layout: TypeLayout {
|
||||||
|
small_slots: StatePartAllocationLayout<SmallSlots> {
|
||||||
|
len: 0,
|
||||||
|
debug_data: [],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
big_slots: StatePartAllocationLayout<BigSlots> {
|
||||||
|
len: 2,
|
||||||
|
debug_data: [
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(counter: counter).counter::cd.clk",
|
||||||
|
ty: Clock,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(counter: counter).counter::cd.rst",
|
||||||
|
ty: SyncReset,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
},
|
||||||
|
body: Bundle {
|
||||||
|
fields: [
|
||||||
|
CompiledBundleField {
|
||||||
|
offset: TypeIndex {
|
||||||
|
small_slots: StatePartIndex<SmallSlots>(0),
|
||||||
|
big_slots: StatePartIndex<BigSlots>(0),
|
||||||
|
},
|
||||||
|
ty: CompiledTypeLayout {
|
||||||
|
ty: Clock,
|
||||||
|
layout: TypeLayout {
|
||||||
|
small_slots: StatePartAllocationLayout<SmallSlots> {
|
||||||
|
len: 0,
|
||||||
|
debug_data: [],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
big_slots: StatePartAllocationLayout<BigSlots> {
|
||||||
|
len: 1,
|
||||||
|
debug_data: [
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: Clock,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
},
|
||||||
|
body: Scalar,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
CompiledBundleField {
|
||||||
|
offset: TypeIndex {
|
||||||
|
small_slots: StatePartIndex<SmallSlots>(0),
|
||||||
|
big_slots: StatePartIndex<BigSlots>(1),
|
||||||
|
},
|
||||||
|
ty: CompiledTypeLayout {
|
||||||
|
ty: SyncReset,
|
||||||
|
layout: TypeLayout {
|
||||||
|
small_slots: StatePartAllocationLayout<SmallSlots> {
|
||||||
|
len: 0,
|
||||||
|
debug_data: [],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
big_slots: StatePartAllocationLayout<BigSlots> {
|
||||||
|
len: 1,
|
||||||
|
debug_data: [
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: SyncReset,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
},
|
||||||
|
body: Scalar,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
range: TypeIndexRange {
|
||||||
|
small_slots: StatePartIndexRange<SmallSlots> { start: 0, len: 0 },
|
||||||
|
big_slots: StatePartIndexRange<BigSlots> { start: 0, len: 2 },
|
||||||
|
},
|
||||||
|
write: None,
|
||||||
|
},
|
||||||
|
Instance {
|
||||||
|
name: <simulator>::counter,
|
||||||
|
instantiated: Module {
|
||||||
|
name: counter,
|
||||||
|
..
|
||||||
|
},
|
||||||
|
}.cd.clk: CompiledValue {
|
||||||
|
layout: CompiledTypeLayout {
|
||||||
|
ty: Clock,
|
||||||
|
layout: TypeLayout {
|
||||||
|
small_slots: StatePartAllocationLayout<SmallSlots> {
|
||||||
|
len: 0,
|
||||||
|
debug_data: [],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
big_slots: StatePartAllocationLayout<BigSlots> {
|
||||||
|
len: 1,
|
||||||
|
debug_data: [
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: Clock,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
},
|
||||||
|
body: Scalar,
|
||||||
|
},
|
||||||
|
range: TypeIndexRange {
|
||||||
|
small_slots: StatePartIndexRange<SmallSlots> { start: 0, len: 0 },
|
||||||
|
big_slots: StatePartIndexRange<BigSlots> { start: 0, len: 1 },
|
||||||
|
},
|
||||||
|
write: None,
|
||||||
|
},
|
||||||
|
Instance {
|
||||||
|
name: <simulator>::counter,
|
||||||
|
instantiated: Module {
|
||||||
|
name: counter,
|
||||||
|
..
|
||||||
|
},
|
||||||
|
}.cd.rst: CompiledValue {
|
||||||
|
layout: CompiledTypeLayout {
|
||||||
|
ty: SyncReset,
|
||||||
|
layout: TypeLayout {
|
||||||
|
small_slots: StatePartAllocationLayout<SmallSlots> {
|
||||||
|
len: 0,
|
||||||
|
debug_data: [],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
big_slots: StatePartAllocationLayout<BigSlots> {
|
||||||
|
len: 1,
|
||||||
|
debug_data: [
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: SyncReset,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
},
|
||||||
|
body: Scalar,
|
||||||
|
},
|
||||||
|
range: TypeIndexRange {
|
||||||
|
small_slots: StatePartIndexRange<SmallSlots> { start: 0, len: 0 },
|
||||||
|
big_slots: StatePartIndexRange<BigSlots> { start: 1, len: 1 },
|
||||||
|
},
|
||||||
|
write: None,
|
||||||
|
},
|
||||||
|
Instance {
|
||||||
|
name: <simulator>::counter,
|
||||||
|
instantiated: Module {
|
||||||
|
name: counter,
|
||||||
|
..
|
||||||
|
},
|
||||||
|
}.count: CompiledValue {
|
||||||
|
layout: CompiledTypeLayout {
|
||||||
|
ty: UInt<4>,
|
||||||
|
layout: TypeLayout {
|
||||||
|
small_slots: StatePartAllocationLayout<SmallSlots> {
|
||||||
|
len: 0,
|
||||||
|
debug_data: [],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
big_slots: StatePartAllocationLayout<BigSlots> {
|
||||||
|
len: 1,
|
||||||
|
debug_data: [
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(counter: counter).counter::count",
|
||||||
|
ty: UInt<4>,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
},
|
||||||
|
body: Scalar,
|
||||||
|
},
|
||||||
|
range: TypeIndexRange {
|
||||||
|
small_slots: StatePartIndexRange<SmallSlots> { start: 0, len: 0 },
|
||||||
|
big_slots: StatePartIndexRange<BigSlots> { start: 2, len: 1 },
|
||||||
|
},
|
||||||
|
write: None,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
made_initial_step: true,
|
||||||
|
needs_settle: false,
|
||||||
|
trace_decls: TraceModule {
|
||||||
|
name: "counter",
|
||||||
|
children: [
|
||||||
|
TraceModuleIO {
|
||||||
|
name: "cd",
|
||||||
|
child: TraceBundle {
|
||||||
|
name: "cd",
|
||||||
|
fields: [
|
||||||
|
TraceClock {
|
||||||
|
id: TraceScalarId(0),
|
||||||
|
name: "clk",
|
||||||
|
flow: Source,
|
||||||
|
},
|
||||||
|
TraceSyncReset {
|
||||||
|
id: TraceScalarId(1),
|
||||||
|
name: "rst",
|
||||||
|
flow: Source,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
ty: Bundle {
|
||||||
|
/* offset = 0 */
|
||||||
|
clk: Clock,
|
||||||
|
/* offset = 1 */
|
||||||
|
rst: SyncReset,
|
||||||
|
},
|
||||||
|
flow: Source,
|
||||||
|
},
|
||||||
|
ty: Bundle {
|
||||||
|
/* offset = 0 */
|
||||||
|
clk: Clock,
|
||||||
|
/* offset = 1 */
|
||||||
|
rst: SyncReset,
|
||||||
|
},
|
||||||
|
flow: Source,
|
||||||
|
},
|
||||||
|
TraceModuleIO {
|
||||||
|
name: "count",
|
||||||
|
child: TraceUInt {
|
||||||
|
id: TraceScalarId(2),
|
||||||
|
name: "count",
|
||||||
|
ty: UInt<4>,
|
||||||
|
flow: Sink,
|
||||||
|
},
|
||||||
|
ty: UInt<4>,
|
||||||
|
flow: Sink,
|
||||||
|
},
|
||||||
|
TraceReg {
|
||||||
|
name: "count_reg",
|
||||||
|
child: TraceUInt {
|
||||||
|
id: TraceScalarId(3),
|
||||||
|
name: "count_reg",
|
||||||
|
ty: UInt<4>,
|
||||||
|
flow: Duplex,
|
||||||
|
},
|
||||||
|
ty: UInt<4>,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
traces: [
|
||||||
|
SimTrace {
|
||||||
|
id: TraceScalarId(0),
|
||||||
|
kind: BigClock {
|
||||||
|
index: StatePartIndex<BigSlots>(0),
|
||||||
|
},
|
||||||
|
state: 0x1,
|
||||||
|
last_state: 0x1,
|
||||||
|
},
|
||||||
|
SimTrace {
|
||||||
|
id: TraceScalarId(1),
|
||||||
|
kind: BigSyncReset {
|
||||||
|
index: StatePartIndex<BigSlots>(1),
|
||||||
|
},
|
||||||
|
state: 0x0,
|
||||||
|
last_state: 0x0,
|
||||||
|
},
|
||||||
|
SimTrace {
|
||||||
|
id: TraceScalarId(2),
|
||||||
|
kind: BigUInt {
|
||||||
|
index: StatePartIndex<BigSlots>(2),
|
||||||
|
ty: UInt<4>,
|
||||||
|
},
|
||||||
|
state: 0x3,
|
||||||
|
last_state: 0x2,
|
||||||
|
},
|
||||||
|
SimTrace {
|
||||||
|
id: TraceScalarId(3),
|
||||||
|
kind: BigUInt {
|
||||||
|
index: StatePartIndex<BigSlots>(3),
|
||||||
|
ty: UInt<4>,
|
||||||
|
},
|
||||||
|
state: 0x3,
|
||||||
|
last_state: 0x3,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
trace_writers: [
|
||||||
|
Running(
|
||||||
|
VcdWriter {
|
||||||
|
finished_init: true,
|
||||||
|
timescale: 1 ps,
|
||||||
|
..
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
instant: 66 μs,
|
||||||
|
clocks_triggered: [
|
||||||
|
StatePartIndex<SmallSlots>(1),
|
||||||
|
],
|
||||||
|
}
|
214
crates/fayalite/tests/sim/expected/counter_sync.vcd
Normal file
214
crates/fayalite/tests/sim/expected/counter_sync.vcd
Normal file
|
@ -0,0 +1,214 @@
|
||||||
|
$timescale 1 ps $end
|
||||||
|
$scope module counter $end
|
||||||
|
$scope struct cd $end
|
||||||
|
$var wire 1 ! clk $end
|
||||||
|
$var wire 1 " rst $end
|
||||||
|
$upscope $end
|
||||||
|
$var wire 4 # count $end
|
||||||
|
$var reg 4 $ count_reg $end
|
||||||
|
$upscope $end
|
||||||
|
$enddefinitions $end
|
||||||
|
$dumpvars
|
||||||
|
0!
|
||||||
|
1"
|
||||||
|
b0 #
|
||||||
|
b0 $
|
||||||
|
$end
|
||||||
|
#1000000
|
||||||
|
1!
|
||||||
|
b11 $
|
||||||
|
b11 #
|
||||||
|
0"
|
||||||
|
#2000000
|
||||||
|
0!
|
||||||
|
#3000000
|
||||||
|
1!
|
||||||
|
b100 $
|
||||||
|
b100 #
|
||||||
|
#4000000
|
||||||
|
0!
|
||||||
|
#5000000
|
||||||
|
1!
|
||||||
|
b101 $
|
||||||
|
b101 #
|
||||||
|
#6000000
|
||||||
|
0!
|
||||||
|
#7000000
|
||||||
|
1!
|
||||||
|
b110 $
|
||||||
|
b110 #
|
||||||
|
#8000000
|
||||||
|
0!
|
||||||
|
#9000000
|
||||||
|
1!
|
||||||
|
b111 $
|
||||||
|
b111 #
|
||||||
|
#10000000
|
||||||
|
0!
|
||||||
|
#11000000
|
||||||
|
1!
|
||||||
|
b1000 $
|
||||||
|
b1000 #
|
||||||
|
#12000000
|
||||||
|
0!
|
||||||
|
#13000000
|
||||||
|
1!
|
||||||
|
b1001 $
|
||||||
|
b1001 #
|
||||||
|
#14000000
|
||||||
|
0!
|
||||||
|
#15000000
|
||||||
|
1!
|
||||||
|
b1010 $
|
||||||
|
b1010 #
|
||||||
|
#16000000
|
||||||
|
0!
|
||||||
|
#17000000
|
||||||
|
1!
|
||||||
|
b1011 $
|
||||||
|
b1011 #
|
||||||
|
#18000000
|
||||||
|
0!
|
||||||
|
#19000000
|
||||||
|
1!
|
||||||
|
b1100 $
|
||||||
|
b1100 #
|
||||||
|
#20000000
|
||||||
|
0!
|
||||||
|
#21000000
|
||||||
|
1!
|
||||||
|
b1101 $
|
||||||
|
b1101 #
|
||||||
|
#22000000
|
||||||
|
0!
|
||||||
|
#23000000
|
||||||
|
1!
|
||||||
|
b1110 $
|
||||||
|
b1110 #
|
||||||
|
#24000000
|
||||||
|
0!
|
||||||
|
#25000000
|
||||||
|
1!
|
||||||
|
b1111 $
|
||||||
|
b1111 #
|
||||||
|
#26000000
|
||||||
|
0!
|
||||||
|
#27000000
|
||||||
|
1!
|
||||||
|
b0 $
|
||||||
|
b0 #
|
||||||
|
#28000000
|
||||||
|
0!
|
||||||
|
#29000000
|
||||||
|
1!
|
||||||
|
b1 $
|
||||||
|
b1 #
|
||||||
|
#30000000
|
||||||
|
0!
|
||||||
|
#31000000
|
||||||
|
1!
|
||||||
|
b10 $
|
||||||
|
b10 #
|
||||||
|
#32000000
|
||||||
|
0!
|
||||||
|
#33000000
|
||||||
|
1!
|
||||||
|
b11 $
|
||||||
|
b11 #
|
||||||
|
#34000000
|
||||||
|
0!
|
||||||
|
#35000000
|
||||||
|
1!
|
||||||
|
b100 $
|
||||||
|
b100 #
|
||||||
|
#36000000
|
||||||
|
0!
|
||||||
|
#37000000
|
||||||
|
1!
|
||||||
|
b101 $
|
||||||
|
b101 #
|
||||||
|
#38000000
|
||||||
|
0!
|
||||||
|
#39000000
|
||||||
|
1!
|
||||||
|
b110 $
|
||||||
|
b110 #
|
||||||
|
#40000000
|
||||||
|
0!
|
||||||
|
#41000000
|
||||||
|
1!
|
||||||
|
b111 $
|
||||||
|
b111 #
|
||||||
|
#42000000
|
||||||
|
0!
|
||||||
|
#43000000
|
||||||
|
1!
|
||||||
|
b1000 $
|
||||||
|
b1000 #
|
||||||
|
#44000000
|
||||||
|
0!
|
||||||
|
#45000000
|
||||||
|
1!
|
||||||
|
b1001 $
|
||||||
|
b1001 #
|
||||||
|
#46000000
|
||||||
|
0!
|
||||||
|
#47000000
|
||||||
|
1!
|
||||||
|
b1010 $
|
||||||
|
b1010 #
|
||||||
|
#48000000
|
||||||
|
0!
|
||||||
|
#49000000
|
||||||
|
1!
|
||||||
|
b1011 $
|
||||||
|
b1011 #
|
||||||
|
#50000000
|
||||||
|
0!
|
||||||
|
#51000000
|
||||||
|
1!
|
||||||
|
b1100 $
|
||||||
|
b1100 #
|
||||||
|
#52000000
|
||||||
|
0!
|
||||||
|
#53000000
|
||||||
|
1!
|
||||||
|
b1101 $
|
||||||
|
b1101 #
|
||||||
|
#54000000
|
||||||
|
0!
|
||||||
|
#55000000
|
||||||
|
1!
|
||||||
|
b1110 $
|
||||||
|
b1110 #
|
||||||
|
#56000000
|
||||||
|
0!
|
||||||
|
#57000000
|
||||||
|
1!
|
||||||
|
b1111 $
|
||||||
|
b1111 #
|
||||||
|
#58000000
|
||||||
|
0!
|
||||||
|
#59000000
|
||||||
|
1!
|
||||||
|
b0 $
|
||||||
|
b0 #
|
||||||
|
#60000000
|
||||||
|
0!
|
||||||
|
#61000000
|
||||||
|
1!
|
||||||
|
b1 $
|
||||||
|
b1 #
|
||||||
|
#62000000
|
||||||
|
0!
|
||||||
|
#63000000
|
||||||
|
1!
|
||||||
|
b10 $
|
||||||
|
b10 #
|
||||||
|
#64000000
|
||||||
|
0!
|
||||||
|
#65000000
|
||||||
|
1!
|
||||||
|
b11 $
|
||||||
|
b11 #
|
||||||
|
#66000000
|
798
crates/fayalite/tests/sim/expected/mod1.txt
Normal file
798
crates/fayalite/tests/sim/expected/mod1.txt
Normal file
|
@ -0,0 +1,798 @@
|
||||||
|
Simulation {
|
||||||
|
state: State {
|
||||||
|
insns: Insns {
|
||||||
|
state_layout: StateLayout {
|
||||||
|
ty: TypeLayout {
|
||||||
|
small_slots: StatePartAllocationLayout<SmallSlots> {
|
||||||
|
len: 0,
|
||||||
|
debug_data: [],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
big_slots: StatePartAllocationLayout<BigSlots> {
|
||||||
|
len: 17,
|
||||||
|
debug_data: [
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(mod1: mod1).mod1::o.i",
|
||||||
|
ty: UInt<4>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(mod1: mod1).mod1::o.o",
|
||||||
|
ty: SInt<2>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(mod1: mod1).mod1::o.i2",
|
||||||
|
ty: SInt<2>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(mod1: mod1).mod1::o.o2",
|
||||||
|
ty: UInt<4>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(mod1: mod1).mod1::child.i",
|
||||||
|
ty: UInt<4>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(mod1: mod1).mod1::child.o",
|
||||||
|
ty: SInt<2>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(mod1: mod1).mod1::child.i2",
|
||||||
|
ty: SInt<2>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(mod1: mod1).mod1::child.o2",
|
||||||
|
ty: UInt<4>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(mod1.child: mod1_child).mod1_child::i",
|
||||||
|
ty: UInt<4>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(mod1.child: mod1_child).mod1_child::o",
|
||||||
|
ty: SInt<2>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(mod1.child: mod1_child).mod1_child::i2",
|
||||||
|
ty: SInt<2>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(mod1.child: mod1_child).mod1_child::o2",
|
||||||
|
ty: UInt<4>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: SInt<2>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: UInt<4>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: UInt<4>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: Bool,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: UInt<4>,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
insns: [
|
||||||
|
// at: module-XXXXXXXXXX.rs:4:1
|
||||||
|
Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(6), // SlotDebugData { name: "InstantiatedModule(mod1: mod1).mod1::child.i2", ty: SInt<2> },
|
||||||
|
src: StatePartIndex<BigSlots>(2), // SlotDebugData { name: "InstantiatedModule(mod1: mod1).mod1::o.i2", ty: SInt<2> },
|
||||||
|
},
|
||||||
|
Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(4), // SlotDebugData { name: "InstantiatedModule(mod1: mod1).mod1::child.i", ty: UInt<4> },
|
||||||
|
src: StatePartIndex<BigSlots>(0), // SlotDebugData { name: "InstantiatedModule(mod1: mod1).mod1::o.i", ty: UInt<4> },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:2:1
|
||||||
|
Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(10), // SlotDebugData { name: "InstantiatedModule(mod1.child: mod1_child).mod1_child::i2", ty: SInt<2> },
|
||||||
|
src: StatePartIndex<BigSlots>(6), // SlotDebugData { name: "InstantiatedModule(mod1: mod1).mod1::child.i2", ty: SInt<2> },
|
||||||
|
},
|
||||||
|
Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(8), // SlotDebugData { name: "InstantiatedModule(mod1.child: mod1_child).mod1_child::i", ty: UInt<4> },
|
||||||
|
src: StatePartIndex<BigSlots>(4), // SlotDebugData { name: "InstantiatedModule(mod1: mod1).mod1::child.i", ty: UInt<4> },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX-2.rs:1:1
|
||||||
|
Const {
|
||||||
|
dest: StatePartIndex<BigSlots>(16), // SlotDebugData { name: "", ty: UInt<4> },
|
||||||
|
value: 15,
|
||||||
|
},
|
||||||
|
Const {
|
||||||
|
dest: StatePartIndex<BigSlots>(14), // SlotDebugData { name: "", ty: UInt<4> },
|
||||||
|
value: 5,
|
||||||
|
},
|
||||||
|
CmpLt {
|
||||||
|
dest: StatePartIndex<BigSlots>(15), // SlotDebugData { name: "", ty: Bool },
|
||||||
|
lhs: StatePartIndex<BigSlots>(14), // SlotDebugData { name: "", ty: UInt<4> },
|
||||||
|
rhs: StatePartIndex<BigSlots>(8), // SlotDebugData { name: "InstantiatedModule(mod1.child: mod1_child).mod1_child::i", ty: UInt<4> },
|
||||||
|
},
|
||||||
|
CastToUInt {
|
||||||
|
dest: StatePartIndex<BigSlots>(13), // SlotDebugData { name: "", ty: UInt<4> },
|
||||||
|
src: StatePartIndex<BigSlots>(10), // SlotDebugData { name: "InstantiatedModule(mod1.child: mod1_child).mod1_child::i2", ty: SInt<2> },
|
||||||
|
dest_width: 4,
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX-2.rs:7:1
|
||||||
|
Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(11), // SlotDebugData { name: "InstantiatedModule(mod1.child: mod1_child).mod1_child::o2", ty: UInt<4> },
|
||||||
|
src: StatePartIndex<BigSlots>(13), // SlotDebugData { name: "", ty: UInt<4> },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX-2.rs:8:1
|
||||||
|
BranchIfZero {
|
||||||
|
target: 11,
|
||||||
|
value: StatePartIndex<BigSlots>(15), // SlotDebugData { name: "", ty: Bool },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX-2.rs:9:1
|
||||||
|
Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(11), // SlotDebugData { name: "InstantiatedModule(mod1.child: mod1_child).mod1_child::o2", ty: UInt<4> },
|
||||||
|
src: StatePartIndex<BigSlots>(16), // SlotDebugData { name: "", ty: UInt<4> },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:2:1
|
||||||
|
Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(7), // SlotDebugData { name: "InstantiatedModule(mod1: mod1).mod1::child.o2", ty: UInt<4> },
|
||||||
|
src: StatePartIndex<BigSlots>(11), // SlotDebugData { name: "InstantiatedModule(mod1.child: mod1_child).mod1_child::o2", ty: UInt<4> },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:4:1
|
||||||
|
Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(3), // SlotDebugData { name: "InstantiatedModule(mod1: mod1).mod1::o.o2", ty: UInt<4> },
|
||||||
|
src: StatePartIndex<BigSlots>(7), // SlotDebugData { name: "InstantiatedModule(mod1: mod1).mod1::child.o2", ty: UInt<4> },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX-2.rs:1:1
|
||||||
|
CastToSInt {
|
||||||
|
dest: StatePartIndex<BigSlots>(12), // SlotDebugData { name: "", ty: SInt<2> },
|
||||||
|
src: StatePartIndex<BigSlots>(8), // SlotDebugData { name: "InstantiatedModule(mod1.child: mod1_child).mod1_child::i", ty: UInt<4> },
|
||||||
|
dest_width: 2,
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX-2.rs:6:1
|
||||||
|
Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(9), // SlotDebugData { name: "InstantiatedModule(mod1.child: mod1_child).mod1_child::o", ty: SInt<2> },
|
||||||
|
src: StatePartIndex<BigSlots>(12), // SlotDebugData { name: "", ty: SInt<2> },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:2:1
|
||||||
|
Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(5), // SlotDebugData { name: "InstantiatedModule(mod1: mod1).mod1::child.o", ty: SInt<2> },
|
||||||
|
src: StatePartIndex<BigSlots>(9), // SlotDebugData { name: "InstantiatedModule(mod1.child: mod1_child).mod1_child::o", ty: SInt<2> },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:4:1
|
||||||
|
Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(1), // SlotDebugData { name: "InstantiatedModule(mod1: mod1).mod1::o.o", ty: SInt<2> },
|
||||||
|
src: StatePartIndex<BigSlots>(5), // SlotDebugData { name: "InstantiatedModule(mod1: mod1).mod1::child.o", ty: SInt<2> },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:1:1
|
||||||
|
Return,
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
pc: 17,
|
||||||
|
small_slots: StatePart {
|
||||||
|
value: [],
|
||||||
|
},
|
||||||
|
big_slots: StatePart {
|
||||||
|
value: [
|
||||||
|
10,
|
||||||
|
-2,
|
||||||
|
-2,
|
||||||
|
15,
|
||||||
|
10,
|
||||||
|
-2,
|
||||||
|
-2,
|
||||||
|
15,
|
||||||
|
10,
|
||||||
|
-2,
|
||||||
|
-2,
|
||||||
|
15,
|
||||||
|
-2,
|
||||||
|
14,
|
||||||
|
5,
|
||||||
|
1,
|
||||||
|
15,
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
io: Instance {
|
||||||
|
name: <simulator>::mod1,
|
||||||
|
instantiated: Module {
|
||||||
|
name: mod1,
|
||||||
|
..
|
||||||
|
},
|
||||||
|
},
|
||||||
|
uninitialized_inputs: {},
|
||||||
|
io_targets: {
|
||||||
|
Instance {
|
||||||
|
name: <simulator>::mod1,
|
||||||
|
instantiated: Module {
|
||||||
|
name: mod1,
|
||||||
|
..
|
||||||
|
},
|
||||||
|
}.o: CompiledValue {
|
||||||
|
layout: CompiledTypeLayout {
|
||||||
|
ty: Bundle {
|
||||||
|
#[hdl(flip)] /* offset = 0 */
|
||||||
|
i: UInt<4>,
|
||||||
|
/* offset = 4 */
|
||||||
|
o: SInt<2>,
|
||||||
|
#[hdl(flip)] /* offset = 6 */
|
||||||
|
i2: SInt<2>,
|
||||||
|
/* offset = 8 */
|
||||||
|
o2: UInt<4>,
|
||||||
|
},
|
||||||
|
layout: TypeLayout {
|
||||||
|
small_slots: StatePartAllocationLayout<SmallSlots> {
|
||||||
|
len: 0,
|
||||||
|
debug_data: [],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
big_slots: StatePartAllocationLayout<BigSlots> {
|
||||||
|
len: 4,
|
||||||
|
debug_data: [
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(mod1: mod1).mod1::o.i",
|
||||||
|
ty: UInt<4>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(mod1: mod1).mod1::o.o",
|
||||||
|
ty: SInt<2>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(mod1: mod1).mod1::o.i2",
|
||||||
|
ty: SInt<2>,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(mod1: mod1).mod1::o.o2",
|
||||||
|
ty: UInt<4>,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
},
|
||||||
|
body: Bundle {
|
||||||
|
fields: [
|
||||||
|
CompiledBundleField {
|
||||||
|
offset: TypeIndex {
|
||||||
|
small_slots: StatePartIndex<SmallSlots>(0),
|
||||||
|
big_slots: StatePartIndex<BigSlots>(0),
|
||||||
|
},
|
||||||
|
ty: CompiledTypeLayout {
|
||||||
|
ty: UInt<4>,
|
||||||
|
layout: TypeLayout {
|
||||||
|
small_slots: StatePartAllocationLayout<SmallSlots> {
|
||||||
|
len: 0,
|
||||||
|
debug_data: [],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
big_slots: StatePartAllocationLayout<BigSlots> {
|
||||||
|
len: 1,
|
||||||
|
debug_data: [
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: UInt<4>,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
},
|
||||||
|
body: Scalar,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
CompiledBundleField {
|
||||||
|
offset: TypeIndex {
|
||||||
|
small_slots: StatePartIndex<SmallSlots>(0),
|
||||||
|
big_slots: StatePartIndex<BigSlots>(1),
|
||||||
|
},
|
||||||
|
ty: CompiledTypeLayout {
|
||||||
|
ty: SInt<2>,
|
||||||
|
layout: TypeLayout {
|
||||||
|
small_slots: StatePartAllocationLayout<SmallSlots> {
|
||||||
|
len: 0,
|
||||||
|
debug_data: [],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
big_slots: StatePartAllocationLayout<BigSlots> {
|
||||||
|
len: 1,
|
||||||
|
debug_data: [
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: SInt<2>,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
},
|
||||||
|
body: Scalar,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
CompiledBundleField {
|
||||||
|
offset: TypeIndex {
|
||||||
|
small_slots: StatePartIndex<SmallSlots>(0),
|
||||||
|
big_slots: StatePartIndex<BigSlots>(2),
|
||||||
|
},
|
||||||
|
ty: CompiledTypeLayout {
|
||||||
|
ty: SInt<2>,
|
||||||
|
layout: TypeLayout {
|
||||||
|
small_slots: StatePartAllocationLayout<SmallSlots> {
|
||||||
|
len: 0,
|
||||||
|
debug_data: [],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
big_slots: StatePartAllocationLayout<BigSlots> {
|
||||||
|
len: 1,
|
||||||
|
debug_data: [
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: SInt<2>,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
},
|
||||||
|
body: Scalar,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
CompiledBundleField {
|
||||||
|
offset: TypeIndex {
|
||||||
|
small_slots: StatePartIndex<SmallSlots>(0),
|
||||||
|
big_slots: StatePartIndex<BigSlots>(3),
|
||||||
|
},
|
||||||
|
ty: CompiledTypeLayout {
|
||||||
|
ty: UInt<4>,
|
||||||
|
layout: TypeLayout {
|
||||||
|
small_slots: StatePartAllocationLayout<SmallSlots> {
|
||||||
|
len: 0,
|
||||||
|
debug_data: [],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
big_slots: StatePartAllocationLayout<BigSlots> {
|
||||||
|
len: 1,
|
||||||
|
debug_data: [
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: UInt<4>,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
},
|
||||||
|
body: Scalar,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
range: TypeIndexRange {
|
||||||
|
small_slots: StatePartIndexRange<SmallSlots> { start: 0, len: 0 },
|
||||||
|
big_slots: StatePartIndexRange<BigSlots> { start: 0, len: 4 },
|
||||||
|
},
|
||||||
|
write: None,
|
||||||
|
},
|
||||||
|
Instance {
|
||||||
|
name: <simulator>::mod1,
|
||||||
|
instantiated: Module {
|
||||||
|
name: mod1,
|
||||||
|
..
|
||||||
|
},
|
||||||
|
}.o.i: CompiledValue {
|
||||||
|
layout: CompiledTypeLayout {
|
||||||
|
ty: UInt<4>,
|
||||||
|
layout: TypeLayout {
|
||||||
|
small_slots: StatePartAllocationLayout<SmallSlots> {
|
||||||
|
len: 0,
|
||||||
|
debug_data: [],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
big_slots: StatePartAllocationLayout<BigSlots> {
|
||||||
|
len: 1,
|
||||||
|
debug_data: [
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: UInt<4>,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
},
|
||||||
|
body: Scalar,
|
||||||
|
},
|
||||||
|
range: TypeIndexRange {
|
||||||
|
small_slots: StatePartIndexRange<SmallSlots> { start: 0, len: 0 },
|
||||||
|
big_slots: StatePartIndexRange<BigSlots> { start: 0, len: 1 },
|
||||||
|
},
|
||||||
|
write: None,
|
||||||
|
},
|
||||||
|
Instance {
|
||||||
|
name: <simulator>::mod1,
|
||||||
|
instantiated: Module {
|
||||||
|
name: mod1,
|
||||||
|
..
|
||||||
|
},
|
||||||
|
}.o.i2: CompiledValue {
|
||||||
|
layout: CompiledTypeLayout {
|
||||||
|
ty: SInt<2>,
|
||||||
|
layout: TypeLayout {
|
||||||
|
small_slots: StatePartAllocationLayout<SmallSlots> {
|
||||||
|
len: 0,
|
||||||
|
debug_data: [],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
big_slots: StatePartAllocationLayout<BigSlots> {
|
||||||
|
len: 1,
|
||||||
|
debug_data: [
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: SInt<2>,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
},
|
||||||
|
body: Scalar,
|
||||||
|
},
|
||||||
|
range: TypeIndexRange {
|
||||||
|
small_slots: StatePartIndexRange<SmallSlots> { start: 0, len: 0 },
|
||||||
|
big_slots: StatePartIndexRange<BigSlots> { start: 2, len: 1 },
|
||||||
|
},
|
||||||
|
write: None,
|
||||||
|
},
|
||||||
|
Instance {
|
||||||
|
name: <simulator>::mod1,
|
||||||
|
instantiated: Module {
|
||||||
|
name: mod1,
|
||||||
|
..
|
||||||
|
},
|
||||||
|
}.o.o: CompiledValue {
|
||||||
|
layout: CompiledTypeLayout {
|
||||||
|
ty: SInt<2>,
|
||||||
|
layout: TypeLayout {
|
||||||
|
small_slots: StatePartAllocationLayout<SmallSlots> {
|
||||||
|
len: 0,
|
||||||
|
debug_data: [],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
big_slots: StatePartAllocationLayout<BigSlots> {
|
||||||
|
len: 1,
|
||||||
|
debug_data: [
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: SInt<2>,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
},
|
||||||
|
body: Scalar,
|
||||||
|
},
|
||||||
|
range: TypeIndexRange {
|
||||||
|
small_slots: StatePartIndexRange<SmallSlots> { start: 0, len: 0 },
|
||||||
|
big_slots: StatePartIndexRange<BigSlots> { start: 1, len: 1 },
|
||||||
|
},
|
||||||
|
write: None,
|
||||||
|
},
|
||||||
|
Instance {
|
||||||
|
name: <simulator>::mod1,
|
||||||
|
instantiated: Module {
|
||||||
|
name: mod1,
|
||||||
|
..
|
||||||
|
},
|
||||||
|
}.o.o2: CompiledValue {
|
||||||
|
layout: CompiledTypeLayout {
|
||||||
|
ty: UInt<4>,
|
||||||
|
layout: TypeLayout {
|
||||||
|
small_slots: StatePartAllocationLayout<SmallSlots> {
|
||||||
|
len: 0,
|
||||||
|
debug_data: [],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
big_slots: StatePartAllocationLayout<BigSlots> {
|
||||||
|
len: 1,
|
||||||
|
debug_data: [
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: UInt<4>,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
},
|
||||||
|
body: Scalar,
|
||||||
|
},
|
||||||
|
range: TypeIndexRange {
|
||||||
|
small_slots: StatePartIndexRange<SmallSlots> { start: 0, len: 0 },
|
||||||
|
big_slots: StatePartIndexRange<BigSlots> { start: 3, len: 1 },
|
||||||
|
},
|
||||||
|
write: None,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
made_initial_step: true,
|
||||||
|
needs_settle: false,
|
||||||
|
trace_decls: TraceModule {
|
||||||
|
name: "mod1",
|
||||||
|
children: [
|
||||||
|
TraceModuleIO {
|
||||||
|
name: "o",
|
||||||
|
child: TraceBundle {
|
||||||
|
name: "o",
|
||||||
|
fields: [
|
||||||
|
TraceUInt {
|
||||||
|
id: TraceScalarId(0),
|
||||||
|
name: "i",
|
||||||
|
ty: UInt<4>,
|
||||||
|
flow: Source,
|
||||||
|
},
|
||||||
|
TraceSInt {
|
||||||
|
id: TraceScalarId(1),
|
||||||
|
name: "o",
|
||||||
|
ty: SInt<2>,
|
||||||
|
flow: Sink,
|
||||||
|
},
|
||||||
|
TraceSInt {
|
||||||
|
id: TraceScalarId(2),
|
||||||
|
name: "i2",
|
||||||
|
ty: SInt<2>,
|
||||||
|
flow: Source,
|
||||||
|
},
|
||||||
|
TraceUInt {
|
||||||
|
id: TraceScalarId(3),
|
||||||
|
name: "o2",
|
||||||
|
ty: UInt<4>,
|
||||||
|
flow: Sink,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
ty: Bundle {
|
||||||
|
#[hdl(flip)] /* offset = 0 */
|
||||||
|
i: UInt<4>,
|
||||||
|
/* offset = 4 */
|
||||||
|
o: SInt<2>,
|
||||||
|
#[hdl(flip)] /* offset = 6 */
|
||||||
|
i2: SInt<2>,
|
||||||
|
/* offset = 8 */
|
||||||
|
o2: UInt<4>,
|
||||||
|
},
|
||||||
|
flow: Sink,
|
||||||
|
},
|
||||||
|
ty: Bundle {
|
||||||
|
#[hdl(flip)] /* offset = 0 */
|
||||||
|
i: UInt<4>,
|
||||||
|
/* offset = 4 */
|
||||||
|
o: SInt<2>,
|
||||||
|
#[hdl(flip)] /* offset = 6 */
|
||||||
|
i2: SInt<2>,
|
||||||
|
/* offset = 8 */
|
||||||
|
o2: UInt<4>,
|
||||||
|
},
|
||||||
|
flow: Sink,
|
||||||
|
},
|
||||||
|
TraceInstance {
|
||||||
|
name: "child",
|
||||||
|
instance_io: TraceBundle {
|
||||||
|
name: "child",
|
||||||
|
fields: [
|
||||||
|
TraceUInt {
|
||||||
|
id: TraceScalarId(8),
|
||||||
|
name: "i",
|
||||||
|
ty: UInt<4>,
|
||||||
|
flow: Sink,
|
||||||
|
},
|
||||||
|
TraceSInt {
|
||||||
|
id: TraceScalarId(9),
|
||||||
|
name: "o",
|
||||||
|
ty: SInt<2>,
|
||||||
|
flow: Source,
|
||||||
|
},
|
||||||
|
TraceSInt {
|
||||||
|
id: TraceScalarId(10),
|
||||||
|
name: "i2",
|
||||||
|
ty: SInt<2>,
|
||||||
|
flow: Sink,
|
||||||
|
},
|
||||||
|
TraceUInt {
|
||||||
|
id: TraceScalarId(11),
|
||||||
|
name: "o2",
|
||||||
|
ty: UInt<4>,
|
||||||
|
flow: Source,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
ty: Bundle {
|
||||||
|
#[hdl(flip)] /* offset = 0 */
|
||||||
|
i: UInt<4>,
|
||||||
|
/* offset = 4 */
|
||||||
|
o: SInt<2>,
|
||||||
|
#[hdl(flip)] /* offset = 6 */
|
||||||
|
i2: SInt<2>,
|
||||||
|
/* offset = 8 */
|
||||||
|
o2: UInt<4>,
|
||||||
|
},
|
||||||
|
flow: Source,
|
||||||
|
},
|
||||||
|
module: TraceModule {
|
||||||
|
name: "mod1_child",
|
||||||
|
children: [
|
||||||
|
TraceModuleIO {
|
||||||
|
name: "i",
|
||||||
|
child: TraceUInt {
|
||||||
|
id: TraceScalarId(4),
|
||||||
|
name: "i",
|
||||||
|
ty: UInt<4>,
|
||||||
|
flow: Source,
|
||||||
|
},
|
||||||
|
ty: UInt<4>,
|
||||||
|
flow: Source,
|
||||||
|
},
|
||||||
|
TraceModuleIO {
|
||||||
|
name: "o",
|
||||||
|
child: TraceSInt {
|
||||||
|
id: TraceScalarId(5),
|
||||||
|
name: "o",
|
||||||
|
ty: SInt<2>,
|
||||||
|
flow: Sink,
|
||||||
|
},
|
||||||
|
ty: SInt<2>,
|
||||||
|
flow: Sink,
|
||||||
|
},
|
||||||
|
TraceModuleIO {
|
||||||
|
name: "i2",
|
||||||
|
child: TraceSInt {
|
||||||
|
id: TraceScalarId(6),
|
||||||
|
name: "i2",
|
||||||
|
ty: SInt<2>,
|
||||||
|
flow: Source,
|
||||||
|
},
|
||||||
|
ty: SInt<2>,
|
||||||
|
flow: Source,
|
||||||
|
},
|
||||||
|
TraceModuleIO {
|
||||||
|
name: "o2",
|
||||||
|
child: TraceUInt {
|
||||||
|
id: TraceScalarId(7),
|
||||||
|
name: "o2",
|
||||||
|
ty: UInt<4>,
|
||||||
|
flow: Sink,
|
||||||
|
},
|
||||||
|
ty: UInt<4>,
|
||||||
|
flow: Sink,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
ty: Bundle {
|
||||||
|
#[hdl(flip)] /* offset = 0 */
|
||||||
|
i: UInt<4>,
|
||||||
|
/* offset = 4 */
|
||||||
|
o: SInt<2>,
|
||||||
|
#[hdl(flip)] /* offset = 6 */
|
||||||
|
i2: SInt<2>,
|
||||||
|
/* offset = 8 */
|
||||||
|
o2: UInt<4>,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
traces: [
|
||||||
|
SimTrace {
|
||||||
|
id: TraceScalarId(0),
|
||||||
|
kind: BigUInt {
|
||||||
|
index: StatePartIndex<BigSlots>(0),
|
||||||
|
ty: UInt<4>,
|
||||||
|
},
|
||||||
|
state: 0xa,
|
||||||
|
last_state: 0x3,
|
||||||
|
},
|
||||||
|
SimTrace {
|
||||||
|
id: TraceScalarId(1),
|
||||||
|
kind: BigSInt {
|
||||||
|
index: StatePartIndex<BigSlots>(1),
|
||||||
|
ty: SInt<2>,
|
||||||
|
},
|
||||||
|
state: 0x2,
|
||||||
|
last_state: 0x3,
|
||||||
|
},
|
||||||
|
SimTrace {
|
||||||
|
id: TraceScalarId(2),
|
||||||
|
kind: BigSInt {
|
||||||
|
index: StatePartIndex<BigSlots>(2),
|
||||||
|
ty: SInt<2>,
|
||||||
|
},
|
||||||
|
state: 0x2,
|
||||||
|
last_state: 0x2,
|
||||||
|
},
|
||||||
|
SimTrace {
|
||||||
|
id: TraceScalarId(3),
|
||||||
|
kind: BigUInt {
|
||||||
|
index: StatePartIndex<BigSlots>(3),
|
||||||
|
ty: UInt<4>,
|
||||||
|
},
|
||||||
|
state: 0xf,
|
||||||
|
last_state: 0xe,
|
||||||
|
},
|
||||||
|
SimTrace {
|
||||||
|
id: TraceScalarId(4),
|
||||||
|
kind: BigUInt {
|
||||||
|
index: StatePartIndex<BigSlots>(8),
|
||||||
|
ty: UInt<4>,
|
||||||
|
},
|
||||||
|
state: 0xa,
|
||||||
|
last_state: 0x3,
|
||||||
|
},
|
||||||
|
SimTrace {
|
||||||
|
id: TraceScalarId(5),
|
||||||
|
kind: BigSInt {
|
||||||
|
index: StatePartIndex<BigSlots>(9),
|
||||||
|
ty: SInt<2>,
|
||||||
|
},
|
||||||
|
state: 0x2,
|
||||||
|
last_state: 0x3,
|
||||||
|
},
|
||||||
|
SimTrace {
|
||||||
|
id: TraceScalarId(6),
|
||||||
|
kind: BigSInt {
|
||||||
|
index: StatePartIndex<BigSlots>(10),
|
||||||
|
ty: SInt<2>,
|
||||||
|
},
|
||||||
|
state: 0x2,
|
||||||
|
last_state: 0x2,
|
||||||
|
},
|
||||||
|
SimTrace {
|
||||||
|
id: TraceScalarId(7),
|
||||||
|
kind: BigUInt {
|
||||||
|
index: StatePartIndex<BigSlots>(11),
|
||||||
|
ty: UInt<4>,
|
||||||
|
},
|
||||||
|
state: 0xf,
|
||||||
|
last_state: 0xe,
|
||||||
|
},
|
||||||
|
SimTrace {
|
||||||
|
id: TraceScalarId(8),
|
||||||
|
kind: BigUInt {
|
||||||
|
index: StatePartIndex<BigSlots>(4),
|
||||||
|
ty: UInt<4>,
|
||||||
|
},
|
||||||
|
state: 0xa,
|
||||||
|
last_state: 0x3,
|
||||||
|
},
|
||||||
|
SimTrace {
|
||||||
|
id: TraceScalarId(9),
|
||||||
|
kind: BigSInt {
|
||||||
|
index: StatePartIndex<BigSlots>(5),
|
||||||
|
ty: SInt<2>,
|
||||||
|
},
|
||||||
|
state: 0x2,
|
||||||
|
last_state: 0x3,
|
||||||
|
},
|
||||||
|
SimTrace {
|
||||||
|
id: TraceScalarId(10),
|
||||||
|
kind: BigSInt {
|
||||||
|
index: StatePartIndex<BigSlots>(6),
|
||||||
|
ty: SInt<2>,
|
||||||
|
},
|
||||||
|
state: 0x2,
|
||||||
|
last_state: 0x2,
|
||||||
|
},
|
||||||
|
SimTrace {
|
||||||
|
id: TraceScalarId(11),
|
||||||
|
kind: BigUInt {
|
||||||
|
index: StatePartIndex<BigSlots>(7),
|
||||||
|
ty: UInt<4>,
|
||||||
|
},
|
||||||
|
state: 0xf,
|
||||||
|
last_state: 0xe,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
trace_writers: [
|
||||||
|
Running(
|
||||||
|
VcdWriter {
|
||||||
|
finished_init: true,
|
||||||
|
timescale: 1 ps,
|
||||||
|
..
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
instant: 2 μs,
|
||||||
|
clocks_triggered: [],
|
||||||
|
}
|
47
crates/fayalite/tests/sim/expected/mod1.vcd
Normal file
47
crates/fayalite/tests/sim/expected/mod1.vcd
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
$timescale 1 ps $end
|
||||||
|
$scope module mod1 $end
|
||||||
|
$scope struct o $end
|
||||||
|
$var wire 4 ! i $end
|
||||||
|
$var wire 2 " o $end
|
||||||
|
$var wire 2 # i2 $end
|
||||||
|
$var wire 4 $ o2 $end
|
||||||
|
$upscope $end
|
||||||
|
$scope struct child $end
|
||||||
|
$var wire 4 ) i $end
|
||||||
|
$var wire 2 * o $end
|
||||||
|
$var wire 2 + i2 $end
|
||||||
|
$var wire 4 , o2 $end
|
||||||
|
$upscope $end
|
||||||
|
$scope module mod1_child $end
|
||||||
|
$var wire 4 % i $end
|
||||||
|
$var wire 2 & o $end
|
||||||
|
$var wire 2 ' i2 $end
|
||||||
|
$var wire 4 ( o2 $end
|
||||||
|
$upscope $end
|
||||||
|
$upscope $end
|
||||||
|
$enddefinitions $end
|
||||||
|
$dumpvars
|
||||||
|
b11 !
|
||||||
|
b11 "
|
||||||
|
b10 #
|
||||||
|
b1110 $
|
||||||
|
b11 %
|
||||||
|
b11 &
|
||||||
|
b10 '
|
||||||
|
b1110 (
|
||||||
|
b11 )
|
||||||
|
b11 *
|
||||||
|
b10 +
|
||||||
|
b1110 ,
|
||||||
|
$end
|
||||||
|
#1000000
|
||||||
|
b1010 !
|
||||||
|
b10 "
|
||||||
|
b1111 $
|
||||||
|
b1010 %
|
||||||
|
b10 &
|
||||||
|
b1111 (
|
||||||
|
b1010 )
|
||||||
|
b10 *
|
||||||
|
b1111 ,
|
||||||
|
#2000000
|
670
crates/fayalite/tests/sim/expected/shift_register.txt
Normal file
670
crates/fayalite/tests/sim/expected/shift_register.txt
Normal file
|
@ -0,0 +1,670 @@
|
||||||
|
Simulation {
|
||||||
|
state: State {
|
||||||
|
insns: Insns {
|
||||||
|
state_layout: StateLayout {
|
||||||
|
ty: TypeLayout {
|
||||||
|
small_slots: StatePartAllocationLayout<SmallSlots> {
|
||||||
|
len: 4,
|
||||||
|
debug_data: [
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: Bool,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: Bool,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: Bool,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: Bool,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
big_slots: StatePartAllocationLayout<BigSlots> {
|
||||||
|
len: 13,
|
||||||
|
debug_data: [
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(shift_register: shift_register).shift_register::cd.clk",
|
||||||
|
ty: Clock,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(shift_register: shift_register).shift_register::cd.rst",
|
||||||
|
ty: SyncReset,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(shift_register: shift_register).shift_register::d",
|
||||||
|
ty: Bool,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(shift_register: shift_register).shift_register::q",
|
||||||
|
ty: Bool,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(shift_register: shift_register).shift_register::reg0",
|
||||||
|
ty: Bool,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(shift_register: shift_register).shift_register::reg0$next",
|
||||||
|
ty: Bool,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: Bool,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(shift_register: shift_register).shift_register::reg1",
|
||||||
|
ty: Bool,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(shift_register: shift_register).shift_register::reg1$next",
|
||||||
|
ty: Bool,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(shift_register: shift_register).shift_register::reg2",
|
||||||
|
ty: Bool,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(shift_register: shift_register).shift_register::reg2$next",
|
||||||
|
ty: Bool,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(shift_register: shift_register).shift_register::reg3",
|
||||||
|
ty: Bool,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(shift_register: shift_register).shift_register::reg3$next",
|
||||||
|
ty: Bool,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
insns: [
|
||||||
|
// at: module-XXXXXXXXXX.rs:13:1
|
||||||
|
Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(3), // SlotDebugData { name: "InstantiatedModule(shift_register: shift_register).shift_register::q", ty: Bool },
|
||||||
|
src: StatePartIndex<BigSlots>(11), // SlotDebugData { name: "InstantiatedModule(shift_register: shift_register).shift_register::reg3", ty: Bool },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:12:1
|
||||||
|
Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(12), // SlotDebugData { name: "InstantiatedModule(shift_register: shift_register).shift_register::reg3$next", ty: Bool },
|
||||||
|
src: StatePartIndex<BigSlots>(9), // SlotDebugData { name: "InstantiatedModule(shift_register: shift_register).shift_register::reg2", ty: Bool },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:10:1
|
||||||
|
Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(10), // SlotDebugData { name: "InstantiatedModule(shift_register: shift_register).shift_register::reg2$next", ty: Bool },
|
||||||
|
src: StatePartIndex<BigSlots>(7), // SlotDebugData { name: "InstantiatedModule(shift_register: shift_register).shift_register::reg1", ty: Bool },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:8:1
|
||||||
|
Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(8), // SlotDebugData { name: "InstantiatedModule(shift_register: shift_register).shift_register::reg1$next", ty: Bool },
|
||||||
|
src: StatePartIndex<BigSlots>(4), // SlotDebugData { name: "InstantiatedModule(shift_register: shift_register).shift_register::reg0", ty: Bool },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:6:1
|
||||||
|
Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(5), // SlotDebugData { name: "InstantiatedModule(shift_register: shift_register).shift_register::reg0$next", ty: Bool },
|
||||||
|
src: StatePartIndex<BigSlots>(2), // SlotDebugData { name: "InstantiatedModule(shift_register: shift_register).shift_register::d", ty: Bool },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:5:1
|
||||||
|
IsNonZeroDestIsSmall {
|
||||||
|
dest: StatePartIndex<SmallSlots>(3), // SlotDebugData { name: "", ty: Bool },
|
||||||
|
src: StatePartIndex<BigSlots>(1), // SlotDebugData { name: "InstantiatedModule(shift_register: shift_register).shift_register::cd.rst", ty: SyncReset },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:1:1
|
||||||
|
Const {
|
||||||
|
dest: StatePartIndex<BigSlots>(6), // SlotDebugData { name: "", ty: Bool },
|
||||||
|
value: 0,
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:5:1
|
||||||
|
IsNonZeroDestIsSmall {
|
||||||
|
dest: StatePartIndex<SmallSlots>(2), // SlotDebugData { name: "", ty: Bool },
|
||||||
|
src: StatePartIndex<BigSlots>(0), // SlotDebugData { name: "InstantiatedModule(shift_register: shift_register).shift_register::cd.clk", ty: Clock },
|
||||||
|
},
|
||||||
|
AndSmall {
|
||||||
|
dest: StatePartIndex<SmallSlots>(1), // SlotDebugData { name: "", ty: Bool },
|
||||||
|
lhs: StatePartIndex<SmallSlots>(2), // SlotDebugData { name: "", ty: Bool },
|
||||||
|
rhs: StatePartIndex<SmallSlots>(0), // SlotDebugData { name: "", ty: Bool },
|
||||||
|
},
|
||||||
|
BranchIfSmallZero {
|
||||||
|
target: 14,
|
||||||
|
value: StatePartIndex<SmallSlots>(1), // SlotDebugData { name: "", ty: Bool },
|
||||||
|
},
|
||||||
|
BranchIfSmallNonZero {
|
||||||
|
target: 13,
|
||||||
|
value: StatePartIndex<SmallSlots>(3), // SlotDebugData { name: "", ty: Bool },
|
||||||
|
},
|
||||||
|
Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(4), // SlotDebugData { name: "InstantiatedModule(shift_register: shift_register).shift_register::reg0", ty: Bool },
|
||||||
|
src: StatePartIndex<BigSlots>(5), // SlotDebugData { name: "InstantiatedModule(shift_register: shift_register).shift_register::reg0$next", ty: Bool },
|
||||||
|
},
|
||||||
|
Branch {
|
||||||
|
target: 14,
|
||||||
|
},
|
||||||
|
Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(4), // SlotDebugData { name: "InstantiatedModule(shift_register: shift_register).shift_register::reg0", ty: Bool },
|
||||||
|
src: StatePartIndex<BigSlots>(6), // SlotDebugData { name: "", ty: Bool },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:7:1
|
||||||
|
BranchIfSmallZero {
|
||||||
|
target: 19,
|
||||||
|
value: StatePartIndex<SmallSlots>(1), // SlotDebugData { name: "", ty: Bool },
|
||||||
|
},
|
||||||
|
BranchIfSmallNonZero {
|
||||||
|
target: 18,
|
||||||
|
value: StatePartIndex<SmallSlots>(3), // SlotDebugData { name: "", ty: Bool },
|
||||||
|
},
|
||||||
|
Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(7), // SlotDebugData { name: "InstantiatedModule(shift_register: shift_register).shift_register::reg1", ty: Bool },
|
||||||
|
src: StatePartIndex<BigSlots>(8), // SlotDebugData { name: "InstantiatedModule(shift_register: shift_register).shift_register::reg1$next", ty: Bool },
|
||||||
|
},
|
||||||
|
Branch {
|
||||||
|
target: 19,
|
||||||
|
},
|
||||||
|
Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(7), // SlotDebugData { name: "InstantiatedModule(shift_register: shift_register).shift_register::reg1", ty: Bool },
|
||||||
|
src: StatePartIndex<BigSlots>(6), // SlotDebugData { name: "", ty: Bool },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:9:1
|
||||||
|
BranchIfSmallZero {
|
||||||
|
target: 24,
|
||||||
|
value: StatePartIndex<SmallSlots>(1), // SlotDebugData { name: "", ty: Bool },
|
||||||
|
},
|
||||||
|
BranchIfSmallNonZero {
|
||||||
|
target: 23,
|
||||||
|
value: StatePartIndex<SmallSlots>(3), // SlotDebugData { name: "", ty: Bool },
|
||||||
|
},
|
||||||
|
Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(9), // SlotDebugData { name: "InstantiatedModule(shift_register: shift_register).shift_register::reg2", ty: Bool },
|
||||||
|
src: StatePartIndex<BigSlots>(10), // SlotDebugData { name: "InstantiatedModule(shift_register: shift_register).shift_register::reg2$next", ty: Bool },
|
||||||
|
},
|
||||||
|
Branch {
|
||||||
|
target: 24,
|
||||||
|
},
|
||||||
|
Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(9), // SlotDebugData { name: "InstantiatedModule(shift_register: shift_register).shift_register::reg2", ty: Bool },
|
||||||
|
src: StatePartIndex<BigSlots>(6), // SlotDebugData { name: "", ty: Bool },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:11:1
|
||||||
|
BranchIfSmallZero {
|
||||||
|
target: 29,
|
||||||
|
value: StatePartIndex<SmallSlots>(1), // SlotDebugData { name: "", ty: Bool },
|
||||||
|
},
|
||||||
|
BranchIfSmallNonZero {
|
||||||
|
target: 28,
|
||||||
|
value: StatePartIndex<SmallSlots>(3), // SlotDebugData { name: "", ty: Bool },
|
||||||
|
},
|
||||||
|
Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(11), // SlotDebugData { name: "InstantiatedModule(shift_register: shift_register).shift_register::reg3", ty: Bool },
|
||||||
|
src: StatePartIndex<BigSlots>(12), // SlotDebugData { name: "InstantiatedModule(shift_register: shift_register).shift_register::reg3$next", ty: Bool },
|
||||||
|
},
|
||||||
|
Branch {
|
||||||
|
target: 29,
|
||||||
|
},
|
||||||
|
Copy {
|
||||||
|
dest: StatePartIndex<BigSlots>(11), // SlotDebugData { name: "InstantiatedModule(shift_register: shift_register).shift_register::reg3", ty: Bool },
|
||||||
|
src: StatePartIndex<BigSlots>(6), // SlotDebugData { name: "", ty: Bool },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:5:1
|
||||||
|
NotSmall {
|
||||||
|
dest: StatePartIndex<SmallSlots>(0), // SlotDebugData { name: "", ty: Bool },
|
||||||
|
src: StatePartIndex<SmallSlots>(2), // SlotDebugData { name: "", ty: Bool },
|
||||||
|
},
|
||||||
|
// at: module-XXXXXXXXXX.rs:1:1
|
||||||
|
Return,
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
pc: 30,
|
||||||
|
small_slots: StatePart {
|
||||||
|
value: [
|
||||||
|
18446744073709551614,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
],
|
||||||
|
},
|
||||||
|
big_slots: StatePart {
|
||||||
|
value: [
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
io: Instance {
|
||||||
|
name: <simulator>::shift_register,
|
||||||
|
instantiated: Module {
|
||||||
|
name: shift_register,
|
||||||
|
..
|
||||||
|
},
|
||||||
|
},
|
||||||
|
uninitialized_inputs: {},
|
||||||
|
io_targets: {
|
||||||
|
Instance {
|
||||||
|
name: <simulator>::shift_register,
|
||||||
|
instantiated: Module {
|
||||||
|
name: shift_register,
|
||||||
|
..
|
||||||
|
},
|
||||||
|
}.cd: CompiledValue {
|
||||||
|
layout: CompiledTypeLayout {
|
||||||
|
ty: Bundle {
|
||||||
|
/* offset = 0 */
|
||||||
|
clk: Clock,
|
||||||
|
/* offset = 1 */
|
||||||
|
rst: SyncReset,
|
||||||
|
},
|
||||||
|
layout: TypeLayout {
|
||||||
|
small_slots: StatePartAllocationLayout<SmallSlots> {
|
||||||
|
len: 0,
|
||||||
|
debug_data: [],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
big_slots: StatePartAllocationLayout<BigSlots> {
|
||||||
|
len: 2,
|
||||||
|
debug_data: [
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(shift_register: shift_register).shift_register::cd.clk",
|
||||||
|
ty: Clock,
|
||||||
|
},
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(shift_register: shift_register).shift_register::cd.rst",
|
||||||
|
ty: SyncReset,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
},
|
||||||
|
body: Bundle {
|
||||||
|
fields: [
|
||||||
|
CompiledBundleField {
|
||||||
|
offset: TypeIndex {
|
||||||
|
small_slots: StatePartIndex<SmallSlots>(0),
|
||||||
|
big_slots: StatePartIndex<BigSlots>(0),
|
||||||
|
},
|
||||||
|
ty: CompiledTypeLayout {
|
||||||
|
ty: Clock,
|
||||||
|
layout: TypeLayout {
|
||||||
|
small_slots: StatePartAllocationLayout<SmallSlots> {
|
||||||
|
len: 0,
|
||||||
|
debug_data: [],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
big_slots: StatePartAllocationLayout<BigSlots> {
|
||||||
|
len: 1,
|
||||||
|
debug_data: [
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: Clock,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
},
|
||||||
|
body: Scalar,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
CompiledBundleField {
|
||||||
|
offset: TypeIndex {
|
||||||
|
small_slots: StatePartIndex<SmallSlots>(0),
|
||||||
|
big_slots: StatePartIndex<BigSlots>(1),
|
||||||
|
},
|
||||||
|
ty: CompiledTypeLayout {
|
||||||
|
ty: SyncReset,
|
||||||
|
layout: TypeLayout {
|
||||||
|
small_slots: StatePartAllocationLayout<SmallSlots> {
|
||||||
|
len: 0,
|
||||||
|
debug_data: [],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
big_slots: StatePartAllocationLayout<BigSlots> {
|
||||||
|
len: 1,
|
||||||
|
debug_data: [
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: SyncReset,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
},
|
||||||
|
body: Scalar,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
range: TypeIndexRange {
|
||||||
|
small_slots: StatePartIndexRange<SmallSlots> { start: 0, len: 0 },
|
||||||
|
big_slots: StatePartIndexRange<BigSlots> { start: 0, len: 2 },
|
||||||
|
},
|
||||||
|
write: None,
|
||||||
|
},
|
||||||
|
Instance {
|
||||||
|
name: <simulator>::shift_register,
|
||||||
|
instantiated: Module {
|
||||||
|
name: shift_register,
|
||||||
|
..
|
||||||
|
},
|
||||||
|
}.cd.clk: CompiledValue {
|
||||||
|
layout: CompiledTypeLayout {
|
||||||
|
ty: Clock,
|
||||||
|
layout: TypeLayout {
|
||||||
|
small_slots: StatePartAllocationLayout<SmallSlots> {
|
||||||
|
len: 0,
|
||||||
|
debug_data: [],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
big_slots: StatePartAllocationLayout<BigSlots> {
|
||||||
|
len: 1,
|
||||||
|
debug_data: [
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: Clock,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
},
|
||||||
|
body: Scalar,
|
||||||
|
},
|
||||||
|
range: TypeIndexRange {
|
||||||
|
small_slots: StatePartIndexRange<SmallSlots> { start: 0, len: 0 },
|
||||||
|
big_slots: StatePartIndexRange<BigSlots> { start: 0, len: 1 },
|
||||||
|
},
|
||||||
|
write: None,
|
||||||
|
},
|
||||||
|
Instance {
|
||||||
|
name: <simulator>::shift_register,
|
||||||
|
instantiated: Module {
|
||||||
|
name: shift_register,
|
||||||
|
..
|
||||||
|
},
|
||||||
|
}.cd.rst: CompiledValue {
|
||||||
|
layout: CompiledTypeLayout {
|
||||||
|
ty: SyncReset,
|
||||||
|
layout: TypeLayout {
|
||||||
|
small_slots: StatePartAllocationLayout<SmallSlots> {
|
||||||
|
len: 0,
|
||||||
|
debug_data: [],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
big_slots: StatePartAllocationLayout<BigSlots> {
|
||||||
|
len: 1,
|
||||||
|
debug_data: [
|
||||||
|
SlotDebugData {
|
||||||
|
name: "",
|
||||||
|
ty: SyncReset,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
},
|
||||||
|
body: Scalar,
|
||||||
|
},
|
||||||
|
range: TypeIndexRange {
|
||||||
|
small_slots: StatePartIndexRange<SmallSlots> { start: 0, len: 0 },
|
||||||
|
big_slots: StatePartIndexRange<BigSlots> { start: 1, len: 1 },
|
||||||
|
},
|
||||||
|
write: None,
|
||||||
|
},
|
||||||
|
Instance {
|
||||||
|
name: <simulator>::shift_register,
|
||||||
|
instantiated: Module {
|
||||||
|
name: shift_register,
|
||||||
|
..
|
||||||
|
},
|
||||||
|
}.d: CompiledValue {
|
||||||
|
layout: CompiledTypeLayout {
|
||||||
|
ty: Bool,
|
||||||
|
layout: TypeLayout {
|
||||||
|
small_slots: StatePartAllocationLayout<SmallSlots> {
|
||||||
|
len: 0,
|
||||||
|
debug_data: [],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
big_slots: StatePartAllocationLayout<BigSlots> {
|
||||||
|
len: 1,
|
||||||
|
debug_data: [
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(shift_register: shift_register).shift_register::d",
|
||||||
|
ty: Bool,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
},
|
||||||
|
body: Scalar,
|
||||||
|
},
|
||||||
|
range: TypeIndexRange {
|
||||||
|
small_slots: StatePartIndexRange<SmallSlots> { start: 0, len: 0 },
|
||||||
|
big_slots: StatePartIndexRange<BigSlots> { start: 2, len: 1 },
|
||||||
|
},
|
||||||
|
write: None,
|
||||||
|
},
|
||||||
|
Instance {
|
||||||
|
name: <simulator>::shift_register,
|
||||||
|
instantiated: Module {
|
||||||
|
name: shift_register,
|
||||||
|
..
|
||||||
|
},
|
||||||
|
}.q: CompiledValue {
|
||||||
|
layout: CompiledTypeLayout {
|
||||||
|
ty: Bool,
|
||||||
|
layout: TypeLayout {
|
||||||
|
small_slots: StatePartAllocationLayout<SmallSlots> {
|
||||||
|
len: 0,
|
||||||
|
debug_data: [],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
big_slots: StatePartAllocationLayout<BigSlots> {
|
||||||
|
len: 1,
|
||||||
|
debug_data: [
|
||||||
|
SlotDebugData {
|
||||||
|
name: "InstantiatedModule(shift_register: shift_register).shift_register::q",
|
||||||
|
ty: Bool,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
..
|
||||||
|
},
|
||||||
|
},
|
||||||
|
body: Scalar,
|
||||||
|
},
|
||||||
|
range: TypeIndexRange {
|
||||||
|
small_slots: StatePartIndexRange<SmallSlots> { start: 0, len: 0 },
|
||||||
|
big_slots: StatePartIndexRange<BigSlots> { start: 3, len: 1 },
|
||||||
|
},
|
||||||
|
write: None,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
made_initial_step: true,
|
||||||
|
needs_settle: false,
|
||||||
|
trace_decls: TraceModule {
|
||||||
|
name: "shift_register",
|
||||||
|
children: [
|
||||||
|
TraceModuleIO {
|
||||||
|
name: "cd",
|
||||||
|
child: TraceBundle {
|
||||||
|
name: "cd",
|
||||||
|
fields: [
|
||||||
|
TraceClock {
|
||||||
|
id: TraceScalarId(0),
|
||||||
|
name: "clk",
|
||||||
|
flow: Source,
|
||||||
|
},
|
||||||
|
TraceSyncReset {
|
||||||
|
id: TraceScalarId(1),
|
||||||
|
name: "rst",
|
||||||
|
flow: Source,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
ty: Bundle {
|
||||||
|
/* offset = 0 */
|
||||||
|
clk: Clock,
|
||||||
|
/* offset = 1 */
|
||||||
|
rst: SyncReset,
|
||||||
|
},
|
||||||
|
flow: Source,
|
||||||
|
},
|
||||||
|
ty: Bundle {
|
||||||
|
/* offset = 0 */
|
||||||
|
clk: Clock,
|
||||||
|
/* offset = 1 */
|
||||||
|
rst: SyncReset,
|
||||||
|
},
|
||||||
|
flow: Source,
|
||||||
|
},
|
||||||
|
TraceModuleIO {
|
||||||
|
name: "d",
|
||||||
|
child: TraceBool {
|
||||||
|
id: TraceScalarId(2),
|
||||||
|
name: "d",
|
||||||
|
flow: Source,
|
||||||
|
},
|
||||||
|
ty: Bool,
|
||||||
|
flow: Source,
|
||||||
|
},
|
||||||
|
TraceModuleIO {
|
||||||
|
name: "q",
|
||||||
|
child: TraceBool {
|
||||||
|
id: TraceScalarId(3),
|
||||||
|
name: "q",
|
||||||
|
flow: Sink,
|
||||||
|
},
|
||||||
|
ty: Bool,
|
||||||
|
flow: Sink,
|
||||||
|
},
|
||||||
|
TraceReg {
|
||||||
|
name: "reg0",
|
||||||
|
child: TraceBool {
|
||||||
|
id: TraceScalarId(4),
|
||||||
|
name: "reg0",
|
||||||
|
flow: Duplex,
|
||||||
|
},
|
||||||
|
ty: Bool,
|
||||||
|
},
|
||||||
|
TraceReg {
|
||||||
|
name: "reg1",
|
||||||
|
child: TraceBool {
|
||||||
|
id: TraceScalarId(5),
|
||||||
|
name: "reg1",
|
||||||
|
flow: Duplex,
|
||||||
|
},
|
||||||
|
ty: Bool,
|
||||||
|
},
|
||||||
|
TraceReg {
|
||||||
|
name: "reg2",
|
||||||
|
child: TraceBool {
|
||||||
|
id: TraceScalarId(6),
|
||||||
|
name: "reg2",
|
||||||
|
flow: Duplex,
|
||||||
|
},
|
||||||
|
ty: Bool,
|
||||||
|
},
|
||||||
|
TraceReg {
|
||||||
|
name: "reg3",
|
||||||
|
child: TraceBool {
|
||||||
|
id: TraceScalarId(7),
|
||||||
|
name: "reg3",
|
||||||
|
flow: Duplex,
|
||||||
|
},
|
||||||
|
ty: Bool,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
traces: [
|
||||||
|
SimTrace {
|
||||||
|
id: TraceScalarId(0),
|
||||||
|
kind: BigClock {
|
||||||
|
index: StatePartIndex<BigSlots>(0),
|
||||||
|
},
|
||||||
|
state: 0x1,
|
||||||
|
last_state: 0x1,
|
||||||
|
},
|
||||||
|
SimTrace {
|
||||||
|
id: TraceScalarId(1),
|
||||||
|
kind: BigSyncReset {
|
||||||
|
index: StatePartIndex<BigSlots>(1),
|
||||||
|
},
|
||||||
|
state: 0x0,
|
||||||
|
last_state: 0x0,
|
||||||
|
},
|
||||||
|
SimTrace {
|
||||||
|
id: TraceScalarId(2),
|
||||||
|
kind: BigBool {
|
||||||
|
index: StatePartIndex<BigSlots>(2),
|
||||||
|
},
|
||||||
|
state: 0x0,
|
||||||
|
last_state: 0x0,
|
||||||
|
},
|
||||||
|
SimTrace {
|
||||||
|
id: TraceScalarId(3),
|
||||||
|
kind: BigBool {
|
||||||
|
index: StatePartIndex<BigSlots>(3),
|
||||||
|
},
|
||||||
|
state: 0x0,
|
||||||
|
last_state: 0x0,
|
||||||
|
},
|
||||||
|
SimTrace {
|
||||||
|
id: TraceScalarId(4),
|
||||||
|
kind: BigBool {
|
||||||
|
index: StatePartIndex<BigSlots>(4),
|
||||||
|
},
|
||||||
|
state: 0x0,
|
||||||
|
last_state: 0x0,
|
||||||
|
},
|
||||||
|
SimTrace {
|
||||||
|
id: TraceScalarId(5),
|
||||||
|
kind: BigBool {
|
||||||
|
index: StatePartIndex<BigSlots>(7),
|
||||||
|
},
|
||||||
|
state: 0x0,
|
||||||
|
last_state: 0x0,
|
||||||
|
},
|
||||||
|
SimTrace {
|
||||||
|
id: TraceScalarId(6),
|
||||||
|
kind: BigBool {
|
||||||
|
index: StatePartIndex<BigSlots>(9),
|
||||||
|
},
|
||||||
|
state: 0x0,
|
||||||
|
last_state: 0x0,
|
||||||
|
},
|
||||||
|
SimTrace {
|
||||||
|
id: TraceScalarId(7),
|
||||||
|
kind: BigBool {
|
||||||
|
index: StatePartIndex<BigSlots>(11),
|
||||||
|
},
|
||||||
|
state: 0x0,
|
||||||
|
last_state: 0x0,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
trace_writers: [
|
||||||
|
Running(
|
||||||
|
VcdWriter {
|
||||||
|
finished_init: true,
|
||||||
|
timescale: 1 ps,
|
||||||
|
..
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
instant: 66 μs,
|
||||||
|
clocks_triggered: [
|
||||||
|
StatePartIndex<SmallSlots>(1),
|
||||||
|
],
|
||||||
|
}
|
193
crates/fayalite/tests/sim/expected/shift_register.vcd
Normal file
193
crates/fayalite/tests/sim/expected/shift_register.vcd
Normal file
|
@ -0,0 +1,193 @@
|
||||||
|
$timescale 1 ps $end
|
||||||
|
$scope module shift_register $end
|
||||||
|
$scope struct cd $end
|
||||||
|
$var wire 1 ! clk $end
|
||||||
|
$var wire 1 " rst $end
|
||||||
|
$upscope $end
|
||||||
|
$var wire 1 # d $end
|
||||||
|
$var wire 1 $ q $end
|
||||||
|
$var reg 1 % reg0 $end
|
||||||
|
$var reg 1 & reg1 $end
|
||||||
|
$var reg 1 ' reg2 $end
|
||||||
|
$var reg 1 ( reg3 $end
|
||||||
|
$upscope $end
|
||||||
|
$enddefinitions $end
|
||||||
|
$dumpvars
|
||||||
|
0!
|
||||||
|
1"
|
||||||
|
0#
|
||||||
|
0$
|
||||||
|
0%
|
||||||
|
0&
|
||||||
|
0'
|
||||||
|
0(
|
||||||
|
$end
|
||||||
|
#1000000
|
||||||
|
1!
|
||||||
|
#1100000
|
||||||
|
0"
|
||||||
|
#2000000
|
||||||
|
0!
|
||||||
|
#3000000
|
||||||
|
1!
|
||||||
|
#4000000
|
||||||
|
0!
|
||||||
|
1#
|
||||||
|
#5000000
|
||||||
|
1!
|
||||||
|
1%
|
||||||
|
#6000000
|
||||||
|
0!
|
||||||
|
#7000000
|
||||||
|
1!
|
||||||
|
1&
|
||||||
|
#8000000
|
||||||
|
0!
|
||||||
|
0#
|
||||||
|
#9000000
|
||||||
|
1!
|
||||||
|
0%
|
||||||
|
1'
|
||||||
|
#10000000
|
||||||
|
0!
|
||||||
|
#11000000
|
||||||
|
1!
|
||||||
|
0&
|
||||||
|
1(
|
||||||
|
1$
|
||||||
|
#12000000
|
||||||
|
0!
|
||||||
|
1#
|
||||||
|
#13000000
|
||||||
|
1!
|
||||||
|
1%
|
||||||
|
0'
|
||||||
|
#14000000
|
||||||
|
0!
|
||||||
|
0#
|
||||||
|
#15000000
|
||||||
|
1!
|
||||||
|
0%
|
||||||
|
1&
|
||||||
|
0(
|
||||||
|
0$
|
||||||
|
#16000000
|
||||||
|
0!
|
||||||
|
1#
|
||||||
|
#17000000
|
||||||
|
1!
|
||||||
|
1%
|
||||||
|
0&
|
||||||
|
1'
|
||||||
|
#18000000
|
||||||
|
0!
|
||||||
|
#19000000
|
||||||
|
1!
|
||||||
|
1&
|
||||||
|
0'
|
||||||
|
1(
|
||||||
|
1$
|
||||||
|
#20000000
|
||||||
|
0!
|
||||||
|
#21000000
|
||||||
|
1!
|
||||||
|
1'
|
||||||
|
0(
|
||||||
|
0$
|
||||||
|
#22000000
|
||||||
|
0!
|
||||||
|
#23000000
|
||||||
|
1!
|
||||||
|
1(
|
||||||
|
1$
|
||||||
|
#24000000
|
||||||
|
0!
|
||||||
|
0#
|
||||||
|
#25000000
|
||||||
|
1!
|
||||||
|
0%
|
||||||
|
#26000000
|
||||||
|
0!
|
||||||
|
#27000000
|
||||||
|
1!
|
||||||
|
0&
|
||||||
|
#28000000
|
||||||
|
0!
|
||||||
|
#29000000
|
||||||
|
1!
|
||||||
|
0'
|
||||||
|
#30000000
|
||||||
|
0!
|
||||||
|
#31000000
|
||||||
|
1!
|
||||||
|
0(
|
||||||
|
0$
|
||||||
|
#32000000
|
||||||
|
0!
|
||||||
|
#33000000
|
||||||
|
1!
|
||||||
|
#34000000
|
||||||
|
0!
|
||||||
|
#35000000
|
||||||
|
1!
|
||||||
|
#36000000
|
||||||
|
0!
|
||||||
|
#37000000
|
||||||
|
1!
|
||||||
|
#38000000
|
||||||
|
0!
|
||||||
|
#39000000
|
||||||
|
1!
|
||||||
|
#40000000
|
||||||
|
0!
|
||||||
|
#41000000
|
||||||
|
1!
|
||||||
|
#42000000
|
||||||
|
0!
|
||||||
|
#43000000
|
||||||
|
1!
|
||||||
|
#44000000
|
||||||
|
0!
|
||||||
|
#45000000
|
||||||
|
1!
|
||||||
|
#46000000
|
||||||
|
0!
|
||||||
|
#47000000
|
||||||
|
1!
|
||||||
|
#48000000
|
||||||
|
0!
|
||||||
|
#49000000
|
||||||
|
1!
|
||||||
|
#50000000
|
||||||
|
0!
|
||||||
|
#51000000
|
||||||
|
1!
|
||||||
|
#52000000
|
||||||
|
0!
|
||||||
|
#53000000
|
||||||
|
1!
|
||||||
|
#54000000
|
||||||
|
0!
|
||||||
|
#55000000
|
||||||
|
1!
|
||||||
|
#56000000
|
||||||
|
0!
|
||||||
|
#57000000
|
||||||
|
1!
|
||||||
|
#58000000
|
||||||
|
0!
|
||||||
|
#59000000
|
||||||
|
1!
|
||||||
|
#60000000
|
||||||
|
0!
|
||||||
|
#61000000
|
||||||
|
1!
|
||||||
|
#62000000
|
||||||
|
0!
|
||||||
|
#63000000
|
||||||
|
1!
|
||||||
|
#64000000
|
||||||
|
0!
|
||||||
|
#65000000
|
||||||
|
1!
|
||||||
|
#66000000
|
|
@ -46,7 +46,7 @@ function main()
|
||||||
*/LICENSE.md|*/Notices.txt)
|
*/LICENSE.md|*/Notices.txt)
|
||||||
# copyright file
|
# copyright file
|
||||||
;;
|
;;
|
||||||
/crates/fayalite/tests/ui/*.stderr)
|
/crates/fayalite/tests/ui/*.stderr|/crates/fayalite/tests/sim/expected/*.vcd|/crates/fayalite/tests/sim/expected/*.txt)
|
||||||
# file that can't contain copyright header
|
# file that can't contain copyright header
|
||||||
;;
|
;;
|
||||||
/.forgejo/workflows/*.yml|*/.gitignore|*.toml)
|
/.forgejo/workflows/*.yml|*/.gitignore|*.toml)
|
||||||
|
|
Loading…
Reference in a new issue