From e5d443b8cf27728462a36fea60cde2a7191e44ba Mon Sep 17 00:00:00 2001 From: dam1n19 <dam1n19@soton.ac.uk> Date: Thu, 6 Jul 2023 17:03:19 +0100 Subject: [PATCH] Created Basic Cocotb ADP Read Test --- verif/cocotb/test_adp.py | 79 ++++++++++++++++++++++++++++++++ verif/cocotb/test_chip.py | 47 ------------------- verif/tb/verilog/nanosoc_tb.v | 42 ++++++++--------- verif/tb/verilog/nanosoc_tb_qs.v | 42 ++++++++--------- 4 files changed, 121 insertions(+), 89 deletions(-) create mode 100644 verif/cocotb/test_adp.py delete mode 100644 verif/cocotb/test_chip.py diff --git a/verif/cocotb/test_adp.py b/verif/cocotb/test_adp.py new file mode 100644 index 0000000..64f2857 --- /dev/null +++ b/verif/cocotb/test_adp.py @@ -0,0 +1,79 @@ +from random import randint, randrange, getrandbits, shuffle +from collections.abc import Iterable + +import logging +import cocotb +from cocotb.clock import Clock +from cocotb.regression import TestFactory +from cocotb.result import TestFailure +from cocotb.triggers import ClockCycles, Combine, Join, RisingEdge + +from cocotbext.axi import AxiStreamBus, AxiStreamSource, AxiStreamSink, AxiStreamMonitor + +CLK_PERIOD = (10, "ns") + +# Class for ADP AXI Stream Interface +class ADPDriver (): + def __init__(self, send, recieve): + # Send Stream to NanoSoC + self.send = send + # Send Recieve to NanoSoC + self.recieve = recieve + +# Control ADP AXI Stream bus and create ADP Driver Object +def setup_adp(dut): + adp_sender = AxiStreamSource(AxiStreamBus.from_prefix(dut, "txd8"), dut.XTAL1, dut.NRST) + adp_reciever = AxiStreamSink(AxiStreamBus.from_prefix(dut, "rxd8"), dut.XTAL1, dut.NRST) + driver = ADPDriver(adp_sender, adp_reciever) + return driver + +# Start Clocks and Reset System +@cocotb.coroutine +async def setup_dut(dut): + cocotb.start_soon(Clock(dut.XTAL1, *CLK_PERIOD).start()) + dut.NRST.value = 0 + await ClockCycles(dut.XTAL1, 2) + dut.NRST.value = 1 + await ClockCycles(dut.XTAL1, 2) + +@cocotb.coroutine +async def write(driver, buf): + wr_count = 0 + for i in buf: + print(i) + await driver.tx.send(str(ord(i))) + return wr_count + +# Basic Test Clocks Test +@cocotb.test() +async def test_clocks(dut): + """Tests Clocks and Resets in Cocotb""" + log = logging.getLogger(f"cocotb.test") + await setup_dut(dut) + log.info("Setup Complete") + +# Basic Test Reading from ADP +@cocotb.test() +async def test_driver(dut): + """Tests ADP Driver""" + log = logging.getLogger(f"cocotb.test") + await setup_dut(dut) + adp_driver = setup_adp(dut) + logging.getLogger("cocotb.nanosoc_tb.rxd8").setLevel(logging.WARNING) + log.info("Setup Complete") + log.info("Starting Test") + temp_str = "" + while True: + # Read Bytes from ADP AXI Stream + data = await adp_driver.recieve.read() + curr_char = chr(data[0]) + # Combine Bytes into Strings and Print Out + if (curr_char == '\n'): + log.info(temp_str) + # Exit Test on Last String + if temp_str == "** Remap->IMEM0": + break + temp_str = "" + else: + temp_str += curr_char + log.info("Driver Test Complete") diff --git a/verif/cocotb/test_chip.py b/verif/cocotb/test_chip.py deleted file mode 100644 index 766ee50..0000000 --- a/verif/cocotb/test_chip.py +++ /dev/null @@ -1,47 +0,0 @@ -from random import randint, randrange, getrandbits, shuffle -from collections.abc import Iterable - -import logging -import cocotb -from cocotb.clock import Clock -from cocotb.regression import TestFactory -from cocotb.result import TestFailure -from cocotb.triggers import ClockCycles, Combine, Join, RisingEdge - -from cocotbext.axi import AxiBus, AxiMaster - -CLK_PERIOD = (10, "ns") -AXI_PREFIX = "S_AXI" - -async def setup_dut(dut): - cocotb.start_soon(Clock(dut.XTAL1, *CLK_PERIOD).start()) - dut.NRST.value = 0 - await ClockCycles(dut.XTAL1, 2) - dut.NRST.value = 1 - await ClockCycles(dut.XTAL1, 2) - -def binatodeci(binary): - return sum(val*(2**idx) for idx, val in enumerate(reversed(binary))) - -@cocotb.coroutine -async def reg_write(manager, register, data): - print("Writing address: "+str(register.address)) - await manager.write(register.address, data) - -@cocotb.coroutine -async def reg_read(manager, register, length = 1): - event = manager.init_read(register.address, length) - await event.wait() - return event.data.data - -@cocotb.coroutine -async def field_read(manager, register, field, length = 1): - reg_read_val = await reg_read(manager, register, length) - return getattr(register, field).decode_read_value(binatodeci(reg_read_val)) - - -@cocotb.test() -async def test_clocks(dut): - """Tests Clocks and Resets in Cocotb""" - await setup_dut(dut) - print("Setup Complete") \ No newline at end of file diff --git a/verif/tb/verilog/nanosoc_tb.v b/verif/tb/verilog/nanosoc_tb.v index c7be34f..adf6e25 100644 --- a/verif/tb/verilog/nanosoc_tb.v +++ b/verif/tb/verilog/nanosoc_tb.v @@ -261,13 +261,13 @@ reg baud_clk_del; // AXI stream io testing // - wire txd8_ready; - wire txd8_valid; - wire [7:0] txd8_data ; + wire txd8_tready; + wire txd8_tvalid; + wire [7:0] txd8_tdata ; - wire rxd8_ready; - wire rxd8_valid; - wire [7:0] rxd8_data ; + wire rxd8_tready; + wire rxd8_tvalid; + wire [7:0] rxd8_tdata ; `ifndef COCOTB_SIM nanosoc_axi_stream_io_8_txd_from_file #( @@ -275,9 +275,9 @@ reg baud_clk_del; ) u_nanosoc_axi_stream_io_8_txd_from_file ( .aclk (XTAL1), .aresetn (NRST), - .txd8_ready (txd8_ready), - .txd8_valid (txd8_valid), - .txd8_data (txd8_data) + .txd8_ready (txd8_tready), + .txd8_valid (txd8_tvalid), + .txd8_data (txd8_tdata) ); `endif @@ -296,12 +296,12 @@ reg baud_clk_del; .ft_miosio_z (ft_miosio_z), .aclk (XTAL1), .aresetn (NRST), - .rxd_tready_o (txd8_ready), - .rxd_tvalid_i (txd8_valid), - .rxd_tdata8_i (txd8_data), - .txd_tready_i (rxd8_ready), - .txd_tvalid_o (rxd8_valid), - .txd_tdata8_o (rxd8_data) + .rxd_tready_o (txd8_tready), + .rxd_tvalid_i (txd8_tvalid), + .rxd_tdata8_i (txd8_tdata), + .txd_tready_i (rxd8_tready), + .txd_tvalid_o (rxd8_tvalid), + .txd_tdata8_o (rxd8_tdata) ); `ifndef COCOTB_SIM @@ -310,9 +310,9 @@ reg baud_clk_del; ) u_nanosoc_axi_stream_io_8_rxd_to_file ( .aclk (XTAL1), .aresetn (NRST), - .rxd8_ready (rxd8_ready), - .rxd8_valid (rxd8_valid), - .rxd8_data (rxd8_data) + .rxd8_ready (rxd8_tready), + .rxd8_valid (rxd8_tvalid), + .rxd8_data (rxd8_tdata) ); `endif @@ -321,9 +321,9 @@ nanosoc_track_tb_iostream ( .aclk (XTAL1), .aresetn (NRST), - .rxd8_ready (rxd8_ready), - .rxd8_valid (rxd8_valid), - .rxd8_data (rxd8_data), + .rxd8_ready (rxd8_tready), + .rxd8_valid (rxd8_tvalid), + .rxd8_data (rxd8_tdata), .DEBUG_TESTER_ENABLE (debug_test_en1), .AUXCTRL ( ), .SIMULATIONEND( ) diff --git a/verif/tb/verilog/nanosoc_tb_qs.v b/verif/tb/verilog/nanosoc_tb_qs.v index d52dfde..e8aabe9 100644 --- a/verif/tb/verilog/nanosoc_tb_qs.v +++ b/verif/tb/verilog/nanosoc_tb_qs.v @@ -261,13 +261,13 @@ reg baud_clk_del; // AXI stream io testing // - wire txd8_ready; - wire txd8_valid; - wire [7:0] txd8_data ; + wire txd8_tready; + wire txd8_tvalid; + wire [7:0] txd8_tdata ; - wire rxd8_ready; - wire rxd8_valid; - wire [7:0] rxd8_data ; + wire rxd8_tready; + wire rxd8_tvalid; + wire [7:0] rxd8_tdata ; `ifndef COCOTB_SIM nanosoc_axi_stream_io_8_txd_from_file #( @@ -275,9 +275,9 @@ reg baud_clk_del; ) u_nanosoc_axi_stream_io_8_txd_from_file ( .aclk (XTAL1), .aresetn (NRST), - .txd8_ready (txd8_ready), - .txd8_valid (txd8_valid), - .txd8_data (txd8_data) + .txd8_ready (txd8_tready), + .txd8_valid (txd8_tvalid), + .txd8_data (txd8_tdata) ); `endif @@ -296,12 +296,12 @@ reg baud_clk_del; .ft_miosio_z (ft_miosio_z), .aclk (XTAL1), .aresetn (NRST), - .rxd_tready_o (txd8_ready), - .rxd_tvalid_i (txd8_valid), - .rxd_tdata8_i (txd8_data), - .txd_tready_i (rxd8_ready), - .txd_tvalid_o (rxd8_valid), - .txd_tdata8_o (rxd8_data) + .rxd_tready_o (txd8_tready), + .rxd_tvalid_i (txd8_tvalid), + .rxd_tdata8_i (txd8_tdata), + .txd_tready_i (rxd8_tready), + .txd_tvalid_o (rxd8_tvalid), + .txd_tdata8_o (rxd8_tdata) ); `ifndef COCOTB_SIM @@ -310,9 +310,9 @@ reg baud_clk_del; ) u_nanosoc_axi_stream_io_8_rxd_to_file ( .aclk (XTAL1), .aresetn (NRST), - .rxd8_ready (rxd8_ready), - .rxd8_valid (rxd8_valid), - .rxd8_data (rxd8_data) + .rxd8_ready (rxd8_tready), + .rxd8_valid (rxd8_tvalid), + .rxd8_data (rxd8_tdata) ); `endif @@ -321,9 +321,9 @@ nanosoc_track_tb_iostream ( .aclk (XTAL1), .aresetn (NRST), - .rxd8_ready (rxd8_ready), - .rxd8_valid (rxd8_valid), - .rxd8_data (rxd8_data), + .rxd8_ready (rxd8_tready), + .rxd8_valid (rxd8_tvalid), + .rxd8_data (rxd8_tdata), .DEBUG_TESTER_ENABLE (debug_test_en1), .AUXCTRL ( ), .SIMULATIONEND( ) -- GitLab