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

Subversion Repositories usb2uart

[/] [usb2uart/] [trunk/] [verify/] [tests/] [usb_test3.v] - Blame information for rev 3

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 3 dinesha
`define usbbfm  tb.u_usb_agent.bfm_inst
2
task usb_test3;
3
 
4
reg [6:0] address;
5
reg [3:0] endpt;
6
reg [3:0] Status;
7
reg [31:0] ByteCount;
8
reg [31:0] ReadData;
9
integer    i,j,k;
10
 
11
 
12
reg [1:0] data_bit        ;
13
reg       stop_bits       ; // 0: 1 stop bit; 1: 2 stop bit;
14
reg       stick_parity    ; // 1: force even parity
15
reg       parity_en       ; // parity enable
16
reg       even_odd_parity ; // 0: odd parity; 1: even parity
17
reg [15:0] divisor        ;      // divided by (n+1) * 16
18
reg [15:0] timeout        ;// wait time limit
19
reg     fifo_enable       ;     // fifo mode disable
20
 
21
reg [7:0] write_data [0:39];
22
reg [15:0] rx_nu;
23
reg [15:0] tx_nu;
24
 
25
 
26
parameter  MYACK   = 4'b0000,
27
           MYNAK   = 4'b0001,
28
           MYSTALL = 4'b0010,
29
           MYTOUT  = 4'b0011,
30
           MYIVRES = 4'b0100,
31
           MYCRCER = 4'b0101;
32
 
33
     begin
34
     address = 7'b000_0001;
35
     endpt   = 4'b0000;
36
 
37
    $display("%0d: USB Reset  -----", $time);
38
    `usbbfm.usb_reset(48);
39
 
40
    $display("%0d: Set Address = 1 -----", $time);
41
    `usbbfm.SetAddress (address);
42
    `usbbfm.setup(7'h00, 4'h0, Status);
43
    `usbbfm.printstatus(Status, MYACK);
44
    `usbbfm.status_IN(7'h00, endpt, Status);
45
    `usbbfm.printstatus(Status, MYACK);
46
    #5000;
47
 
48
    $display("%0d: Set configuration  -----", $time);
49
    `usbbfm.SetConfiguration(2'b01);
50
    `usbbfm.setup(address, 4'b0000, Status);
51
    `usbbfm.printstatus(Status, MYACK);
52
    `usbbfm.status_IN(address, 4'b0000, Status);
53
    `usbbfm.printstatus(Status, MYACK);
54
    #2000;
55
 
56
    $display("%0d: Configuration done !!!!!!", $time);
57
 
58
   // write UART  registers through USB
59
 
60
      //////////////////////////////////////////////////////////////////
61
      data_bit        = 2'b11;
62
      stop_bits       = 0; // 0: 1 stop bit; 1: 2 stop bit;
63
      stick_parity    = 0; // 1: force even parity
64
      parity_en       = 1; // parity enable
65
      even_odd_parity = 1; // 0: odd parity; 1: even parity
66
      divisor        = 15;      // divided by (n+1) * 16
67
      timeout        = 500;// wait time limit
68
      fifo_enable       = 0;     // fifo mode disable
69
 
70
    tb.u_uart_agent.uart_init;
71
    `usbbfm.VenRegWordWr (address, 32'h0, {27'h0,2'b10,1'b1,1'b1,1'b1});
72
    // Baud Clock 16x,  Master Clock/ (2+cfg_value)
73
    `usbbfm.VenRegWordWr (address, 32'h8, divisor-1);
74
    tb.u_uart_agent.control_setup (data_bit, stop_bits, parity_en, even_odd_parity, stick_parity, timeout, divisor, fifo_enable);
75
 
76
    for (i=0; i<40; i=i+1)
77
        write_data[i] = $random;
78
 
79
   fork
80
   begin
81
      for (i=0; i<40; i=i+1)
82
      begin
83
        $display ("\n... Writing char %d ...", write_data[i]);
84
         tb.u_uart_agent.write_char (write_data[i]);
85
      end
86
   end
87
 
88
   begin
89
      for (j=0; j<40; j=j+1)
90
      begin
91
        tb.u_uart_agent.read_char_chk(write_data[j]);
92
      end
93
   end
94
 
95
   // Read through the USB and check the UART RX Fifo Status;
96
   // If Available, then loop it back
97
   begin
98
      for (k=0; k<40; k=k+1)
99
      begin
100
        ReadData[1]= 1'b1;
101
        while(ReadData[1] == 1'b1 ) begin // Check for UART RX fifo not empty
102
           $display ("\n... Reading the UART Status: %x ...", ReadData);
103
          `usbbfm.VenRegWordRd (address, 32'hC, ReadData);
104
        end
105
          `usbbfm.VenRegWordRd (address, 32'h14, ReadData);  // Read the UART RXD Data
106
          `usbbfm.VenRegWordWr (address, 32'h10, ReadData);   // Write Back to UART TXD
107
      end
108
   end
109
   join
110
 
111
   #100
112
   tb.u_uart_agent.report_status(rx_nu, tx_nu);
113
end
114
endtask

powered by: WebSVN 2.1.0

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