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 10

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

powered by: WebSVN 2.1.0

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