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

Subversion Repositories bustap-jtag

[/] [bustap-jtag/] [trunk/] [rtl/] [up_monitor.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             : up_monitor.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        : Top level glue logic to group together 
13
//                      the JTAG input and output modules.
14
//**************************************************************
15 2 ash_riple
 
16 5 ash_riple
`timescale 1ns/1ns
17 2 ash_riple
 
18 5 ash_riple
module up_monitor (
19
        input        clk,
20
        input        wr_en,rd_en,
21
        input [15:2] addr_in,
22
        input [31:0] data_in
23
);
24 2 ash_riple
 
25 5 ash_riple
reg        wr_en_d1,rd_en_d1;
26
reg [15:2] addr_in_d1;
27
reg [31:0] data_in_d1;
28 2 ash_riple
 
29 5 ash_riple
wire [31:0] addr_mask0,addr_mask1,addr_mask2,addr_mask3,addr_mask4,addr_mask5,addr_mask6,addr_mask7,
30
            addr_mask8,addr_mask9,addr_mask10,addr_mask11,addr_mask12,addr_mask13,addr_mask14,addr_mask15;
31
reg         addr_mask_ok;
32 2 ash_riple
 
33 5 ash_riple
wire [49:0] trig_cond;
34
wire        trig_en   = trig_cond[49];
35
wire        trig_set  = trig_cond[48];
36
wire [15:0] trig_addr = trig_cond[47:32];
37
wire [31:0] trig_data = trig_cond[31:0];
38
reg         trig_cond_ok;
39 2 ash_riple
 
40 5 ash_riple
wire [47:0] capture_in;
41
wire        capture_wr;
42
 
43
// bus input pipeline, allowing back-to-back/continuous bus access
44
always @(posedge clk)
45 2 ash_riple
begin
46 5 ash_riple
        wr_en_d1   <= wr_en;
47
        rd_en_d1   <= rd_en;
48
        addr_in_d1 <= addr_in;
49
        data_in_d1 <= data_in;
50 2 ash_riple
end
51
 
52 5 ash_riple
// address range based capture enable
53
always @(posedge clk)
54 2 ash_riple
begin
55 5 ash_riple
        if (((addr_in[15:2]<=addr_mask0[31:18] && addr_in[15:2]>=addr_mask0[15:2]) ||
56
             (addr_in[15:2]<=addr_mask1[31:18] && addr_in[15:2]>=addr_mask1[15:2]) ||
57
             (addr_in[15:2]<=addr_mask2[31:18] && addr_in[15:2]>=addr_mask2[15:2]) ||
58
             (addr_in[15:2]<=addr_mask3[31:18] && addr_in[15:2]>=addr_mask3[15:2]) ||
59
             (addr_in[15:2]<=addr_mask4[31:18] && addr_in[15:2]>=addr_mask4[15:2]) ||
60
             (addr_in[15:2]<=addr_mask5[31:18] && addr_in[15:2]>=addr_mask5[15:2]) ||
61
             (addr_in[15:2]<=addr_mask6[31:18] && addr_in[15:2]>=addr_mask6[15:2]) ||
62
             (addr_in[15:2]<=addr_mask7[31:18] && addr_in[15:2]>=addr_mask7[15:2])
63
            ) //inclusive address range set: addr_mask 0 - 7
64
            &&
65
            ((addr_in[15:2]>addr_mask8 [31:18] || addr_in[15:2]<addr_mask8 [15:2]) &&
66
             (addr_in[15:2]>addr_mask9 [31:18] || addr_in[15:2]<addr_mask9 [15:2]) &&
67
             (addr_in[15:2]>addr_mask10[31:18] || addr_in[15:2]<addr_mask10[15:2]) &&
68
             (addr_in[15:2]>addr_mask11[31:18] || addr_in[15:2]<addr_mask11[15:2]) &&
69
             (addr_in[15:2]>addr_mask12[31:18] || addr_in[15:2]<addr_mask12[15:2]) &&
70
             (addr_in[15:2]>addr_mask13[31:18] || addr_in[15:2]<addr_mask13[15:2]) &&
71
             (addr_in[15:2]>addr_mask14[31:18] || addr_in[15:2]<addr_mask14[15:2]) &&
72
             (addr_in[15:2]>addr_mask15[31:18] || addr_in[15:2]<addr_mask15[15:2])
73
            ) //exclusive address range set: addr_mask 8 - 15
74 2 ash_riple
        )
75 5 ash_riple
                addr_mask_ok <= wr_en;
76
        else
77
                addr_mask_ok <= 0;
78 2 ash_riple
end
79
 
80 5 ash_riple
// address-data based capture trigger
81
always @(posedge clk)
82 2 ash_riple
begin
83 5 ash_riple
        if (trig_en==0)                       // trigger not enabled, trigger gate forced open
84
                trig_cond_ok <= 1;
85
        else if (trig_set==0)                 // trigger enabled and trigger stopped, trigger gate forced close
86
                trig_cond_ok <= 0;
87
        else                                  // trigger enabled and trigger started, trigger gate conditional open
88
                if (trig_addr[15:2]==addr_in[15:2] && trig_data==data_in)
89
                        trig_cond_ok <= wr_en;// trigger gate kept open until trigger stoped
90 2 ash_riple
end
91
 
92 5 ash_riple
// generate capture wr-in
93
assign capture_in = {addr_in_d1[15:2],2'b0,data_in_d1[31:0]};
94
assign capture_wr = wr_en_d1 && addr_mask_ok && trig_cond_ok;
95 2 ash_riple
 
96 5 ash_riple
// instantiate capture mask, as input
97 2 ash_riple
virtual_jtag_addr_mask u_virtual_jtag_addr_mask (
98
        .mask_out0(addr_mask0),
99
        .mask_out1(addr_mask1),
100
        .mask_out2(addr_mask2),
101
        .mask_out3(addr_mask3),
102
        .mask_out4(addr_mask4),
103
        .mask_out5(addr_mask5),
104
        .mask_out6(addr_mask6),
105
        .mask_out7(addr_mask7),
106
        .mask_out8(addr_mask8),
107
        .mask_out9(addr_mask9),
108
        .mask_out10(addr_mask10),
109
        .mask_out11(addr_mask11),
110
        .mask_out12(addr_mask12),
111
        .mask_out13(addr_mask13),
112
        .mask_out14(addr_mask14),
113
        .mask_out15(addr_mask15)
114
        );
115
defparam
116
        u_virtual_jtag_addr_mask.addr_width     = 32,
117
        u_virtual_jtag_addr_mask.mask_index     = 4,
118
        u_virtual_jtag_addr_mask.mask_num       = 16;
119
 
120 5 ash_riple
// instantiate capture trigger, as input
121 2 ash_riple
virtual_jtag_adda_trig u_virtual_jtag_adda_trig (
122 5 ash_riple
        .trig_out(trig_cond)
123 2 ash_riple
        );
124
defparam
125
        u_virtual_jtag_adda_trig.trig_width     = 50;
126
 
127 5 ash_riple
// instantiate capture fifo, as output
128
virtual_jtag_adda_fifo u_virtual_jtag_adda_fifo (
129
        .clk(clk),
130
        .wr_en(capture_wr),
131
        .data_in(capture_in)
132
        );
133
defparam
134
        u_virtual_jtag_adda_fifo.data_width     = 48,
135
        u_virtual_jtag_adda_fifo.fifo_depth     = 512,
136
        u_virtual_jtag_adda_fifo.addr_width     = 9,
137
        u_virtual_jtag_adda_fifo.al_full_val    = 511,
138
        u_virtual_jtag_adda_fifo.al_empt_val    = 0;
139
 
140 2 ash_riple
endmodule

powered by: WebSVN 2.1.0

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