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

Subversion Repositories uart2bus

[/] [uart2bus/] [trunk/] [verilog/] [bench/] [tb_txt_uart2bus_top.v] - Blame information for rev 4

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 motilito
//---------------------------------------------------------------------------------------
2
// uart test bench   
3
//
4
//---------------------------------------------------------------------------------------
5
 
6
`include "timescale.v"
7
 
8
module test;
9
//---------------------------------------------------------------------------------------
10
// include uart tasks 
11
`include "uart_tasks.v"
12
 
13
// internal signal  
14
reg clock;              // global clock 
15
reg reset;              // global reset 
16
reg [6:0] counter;
17
 
18
//---------------------------------------------------------------------------------------
19
// test bench implementation 
20
// global signals generation  
21
initial
22
begin
23
        counter = 0;
24
        reset = 1;
25
        #40 reset = 0;
26
end
27
 
28
// clock generator - 40MHz clock 
29
always
30
begin
31
        #12 clock = 0;
32
        #13 clock = 1;
33
end
34
 
35
// test bench dump variables 
36
initial
37
begin
38
        $dumpfile("test.vcd");
39
        //$dumpall;
40
        $dumpvars(0, test);
41
end
42
 
43
//------------------------------------------------------------------
44
// test bench transmitter and receiver 
45
// uart transmit - test bench control 
46
 
47
initial
48
begin
49
        // defualt value of serial output 
50
        serial_out = 1;
51
 
52
        // transmit a write command to internal register file 
53
        // command string: "w 4cd9 1a" + CR 
