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

Subversion Repositories bustap-jtag

[/] [bustap-jtag/] [trunk/] [rtl/] [xilinx/] [vivado_ip/] [hdl/] [bustap_jtag_v1_0.v] - Blame information for rev 25

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 25 ash_riple
//**************************************************************
2
// Module             : bustap_jtag_v1_0.v
3
// Platform           : Ubuntu 14.04 
4
// Simulator          : Modelsim 6.5b
5
// Synthesizer        : Vivado 2014.2
6
// Place and Route    : Vivado 2014.2
7
// Targets device     : Zynq 7000
8
// Author             : Bibo Yang  (ash_riple@hotmail.com)
9
// Organization       : www.opencores.org
10
// Revision           : 2.4 
11
// Date               : 2014/09/22
12
// Description        : axi interface to pipelined access
13
//                      interface converter. axi pass through
14
//                      @Note: AXI-Lite is supported.
15
//**************************************************************
16
 
17
`timescale 1ns/1ns
18
 
19
module bustap_jtag_v1_0 #
20
(
21
  parameter integer C_S00_AXI_DATA_WIDTH = 32,
22
  parameter integer C_S00_AXI_ADDR_WIDTH = 32,
23
  parameter integer C_M00_AXI_DATA_WIDTH = 32,
24
  parameter integer C_M00_AXI_ADDR_WIDTH = 32
25
)
26
(
27
  // AXI Slave Interface
28
  input wire  s00_axi_aclk,
29
  input wire  s00_axi_aresetn,
30
  input wire [C_S00_AXI_ADDR_WIDTH-1 : 0] s00_axi_awaddr,
31
  input wire [2 : 0] s00_axi_awprot,
32
  input wire  s00_axi_awvalid,
33
  output wire  s00_axi_awready,
34
  input wire [C_S00_AXI_DATA_WIDTH-1 : 0] s00_axi_wdata,
35
  input wire [(C_S00_AXI_DATA_WIDTH/8)-1 : 0] s00_axi_wstrb,
36
  input wire  s00_axi_wvalid,
37
  output wire  s00_axi_wready,
38
  output wire [1 : 0] s00_axi_bresp,
39
  output wire  s00_axi_bvalid,
40
  input wire  s00_axi_bready,
41
  input wire [C_S00_AXI_ADDR_WIDTH-1 : 0] s00_axi_araddr,
42
  input wire [2 : 0] s00_axi_arprot,
43
  input wire  s00_axi_arvalid,
44
  output wire  s00_axi_arready,
45
  output wire [C_S00_AXI_DATA_WIDTH-1 : 0] s00_axi_rdata,
46
  output wire [1 : 0] s00_axi_rresp,
47
  output wire  s00_axi_rvalid,
48
  input wire  s00_axi_rready,
49
 
50
  // AXI Master Interface
51
  input wire  m00_axi_aclk,
52
  input wire  m00_axi_aresetn,
53
  output wire [C_M00_AXI_ADDR_WIDTH-1 : 0] m00_axi_awaddr,
54
  output wire [2 : 0] m00_axi_awprot,
55
  output wire  m00_axi_awvalid,
56
  input wire  m00_axi_awready,
57
  output wire [C_M00_AXI_DATA_WIDTH-1 : 0] m00_axi_wdata,
58
  output wire [(C_M00_AXI_DATA_WIDTH/8)-1 : 0] m00_axi_wstrb,
59
  output wire  m00_axi_wvalid,
60
  input wire  m00_axi_wready,
61
  input wire [1 : 0] m00_axi_bresp,
62
  input wire  m00_axi_bvalid,
63
  output wire  m00_axi_bready,
64
  output wire [C_M00_AXI_ADDR_WIDTH-1 : 0] m00_axi_araddr,
65
  output wire [2 : 0] m00_axi_arprot,
66
  output wire  m00_axi_arvalid,
67
  input wire  m00_axi_arready,
68
  input wire [C_M00_AXI_DATA_WIDTH-1 : 0] m00_axi_rdata,
69
  input wire [1 : 0] m00_axi_rresp,
70
  input wire  m00_axi_rvalid,
71
  output wire  m00_axi_rready
72
);
73
 
74
// Pass Through  
75
assign m00_axi_awaddr = s00_axi_awaddr;
76
assign m00_axi_awprot = s00_axi_awprot;
77
assign m00_axi_awvalid = s00_axi_awvalid;
78
assign s00_axi_awready = m00_axi_awready;
79
assign m00_axi_wdata = s00_axi_wdata;
80
assign m00_axi_wstrb = s00_axi_wstrb;
81
assign m00_axi_wvalid = s00_axi_wvalid;
82
assign s00_axi_wready = m00_axi_wready;
83
assign s00_axi_bresp = m00_axi_bresp;
84
assign s00_axi_bvalid = m00_axi_bvalid;
85
assign m00_axi_bready = s00_axi_bready;
86
assign m00_axi_araddr = s00_axi_araddr;
87
assign m00_axi_arprot = s00_axi_arprot;
88
assign m00_axi_arvalid = s00_axi_arvalid;
89
assign s00_axi_arready = m00_axi_arready;
90
assign s00_axi_rdata = m00_axi_rdata;
91
assign s00_axi_rresp = m00_axi_rresp;
92
assign s00_axi_rvalid = m00_axi_rvalid;
93
assign m00_axi_rready = s00_axi_rready;
94
 
95
// latch address and data, does not support simultaneous read and write
96
reg [C_S00_AXI_ADDR_WIDTH-1:0] addr_latch;
97
always @(posedge s00_axi_aclk) begin
98
  if      (s00_axi_awvalid && s00_axi_awready)
99
    addr_latch <= s00_axi_awaddr;
100
  else if (s00_axi_arvalid && s00_axi_arready)
101
    addr_latch <= s00_axi_araddr;
102
  else
103
    addr_latch <= addr_latch;
104
end
105
 
106
reg [C_S00_AXI_DATA_WIDTH-1:0] data_latch;
107
always @(posedge s00_axi_aclk) begin
108
  if      (s00_axi_wvalid && s00_axi_wready)
109
    data_latch <= s00_axi_wdata;
110
  else if (s00_axi_rvalid && s00_axi_rready)
111
    data_latch <= s00_axi_rdata;
112
  else
113
    data_latch <= data_latch;
114
end
115
 
116
// generate wr/rd pulse
117
reg wr_pulse;
118
always @(posedge s00_axi_aclk or negedge s00_axi_aresetn) begin
119
  if (!s00_axi_aresetn)
120
    wr_pulse <= 1'b0;
121
  else if (s00_axi_wvalid && s00_axi_wready)
122
    wr_pulse <= 1'b1;
123
  else
124
    wr_pulse <= 1'b0;
125
end
126
 
127
reg rd_pulse;
128
always @(posedge s00_axi_aclk or negedge s00_axi_aresetn) begin
129
  if (!s00_axi_aresetn)
130
    rd_pulse <= 1'b0;
131
  else if (s00_axi_rvalid && s00_axi_rready)
132
    rd_pulse <= 1'b1;
133
  else
134
    rd_pulse <= 1'b0;
135
end
136
 
137
// map to pipelined access interface
138
wire        clk     = s00_axi_aclk;
139
wire        wr_en   = wr_pulse;
140
wire        rd_en   = rd_pulse;
141
wire [31:0] addr_in = addr_latch[31:0];
142
wire [31:0] data_in = data_latch;
143
 
144
up_monitor inst (
145
        .clk(clk),
146
        .wr_en(wr_en),
147
        .rd_en(rd_en),
148
        .addr_in(addr_in),
149
        .data_in(data_in)
150
);
151
 
152
endmodule

powered by: WebSVN 2.1.0

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