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

Subversion Repositories bustap-jtag

[/] [bustap-jtag/] [trunk/] [rtl/] [altera/] [virtual_jtag_adda_fifo.v] - Blame information for rev 15

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 5 ash_riple
//**************************************************************
2
// Module             : virtual_jtag_adda_fifo.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 15 ash_riple
// Revision           : 2.2 
11
// Date               : 2012/03/28
12 5 ash_riple
// Description        : addr/data capture output to debug host
13
//                      via Virtual JTAG.
14
//**************************************************************
15
 
16 10 ash_riple
`include "jtag_sim_define.h"
17 5 ash_riple
`timescale 1ns/1ns
18
 
19 11 ash_riple
module virtual_jtag_adda_fifo(clk,wr_in,data_in,rd_in);
20 2 ash_riple
 
21
parameter data_width  = 32,
22
          fifo_depth  = 256,
23
          addr_width  = 8,
24
          al_full_val = 255,
25
          al_empt_val = 0;
26
 
27
input clk;
28 11 ash_riple
input wr_in, rd_in;
29 2 ash_riple
input [data_width-1:0] data_in;
30
 
31
wire tdi, tck, cdr, cir, e1dr, e2dr, pdr, sdr, udr, uir;
32
reg  tdo;
33
reg  [addr_width-1:0] usedw_instr_reg;
34
reg  reset_instr_reg;
35
reg  [data_width-1:0] read_instr_reg;
36
reg  bypass_reg;
37
 
38
wire [1:0] ir_in;
39
wire usedw_instr  = ~ir_in[1] &  ir_in[0]; // 1
40
wire reset_instr  =  ir_in[1] & ~ir_in[0]; // 2
41
wire read_instr   =  ir_in[1] &  ir_in[0]; // 3
42
 
43
wire reset = reset_instr && e1dr;
44
 
45
wire [addr_width-1:0] usedw;
46
wire [data_width-1:0] data_out;
47
wire full;
48
wire al_full;
49
 
50
reg read_instr_d1;
51
reg read_instr_d2;
52
reg read_instr_d3;
53 11 ash_riple
wire rd_en = rd_in | (read_instr_d2 & !read_instr_d3);
54
wire wr_en = wr_in;
55 2 ash_riple
always @(posedge clk or posedge reset)
56
begin
57
  if (reset)
58
  begin
59
    read_instr_d1 <= 1'b0;
60
    read_instr_d2 <= 1'b0;
61
    read_instr_d3 <= 1'b0;
62
  end
63
  else
64
  begin
65
    read_instr_d1 <= read_instr;
66
    read_instr_d2 <= read_instr_d1;
67
    read_instr_d3 <= read_instr_d2;
68
  end
69
end
70
 
71
scfifo  jtag_fifo (
72
        .aclr (reset),
73
        .clock (clk),
74
        .wrreq (wr_en & !al_full),
75
        .data (data_in),
76
        .rdreq (rd_en),
77
        .q (data_out),
78
        .full (full),
79
        .almost_full (al_full),
80
        .empty (),
81
        .almost_empty (),
82
        .usedw (usedw),
83
        .sclr ());
84
    defparam
85
        jtag_fifo.lpm_width = data_width,
86
        jtag_fifo.lpm_numwords = fifo_depth,
87
        jtag_fifo.lpm_widthu = addr_width,
88 15 ash_riple
        jtag_fifo.intended_device_family = "Cyclone III",
89 2 ash_riple
        jtag_fifo.almost_full_value = al_full_val,
90
        jtag_fifo.almost_empty_value = al_empt_val,
91
        jtag_fifo.lpm_type = "scfifo",
92
        jtag_fifo.lpm_showahead = "OFF",
93
        jtag_fifo.overflow_checking = "ON",
94
        jtag_fifo.underflow_checking = "ON",
95
        jtag_fifo.use_eab = "ON",
96
        jtag_fifo.add_ram_output_register = "ON";
97
 
98
 
