summaryrefslogtreecommitdiff
path: root/python/openvino/demo/ip/intel_ai_ip/verilog/intel_ai_ip.sv.terp
blob: 18401cf0bf23e2d12b55c15dcdd3dbc19e82f878 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
// Copyright 2015-2020 Intel Corporation.
//
// This software and the related documents are Intel copyrighted materials,
// and your use of them is governed by the express license under which they
// were provided to you ("License"). Unless the License provides otherwise,
// you may not use, modify, copy, publish, distribute, disclose or transmit
// this software or the related documents without Intel's prior written
// permission.
//
// This software and the related documents are provided as is, with no express
// or implied warranties, other than those that are expressly stated in the
// License.

`default_nettype none


module intel_ai_ip #(
  // CSR AXI4-Lite Slave
  parameter int     C_CSR_AXI_ADDR_WIDTH,
  parameter int     C_CSR_AXI_DATA_WIDTH,

  // DDR AVLMM Master
  parameter int     C_DDR_AXI_ADDR_WIDTH,
  parameter int     C_DDR_AXI_DATA_WIDTH,
  parameter int     C_DDR_AXI_THREAD_ID_WIDTH,

  parameter string  ARCH_OPTION,

  // Width of various axi signals from the axi4 spec
  localparam int    AXI_BURST_LENGTH_WIDTH=8,
  localparam int    AXI_BURST_SIZE_WIDTH=3,
  localparam int    AXI_BURST_TYPE_WIDTH=2
) (
  input   wire                                    dla_clk,
  input  wire                                     ddr_clk,
  input   wire                                    irq_clk,
  input   wire                                    dla_resetn,

  // Level sensitive interrupt to host, runs on irq clock
  output  logic                                   irq_level,

  // CSR to host (PCIe or HPS), runs on ddr clock and dla_resetn

  input   wire         [C_CSR_AXI_ADDR_WIDTH-1:0] csr_axi_awaddr,
  input   wire                              [2:0] csr_axi_awprot, // required by AXI standard. not used
  input   wire                                    csr_axi_awvalid,
  output  logic                                   csr_axi_awready,
  input   wire         [C_CSR_AXI_DATA_WIDTH-1:0] csr_axi_wdata,
  input   wire       [C_CSR_AXI_DATA_WIDTH/8-1:0] csr_axi_wstrb, // required by AXI standard. not used
  input   wire                                    csr_axi_wvalid,
  output  logic                                   csr_axi_wready,
  input   wire                              [1:0] csr_axi_bresp, // required by AXI standard. not used
  output  logic                                   csr_axi_bvalid,
  input   wire                                    csr_axi_bready,
  input   wire         [C_CSR_AXI_ADDR_WIDTH-1:0] csr_axi_araddr,
  input   wire                              [2:0] csr_axi_arprot, // required by AXI standard. not used
  input   wire                                    csr_axi_arvalid,
  output  logic                                   csr_axi_arready,
  output  logic        [C_CSR_AXI_DATA_WIDTH-1:0] csr_axi_rdata,
  output  logic                             [1:0] csr_axi_rresp, // required by AXI standard. not used
  output  logic                                   csr_axi_rvalid,
  input   wire                                    csr_axi_rready,

  //global memory, AXI4 master, runs on ddr clock and core_resetn

  output logic    [C_DDR_AXI_THREAD_ID_WIDTH-1:0] ddr_axi_awid, // required by AXI standard. not used
  output logic         [C_DDR_AXI_ADDR_WIDTH-1:0] ddr_axi_awaddr,
  output logic       [AXI_BURST_LENGTH_WIDTH-1:0] ddr_axi_awlen,
  output logic         [AXI_BURST_SIZE_WIDTH-1:0] ddr_axi_awsize,
  output logic         [AXI_BURST_TYPE_WIDTH-1:0] ddr_axi_awburst,
  output logic                              [2:0] ddr_axi_awprot, // required by AXI standard. not used
  output logic                                    ddr_axi_awvalid,
  input  wire                                     ddr_axi_awready,
  output logic         [C_DDR_AXI_DATA_WIDTH-1:0] ddr_axi_wdata,
  output logic       [C_DDR_AXI_DATA_WIDTH/8-1:0] ddr_axi_wstrb,
  output logic                                    ddr_axi_wlast,
  output logic                                    ddr_axi_wvalid,
  input  wire                                     ddr_axi_wready,
  input  wire     [C_DDR_AXI_THREAD_ID_WIDTH-1:0] ddr_axi_bid, // required by AXI standard. not used
  input  wire                                     ddr_axi_bvalid,
  output logic                                    ddr_axi_bready,
  output logic    [C_DDR_AXI_THREAD_ID_WIDTH-1:0] ddr_axi_arid,
  output logic         [C_DDR_AXI_ADDR_WIDTH-1:0] ddr_axi_araddr,
  output logic       [AXI_BURST_LENGTH_WIDTH-1:0] ddr_axi_arlen,
  output logic         [AXI_BURST_SIZE_WIDTH-1:0] ddr_axi_arsize,
  output logic         [AXI_BURST_TYPE_WIDTH-1:0] ddr_axi_arburst,
  output logic                              [2:0] ddr_axi_arprot, // required by AXI standard. not used
  output logic                                    ddr_axi_arvalid,
  input  wire                                     ddr_axi_arready,
  input  wire     [C_DDR_AXI_THREAD_ID_WIDTH-1:0] ddr_axi_rid,
  input  wire          [C_DDR_AXI_DATA_WIDTH-1:0] ddr_axi_rdata,
  input  wire                                     ddr_axi_rvalid,
  output logic                                    ddr_axi_rready
);

@@ set count 0
@@ set condition "if"
@@ foreach arch $archs {
@@ if {$count != 0} {
@@    set condition "else if"
@@ }
${condition} (ARCH_OPTION == "${arch}") begin
  dla_top_wrapper_${arch} dla_top_inst
  (
    //clocks and resets, all resets are not synchronized
    .ddr_clk                    (ddr_clk),
    .dla_clk                    (dla_clk),
    .irq_clk                    (irq_clk),
    .dla_resetn                 (dla_resetn),

    //interrupt request, AXI4 stream master without data, runs on pcie clock
    .o_interrupt_level          (irq_level),

    //CSR, AXI4 lite slave, runs on ddr clock
    .i_csr_arvalid              (csr_axi_arvalid),
    .i_csr_araddr               (csr_axi_araddr),
    .o_csr_arready              (csr_axi_arready),
    .o_csr_rvalid               (csr_axi_rvalid),
    .o_csr_rdata                (csr_axi_rdata),
    .i_csr_rready               (csr_axi_rready),
    .i_csr_awvalid              (csr_axi_awvalid),
    .i_csr_awaddr               (csr_axi_awaddr),
    .o_csr_awready              (csr_axi_awready),
    .i_csr_wvalid               (csr_axi_wvalid),
    .i_csr_wdata                (csr_axi_wdata),
    .o_csr_wready               (csr_axi_wready),
    .o_csr_bvalid               (csr_axi_bvalid),
    .i_csr_bready               (csr_axi_bready),

    //global memory, AXI4 master, runs on ddr clock
    .o_ddr_arvalid              (ddr_axi_arvalid),
    .o_ddr_araddr               (ddr_axi_araddr),
    .o_ddr_arlen                (ddr_axi_arlen),
    .o_ddr_arsize               (ddr_axi_arsize),
    .o_ddr_arburst              (ddr_axi_arburst),
    .o_ddr_arid                 (ddr_axi_arid),
    .i_ddr_arready              (ddr_axi_arready),
    .i_ddr_rvalid               (ddr_axi_rvalid),
    .i_ddr_rdata                (ddr_axi_rdata),
    .i_ddr_rid                  (ddr_axi_rid),
    .o_ddr_rready               (ddr_axi_rready),
    .o_ddr_awvalid              (ddr_axi_awvalid),
    .o_ddr_awaddr               (ddr_axi_awaddr),
    .o_ddr_awlen                (ddr_axi_awlen),
    .o_ddr_awsize               (ddr_axi_awsize),
    .o_ddr_awburst              (ddr_axi_awburst),
    .i_ddr_awready              (ddr_axi_awready),
    .o_ddr_wvalid               (ddr_axi_wvalid),
    .o_ddr_wdata                (ddr_axi_wdata),
    .o_ddr_wstrb                (ddr_axi_wstrb),
    .o_ddr_wlast                (ddr_axi_wlast),
    .i_ddr_wready               (ddr_axi_wready),
    .i_ddr_bvalid               (ddr_axi_bvalid),
    .o_ddr_bready               (ddr_axi_bready)
  );
end
@@set count 1
@@}
@@ set fatal_command "\$fatal"
else begin
  ${fatal_command}( 1, "Architecture Chosen is invalid" );
end

endmodule

`default_nettype wire