54
        send_serial (8'h77, `BAUD_115200, `PARITY_EVEN, `PARITY_OFF, `NSTOPS_1, `NBITS_8, 0);
55
        #100;
56
        send_serial (8'h20, `BAUD_115200, `PARITY_EVEN, `PARITY_OFF, `NSTOPS_1, `NBITS_8, 0);
57
        #100;
58
        send_serial (8'h34, `BAUD_115200, `PARITY_EVEN, `PARITY_OFF, `NSTOPS_1, `NBITS_8, 0);
59
        #100;
60
        send_serial (8'h63, `BAUD_115200, `PARITY_EVEN, `PARITY_OFF, `NSTOPS_1, `NBITS_8, 0);
61
        #100;
62
        send_serial (8'h64, `BAUD_115200, `PARITY_EVEN, `PARITY_OFF, `NSTOPS_1, `NBITS_8, 0);
63
        #100;
64
        send_serial (8'h39, `BAUD_115200, `PARITY_EVEN, `PARITY_OFF, `NSTOPS_1, `NBITS_8, 0);
65
        #100;
66
        send_serial (8'h20, `BAUD_115200, `PARITY_EVEN, `PARITY_OFF, `NSTOPS_1, `NBITS_8, 0);
67
        #100;
68
        send_serial (8'h31, `BAUD_115200, `PARITY_EVEN, `PARITY_OFF, `NSTOPS_1, `NBITS_8, 0);
69
        #100;
70
        send_serial (8'h61, `BAUD_115200, `PARITY_EVEN, `PARITY_OFF, `NSTOPS_1, `NBITS_8, 0);
71
        #100;
72
        send_serial (8'h0d, `BAUD_115200, `PARITY_EVEN, `PARITY_OFF, `NSTOPS_1, `NBITS_8, 0);
73
        #100;
74
        // transmit a read command from register file 
75
        // command string: "r 1a" + CR 
76
        send_serial (8'h72, `BAUD_115200, `PARITY_EVEN, `PARITY_OFF, `NSTOPS_1, `NBITS_8, 0);
77
        #100;
78
        send_serial (8'h20, `BAUD_115200, `PARITY_EVEN, `PARITY_OFF, `NSTOPS_1, `NBITS_8, 0);
79
        #100;
80
        send_serial (8'h31, `BAUD_115200, `PARITY_EVEN, `PARITY_OFF, `NSTOPS_1, `NBITS_8, 0);
81
        #100;
82
        send_serial (8'h61, `BAUD_115200, `PARITY_EVEN, `PARITY_OFF, `NSTOPS_1, `NBITS_8, 0);
83
        #100;
84
        send_serial (8'h0d, `BAUD_115200, `PARITY_EVEN, `PARITY_OFF, `NSTOPS_1, `NBITS_8, 0);
85
        #100;
86
 
87
        // delay and finish 
88
        #900000;
89
        $finish;
90
end
91
 
92
// uart receive 
93
initial
94
begin
95
        // default value for serial receiver and serial input 
96
        serial_in = 1;
97
        get_serial_data = 0;             // data received from get_serial task 
98
        get_serial_status = 0;           // status of get_serial task  
99
end
100
 
101
// serial sniffer loop 
102
always
103
begin
104
        // call serial sniffer 
105
        get_serial(`BAUD_115200, `PARITY_EVEN, `PARITY_OFF, `NSTOPS_1, `NBITS_8);
106
 
107
        // check serial receiver status 
108
        // byte received OK 
109
        if (get_serial_status & `RECEIVE_RESULT_OK)
110
        begin
111
                // check if not a control character (above and including space ascii code)
112
                if (get_serial_data >= 8'h20)
113
                        $display("received byte 0x%h (\"%c\") at %t ns", get_serial_data, get_serial_data, $time);
114
                else
115
                        $display("received byte 0x%h (\"%c\") at %t ns", get_serial_data, 8'hb0, $time);
116
        end
117
 
118
        // false start error 
119
        if (get_serial_status & `RECEIVE_RESULT_FALSESTART)
120
                $display("Error (get_char): false start condition at %t", $realtime);
121
 
122
        // bad parity error             
123
        if (get_serial_status & `RECEIVE_RESULT_BADPARITY)
124
                $display("Error (get_char): bad parity condition at %t", $realtime);
125
 
126
        // bad stop bits sequence       
127
        if (get_serial_status & `RECEIVE_RESULT_BADSTOP)
128
                $display("Error (get_char): bad stop bits sequence at %t", $realtime);
129
end
130
 
131
//------------------------------------------------------------------
132
// device under test 
133
// DUT interface 
134 4 motilito
wire    [15:0]   int_address;    // address bus to register file 
135 2 motilito
wire    [7:0]    int_wr_data;    // write data to register file 
136
wire                    int_write;              // write control to register file 
137
wire                    int_read;               // read control to register file 
138
wire    [7:0]    int_rd_data;    // data read from register file 
139
wire                    ser_in;                 // DUT serial input 
140
wire                    ser_out;                // DUT serial output 
141
 
142
// DUT instance 
143
uart2bus_top uart2bus1
144
(
145 4 motilito
        .clock(clock),
146
        .reset(reset),
147
        .ser_in(ser_in),
148
        .ser_out(ser_out),
149
        .int_address(int_address),
150
        .int_wr_data(int_wr_data),
151
        .int_write(int_write),
152
        .int_rd_data(int_rd_data),
153
        .int_read(int_read)
154 2 motilito
);
155
 
156
// serial interface to test bench 
157
assign ser_in = serial_out;
158
always @ (posedge clock) serial_in = ser_out;
159
 
160
// register file model 
161
reg_file_model reg_file1
162
(
163
        .clock(clock), .reset(reset),
164 4 motilito
        .int_address(int_address[7:0]), .int_wr_data(int_wr_data), .int_write(int_write),
165 2 motilito
        .int_rd_data(int_rd_data), .int_read(int_read)
166
);
167
 
168
endmodule
169
//---------------------------------------------------------------------------------------
170
//                                              Th.. Th.. Th.. Thats all folks !!!
171
//---------------------------------------------------------------------------------------

powered by: WebSVN 2.1.0

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