99
/* usedw_instr Instruction Handler */
100
always @ (posedge tck)
101
  if ( usedw_instr && cdr )
102
    usedw_instr_reg <= usedw;
103
  else if ( usedw_instr && sdr )
104
    usedw_instr_reg <= {tdi, usedw_instr_reg[addr_width-1:1]};
105
 
106
/* reset_instr Instruction Handler */
107
always @ (posedge tck)
108
  if ( reset_instr && sdr )
109
    reset_instr_reg <= tdi;//{tdi, reset_instr_reg[data_width-1:1]};
110
 
111
/* read_instr Instruction Handler */
112
always @ (posedge tck)
113
  if ( read_instr && cdr )
114
    read_instr_reg <= data_out;
115
  else if ( read_instr && sdr )
116
    read_instr_reg <= {tdi, read_instr_reg[data_width-1:1]};
117
 
118
/* Bypass register */
119
always @ (posedge tck)
120
  bypass_reg = tdi;
121
 
122
/* Node TDO Output */
123
always @ ( usedw_instr, reset_instr, read_instr, usedw_instr_reg[0], reset_instr_reg/*[0]*/, read_instr_reg[0], bypass_reg )
124
begin
125
  if (usedw_instr)
126
    tdo <= usedw_instr_reg[0];
127
  else if (reset_instr)
128
    tdo <= reset_instr_reg/*[0]*/;
129
  else if (read_instr)
130
    tdo <= read_instr_reg[0];
131
  else
132
    tdo <= bypass_reg;          // Used to maintain the continuity of the scan chain.
133
end
134
 
135
sld_virtual_jtag        sld_virtual_jtag_component (
136
                                .ir_in (ir_in),
137
                                .ir_out (2'b0),
138
                                .tdo (tdo),
139
                                .tdi (tdi),
140
                                .tms (),
141
                                .tck (tck),
142
                                .virtual_state_cir (cir),
143
                                .virtual_state_pdr (pdr),
144
                                .virtual_state_uir (uir),
145
                                .virtual_state_sdr (sdr),
146
                                .virtual_state_cdr (cdr),
147
                                .virtual_state_udr (udr),
148
                                .virtual_state_e1dr (e1dr),
149
                                .virtual_state_e2dr (e2dr),
150
                                .jtag_state_rti (),
151
                                .jtag_state_e1dr (),
152
                                .jtag_state_e2dr (),
153
                                .jtag_state_pir (),
154
                                .jtag_state_tlr (),
155
                                .jtag_state_sir (),
156
                                .jtag_state_cir (),
157
                                .jtag_state_uir (),
158
                                .jtag_state_pdr (),
159
                                .jtag_state_sdrs (),
160
                                .jtag_state_sdr (),
161
                                .jtag_state_cdr (),
162
                                .jtag_state_udr (),
163
                                .jtag_state_sirs (),
164
                                .jtag_state_e1ir (),
165
                                .jtag_state_e2ir ());
166
        defparam
167
                sld_virtual_jtag_component.sld_auto_instance_index = "NO",
168
                sld_virtual_jtag_component.sld_instance_index = 0,
169
                sld_virtual_jtag_component.sld_ir_width = 2,
170 10 ash_riple
                `ifdef USE_SIM_STIMULUS
171 9 ash_riple
                sld_virtual_jtag_component.sld_sim_action       = `FIFO_SLD_SIM_ACTION,
172
                sld_virtual_jtag_component.sld_sim_n_scan       = `FIFO_SLD_SIM_N_SCAN,
173
                sld_virtual_jtag_component.sld_sim_total_length = `FIFO_SLD_SIM_T_LENG;
174 10 ash_riple
                `else
175
                sld_virtual_jtag_component.sld_sim_action       = "((1,1,1,2))",
176
                sld_virtual_jtag_component.sld_sim_n_scan       = 1,
177
                sld_virtual_jtag_component.sld_sim_total_length = 2;
178
                `endif
179 2 ash_riple
 
180
endmodule

powered by: WebSVN 2.1.0

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