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

Subversion Repositories s80186

[/] [s80186/] [trunk/] [tests/] [rtl/] [TestIP.cpp] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 jamieiles
// Copyright Jamie Iles, 2017
2
//
3
// This file is part of s80x86.
4
//
5
// s80x86 is free software: you can redistribute it and/or modify
6
// it under the terms of the GNU General Public License as published by
7
// the Free Software Foundation, either version 3 of the License, or
8
// (at your option) any later version.
9
//
10
// s80x86 is distributed in the hope that it will be useful,
11
// but WITHOUT ANY WARRANTY; without even the implied warranty of
12
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
// GNU General Public License for more details.
14
//
15
// You should have received a copy of the GNU General Public License
16
// along with s80x86.  If not, see <http://www.gnu.org/licenses/>.
17
 
18
#include <gtest/gtest.h>
19
#include <VIP.h>
20
 
21
#include "VerilogTestbench.h"
22
 
23
class IPTestFixture : public VerilogTestbench<VIP>, public ::testing::Test
24
{
25
public:
26
    void inc();
27
    uint16_t get();
28
    void commit();
29
    void rollback();
30
    void set(uint16_t v);
31
};
32
 
33
void IPTestFixture::inc()
34
{
35
    this->dut.inc = 1;
36
    after_n_cycles(1, [&] { this->dut.inc = 0; });
37
    cycle();
38
}
39
 
40
uint16_t IPTestFixture::get()
41
{
42
    return this->dut.val;
43
}
44
 
45
void IPTestFixture::set(uint16_t val)
46
{
47
    this->dut.wr_val = val;
48
    this->dut.wr_en = 1;
49
    after_n_cycles(1, [&] { this->dut.wr_en = 0; });
50
    cycle();
51
}
52
 
53
void IPTestFixture::commit()
54
{
55
    this->dut.start_instruction = 1;
56
    after_n_cycles(1, [&] { this->dut.start_instruction = 0; });
57
    cycle();
58
}
59
 
60
void IPTestFixture::rollback()
61
{
62
    this->dut.rollback = 1;
63
    after_n_cycles(1, [&] { this->dut.rollback = 0; });
64
    cycle();
65
}
66
 
67
TEST_F(IPTestFixture, IncrementAndReset)
68
{
69
    ASSERT_EQ(0U, get());
70
    inc();
71
    inc();
72
    ASSERT_EQ(2U, get());
73
 
74
    reset();
75
 
76
    ASSERT_EQ(0U, get());
77
}
78
 
79
TEST_F(IPTestFixture, SetNewValue)
80
{
81
    ASSERT_EQ(0U, get());
82
 
83
    set(0xa55a);
84
 
85
    ASSERT_EQ(0xa55a, get());
86
}
87
 
88
TEST_F(IPTestFixture, IncNoRollback)
89
{
90
    set(0x0100);
91
    commit();
92
    inc();
93
    inc();
94
    inc();
95
    inc();
96
    rollback();
97
 
98
    ASSERT_EQ(0x0100, get());
99
}

powered by: WebSVN 2.1.0

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