Tests/cocotb (#19)
* wip * reorg * update sv int * apb4 working * apb3 working * version bump + ignore runner warning * remove redundant check * adding log on failure * cleaning up verilator version issue * devcontainer * Fix missing libpython in GitHub Actions CI environment (#21) * Initial plan * Install libpython in GitHub Actions for cocotb tests Co-authored-by: arnavsacheti <36746504+arnavsacheti@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: arnavsacheti <36746504+arnavsacheti@users.noreply.github.com> --------- Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
This commit is contained in:
105
tests/cocotb_lib/rdl/asymmetric_bus.rdl
Normal file
105
tests/cocotb_lib/rdl/asymmetric_bus.rdl
Normal file
@@ -0,0 +1,105 @@
|
||||
regfile port_rf {
|
||||
reg {
|
||||
field {
|
||||
sw = rw;
|
||||
hw = rw;
|
||||
reset = 0x0;
|
||||
} port_enable[0:0];
|
||||
|
||||
field {
|
||||
sw = rw;
|
||||
hw = rw;
|
||||
reset = 0x0;
|
||||
} port_speed[3:1];
|
||||
|
||||
field {
|
||||
sw = rw;
|
||||
hw = rw;
|
||||
reset = 0x0;
|
||||
} port_width[8:4];
|
||||
} control @ 0x0;
|
||||
|
||||
reg {
|
||||
field {
|
||||
sw = r;
|
||||
hw = w;
|
||||
reset = 0x0;
|
||||
} error_count[15:0];
|
||||
|
||||
field {
|
||||
sw = r;
|
||||
hw = w;
|
||||
reset = 0x0;
|
||||
} retry_count[31:16];
|
||||
} counters @ 0x4;
|
||||
|
||||
reg {
|
||||
field {
|
||||
sw = rw;
|
||||
hw = rw;
|
||||
reset = 0x0;
|
||||
} qos[7:0];
|
||||
|
||||
field {
|
||||
sw = rw;
|
||||
hw = rw;
|
||||
reset = 0x0;
|
||||
} virtual_channel[9:8];
|
||||
} qos @ 0x8;
|
||||
};
|
||||
|
||||
addrmap asymmetric_bus {
|
||||
reg {
|
||||
field {
|
||||
sw = rw;
|
||||
hw = rw;
|
||||
reset = 0x0;
|
||||
} control[3:0];
|
||||
|
||||
field {
|
||||
sw = rw;
|
||||
hw = rw;
|
||||
reset = 0x0;
|
||||
} id[15:4];
|
||||
} control @ 0x0;
|
||||
|
||||
reg {
|
||||
field {
|
||||
sw = r;
|
||||
hw = w;
|
||||
reset = 0x0;
|
||||
} status_flags[19:0];
|
||||
} status @ 0x4;
|
||||
|
||||
reg {
|
||||
regwidth = 64;
|
||||
field {
|
||||
sw = rw;
|
||||
hw = rw;
|
||||
reset = 0x00abcdef;
|
||||
} timestamp_low[31:0];
|
||||
|
||||
field {
|
||||
sw = rw;
|
||||
hw = rw;
|
||||
reset = 0x00123456;
|
||||
} timestamp_high[55:32];
|
||||
} timestamp @ 0x8;
|
||||
|
||||
reg {
|
||||
regwidth = 128;
|
||||
field {
|
||||
sw = rw;
|
||||
hw = rw;
|
||||
reset = 0x0;
|
||||
} extended_id[63:0];
|
||||
|
||||
field {
|
||||
sw = rw;
|
||||
hw = rw;
|
||||
reset = 0x1;
|
||||
} parity[64:64];
|
||||
} extended @ 0x10;
|
||||
|
||||
port_rf port[6] @ 0x40 += 0x20;
|
||||
};
|
||||
115
tests/cocotb_lib/rdl/deep_hierarchy.rdl
Normal file
115
tests/cocotb_lib/rdl/deep_hierarchy.rdl
Normal file
@@ -0,0 +1,115 @@
|
||||
addrmap deep_hierarchy {
|
||||
regfile context_rf {
|
||||
reg {
|
||||
field {
|
||||
sw = rw;
|
||||
hw = r;
|
||||
reset = 0x1;
|
||||
} enable[7:0];
|
||||
|
||||
field {
|
||||
sw = r;
|
||||
hw = w;
|
||||
onread = rclr;
|
||||
reset = 0x0;
|
||||
} status[15:8];
|
||||
|
||||
field {
|
||||
sw = rw;
|
||||
hw = rw;
|
||||
reset = 0x55;
|
||||
} mode[23:16];
|
||||
} command @ 0x0;
|
||||
|
||||
reg {
|
||||
field {
|
||||
sw = rw;
|
||||
hw = rw;
|
||||
reset = 0x1234;
|
||||
} threshold[15:0];
|
||||
} threshold @ 0x4;
|
||||
|
||||
reg {
|
||||
field {
|
||||
sw = rw;
|
||||
hw = rw;
|
||||
reset = 0x0;
|
||||
} counter[31:0];
|
||||
} counter @ 0x8;
|
||||
};
|
||||
|
||||
regfile engine_rf {
|
||||
context_rf context[3] @ 0x0;
|
||||
|
||||
reg {
|
||||
field {
|
||||
sw = rw;
|
||||
hw = rw;
|
||||
reset = 0x0;
|
||||
} timeout[15:0];
|
||||
|
||||
field {
|
||||
sw = rw;
|
||||
hw = rw;
|
||||
reset = 0x1;
|
||||
} priority[19:16];
|
||||
} config @ 0x30;
|
||||
|
||||
reg {
|
||||
field {
|
||||
sw = r;
|
||||
hw = w;
|
||||
onread = rclr;
|
||||
reset = 0x0;
|
||||
} error[31:0];
|
||||
} error_log @ 0x34;
|
||||
};
|
||||
|
||||
addrmap fabric_slice {
|
||||
engine_rf engines[4] @ 0x0;
|
||||
|
||||
regfile monitor_rf {
|
||||
reg {
|
||||
field {
|
||||
sw = r;
|
||||
hw = w;
|
||||
reset = 0x0;
|
||||
} perf_count[31:0];
|
||||
} perf @ 0x0;
|
||||
|
||||
reg {
|
||||
field {
|
||||
sw = r;
|
||||
hw = w;
|
||||
reset = 0x0;
|
||||
} last_error[31:0];
|
||||
} last_error @ 0x4;
|
||||
};
|
||||
|
||||
monitor_rf monitor @ 0x400;
|
||||
|
||||
reg {
|
||||
field {
|
||||
sw = rw;
|
||||
hw = rw;
|
||||
reset = 0xdeadbeef;
|
||||
} fabric_ctrl[31:0];
|
||||
} fabric_ctrl @ 0x500;
|
||||
};
|
||||
|
||||
fabric_slice slices[2] @ 0x0 += 0x800;
|
||||
|
||||
reg {
|
||||
field {
|
||||
sw = rw;
|
||||
hw = rw;
|
||||
reset = 0x1;
|
||||
} global_enable[0:0];
|
||||
|
||||
field {
|
||||
sw = rw;
|
||||
hw = rw;
|
||||
reset = 0x4;
|
||||
} debug_level[3:1];
|
||||
} global_control @ 0x1000;
|
||||
};
|
||||
22
tests/cocotb_lib/rdl/multiple_reg.rdl
Normal file
22
tests/cocotb_lib/rdl/multiple_reg.rdl
Normal file
@@ -0,0 +1,22 @@
|
||||
addrmap multi_reg {
|
||||
reg {
|
||||
field {
|
||||
sw=rw;
|
||||
hw=r;
|
||||
} data[31:0];
|
||||
} reg1 @ 0x0;
|
||||
|
||||
reg {
|
||||
field {
|
||||
sw=r;
|
||||
hw=w;
|
||||
} status[15:0];
|
||||
} reg2 @ 0x4;
|
||||
|
||||
reg {
|
||||
field {
|
||||
sw=rw;
|
||||
hw=r;
|
||||
} control[7:0];
|
||||
} reg3 @ 0x8;
|
||||
};
|
||||
8
tests/cocotb_lib/rdl/simple.rdl
Normal file
8
tests/cocotb_lib/rdl/simple.rdl
Normal file
@@ -0,0 +1,8 @@
|
||||
addrmap simple_test {
|
||||
reg {
|
||||
field {
|
||||
sw=rw;
|
||||
hw=r;
|
||||
} data[31:0];
|
||||
} test_reg @ 0x0;
|
||||
};
|
||||
156
tests/cocotb_lib/rdl/variable_layout.rdl
Normal file
156
tests/cocotb_lib/rdl/variable_layout.rdl
Normal file
@@ -0,0 +1,156 @@
|
||||
reg ctrl_reg_t {
|
||||
desc = "Control register shared across channels.";
|
||||
|
||||
field {
|
||||
sw = rw;
|
||||
hw = rw;
|
||||
reset = 0x1;
|
||||
} enable[0:0];
|
||||
|
||||
field {
|
||||
sw = rw;
|
||||
hw = rw;
|
||||
reset = 0x2;
|
||||
} mode[3:1];
|
||||
|
||||
field {
|
||||
sw = rw;
|
||||
hw = rw;
|
||||
reset = 0x0;
|
||||
} prescale[11:4];
|
||||
};
|
||||
|
||||
regfile channel_rf {
|
||||
ctrl_reg_t control @ 0x0;
|
||||
|
||||
reg {
|
||||
field {
|
||||
sw = rw;
|
||||
hw = rw;
|
||||
reset = 0x0;
|
||||
} gain[11:0];
|
||||
|
||||
field {
|
||||
sw = rw;
|
||||
hw = rw;
|
||||
reset = 0x200;
|
||||
} offset[23:12];
|
||||
} calibrate @ 0x4;
|
||||
|
||||
reg {
|
||||
field {
|
||||
sw = rw;
|
||||
hw = rw;
|
||||
reset = 0x0;
|
||||
} sample_count[15:0];
|
||||
|
||||
field {
|
||||
sw = rw;
|
||||
hw = rw;
|
||||
reset = 0x0;
|
||||
} error_count[31:16];
|
||||
} counters @ 0x8;
|
||||
};
|
||||
|
||||
regfile slice_rf {
|
||||
reg {
|
||||
field {
|
||||
sw = rw;
|
||||
hw = rw;
|
||||
reset = 0x0;
|
||||
} slope[15:0];
|
||||
|
||||
field {
|
||||
sw = rw;
|
||||
hw = rw;
|
||||
reset = 0x0;
|
||||
} intercept[31:16];
|
||||
} calibration @ 0x0;
|
||||
|
||||
reg {
|
||||
regwidth = 64;
|
||||
field {
|
||||
sw = r;
|
||||
hw = w;
|
||||
reset = 0x0;
|
||||
} min_val[31:0];
|
||||
|
||||
field {
|
||||
sw = r;
|
||||
hw = w;
|
||||
reset = 0x0;
|
||||
} max_val[63:32];
|
||||
} range @ 0x4;
|
||||
};
|
||||
|
||||
regfile tile_rf {
|
||||
channel_rf channel[3] @ 0x0;
|
||||
|
||||
reg {
|
||||
field {
|
||||
sw = rw;
|
||||
hw = rw;
|
||||
reset = 0x0;
|
||||
} tile_mode[1:0];
|
||||
|
||||
field {
|
||||
sw = rw;
|
||||
hw = rw;
|
||||
reset = 0x0;
|
||||
} tile_enable[2:2];
|
||||
} tile_ctrl @ 0x100;
|
||||
|
||||
slice_rf slice[2] @ 0x200;
|
||||
};
|
||||
|
||||
regfile summary_rf {
|
||||
reg {
|
||||
field {
|
||||
sw = r;
|
||||
hw = w;
|
||||
reset = 0x0;
|
||||
} total_errors[31:0];
|
||||
} errors @ 0x0;
|
||||
|
||||
reg {
|
||||
field {
|
||||
sw = r;
|
||||
hw = w;
|
||||
reset = 0x0;
|
||||
} total_samples[31:0];
|
||||
} samples @ 0x4;
|
||||
|
||||
reg {
|
||||
field {
|
||||
sw = rw;
|
||||
hw = rw;
|
||||
reset = 0x0;
|
||||
} interrupt_enable[7:0];
|
||||
} interrupt_enable @ 0x8;
|
||||
};
|
||||
|
||||
addrmap variable_layout {
|
||||
tile_rf tiles[2] @ 0x0;
|
||||
|
||||
reg {
|
||||
field {
|
||||
sw = rw;
|
||||
hw = rw;
|
||||
reset = 0x0;
|
||||
} watchdog_enable[0:0];
|
||||
|
||||
field {
|
||||
sw = rw;
|
||||
hw = rw;
|
||||
reset = 0x100;
|
||||
} watchdog_timeout[16:1];
|
||||
|
||||
field {
|
||||
sw = rw;
|
||||
hw = rw;
|
||||
reset = 0x0;
|
||||
} watchdog_mode[18:17];
|
||||
} watchdog @ 0x2000;
|
||||
|
||||
summary_rf summary @ 0x3000;
|
||||
};
|
||||
69
tests/cocotb_lib/rdl/wide_status.rdl
Normal file
69
tests/cocotb_lib/rdl/wide_status.rdl
Normal file
@@ -0,0 +1,69 @@
|
||||
reg status_reg_t {
|
||||
regwidth = 64;
|
||||
desc = "Status register capturing wide flags and sticky bits.";
|
||||
|
||||
field {
|
||||
sw = r;
|
||||
hw = w;
|
||||
onread = rclr;
|
||||
reset = 0x0;
|
||||
} flags[62:0];
|
||||
|
||||
field {
|
||||
sw = rw;
|
||||
hw = r;
|
||||
reset = 0x1;
|
||||
} sticky_bit[63:63];
|
||||
};
|
||||
|
||||
reg metrics_reg_t {
|
||||
regwidth = 64;
|
||||
desc = "Metrics register pairing counters with thresholds.";
|
||||
|
||||
field {
|
||||
sw = r;
|
||||
hw = w;
|
||||
reset = 0x0;
|
||||
} count[31:0];
|
||||
|
||||
field {
|
||||
sw = rw;
|
||||
hw = rw;
|
||||
reset = 0x0;
|
||||
} threshold[63:32];
|
||||
};
|
||||
|
||||
addrmap wide_status {
|
||||
status_reg_t status_blocks[16] @ 0x0;
|
||||
|
||||
metrics_reg_t metrics[4] @ 0x400;
|
||||
|
||||
reg {
|
||||
regwidth = 128;
|
||||
field {
|
||||
sw = rw;
|
||||
hw = rw;
|
||||
reset = 0x0;
|
||||
} configuration[127:0];
|
||||
} configuration @ 0x800;
|
||||
|
||||
reg {
|
||||
field {
|
||||
sw = rw;
|
||||
hw = rw;
|
||||
reset = 0x0;
|
||||
} version_major[7:0];
|
||||
|
||||
field {
|
||||
sw = rw;
|
||||
hw = rw;
|
||||
reset = 0x1;
|
||||
} version_minor[15:8];
|
||||
|
||||
field {
|
||||
sw = rw;
|
||||
hw = rw;
|
||||
reset = 0x0100;
|
||||
} build[31:16];
|
||||
} version @ 0x900;
|
||||
};
|
||||
Reference in New Issue
Block a user