OpenCores
URL https://opencores.org/ocsvn/spdif_transmitter/spdif_transmitter/trunk

Subversion Repositories spdif_transmitter

[/] [spdif_transmitter/] [trunk/] [testbench/] [spdif_tb.cpp] - Rev 3

Compare with Previous | Blame | View Log

#include "spdif_tb.h"
 
//-----------------------------------------------------------------
// sc_main_tb
//-----------------------------------------------------------------
static int attach_system_c(p_cb_data user_data)
{
    spdif_tb * u_tb  = new spdif_tb("spdif_tb");
 
    // Initialize SystemC
    sc_start(0, SC_NS);
 
    // Start clock
    u_tb->m_vpi_clk.start();
}
//-----------------------------------------------------------------
// _register
//-----------------------------------------------------------------
static void _register(void)
{
    s_cb_data          cb_data_s;
    cb_data_s.user_data = NULL;
    cb_data_s.reason    = cbStartOfSimulation;
    cb_data_s.cb_rtn    = attach_system_c;
    cb_data_s.time      = NULL;
    cb_data_s.value     = NULL;
    vpi_register_cb(&cb_data_s);
}
 
void (*vlog_startup_routines[])() = 
{
    _register,
    0
};
 
//-----------------------------------------------------------------
// audio_clk: Produce audio clock
//-----------------------------------------------------------------
void spdif_tb::audio_clk(void)
{
    // Reset
    rst_i.write(true);
    wait(5);
    rst_i.write(false);
    wait(1);
 
    while (1)
    {
        wait(AUDIO_CLK_DIV/2);
        audio_clk_i.write(!audio_clk_i.read());
    }
}
//-----------------------------------------------------------------
// drive: Drive input sequence
//-----------------------------------------------------------------
void spdif_tb::drive(void) 
{
    sc_uint <32> data;
    int interations = 2000;
 
    // Drive input data
    while (interations--)
    {
        data.range(15,0)  = rand();
        data.range(31,16) = rand();
        m_tx_fifo.write(data.range(15,0));
        m_tx_fifo.write(data.range(31,16));
 
        m_driver.write(data);
    }
}
//-----------------------------------------------------------------
// monitor: Check output data
//-----------------------------------------------------------------
void spdif_tb::monitor(void) 
{
    do
    {
        wait();
    }
    while (rst_i.read());
 
    while (1)
    {
        sc_uint <16> data    = m_tx_fifo.read();
        sc_uint <16> rx_data = m_decoder.read();
 
        printf("EXPECT: %04x\n", (unsigned)data);
        printf("GOT: %04x\n", (unsigned)rx_data);
 
        sc_assert(rx_data == data);
 
        if (m_tx_fifo.num_available() == 0)
            m_dut.stopSimulation();
    }
}
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.