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

Subversion Repositories bustap-jtag

[/] [bustap-jtag/] [trunk/] [rtl/] [up_monitor.v] - Diff between revs 2 and 5

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 2 Rev 5
Line 1... Line 1...
 
//**************************************************************
 
// Module             : up_monitor.v
 
// Platform           : Windows xp sp2
 
// Simulator          : Modelsim 6.5b
 
// Synthesizer        : QuartusII 10.1 sp1
 
// Place and Route    : QuartusII 10.1 sp1
 
// Targets device     : Cyclone III
 
// Author             : Bibo Yang  (ash_riple@hotmail.com)
 
// Organization       : www.opencores.org
 
// Revision           : 2.0 
 
// Date               : 2012/03/12
 
// Description        : Top level glue logic to group together 
 
//                      the JTAG input and output modules.
 
//**************************************************************
 
 
 
`timescale 1ns/1ns
 
 
 
module up_monitor (
 
        input        clk,
 
        input        wr_en,rd_en,
 
        input [15:2] addr_in,
 
        input [31:0] data_in
 
);
 
 
module up_monitor (up_clk,up_wbe,up_csn,up_addr,up_data_io);
reg        wr_en_d1,rd_en_d1;
 
reg [15:2] addr_in_d1;
input up_clk,up_wbe,up_csn;
reg [31:0] data_in_d1;
input [15:2] up_addr;
 
input [31:0] up_data_io;
 
 
 
reg up_csn_d1, up_csn_d2, up_csn_d3, up_csn_d4;
 
wire up_csn_neg_pulse;
 
wire [47:0] up_bus_content;
 
 
 
wire [49:0] trig_condition;
 
wire            trig_en         = trig_condition[49];
 
wire            trig_set        = trig_condition[48];
 
wire [15:0] trig_addr    = trig_condition[47:32];
 
wire [31:0] trig_data    = trig_condition[31:0];
 
reg trig_condition_ok;
 
 
 
wire [31:0]      addr_mask0,addr_mask1,addr_mask2,addr_mask3,addr_mask4,addr_mask5,addr_mask6,addr_mask7,
wire [31:0]      addr_mask0,addr_mask1,addr_mask2,addr_mask3,addr_mask4,addr_mask5,addr_mask6,addr_mask7,
                        addr_mask8,addr_mask9,addr_mask10,addr_mask11,addr_mask12,addr_mask13,addr_mask14,addr_mask15;
                        addr_mask8,addr_mask9,addr_mask10,addr_mask11,addr_mask12,addr_mask13,addr_mask14,addr_mask15;
reg addr_mask_ok;
reg addr_mask_ok;
 
 
always @(posedge up_clk)
wire [49:0] trig_cond;
 
wire        trig_en   = trig_cond[49];
 
wire        trig_set  = trig_cond[48];
 
wire [15:0] trig_addr = trig_cond[47:32];
 
wire [31:0] trig_data = trig_cond[31:0];
 
reg         trig_cond_ok;
 
 
 
wire [47:0] capture_in;
 
wire        capture_wr;
 
 
 
// bus input pipeline, allowing back-to-back/continuous bus access
 
always @(posedge clk)
begin
begin
        up_csn_d1 <= up_csn || up_wbe;
        wr_en_d1   <= wr_en;
        up_csn_d2 <= up_csn_d1;
        rd_en_d1   <= rd_en;
        up_csn_d3 <= up_csn_d2;
        addr_in_d1 <= addr_in;
        up_csn_d4 <= up_csn_d3;
        data_in_d1 <= data_in;
end
end
 
 
always @(posedge up_clk)
// address range based capture enable
 
always @(posedge clk)
begin
begin
        if ((   (up_addr[15:2]<=addr_mask0[31:18] && up_addr[15:2]>=addr_mask0[15:2]) ||
        if (((addr_in[15:2]<=addr_mask0[31:18] && addr_in[15:2]>=addr_mask0[15:2]) ||
                        (up_addr[15:2]<=addr_mask1[31:18] && up_addr[15:2]>=addr_mask1[15:2]) ||
             (addr_in[15:2]<=addr_mask1[31:18] && addr_in[15:2]>=addr_mask1[15:2]) ||
                        (up_addr[15:2]<=addr_mask2[31:18] && up_addr[15:2]>=addr_mask2[15:2]) ||
             (addr_in[15:2]<=addr_mask2[31:18] && addr_in[15:2]>=addr_mask2[15:2]) ||
                        (up_addr[15:2]<=addr_mask3[31:18] && up_addr[15:2]>=addr_mask3[15:2]) ||
             (addr_in[15:2]<=addr_mask3[31:18] && addr_in[15:2]>=addr_mask3[15:2]) ||
                        (up_addr[15:2]<=addr_mask4[31:18] && up_addr[15:2]>=addr_mask4[15:2]) ||
             (addr_in[15:2]<=addr_mask4[31:18] && addr_in[15:2]>=addr_mask4[15:2]) ||
                        (up_addr[15:2]<=addr_mask5[31:18] && up_addr[15:2]>=addr_mask5[15:2]) ||
             (addr_in[15:2]<=addr_mask5[31:18] && addr_in[15:2]>=addr_mask5[15:2]) ||
                        (up_addr[15:2]<=addr_mask6[31:18] && up_addr[15:2]>=addr_mask6[15:2]) ||
             (addr_in[15:2]<=addr_mask6[31:18] && addr_in[15:2]>=addr_mask6[15:2]) ||
                        (up_addr[15:2]<=addr_mask7[31:18] && up_addr[15:2]>=addr_mask7[15:2])
             (addr_in[15:2]<=addr_mask7[31:18] && addr_in[15:2]>=addr_mask7[15:2])
                ) //inclusive address set
            ) //inclusive address range set: addr_mask 0 - 7
                &&
                &&
                (       (up_addr[15:2]>addr_mask8 [31:18] || up_addr[15:2]<addr_mask8 [15:2]) &&
            ((addr_in[15:2]>addr_mask8 [31:18] || addr_in[15:2]<addr_mask8 [15:2]) &&
                        (up_addr[15:2]>addr_mask9 [31:18] || up_addr[15:2]<addr_mask9 [15:2]) &&
             (addr_in[15:2]>addr_mask9 [31:18] || addr_in[15:2]<addr_mask9 [15:2]) &&
                        (up_addr[15:2]>addr_mask10[31:18] || up_addr[15:2]<addr_mask10[15:2]) &&
             (addr_in[15:2]>addr_mask10[31:18] || addr_in[15:2]<addr_mask10[15:2]) &&
                        (up_addr[15:2]>addr_mask11[31:18] || up_addr[15:2]<addr_mask11[15:2]) &&
             (addr_in[15:2]>addr_mask11[31:18] || addr_in[15:2]<addr_mask11[15:2]) &&
                        (up_addr[15:2]>addr_mask12[31:18] || up_addr[15:2]<addr_mask12[15:2]) &&
             (addr_in[15:2]>addr_mask12[31:18] || addr_in[15:2]<addr_mask12[15:2]) &&
                        (up_addr[15:2]>addr_mask13[31:18] || up_addr[15:2]<addr_mask13[15:2]) &&
             (addr_in[15:2]>addr_mask13[31:18] || addr_in[15:2]<addr_mask13[15:2]) &&
                        (up_addr[15:2]>addr_mask14[31:18] || up_addr[15:2]<addr_mask14[15:2]) &&
             (addr_in[15:2]>addr_mask14[31:18] || addr_in[15:2]<addr_mask14[15:2]) &&
                        (up_addr[15:2]>addr_mask15[31:18] || up_addr[15:2]<addr_mask15[15:2])
             (addr_in[15:2]>addr_mask15[31:18] || addr_in[15:2]<addr_mask15[15:2])
            ) //exclusive address set
            ) //exclusive address range set: addr_mask 8 - 15
        )
        )
                        addr_mask_ok <= 1;
                addr_mask_ok <= wr_en;
                else
                else
                        addr_mask_ok <= 0;
                        addr_mask_ok <= 0;
end
end
 
 
always @(posedge up_clk)
// address-data based capture trigger
 
always @(posedge clk)
begin
begin
        if (trig_en==0)
        if (trig_en==0)                       // trigger not enabled, trigger gate forced open
                trig_condition_ok <= 1;
                trig_cond_ok <= 1;
        else if (trig_set==0)
        else if (trig_set==0)                 // trigger enabled and trigger stopped, trigger gate forced close
                trig_condition_ok <= 0;
                trig_cond_ok <= 0;
        else if (up_csn_d1==0 && up_csn_d2==1)
        else                                  // trigger enabled and trigger started, trigger gate conditional open
                if (trig_addr[15:2]==up_addr[15:2] && trig_data==up_data_io)
                if (trig_addr[15:2]==addr_in[15:2] && trig_data==data_in)
                        trig_condition_ok <= 1;
                        trig_cond_ok <= wr_en;// trigger gate kept open until trigger stoped
end
end
 
 
assign up_csn_neg_pulse = !up_csn_d3 && up_csn_d4 && addr_mask_ok && trig_condition_ok;
// generate capture wr-in
assign up_bus_content   = {up_addr[15:2],2'b0,up_data_io[31:0]};
assign capture_in = {addr_in_d1[15:2],2'b0,data_in_d1[31:0]};
 
assign capture_wr = wr_en_d1 && addr_mask_ok && trig_cond_ok;
virtual_jtag_adda_fifo u_virtual_jtag_adda_fifo (
 
        .clk(up_clk),
 
        .wr_en(up_csn_neg_pulse),
 
        .data_in(up_bus_content)
 
        );
 
defparam
 
        u_virtual_jtag_adda_fifo.data_width     = 48,
 
        u_virtual_jtag_adda_fifo.fifo_depth     = 512,
 
        u_virtual_jtag_adda_fifo.addr_width     = 9,
 
        u_virtual_jtag_adda_fifo.al_full_val    = 511,
 
        u_virtual_jtag_adda_fifo.al_empt_val    = 0;
 
 
 
 
// instantiate capture mask, as input
virtual_jtag_addr_mask u_virtual_jtag_addr_mask (
virtual_jtag_addr_mask u_virtual_jtag_addr_mask (
        .mask_out0(addr_mask0),
        .mask_out0(addr_mask0),
        .mask_out1(addr_mask1),
        .mask_out1(addr_mask1),
        .mask_out2(addr_mask2),
        .mask_out2(addr_mask2),
        .mask_out3(addr_mask3),
        .mask_out3(addr_mask3),
Line 102... Line 115...
defparam
defparam
        u_virtual_jtag_addr_mask.addr_width     = 32,
        u_virtual_jtag_addr_mask.addr_width     = 32,
        u_virtual_jtag_addr_mask.mask_index     = 4,
        u_virtual_jtag_addr_mask.mask_index     = 4,
        u_virtual_jtag_addr_mask.mask_num       = 16;
        u_virtual_jtag_addr_mask.mask_num       = 16;
 
 
 
// instantiate capture trigger, as input
virtual_jtag_adda_trig u_virtual_jtag_adda_trig (
virtual_jtag_adda_trig u_virtual_jtag_adda_trig (
        .trig_out(trig_condition)
        .trig_out(trig_cond)
        );
        );
defparam
defparam
        u_virtual_jtag_adda_trig.trig_width     = 50;
        u_virtual_jtag_adda_trig.trig_width     = 50;
 
 
 
// instantiate capture fifo, as output
 
virtual_jtag_adda_fifo u_virtual_jtag_adda_fifo (
 
        .clk(clk),
 
        .wr_en(capture_wr),
 
        .data_in(capture_in)
 
        );
 
defparam
 
        u_virtual_jtag_adda_fifo.data_width     = 48,
 
        u_virtual_jtag_adda_fifo.fifo_depth     = 512,
 
        u_virtual_jtag_adda_fifo.addr_width     = 9,
 
        u_virtual_jtag_adda_fifo.al_full_val    = 511,
 
        u_virtual_jtag_adda_fifo.al_empt_val    = 0;
 
 
endmodule
endmodule
 
 
 No newline at end of file
 No newline at end of file

powered by: WebSVN 2.1.0

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