axi_tdl 0.2.0 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/gem-push.yml +46 -28
- data/.github/workflows/ruby.yml +1 -1
- data/.gitignore +2 -1
- data/.travis.yml +1 -0
- data/axi_tdl.gemspec +1 -1
- data/lib/axi/AXI4/axi4_long_to_axi4_wide_B1.sv +5 -3
- data/lib/axi/AXI4/interconnect/axi4_mix_interconnect_M2S.sv +4 -2
- data/lib/axi/AXI4/interconnect/axi4_rd_mix_interconnect_M2S_A2.sv +4 -2
- data/lib/axi/AXI4/long_axis_to_axi4_wr.rb +1 -0
- data/lib/axi/AXI4/odata_pool_axi4_A4.sv +173 -0
- data/lib/axi/AXI4/packet_fifo/axi4_packet_fifo_B1.sv +66 -0
- data/lib/axi/AXI4/packet_fifo/axi4_rd_packet_fifo_A1.sv +260 -0
- data/lib/axi/AXI4/packet_fifo/axi4_wr_packet_fifo_A1.sv +192 -0
- data/lib/axi/AXI4/packet_partition/axi4_partition_rd_verb.rb +4 -2
- data/lib/axi/AXI4/wide_axis_to_axi4_wr.sv +1 -1
- data/lib/axi/AXI_stream/axi_stream_split_channel.sv +21 -21
- data/lib/axi/AXI_stream/axi_streams_combin.sv +2 -1
- data/lib/axi/AXI_stream/axi_streams_combin_A1.sv +2 -1
- data/lib/axi/AXI_stream/axi_streams_scaler.sv +2 -1
- data/lib/axi/AXI_stream/axi_streams_scaler_A1.sv +2 -1
- data/lib/axi/AXI_stream/axis_combin_with_fifo.sv +2 -1
- data/lib/axi/AXI_stream/axis_head_cut_verc.rb +2 -0
- data/lib/axi/AXI_stream/gen_big_field_table.sv +3 -2
- data/lib/axi/AXI_stream/gen_origin_axis_A3.sv +163 -0
- data/lib/axi/AXI_stream/packet_fifo/axi_stream_packet_fifo_B1F.sv +129 -0
- data/lib/axi/AXI_stream/parse_big_field_table_main.sv +101 -0
- data/lib/axi/AXI_stream/parse_big_field_table_mirror.sv +94 -0
- data/lib/axi/axi4_to_xilinx_ddr_native/axi4_to_native_for_ddr_ip_C2.sv +75 -0
- data/lib/axi/axi4_to_xilinx_ddr_native/ddr_native_fifo_A2.sv +206 -0
- data/lib/axi/axi4_to_xilinx_ddr_native/ddr_native_fifo_B1.sv +297 -0
- data/lib/axi/axi4_to_xilinx_ddr_native/model_ddr_ip_app.sv +2 -2
- data/lib/axi/common/common_ram_wrapper.sv +1 -1
- data/lib/axi/data_interface/data_inf_c/data_c_pipe_sync_seam.sv +11 -11
- data/lib/axi/data_interface/data_inf_c/data_c_scaler.sv +2 -1
- data/lib/axi/data_interface/data_inf_c/data_c_scaler_A1.sv +2 -1
- data/lib/axi/data_interface/data_streams_combin.sv +2 -1
- data/lib/axi/data_interface/data_streams_combin_A1.sv +2 -1
- data/lib/axi/data_interface/data_streams_scaler.sv +2 -1
- data/lib/axi_tdl/version.rb +1 -1
- data/lib/tdl/axi4/axi4_interconnect_verb.rb +5 -1
- data/lib/tdl/examples/2_hdl_class/tmp/test_module_var.sv +2 -2
- data/lib/tdl/examples/2_hdl_class/tmp/test_vcs_string.sv +1 -1
- data/lib/tdl/examples/8_top_module/test_top.sv +7 -26
- data/lib/tdl/examples/8_top_module/test_top_sim.sv +26 -7
- data/lib/tdl/examples/9_itegration/test_tttop.sv +7 -38
- data/lib/tdl/examples/9_itegration/test_tttop_sim.sv +38 -7
- data/lib/tdl/rebuild_ele/ele_base.rb +14 -0
- metadata +14 -3
@@ -0,0 +1,206 @@
|
|
1
|
+
/**********************************************
|
2
|
+
_______________________________________
|
3
|
+
___________ Cook Darwin __________
|
4
|
+
_______________________________________
|
5
|
+
descript:
|
6
|
+
author : Cook.Darwin
|
7
|
+
Version: VERA.1.0
|
8
|
+
regenerate axis_rd_inf.axis_tlast
|
9
|
+
creaded: 2018/11/26
|
10
|
+
madified:
|
11
|
+
***********************************************/
|
12
|
+
`timescale 1ns / 1ps
|
13
|
+
module ddr_native_fifo_A2 #(
|
14
|
+
parameter ADDR_WIDTH = 27,
|
15
|
+
parameter DATA_WIDTH = 256
|
16
|
+
)(
|
17
|
+
axi_stream_inf.slaver axis_inf,
|
18
|
+
axi_stream_inf.master axis_rd_inf,
|
19
|
+
//---DDR IP
|
20
|
+
input ui_clock,
|
21
|
+
input ui_rstn,
|
22
|
+
output logic[ADDR_WIDTH-1:0] app_addr,
|
23
|
+
output logic[2:0] app_cmd,
|
24
|
+
output logic app_en,
|
25
|
+
output logic[DATA_WIDTH-1:0] app_wdf_data,
|
26
|
+
output logic app_wdf_end,
|
27
|
+
output logic[DATA_WIDTH/8-1:0] app_wdf_mask,
|
28
|
+
output logic app_wdf_wren,
|
29
|
+
input [DATA_WIDTH-1:0] app_rd_data,
|
30
|
+
input app_rd_data_end,
|
31
|
+
input app_rd_data_valid,
|
32
|
+
input app_rdy,
|
33
|
+
input app_wdf_rdy,
|
34
|
+
input logic init_calib_complete
|
35
|
+
);
|
36
|
+
|
37
|
+
assign app_wdf_mask = '0;
|
38
|
+
assign app_wdf_end = 1'b1;
|
39
|
+
|
40
|
+
|
41
|
+
initial begin
|
42
|
+
assert(axis_inf.DSIZE == (ADDR_WIDTH + DATA_WIDTH + 3))
|
43
|
+
else begin
|
44
|
+
$error("axis_inf.DSIZE#%0d != (3 + ADDR_WIDTH#%0d + DATA_WIDTH#%0d)",axis_inf.DSIZE,ADDR_WIDTH,DATA_WIDTH);
|
45
|
+
$stop;
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
logic clock,rst_n;
|
50
|
+
assign clock = axis_inf.aclk;
|
51
|
+
assign rst_n = axis_inf.aresetn;
|
52
|
+
|
53
|
+
logic aux_fifo_empty;
|
54
|
+
logic aux_fifo_full;
|
55
|
+
logic aux_fifo_wr_en;
|
56
|
+
logic aux_fifo_rd_en;
|
57
|
+
logic [ADDR_WIDTH + 3 -1:0] aux_fifo_wdata,aux_fifo_rdata;
|
58
|
+
|
59
|
+
independent_clock_fifo #(
|
60
|
+
.DEPTH ( 8 ),
|
61
|
+
.DSIZE (ADDR_WIDTH + 3 )
|
62
|
+
)common_fifo_addr_inst(
|
63
|
+
// /* input */ .clock (clock ),
|
64
|
+
// /* input */ .rst_n (rst_n ),
|
65
|
+
/* input */ .wr_clk (clock ),
|
66
|
+
/* input */ .wr_rst_n (rst_n ),
|
67
|
+
/* input */ .rd_clk (ui_clock ),
|
68
|
+
/* input */ .rd_rst_n (ui_rstn ),
|
69
|
+
/* input [DSIZE-1:0] */ .wdata (aux_fifo_wdata ),
|
70
|
+
/* input */ .wr_en (aux_fifo_wr_en ),
|
71
|
+
/* output logic[DSIZE-1:0] */ .rdata (aux_fifo_rdata ),
|
72
|
+
/* input */ .rd_en (aux_fifo_rd_en ),
|
73
|
+
/* output logic[CSIZE-1:0] */ .count (),
|
74
|
+
/* output logic */ .empty (aux_fifo_empty ),
|
75
|
+
/* output logic */ .full (aux_fifo_full )
|
76
|
+
);
|
77
|
+
|
78
|
+
assign aux_fifo_wdata = axis_inf.axis_tdata[DATA_WIDTH +: (ADDR_WIDTH+3)];
|
79
|
+
assign aux_fifo_wr_en = axis_inf.axis_tvalid && axis_inf.axis_tready;
|
80
|
+
|
81
|
+
//-->> DATA
|
82
|
+
logic w_fifo_empty;
|
83
|
+
logic w_fifo_full;
|
84
|
+
logic w_fifo_wr_en;
|
85
|
+
logic w_fifo_rd_en;
|
86
|
+
logic [DATA_WIDTH-1:0] w_fifo_wdata,w_fifo_rdata;
|
87
|
+
|
88
|
+
independent_clock_fifo #(
|
89
|
+
.DEPTH ( 8 ),
|
90
|
+
.DSIZE (DATA_WIDTH )
|
91
|
+
)common_fifo_data_inst(
|
92
|
+
// /* input */ .clock (clock ),
|
93
|
+
// /* input */ .rst_n (rst_n ),
|
94
|
+
/* input */ .wr_clk (clock ),
|
95
|
+
/* input */ .wr_rst_n (rst_n ),
|
96
|
+
/* input */ .rd_clk (ui_clock ),
|
97
|
+
/* input */ .rd_rst_n (ui_rstn ),
|
98
|
+
/* input [DSIZE-1:0] */ .wdata (w_fifo_wdata ),
|
99
|
+
/* input */ .wr_en (w_fifo_wr_en ),
|
100
|
+
/* output logic[DSIZE-1:0] */ .rdata (w_fifo_rdata ),
|
101
|
+
/* input */ .rd_en (w_fifo_rd_en ),
|
102
|
+
/* output logic[CSIZE-1:0] */ .count (),
|
103
|
+
/* output logic */ .empty (w_fifo_empty ),
|
104
|
+
/* output logic */ .full (w_fifo_full )
|
105
|
+
);
|
106
|
+
|
107
|
+
assign axis_inf.axis_tready = !aux_fifo_full && !w_fifo_full;
|
108
|
+
|
109
|
+
assign w_fifo_wdata = axis_inf.axis_tdata[DATA_WIDTH-1:0];
|
110
|
+
assign w_fifo_wr_en = aux_fifo_wr_en && axis_inf.axis_tdata[(DATA_WIDTH + ADDR_WIDTH) +: 3] == 3'b000;
|
111
|
+
assign app_wdf_data = w_fifo_rdata;
|
112
|
+
assign app_wdf_wren = !w_fifo_empty;
|
113
|
+
assign w_fifo_rd_en = (app_wdf_wren && app_wdf_rdy);
|
114
|
+
|
115
|
+
//-- APP
|
116
|
+
assign app_en = !aux_fifo_empty;
|
117
|
+
assign aux_fifo_rd_en = app_rdy && app_en;
|
118
|
+
assign app_cmd = aux_fifo_rdata[ADDR_WIDTH +: 3];
|
119
|
+
assign app_addr = aux_fifo_rdata[ADDR_WIDTH-1:0];
|
120
|
+
|
121
|
+
//-->> STACK
|
122
|
+
logic rd_fifo_empty;
|
123
|
+
logic rd_fifo_full;
|
124
|
+
logic rd_fifo_wr_en;
|
125
|
+
logic rd_fifo_rd_en;
|
126
|
+
logic [8+2:0] rd_fifo_wdata,rd_fifo_rdata;
|
127
|
+
|
128
|
+
common_fifo #(
|
129
|
+
.DEPTH ( 8 ),
|
130
|
+
.DSIZE ( 9+2 )
|
131
|
+
)common_fifo_rd_last_inst(
|
132
|
+
/* input */ .clock (clock ),
|
133
|
+
/* input */ .rst_n (rst_n ),
|
134
|
+
/* input [DSIZE-1:0] */ .wdata (rd_fifo_wdata ),
|
135
|
+
/* input */ .wr_en (rd_fifo_wr_en ),
|
136
|
+
/* output logic[DSIZE-1:0] */ .rdata (rd_fifo_rdata ),
|
137
|
+
/* input */ .rd_en (rd_fifo_rd_en ),
|
138
|
+
/* output logic[CSIZE-1:0] */ .count (),
|
139
|
+
/* output logic */ .empty (rd_fifo_empty ),
|
140
|
+
/* output logic */ .full (rd_fifo_full )
|
141
|
+
);
|
142
|
+
|
143
|
+
assign rd_fifo_wdata = {axis_inf.axis_tcnt[8:0]};
|
144
|
+
assign rd_fifo_wr_en = axis_inf.axis_tvalid && axis_inf.axis_tready && axis_inf.axis_tlast && axis_inf.axis_tdata[(DATA_WIDTH + ADDR_WIDTH) +: 3] == 3'b001;
|
145
|
+
assign rd_fifo_rd_en = axis_rd_inf.axis_tvalid && axis_rd_inf.axis_tlast;
|
146
|
+
|
147
|
+
// read valid conter
|
148
|
+
logic[8+2:0] rd_vld_cnt;
|
149
|
+
always@(posedge clock,negedge rst_n)
|
150
|
+
if(~rst_n) rd_vld_cnt <= '0;
|
151
|
+
else begin
|
152
|
+
if(axis_rd_inf.axis_tvalid && axis_rd_inf.axis_tlast)
|
153
|
+
rd_vld_cnt <= '0;
|
154
|
+
else if(axis_rd_inf.axis_tvalid)
|
155
|
+
rd_vld_cnt <= rd_vld_cnt + 1'b1;
|
156
|
+
else rd_vld_cnt <= rd_vld_cnt;
|
157
|
+
end
|
158
|
+
|
159
|
+
always@(posedge clock,negedge rst_n)
|
160
|
+
if(~rst_n) axis_rd_inf.axis_tlast <= 1'b0;
|
161
|
+
else begin
|
162
|
+
if(!rd_fifo_empty && rd_fifo_rdata == '0)
|
163
|
+
// if(axis_rd_inf.axis_tvalid && axis_rd_inf.axis_tready && axis_rd_inf.axis_tlast && axis_rd_inf.axis_tcnt == '0)
|
164
|
+
axis_rd_inf.axis_tlast <= 1'b1;
|
165
|
+
else if(axis_rd_inf.axis_tvalid && axis_rd_inf.axis_tready && axis_rd_inf.axis_tlast)
|
166
|
+
axis_rd_inf.axis_tlast <= 1'b0;
|
167
|
+
else if(axis_rd_inf.axis_tvalid && rd_vld_cnt >= (rd_fifo_rdata-9'd1) && !rd_fifo_empty)
|
168
|
+
axis_rd_inf.axis_tlast <= 1'b1;
|
169
|
+
else axis_rd_inf.axis_tlast <= axis_rd_inf.axis_tlast;
|
170
|
+
end
|
171
|
+
|
172
|
+
//-- APP
|
173
|
+
// assign axis_rd_inf.axis_tdata = app_rd_data;
|
174
|
+
// assign axis_rd_inf.axis_tvalid = app_rd_data_valid;
|
175
|
+
assign axis_rd_inf.axis_tkeep = '1;
|
176
|
+
assign axis_rd_inf.axis_tuser = '0;
|
177
|
+
|
178
|
+
wide_fifo #( //min 512 depth
|
179
|
+
.DSIZE (DATA_WIDTH )
|
180
|
+
)wide_fifo_inst(
|
181
|
+
/* input */ .wr_clk (ui_clock ),
|
182
|
+
/* input */ .wr_rst (~ui_rstn ),
|
183
|
+
/* input */ .rd_clk (clock ),
|
184
|
+
/* input */ .rd_rst (~rst_n ),
|
185
|
+
/* input [DSIZE-1:0] */ .din (app_rd_data ),
|
186
|
+
/* input */ .wr_en (app_rd_data_valid ),
|
187
|
+
/* input */ .rd_en (axis_rd_inf.axis_tvalid && axis_rd_inf.axis_tready ),
|
188
|
+
/* output [DSIZE-1:0] */ .dout (axis_rd_inf.axis_tdata ),
|
189
|
+
/* output */ .full (wide_fifo_full ),
|
190
|
+
/* output */ .empty (wide_fifo_empty )
|
191
|
+
);
|
192
|
+
|
193
|
+
assign axis_rd_inf.axis_tvalid = ~wide_fifo_empty;
|
194
|
+
|
195
|
+
// data overflow
|
196
|
+
(* dont_touch = "true" *)logic rd_data_overflow;
|
197
|
+
|
198
|
+
always@(posedge clock,negedge rst_n)
|
199
|
+
if(~rst_n) rd_data_overflow <= 1'b0;
|
200
|
+
else begin
|
201
|
+
if(axis_rd_inf.axis_tvalid && ~axis_rd_inf.axis_tready)
|
202
|
+
rd_data_overflow <= 1'b1;
|
203
|
+
else rd_data_overflow <= rd_data_overflow;
|
204
|
+
end
|
205
|
+
|
206
|
+
endmodule
|
@@ -0,0 +1,297 @@
|
|
1
|
+
/**********************************************
|
2
|
+
_______________________________________
|
3
|
+
___________ Cook Darwin __________
|
4
|
+
_______________________________________
|
5
|
+
descript:
|
6
|
+
author : Cook.Darwin
|
7
|
+
Version: VERB.0.0 : ###### Fri Apr 24 10:02:44 CST 2020
|
8
|
+
add fifo buffer for read
|
9
|
+
creaded: 2018/11/26
|
10
|
+
madified: ###### Fri Apr 24 10:02:31 CST 2020
|
11
|
+
***********************************************/
|
12
|
+
`timescale 1ns / 1ps
|
13
|
+
module ddr_native_fifo_B1 #(
|
14
|
+
parameter ADDR_WIDTH = 27,
|
15
|
+
parameter DATA_WIDTH = 256
|
16
|
+
)(
|
17
|
+
axi_stream_inf.slaver axis_inf,
|
18
|
+
axi_stream_inf.master axis_rd_inf, // 和 axis_inf一个时钟域
|
19
|
+
//---DDR IP
|
20
|
+
input ui_clock,
|
21
|
+
input ui_rstn,
|
22
|
+
output logic[ADDR_WIDTH-1:0] app_addr,
|
23
|
+
output logic[2:0] app_cmd,
|
24
|
+
output logic app_en,
|
25
|
+
output logic[DATA_WIDTH-1:0] app_wdf_data,
|
26
|
+
output logic app_wdf_end,
|
27
|
+
output logic[DATA_WIDTH/8-1:0] app_wdf_mask,
|
28
|
+
output logic app_wdf_wren,
|
29
|
+
input [DATA_WIDTH-1:0] app_rd_data,
|
30
|
+
input app_rd_data_end,
|
31
|
+
input app_rd_data_valid,
|
32
|
+
input app_rdy,
|
33
|
+
input app_wdf_rdy,
|
34
|
+
input logic init_calib_complete
|
35
|
+
);
|
36
|
+
|
37
|
+
assign app_wdf_mask = '0;
|
38
|
+
assign app_wdf_end = 1'b1;
|
39
|
+
|
40
|
+
|
41
|
+
initial begin
|
42
|
+
assert(axis_inf.DSIZE == (ADDR_WIDTH + DATA_WIDTH + 3))
|
43
|
+
else begin
|
44
|
+
$error("axis_inf.DSIZE#%0d != (3 + ADDR_WIDTH#%0d + DATA_WIDTH#%0d)",axis_inf.DSIZE,ADDR_WIDTH,DATA_WIDTH);
|
45
|
+
$stop;
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
logic clock,rst_n;
|
50
|
+
assign clock = axis_inf.aclk;
|
51
|
+
assign rst_n = axis_inf.aresetn;
|
52
|
+
|
53
|
+
logic aux_fifo_empty;
|
54
|
+
logic aux_fifo_full;
|
55
|
+
logic aux_fifo_wr_en;
|
56
|
+
logic aux_fifo_rd_en;
|
57
|
+
logic [ADDR_WIDTH + 3 -1:0] aux_fifo_wdata,aux_fifo_rdata;
|
58
|
+
|
59
|
+
independent_clock_fifo #(
|
60
|
+
.DEPTH ( 8 ),
|
61
|
+
.DSIZE (ADDR_WIDTH + 3 )
|
62
|
+
)independent_clock_fifo_addr_inst(
|
63
|
+
// /* input */ .clock (clock ),
|
64
|
+
// /* input */ .rst_n (rst_n ),
|
65
|
+
/* input */ .wr_clk (clock ),
|
66
|
+
/* input */ .wr_rst_n (rst_n ),
|
67
|
+
/* input */ .rd_clk (ui_clock ),
|
68
|
+
/* input */ .rd_rst_n (ui_rstn ),
|
69
|
+
/* input [DSIZE-1:0] */ .wdata (aux_fifo_wdata ),
|
70
|
+
/* input */ .wr_en (aux_fifo_wr_en ),
|
71
|
+
/* output logic[DSIZE-1:0] */ .rdata (aux_fifo_rdata ),
|
72
|
+
/* input */ .rd_en (aux_fifo_rd_en ),
|
73
|
+
/* output logic */ .empty (aux_fifo_empty ),
|
74
|
+
/* output logic */ .full (aux_fifo_full )
|
75
|
+
);
|
76
|
+
|
77
|
+
assign aux_fifo_wdata = axis_inf.axis_tdata[DATA_WIDTH +: (ADDR_WIDTH+3)];
|
78
|
+
assign aux_fifo_wr_en = axis_inf.axis_tvalid && axis_inf.axis_tready;
|
79
|
+
|
80
|
+
//-->> DATA
|
81
|
+
logic w_fifo_empty;
|
82
|
+
logic w_fifo_full;
|
83
|
+
logic w_fifo_wr_en;
|
84
|
+
logic w_fifo_rd_en;
|
85
|
+
logic [DATA_WIDTH-1:0] w_fifo_wdata,w_fifo_rdata;
|
86
|
+
|
87
|
+
logic rd_atom_fifo_full;
|
88
|
+
|
89
|
+
independent_clock_fifo #(
|
90
|
+
.DEPTH ( 8 ),
|
91
|
+
.DSIZE (DATA_WIDTH )
|
92
|
+
)independent_clock_fifo_data_inst(
|
93
|
+
// /* input */ .clock (clock ),
|
94
|
+
// /* input */ .rst_n (rst_n ),
|
95
|
+
/* input */ .wr_clk (clock ),
|
96
|
+
/* input */ .wr_rst_n (rst_n ),
|
97
|
+
/* input */ .rd_clk (ui_clock ),
|
98
|
+
/* input */ .rd_rst_n (ui_rstn ),
|
99
|
+
/* input [DSIZE-1:0] */ .wdata (w_fifo_wdata ),
|
100
|
+
/* input */ .wr_en (w_fifo_wr_en ),
|
101
|
+
/* output logic[DSIZE-1:0] */ .rdata (w_fifo_rdata ),
|
102
|
+
/* input */ .rd_en (w_fifo_rd_en ),
|
103
|
+
/* output logic */ .empty (w_fifo_empty ),
|
104
|
+
/* output logic */ .full (w_fifo_full )
|
105
|
+
);
|
106
|
+
|
107
|
+
assign axis_inf.axis_tready = !aux_fifo_full && !w_fifo_full && !rd_atom_fifo_full;
|
108
|
+
|
109
|
+
assign w_fifo_wdata = axis_inf.axis_tdata[DATA_WIDTH-1:0];
|
110
|
+
assign w_fifo_wr_en = aux_fifo_wr_en && axis_inf.axis_tdata[(DATA_WIDTH + ADDR_WIDTH) +: 3] == 3'b000;
|
111
|
+
assign app_wdf_data = w_fifo_rdata;
|
112
|
+
assign app_wdf_wren = !w_fifo_empty;
|
113
|
+
assign w_fifo_rd_en = (app_wdf_wren && app_wdf_rdy);
|
114
|
+
|
115
|
+
//-- APP
|
116
|
+
assign app_en = !aux_fifo_empty;
|
117
|
+
assign aux_fifo_rd_en = app_rdy && app_en;
|
118
|
+
assign app_cmd = aux_fifo_rdata[ADDR_WIDTH +: 3];
|
119
|
+
assign app_addr = aux_fifo_rdata[ADDR_WIDTH-1:0];
|
120
|
+
|
121
|
+
//-->> STACK
|
122
|
+
logic rd_fifo_empty;
|
123
|
+
// (* dont_touch="true" *)(* mark_debug="true" *)
|
124
|
+
logic rd_fifo_full_error; // when rd_fifo_full high meet that error raising
|
125
|
+
logic rd_fifo_wr_en;
|
126
|
+
logic rd_fifo_rd_en;
|
127
|
+
logic [15:0] rd_fifo_wdata,rd_fifo_rdata;
|
128
|
+
// (* dont_touch="true" *)(* mark_debug="true" *)
|
129
|
+
logic [16:0] rd_fifo_count;
|
130
|
+
|
131
|
+
common_fifo #(
|
132
|
+
.DEPTH ( 8 ),
|
133
|
+
.DSIZE ( 16 )
|
134
|
+
)common_fifo_rd_last_inst(
|
135
|
+
/* input */ .clock (clock ),
|
136
|
+
/* input */ .rst_n (rst_n ),
|
137
|
+
// /* input */ .wr_clk (clock ),
|
138
|
+
// /* input */ .wr_rst_n (rst_n ),
|
139
|
+
// /* input */ .rd_clk (ui_clock ),
|
140
|
+
// /* input */ .rd_rst_n (ui_rstn ),
|
141
|
+
/* input [DSIZE-1:0] */ .wdata (rd_fifo_wdata ),
|
142
|
+
/* input */ .wr_en (rd_fifo_wr_en ),
|
143
|
+
/* output logic[DSIZE-1:0] */ .rdata (rd_fifo_rdata ),
|
144
|
+
/* input */ .rd_en (rd_fifo_rd_en ),
|
145
|
+
/* output logic[CSIZE-1:0] */ .count (rd_fifo_count ),
|
146
|
+
/* output logic */ .empty (rd_fifo_empty ),
|
147
|
+
/* output logic */ .full (rd_fifo_full_error )
|
148
|
+
);
|
149
|
+
|
150
|
+
assign rd_fifo_wdata = {axis_inf.axis_tcnt[15:0]};
|
151
|
+
assign rd_fifo_wr_en = axis_inf.axis_tvalid && axis_inf.axis_tready && axis_inf.axis_tlast && axis_inf.axis_tdata[(DATA_WIDTH + ADDR_WIDTH) +: 3] == 3'b001;
|
152
|
+
assign rd_fifo_rd_en = axis_rd_inf.axis_tvalid && axis_rd_inf.axis_tready && axis_rd_inf.axis_tlast;
|
153
|
+
|
154
|
+
always@(posedge clock,negedge rst_n)
|
155
|
+
if(~rst_n) axis_rd_inf.axis_tlast <= 1'b0;
|
156
|
+
else begin
|
157
|
+
if(!rd_fifo_empty && rd_fifo_rdata == '0)
|
158
|
+
// if(axis_rd_inf.axis_tvalid && axis_rd_inf.axis_tready && axis_rd_inf.axis_tlast && axis_rd_inf.axis_tcnt == '0)
|
159
|
+
axis_rd_inf.axis_tlast <= 1'b1;
|
160
|
+
else if(axis_rd_inf.axis_tvalid && axis_rd_inf.axis_tready && axis_rd_inf.axis_tcnt == (rd_fifo_rdata-9'd1) && !rd_fifo_empty)
|
161
|
+
axis_rd_inf.axis_tlast <= 1'b1;
|
162
|
+
else if(axis_rd_inf.axis_tvalid && axis_rd_inf.axis_tready && axis_rd_inf.axis_tlast)
|
163
|
+
axis_rd_inf.axis_tlast <= 1'b0;
|
164
|
+
else axis_rd_inf.axis_tlast <= axis_rd_inf.axis_tlast;
|
165
|
+
end
|
166
|
+
|
167
|
+
//-- APP
|
168
|
+
//-- >> READ BUFFER
|
169
|
+
// assign axis_rd_inf.axis_tdata = app_rd_data;
|
170
|
+
// assign axis_rd_inf.axis_tvalid = app_rd_data_valid;
|
171
|
+
// assign axis_rd_inf.axis_tkeep = '1;
|
172
|
+
// assign axis_rd_inf.axis_tuser = '0;
|
173
|
+
|
174
|
+
// contrl cmd exec
|
175
|
+
// logic rd_atom_fifo_wdata
|
176
|
+
logic rd_atom_fifo_wr_en;
|
177
|
+
// logic rd_atom_fifo_rdata
|
178
|
+
logic rd_atom_fifo_rd_en;
|
179
|
+
// logic rd_atom_fifo_count
|
180
|
+
logic rd_atom_fifo_empty;
|
181
|
+
// logic rd_atom_fifo_full
|
182
|
+
|
183
|
+
common_fifo #(
|
184
|
+
.DEPTH ( 256 ),
|
185
|
+
.DSIZE ( 1 )
|
186
|
+
)common_fifo_rd_cmd_inst(
|
187
|
+
/* input */ .clock (clock ),
|
188
|
+
/* input */ .rst_n (rst_n ),
|
189
|
+
/* input [DSIZE-1:0] */ .wdata (1'b0 ),
|
190
|
+
/* input */ .wr_en (rd_atom_fifo_wr_en ),
|
191
|
+
/* output logic[DSIZE-1:0] */ .rdata ( ),
|
192
|
+
/* input */ .rd_en (rd_atom_fifo_rd_en ),
|
193
|
+
/* output logic[CSIZE-1:0] */ .count ( ),
|
194
|
+
/* output logic */ .empty (rd_atom_fifo_empty ),
|
195
|
+
/* output logic */ .full (rd_atom_fifo_full )
|
196
|
+
);
|
197
|
+
|
198
|
+
assign rd_atom_fifo_wr_en = axis_inf.axis_tvalid && axis_inf.axis_tready && axis_inf.axis_tdata[(DATA_WIDTH + ADDR_WIDTH) +: 3] == 3'b001;
|
199
|
+
assign rd_atom_fifo_rd_en = axis_rd_inf.axis_tvalid && axis_rd_inf.axis_tready;
|
200
|
+
|
201
|
+
// (* dont_touch="true" *)(* mark_debug="true" *)
|
202
|
+
logic wide_fifo_full;
|
203
|
+
logic wide_fifo_empty;
|
204
|
+
|
205
|
+
// wide_fifo #( //min 512 depth
|
206
|
+
// .DSIZE (DATA_WIDTH )
|
207
|
+
// )wide_fifo_inst(
|
208
|
+
// /* input */ .wr_clk (ui_clock ),
|
209
|
+
// /* input */ .wr_rst (~ui_rstn ),
|
210
|
+
// /* input */ .rd_clk (clock ),
|
211
|
+
// /* input */ .rd_rst (~rst_n ),
|
212
|
+
// /* input [DSIZE-1:0] */ .din (app_rd_data ),
|
213
|
+
// /* input */ .wr_en (app_rd_data_valid ),
|
214
|
+
// /* input */ .rd_en (axis_rd_inf.axis_tvalid && axis_rd_inf.axis_tready ),
|
215
|
+
// /* output [DSIZE-1:0] */ .dout (axis_rd_inf.axis_tdata ),
|
216
|
+
// /* output */ .full (wide_fifo_full ),
|
217
|
+
// /* output */ .empty (wide_fifo_empty )
|
218
|
+
// );
|
219
|
+
|
220
|
+
long_fifo_verb #(
|
221
|
+
.DSIZE (DATA_WIDTH),
|
222
|
+
.LENGTH (1024*2)
|
223
|
+
)long_fifo_verb_inst(
|
224
|
+
/* input */ .wr_clk (ui_clock ),
|
225
|
+
/* input */ .wr_rst (~ui_rstn ),
|
226
|
+
/* input */ .rd_clk (clock ),
|
227
|
+
/* input */ .rd_rst (~rst_n ),
|
228
|
+
/* input [DSIZE-1:0] */ .din (app_rd_data ),
|
229
|
+
/* input */ .wr_en (app_rd_data_valid ),
|
230
|
+
/* input */ .rd_en (axis_rd_inf.axis_tvalid && axis_rd_inf.axis_tready ),
|
231
|
+
/* output [DSIZE-1:0] */ .dout (axis_rd_inf.axis_tdata ),
|
232
|
+
/* output */ .full (wide_fifo_full ),
|
233
|
+
/* output */ .empty (wide_fifo_empty )
|
234
|
+
);
|
235
|
+
|
236
|
+
assign axis_rd_inf.axis_tvalid = ~wide_fifo_empty;
|
237
|
+
|
238
|
+
// TRACK
|
239
|
+
`ifdef TRACK_DDR3_STREAM
|
240
|
+
(* dont_touch="true" *)(* mark_debug="true" *)
|
241
|
+
logic[10:0] track_native_rd_cnt;
|
242
|
+
always_ff@(posedge clock,negedge rst_n)begin
|
243
|
+
if(~rst_n) track_native_rd_cnt <= '0;
|
244
|
+
else begin
|
245
|
+
if(app_en && app_cmd==3'b001 && app_rdy && app_rd_data_valid)
|
246
|
+
track_native_rd_cnt <= track_native_rd_cnt;
|
247
|
+
else if(app_en && app_cmd==3'b001 && app_rdy)
|
248
|
+
track_native_rd_cnt <= track_native_rd_cnt + 1'b1;
|
249
|
+
else if(app_rd_data_valid)
|
250
|
+
track_native_rd_cnt <= track_native_rd_cnt - 1'b1;
|
251
|
+
else track_native_rd_cnt <= track_native_rd_cnt;
|
252
|
+
end
|
253
|
+
end
|
254
|
+
|
255
|
+
(* dont_touch="true" *)(* mark_debug="true" *)
|
256
|
+
logic[10:0] track_axis_rd_cnt;
|
257
|
+
always_ff@(posedge clock,negedge rst_n)begin
|
258
|
+
if(~rst_n) track_axis_rd_cnt <= '0;
|
259
|
+
else begin
|
260
|
+
if(axis_rd_inf.axis_tvalid && axis_rd_inf.axis_tready && app_rd_data_valid)
|
261
|
+
track_axis_rd_cnt <= track_axis_rd_cnt;
|
262
|
+
else if(axis_rd_inf.axis_tvalid && axis_rd_inf.axis_tready)
|
263
|
+
track_axis_rd_cnt <= track_axis_rd_cnt - 1'b1;
|
264
|
+
else if(app_rd_data_valid)
|
265
|
+
track_axis_rd_cnt <= track_axis_rd_cnt + 1'b1;
|
266
|
+
else track_axis_rd_cnt <= track_axis_rd_cnt;
|
267
|
+
end
|
268
|
+
end
|
269
|
+
`endif
|
270
|
+
|
271
|
+
// `define TRACK_DDR3_APP
|
272
|
+
`ifdef TRACK_DDR3_APP
|
273
|
+
(* dont_touch="true" *)(* mark_debug="true" *)
|
274
|
+
logic [9:0] app_en_wr_cnt;
|
275
|
+
(* dont_touch="true" *)(* mark_debug="true" *)
|
276
|
+
logic [9:0] app_wdf_wren_cnt;
|
277
|
+
|
278
|
+
always_ff@(posedge clock,negedge rst_n)begin
|
279
|
+
if(~rst_n) app_en_wr_cnt <= '0;
|
280
|
+
else begin
|
281
|
+
if(app_en && app_cmd==3'b000 && app_rdy)
|
282
|
+
app_en_wr_cnt <= app_en_wr_cnt + 1'b1 ;
|
283
|
+
else app_en_wr_cnt <= app_en_wr_cnt;
|
284
|
+
end
|
285
|
+
end
|
286
|
+
|
287
|
+
always_ff@(posedge clock,negedge rst_n)begin
|
288
|
+
if(~rst_n) app_wdf_wren_cnt <= '0;
|
289
|
+
else begin
|
290
|
+
if(app_wdf_rdy && app_wdf_wren)
|
291
|
+
app_wdf_wren_cnt <= app_wdf_wren_cnt + 1'b1;
|
292
|
+
else app_wdf_wren_cnt <= app_wdf_wren_cnt;
|
293
|
+
end
|
294
|
+
end
|
295
|
+
`endif
|
296
|
+
|
297
|
+
endmodule
|
@@ -115,8 +115,8 @@ task automatic write_cmd ();
|
|
115
115
|
endtask:write_cmd
|
116
116
|
|
117
117
|
task automatic write_data ();
|
118
|
-
|
119
|
-
|
118
|
+
bit [ADDR_WIDTH-1:0] addr;
|
119
|
+
bit [DATA_WIDTH-1:0] data;
|
120
120
|
fork
|
121
121
|
forever begin
|
122
122
|
forever begin
|
@@ -5,7 +5,7 @@ _______________________________________
|
|
5
5
|
descript:
|
6
6
|
author : Cook.Darwin
|
7
7
|
Version: VERA.0.0
|
8
|
-
creaded:
|
8
|
+
creaded:
|
9
9
|
madified:
|
10
10
|
***********************************************/
|
11
11
|
`timescale 1ns/1ps
|
@@ -48,22 +48,22 @@ for(genvar KK0=0;KK0 < LAT;KK0++)begin
|
|
48
48
|
endgenerate
|
49
49
|
//-------- CLOCKs Total 2 ----------------------
|
50
50
|
//--->> CheckClock <<----------------
|
51
|
-
logic
|
52
|
-
integer
|
53
|
-
ClockSameDomain
|
51
|
+
logic cc_done_28,cc_same_28;
|
52
|
+
integer cc_afreq_28,cc_bfreq_28;
|
53
|
+
ClockSameDomain CheckPClock_inst_28(
|
54
54
|
/* input */ .aclk (in_inf.clock ),
|
55
55
|
/* input */ .bclk (out_inf.clock ),
|
56
|
-
/* output logic */ .done (
|
57
|
-
/* output logic */ .same (
|
58
|
-
/* output integer */ .aFreqK (
|
59
|
-
/* output integer */ .bFreqK (
|
56
|
+
/* output logic */ .done (cc_done_28),
|
57
|
+
/* output logic */ .same (cc_same_28),
|
58
|
+
/* output integer */ .aFreqK (cc_afreq_28),
|
59
|
+
/* output integer */ .bFreqK (cc_bfreq_28)
|
60
60
|
);
|
61
61
|
|
62
62
|
initial begin
|
63
|
-
wait(
|
64
|
-
assert(
|
63
|
+
wait(cc_done_28);
|
64
|
+
assert(cc_same_28)
|
65
65
|
else begin
|
66
|
-
$error("--- Error : `data_c_pipe_sync_seam` clock is not same, in_inf.clock< %0f M> != out_inf.clock<%0f M>",1000000.0/
|
66
|
+
$error("--- Error : `data_c_pipe_sync_seam` clock is not same, in_inf.clock< %0f M> != out_inf.clock<%0f M>",1000000.0/cc_afreq_28, 1000000.0/cc_bfreq_28);
|
67
67
|
repeat(10)begin
|
68
68
|
@(posedge in_inf.clock);
|
69
69
|
end
|
@@ -1,7 +1,8 @@
|
|
1
1
|
/**********************************************
|
2
2
|
_______________________________________
|
3
3
|
___________ Cook Darwin __________
|
4
|
-
|
4
|
+
_______________________________________
|
5
|
+
descript:
|
5
6
|
author : Cook.Darwin
|
6
7
|
Version: VERA.0.0
|
7
8
|
creaded: 2018-4-13 12:39:59
|
@@ -1,7 +1,8 @@
|
|
1
1
|
/**********************************************
|
2
2
|
_______________________________________
|
3
3
|
___________ Cook Darwin __________
|
4
|
-
|
4
|
+
_______________________________________
|
5
|
+
descript:
|
5
6
|
author : Cook.Darwin
|
6
7
|
Version: VERA.1.0 2018-4-16 12:04:47
|
7
8
|
add trigger
|
@@ -1,7 +1,8 @@
|
|
1
1
|
/**********************************************
|
2
2
|
_______________________________________
|
3
3
|
___________ Cook Darwin __________
|
4
|
-
|
4
|
+
_______________________________________
|
5
|
+
descript:
|
5
6
|
author : Cook.Darwin
|
6
7
|
Version: VERA.0.0
|
7
8
|
build from data_streams_scaler VA.0.1
|
@@ -1,7 +1,8 @@
|
|
1
1
|
/**********************************************
|
2
2
|
_______________________________________
|
3
3
|
___________ Cook Darwin __________
|
4
|
-
|
4
|
+
_______________________________________
|
5
|
+
descript:
|
5
6
|
author : Cook.Darwin
|
6
7
|
Version: VERA.0.0
|
7
8
|
build from data_streams_scaler VA.0.1
|
@@ -1,7 +1,8 @@
|
|
1
1
|
/**********************************************
|
2
2
|
_______________________________________
|
3
3
|
___________ Cook Darwin __________
|
4
|
-
|
4
|
+
_______________________________________
|
5
|
+
descript:
|
5
6
|
author : Cook.Darwin
|
6
7
|
Version: VERA.0.1
|
7
8
|
Version: VERA.0.2 2018-4-12 15:42:15
|
data/lib/axi_tdl/version.rb
CHANGED
@@ -228,7 +228,7 @@ class Axi4
|
|
228
228
|
curr_quanti_len = e.dsize.real_data * (2**e.lsize.real_data)
|
229
229
|
if(curr_quanti_len > root_quanti_len )
|
230
230
|
# if(true )
|
231
|
-
new_master = self.copy(mode:e.mode,idsize:e.idsize+4)
|
231
|
+
new_master = self.copy(mode:e.mode,idsize:e.idsize+4,name: "#{self.name}_long_slim_to_wide_#{globle_random_name_flag('axi_intc')}" )
|
232
232
|
new_master.mode = e.mode
|
233
233
|
|
234
234
|
require_hdl 'axi4_long_to_axi4_wide_B1.sv'
|
@@ -236,6 +236,8 @@ class Axi4
|
|
236
236
|
TopModule.contain_hdl 'axi4_packet_fifo_verb.sv'
|
237
237
|
TopModule.contain_hdl 'axi4_data_convert_verb.sv'
|
238
238
|
TopModule.contain_hdl 'data_c_pipe_force_vld.sv'
|
239
|
+
TopModule.contain_hdl 'axi4_packet_fifo_B1.sv','axi4_rd_packet_fifo_A1.sv','axi4_wr_packet_fifo_A1.sv','axi_stream_packet_fifo_B1F.sv'
|
240
|
+
|
239
241
|
|
240
242
|
belong_to_module.Instance(:axi4_long_to_axi4_wide_B1,"axi4_long_to_axi4_wide_B1_#{index}_inst") do |h|
|
241
243
|
h[:PARTITION] = "ON"
|
@@ -254,6 +256,8 @@ class Axi4
|
|
254
256
|
TopModule.contain_hdl 'axi4_packet_fifo_verb.sv'
|
255
257
|
TopModule.contain_hdl 'axi4_data_convert_verb.sv'
|
256
258
|
TopModule.contain_hdl 'data_c_pipe_force_vld.sv'
|
259
|
+
TopModule.contain_hdl 'axi4_packet_fifo_B1.sv','axi4_rd_packet_fifo_A1.sv','axi4_wr_packet_fifo_A1.sv','axi_stream_packet_fifo_B1F.sv'
|
260
|
+
|
257
261
|
# puts "#{e.dsize} == #{self.dsize} #{e.dsize != self.dsize} #{e.dsize.class}"
|
258
262
|
new_master = self.copy(name: "#{e.name}_renew_dir",mode:e.mode,idsize:e.idsize)
|
259
263
|
# new_master.axi4_data_convert(up_stream: e)
|
@@ -5,7 +5,7 @@ _______________________________________
|
|
5
5
|
descript:
|
6
6
|
author : Cook.Darwin
|
7
7
|
Version: VERA.0.0
|
8
|
-
created:
|
8
|
+
created: 2023-08-16 21:22:47 +0800
|
9
9
|
madified:
|
10
10
|
***********************************************/
|
11
11
|
`timescale 1ns/1ps
|
@@ -19,7 +19,7 @@ module test_module_var #(
|
|
19
19
|
|
20
20
|
//==========================================================================
|
21
21
|
//-------- define ----------------------------------------------------------
|
22
|
-
localparam ASIZE = 20
|
22
|
+
localparam ASIZE = 20;
|
23
23
|
axi_stream_inf #(.DSIZE(8),.FreqM(100),.USIZE(1)) tmp_axis_inf (.aclk(clock),.aresetn(rst_n),.aclken(1'b1)) ;
|
24
24
|
axi_stream_inf #(.DSIZE(8),.FreqM(100),.USIZE(1)) tmp_axis0_inf (.aclk(clock),.aresetn(rst_n),.aclken(1'b1)) ;
|
25
25
|
axi_inf #(.DSIZE(32),.IDSIZE(2),.ASIZE(8),.LSIZE(9),.MODE("BOTH"),.ADDR_STEP(4294967295),.FreqM(100)) tmp_axi4_inf (.axi_aclk(clock),.axi_aresetn(rst_n)) ;
|