OpenCores
URL https://opencores.org/ocsvn/an-fpga-implementation-of-low-latency-noc-based-mpsoc/an-fpga-implementation-of-low-latency-noc-based-mpsoc/trunk

Subversion Repositories an-fpga-implementation-of-low-latency-noc-based-mpsoc

[/] [an-fpga-implementation-of-low-latency-noc-based-mpsoc/] [trunk/] [mpsoc/] [rtl/] [src_peripheral/] [jtag/] [jtag_simulation/] [pronoc_uart/] [verilog/] [uart_jtag_testbench.v] - Blame information for rev 48

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 48 alirezamon
/**************************************
2
* Module: uart_jtag_testbench
3
* Date:2020-04-14
4
* Author: alireza
5
*
6
* Description:
7
***************************************/
8
 
9
 
10
// synthesis translate_off
11
`timescale 1ns / 1ps
12
// synthesis translate_on
13
 
14
module  uart_jtag_testbench #(
15
     parameter JTAG_INDEX =  126,
16
     parameter JAw = 32,
17
     parameter JDw=32,
18
     parameter JINDEXw = 8,
19
     parameter JSTATUSw = 8
20
)(
21
   wb_to_jtag,
22
   jtag_to_wb
23
);
24
 
25
    localparam
26
        J2WBw= 1+1+JDw+JAw,
27
        WB2Jw=1+JSTATUSw+JINDEXw+1+JDw;
28
 
29
     //jtag
30
    input   [WB2Jw-1  : 0] wb_to_jtag;
31
    output  [J2WBw-1 : 0] jtag_to_wb;
32
 
33
 
34
    wire [JSTATUSw-1 : 0] wb_to_jtag_status;
35
    wire [JINDEXw-1 : 0] wb_to_jtag_index;
36
    reg [JDw-1 : 0] jtag_to_wb_dat;
37
    reg [JAw-1 : 0] jtag_to_wb_addr;
38
    reg jtag_to_wb_stb;
39
    reg jtag_to_wb_we;
40
    wire [JDw-1 : 0] wb_to_jtag_dat;
41
    wire wb_to_jtag_ack;
42
    reg [15 : 0] jtag_wspace;
43
 
44
    assign  {wb_to_jtag_status,wb_to_jtag_ack,wb_to_jtag_dat,wb_to_jtag_index,clk}=wb_to_jtag;
45
    assign  jtag_to_wb= {jtag_to_wb_addr,jtag_to_wb_stb,jtag_to_wb_we,jtag_to_wb_dat};
46
 
47
 
48
    reg jtag_clk;
49
 
50
    initial begin
51
        jtag_clk=1'b0;
52
        forever jtag_clk = #33 ~jtag_clk;
53
    end
54
 
55
    reg  capture_jtag_dat_o;
56
    reg [JDw-1 : 0] captured_jtag_dat;
57
 
58
    always @(posedge jtag_clk)begin
59
        if(capture_jtag_dat_o) captured_jtag_dat= wb_to_jtag_dat;
60
    end
61
 
62
    task jtag_wr_wb_reg;
63
    input reg addr;
64
    input integer dat_in;
65
    begin
66
       jtag_to_wb_addr= addr;
67
       jtag_to_wb_dat= dat_in;
68
       jtag_to_wb_stb= 1'b1;
69
       // wb_cyc_i= 1'b1;
70
       jtag_to_wb_we =1'b1;
71
       @(posedge wb_to_jtag_ack)#1
72
        capture_jtag_dat_o=1'b1;
73
       @(posedge jtag_clk)#1;
74
       capture_jtag_dat_o=1'b0;
75
       jtag_to_wb_stb= 1'b0;
76
       //wb_cyc_i= 1'b0; 
77
     // $display(" jtag_wr_wb_reg (%d,%d);",addr,dat_in);
78
    end
79
    endtask
80
 
81
 
82
 
83
     //always @(*)begin         captured_jtag_dat= wb_to_jtag_dat;    end
84
 
85
 
86
    task jtag_rd_wb_reg;
87
    input reg addr;
88
    begin
89
       jtag_to_wb_addr= addr;
90
       jtag_to_wb_stb= 1'b1;
91
       //wb_cyc_i= 1'b1;
92
       jtag_to_wb_we =1'b0;
93
       @(posedge wb_to_jtag_ack)#1
94
       capture_jtag_dat_o=1'b1;
95
       @(posedge jtag_clk)#1;
96
       capture_jtag_dat_o=1'b0;
97
      // $display("%d",captured_jtag_dat);  
98
       jtag_to_wb_stb= 1'b0;
99
       //wb_cyc_i= 1'b0; 
100
 
101
    end
102
    endtask
103
 
104
    integer   char_idx;       // character_loop index
105
    reg [0: 7] character;
106
 
107
    task  jtag_capture;
108
    input [0:7] data;
109
    begin
110
        jtag_wr_wb_reg(0,data);
111
        if(captured_jtag_dat[7:0]!=0) $display("%tjtag read %s",$time,captured_jtag_dat[7:0]);
112
        jtag_wspace = captured_jtag_dat[23:8];
113
        #1021;
114
    end
115
    endtask
116
 
117
    task capture_until_send_chanel_ready;
118
    begin
119
        while (jtag_wspace ==0)begin
120
            jtag_capture(0);
121
        end
122
    end
123
    endtask
124
 
125
 
126
    task  jtag_putc;
127
    input [0:7] data;
128
    begin
129
        capture_until_send_chanel_ready();
130
        jtag_capture(data);
131
    end
132
    endtask
133
 
134
 
135
 
136
 
137
 
138
    task  jtag_puts;
139
    input [0:1023] data;
140
    begin
141
        character=1;
142
        for(char_idx = 0;char_idx <=1023 ;char_idx = char_idx + 8)
143
        begin : character_loop
144
            character[0]  = data[char_idx];
145
            character[1]  = data[char_idx+1];
146
            character[2]  = data[char_idx+2];
147
            character[3]  = data[char_idx+3];
148
            character[4]  = data[char_idx+4];
149
            character[5]  = data[char_idx+5];
150
            character[6]  = data[char_idx+6];
151
            character[7]  = data[char_idx+7];
152
            if (character!=0) jtag_putc(character);
153
        end//for 
154
    end
155
    endtask
156
 
157
 
158
 
159
    initial begin
160
       jtag_to_wb_addr= 0;
161
       jtag_to_wb_dat= 0;
162
       jtag_to_wb_stb= 1'b0;
163
       jtag_to_wb_we =1'b0;
164
       capture_jtag_dat_o=1'b0;
165
       jtag_wspace=2;
166
       #300000
167
       repeat(15) begin
168
            jtag_capture(0);
169
       end
170
      jtag_puts("XYZXYZ");
171
       repeat(1500) begin
172
            jtag_capture(0);
173
       end
174
 
175
    end
176
 
177
 
178
endmodule
179
 

powered by: WebSVN 2.1.0

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