OpenCores
URL https://opencores.org/ocsvn/bustap-jtag/bustap-jtag/trunk

Subversion Repositories bustap-jtag

[/] [bustap-jtag/] [trunk/] [rtl/] [altera/] [virtual_jtag_addr_mask.v] - Blame information for rev 5

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

Line No. Rev Author Line
1 5 ash_riple
//**************************************************************
2
// Module             : virtual_jtag_addr_mask.v
3
// Platform           : Windows xp sp2
4
// Simulator          : Modelsim 6.5b
5
// Synthesizer        : QuartusII 10.1 sp1
6
// Place and Route    : QuartusII 10.1 sp1
7
// Targets device     : Cyclone III
8
// Author             : Bibo Yang  (ash_riple@hotmail.com)
9
// Organization       : www.opencores.org
10
// Revision           : 2.0 
11
// Date               : 2012/03/12
12
// Description        : addr mask input from debug host via
13
//                      Virtual JTAG.
14
//**************************************************************
15 2 ash_riple
 
16 5 ash_riple
`timescale 1ns/1ns
17
 
18
module virtual_jtag_addr_mask(mask_out0 ,mask_out1 ,mask_out2 ,mask_out3 ,
19
                              mask_out4 ,mask_out5 ,mask_out6 ,mask_out7 ,
20
                              mask_out8 ,mask_out9 ,mask_out10,mask_out11,
21
                              mask_out12,mask_out13,mask_out14,mask_out15
22
                             );
23
 
24 2 ash_riple
parameter addr_width  = 32,
25
          mask_index  = 4, //2**mask_index=mask_num
26
          mask_num    = 16;
27
 
28
output [addr_width-1:0] mask_out0;
29
output [addr_width-1:0] mask_out1;
30
output [addr_width-1:0] mask_out2;
31
output [addr_width-1:0] mask_out3;
32
output [addr_width-1:0] mask_out4;
33
output [addr_width-1:0] mask_out5;
34
output [addr_width-1:0] mask_out6;
35
output [addr_width-1:0] mask_out7;
36
output [addr_width-1:0] mask_out8;
37
output [addr_width-1:0] mask_out9;
38
output [addr_width-1:0] mask_out10;
39
output [addr_width-1:0] mask_out11;
40
output [addr_width-1:0] mask_out12;
41
output [addr_width-1:0] mask_out13;
42
output [addr_width-1:0] mask_out14;
43
output [addr_width-1:0] mask_out15;
44
 
45
reg [addr_width-1:0] mask_out0;
46
reg [addr_width-1:0] mask_out1;
47
reg [addr_width-1:0] mask_out2;
48
reg [addr_width-1:0] mask_out3;
49
reg [addr_width-1:0] mask_out4;
50
reg [addr_width-1:0] mask_out5;
51
reg [addr_width-1:0] mask_out6;
52
reg [addr_width-1:0] mask_out7;
53
reg [addr_width-1:0] mask_out8;
54
reg [addr_width-1:0] mask_out9;
55
reg [addr_width-1:0] mask_out10;
56
reg [addr_width-1:0] mask_out11;
57
reg [addr_width-1:0] mask_out12;
58
reg [addr_width-1:0] mask_out13;
59
reg [addr_width-1:0] mask_out14;
60
reg [addr_width-1:0] mask_out15;
61
 
62
wire tdi, tck, cdr, cir, e1dr, e2dr, pdr, sdr, udr, uir;
63
reg  tdo;
64
reg  [mask_index+addr_width-1:0] mask_instr_reg;
65
reg  bypass_reg;
66
 
67
wire [1:0] ir_in;
68
wire mask_instr = ~ir_in[1] &  ir_in[0]; // 1
69
 
70
wire [mask_index-1:0] mask_id = mask_instr_reg[(mask_index+addr_width-1):addr_width];
71
wire [addr_width-1:0] mask_is = mask_instr_reg[(addr_width-1):0];
72
 
73
always @(posedge tck)
74
begin
75
  if (mask_instr && e1dr)
76
        case (mask_id)
77
                4'd0 :
78
                        mask_out0 <= mask_is;
79
                4'd1 :
80
                        mask_out1 <= mask_is;
81
                4'd2 :
82
                        mask_out2 <= mask_is;
83
                4'd3 :
84
                        mask_out3 <= mask_is;
85
                4'd4 :
86
                        mask_out4 <= mask_is;
87
                4'd5 :
88
                        mask_out5 <= mask_is;
89
                4'd6 :
90
                        mask_out6 <= mask_is;
91
                4'd7 :
92
                        mask_out7 <= mask_is;
93
                4'd8 :
94
                        mask_out8 <= mask_is;
95
                4'd9 :
96
                        mask_out9 <= mask_is;
97
                4'd10 :
98
                        mask_out10 <= mask_is;
99
                4'd11 :
100
                        mask_out11 <= mask_is;
101
                4'd12 :
102
                        mask_out12 <= mask_is;
103
                4'd13 :
104
                        mask_out13 <= mask_is;
105
                4'd14 :
106
                        mask_out14 <= mask_is;
107
                4'd15 :
108
                        mask_out15 <= mask_is;
109
        endcase
110
end
111
 
112
/* mask_instr Instruction Handler */
113
always @ (posedge tck)
114
  if ( mask_instr && cdr )
115
    mask_instr_reg <= mask_instr_reg;
116
  else if ( mask_instr && sdr )
117
    mask_instr_reg <= {tdi, mask_instr_reg[mask_index+addr_width-1:1]};
118
 
119
/* Bypass register */
120
always @ (posedge tck)
121
  bypass_reg = tdi;
122
 
123
/* Node TDO Output */
124
always @ ( mask_instr, mask_instr_reg, bypass_reg )
125
begin
126
  if (mask_instr)
127
    tdo <= mask_instr_reg[0];
128
  else
129
    tdo <= bypass_reg;// Used to maintain the continuity of the scan chain.
130
end
131
 
132
sld_virtual_jtag        sld_virtual_jtag_component (
133
                                .ir_in (ir_in),
134
                                .ir_out (2'b0),
135
                                .tdo (tdo),
136
                                .tdi (tdi),
137
                                .tms (),
138
                                .tck (tck),
139
                                .virtual_state_cir (cir),
140
                                .virtual_state_pdr (pdr),
141
                                .virtual_state_uir (uir),
142
                                .virtual_state_sdr (sdr),
143
                                .virtual_state_cdr (cdr),
144
                                .virtual_state_udr (udr),
145
                                .virtual_state_e1dr (e1dr),
146
                                .virtual_state_e2dr (e2dr),
147
                                .jtag_state_rti (),
148
                                .jtag_state_e1dr (),
149
                                .jtag_state_e2dr (),
150
                                .jtag_state_pir (),
151
                                .jtag_state_tlr (),
152
                                .jtag_state_sir (),
153
                                .jtag_state_cir (),
154
                                .jtag_state_uir (),
155
                                .jtag_state_pdr (),
156
                                .jtag_state_sdrs (),
157
                                .jtag_state_sdr (),
158
                                .jtag_state_cdr (),
159
                                .jtag_state_udr (),
160
                                .jtag_state_sirs (),
161
                                .jtag_state_e1ir (),
162
                                .jtag_state_e2ir ());
163
        defparam
164
                sld_virtual_jtag_component.sld_auto_instance_index = "NO",
165
                sld_virtual_jtag_component.sld_instance_index = 1,
166
                sld_virtual_jtag_component.sld_ir_width = 2,
167
                sld_virtual_jtag_component.sld_sim_action = "((1,1,1,2))",
168
                sld_virtual_jtag_component.sld_sim_n_scan = 1,
169
                sld_virtual_jtag_component.sld_sim_total_length = 2;
170
 
171
endmodule

powered by: WebSVN 2.1.0

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