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
|