Line 50... |
Line 50... |
wire trig_set = trig_cond[48];
|
wire trig_set = trig_cond[48];
|
wire [15:0] trig_addr = trig_cond[47:32];
|
wire [15:0] trig_addr = trig_cond[47:32];
|
wire [31:0] trig_data = trig_cond[31:0];
|
wire [31:0] trig_data = trig_cond[31:0];
|
reg trig_cond_ok,trig_cond_ok_d1;
|
reg trig_cond_ok,trig_cond_ok_d1;
|
// for capture storage
|
// for capture storage
|
wire [49:0] capture_in;
|
wire [81:0] capture_in;
|
wire capture_wr;
|
wire capture_wr;
|
// for pretrigger capture
|
// for pretrigger capture
|
wire [9:0] pretrig_num;
|
wire [9:0] pretrig_num;
|
reg [9:0] pretrig_cnt;
|
reg [9:0] pretrig_cnt;
|
wire pretrig_full;
|
wire pretrig_full;
|
wire pretrig_wr;
|
wire pretrig_wr;
|
reg pretrig_wr_d1,pretrig_rd;
|
reg pretrig_wr_d1,pretrig_rd;
|
|
// for inter capture timer
|
|
reg [31:0] inter_cap_cnt;
|
|
|
/////////////////////////////////////////////////
|
/////////////////////////////////////////////////
|
// Capture logic main
|
// Capture logic main
|
/////////////////////////////////////////////////
|
/////////////////////////////////////////////////
|
|
|
Line 123... |
Line 125... |
// trigger gate kept open until trigger stoped
|
// trigger gate kept open until trigger stoped
|
end
|
end
|
wire trig_cond_ok_pulse = trig_cond_ok & !trig_cond_ok_d1;
|
wire trig_cond_ok_pulse = trig_cond_ok & !trig_cond_ok_d1;
|
|
|
// generate capture wr_in
|
// generate capture wr_in
|
assign capture_in = {trig_cond_ok_pulse,wr_en_d1,addr_in_d1[15:2],2'b00,data_in_d1[31:0]};
|
assign capture_in = {trig_cond_ok_pulse,wr_en_d1,inter_cap_cnt,addr_in_d1[15:2],2'b00,data_in_d1[31:0]};
|
assign capture_wr = trig_cond_ok_pulse | (addr_mask_ok & trig_cond_ok);
|
assign capture_wr = trig_cond_ok_pulse | (addr_mask_ok & trig_cond_ok);
|
|
|
// generate pre-trigger wr_in
|
// generate pre-trigger wr_in
|
assign pretrig_full = (pretrig_cnt >= pretrig_num) || trig_cond_ok;
|
assign pretrig_full = (pretrig_cnt >= pretrig_num) || trig_cond_ok;
|
assign pretrig_wr = (!trig_en || (trig_en && !trig_set))? 1'b0 : (trig_cond_ok? 1'b0 : addr_mask_ok);
|
assign pretrig_wr = (!trig_en || (trig_en && !trig_set))? 1'b0 : (trig_cond_ok? 1'b0 : addr_mask_ok);
|
Line 148... |
Line 150... |
pretrig_wr_d1<= pretrig_wr;
|
pretrig_wr_d1<= pretrig_wr;
|
pretrig_rd <= pretrig_wr_d1;
|
pretrig_rd <= pretrig_wr_d1;
|
end
|
end
|
end
|
end
|
|
|
|
// generate interval counter
|
|
always @(posedge clk)
|
|
begin
|
|
if (capture_wr || pretrig_wr)
|
|
inter_cap_cnt <= 32'd0;
|
|
else if (inter_cap_cnt[31])
|
|
inter_cap_cnt <= 32'd3000000000;
|
|
else
|
|
inter_cap_cnt <= inter_cap_cnt + 32'd1;
|
|
end
|
|
|
/////////////////////////////////////////////////
|
/////////////////////////////////////////////////
|
// Instantiate vendor specific JTAG functions
|
// Instantiate vendor specific JTAG functions
|
/////////////////////////////////////////////////
|
/////////////////////////////////////////////////
|
|
|
// index 0, instantiate capture fifo, as output
|
// index 0, instantiate capture fifo, as output
|
Line 160... |
Line 173... |
.wr_in(capture_wr || pretrig_wr),
|
.wr_in(capture_wr || pretrig_wr),
|
.data_in(capture_in),
|
.data_in(capture_in),
|
.rd_in(pretrig_rd)
|
.rd_in(pretrig_rd)
|
);
|
);
|
defparam
|
defparam
|
u_virtual_jtag_adda_fifo.data_width = 50,
|
u_virtual_jtag_adda_fifo.data_width = 82,
|
u_virtual_jtag_adda_fifo.fifo_depth = 512,
|
u_virtual_jtag_adda_fifo.fifo_depth = 512,
|
u_virtual_jtag_adda_fifo.addr_width = 9,
|
u_virtual_jtag_adda_fifo.addr_width = 9,
|
u_virtual_jtag_adda_fifo.al_full_val = 511,
|
u_virtual_jtag_adda_fifo.al_full_val = 511,
|
u_virtual_jtag_adda_fifo.al_empt_val = 0;
|
u_virtual_jtag_adda_fifo.al_empt_val = 0;
|
|
|