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 2

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

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

powered by: WebSVN 2.1.0

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