axi_tdl 0.1.20 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/lib/axi/AXI4/axi4_direct_algin_addr_step.sv +223 -0
  3. data/lib/axi/AXI4/axi4_direct_verc.sv +54 -5
  4. data/lib/axi/AXI4/axi4_long_to_axi4_wide_B1.sv +146 -0
  5. data/lib/axi/AXI4/packet_fifo/axi4_packet_fifo_verb.sv +62 -0
  6. data/lib/axi/AXI4/packet_fifo/axi4_wr_packet_fifo.sv +4 -3
  7. data/lib/axi/AXI4/wide_axis_to_axi4_wr.sv +1 -1
  8. data/lib/axi/AXI4/width_convert/axi4_data_convert_verb.sv +280 -0
  9. data/lib/axi/AXI_stream/axi_stream_interconnect_M2S_cpVCS.sv +80 -0
  10. data/lib/axi/AXI_stream/axi_stream_split_channel.sv +20 -20
  11. data/lib/axi/AXI_stream/axis_append_A1.sv +15 -2
  12. data/lib/axi/AXI_stream/axis_uncompress_verb.sv +9 -9
  13. data/lib/axi/AXI_stream/parse_big_field_table_verb.sv +3 -2
  14. data/lib/axi/data_interface/data_inf_c/data_c_pipe_sync_seam.sv +10 -10
  15. data/lib/axi/data_interface/data_inf_c/data_c_scaler_A1.sv +2 -1
  16. data/lib/axi/interface_define/axi_inf.sv +1 -1
  17. data/lib/axi/macro/RTL/define_macro.sv +210 -0
  18. data/lib/axi/macro/SIM/define_macro.sv +194 -0
  19. data/lib/axi_tdl/version.rb +1 -1
  20. data/lib/tdl/auto_script/import_sdl.rb +3 -0
  21. data/lib/tdl/axi4/axi4_interconnect_verb.rb +76 -10
  22. data/lib/tdl/examples/11_test_unit/exp_test_unit.sv +7 -33
  23. data/lib/tdl/examples/11_test_unit/tb_exp_test_unit.sv +1 -1
  24. data/lib/tdl/examples/11_test_unit/tb_exp_test_unit_sim.sv +3 -14
  25. data/lib/tdl/examples/11_test_unit/tu0.sv +1 -1
  26. data/lib/tdl/examples/2_hdl_class/tmp/test_module_var.sv +2 -2
  27. data/lib/tdl/examples/2_hdl_class/tmp/test_vcs_string.sv +1 -1
  28. data/lib/tdl/examples/8_top_module/dve.tcl +0 -6
  29. data/lib/tdl/examples/8_top_module/test_top.sv +1 -1
  30. data/lib/tdl/examples/9_itegration/clock_manage/tu_ClockManage_test_clock_bb.sv +35 -0
  31. data/lib/tdl/examples/9_itegration/tb_test_tttop_sim.sv +2 -2
  32. data/lib/tdl/examples/9_itegration/test_tttop.sv +38 -7
  33. data/lib/tdl/examples/9_itegration/test_tttop_sim.sv +7 -38
  34. data/lib/tdl/examples/9_itegration/top.rb +1 -1
  35. data/lib/tdl/exlib/itegration_test_unit.rb +13 -0
  36. data/lib/tdl/exlib/itegration_verb.rb +22 -17
  37. data/lib/tdl/rebuild_ele/ele_base.rb +15 -3
  38. data/lib/tdl/sdlmodule/sdlmodule_arraychain.rb +1 -0
  39. data/lib/tdl/sdlmodule/sdlmodule_instance.rb +1 -1
  40. data/lib/tdl/sdlmodule/test_unit_module.rb +12 -16
  41. data/lib/tdl/tdl.rb +1 -0
  42. metadata +11 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a8eaf43500813537ef34b6dc527aa5bde8fc7ae089b89dfc27876f6461a8d484
4
- data.tar.gz: 1f05d920964b4123e8e1b8fdbb32b2b96e017d734364b3a325dfd6d2adc77b97
3
+ metadata.gz: 07d14bdc63e601755761b703ae0203852d824e1ffbb0cff1cd61e0c427325401
4
+ data.tar.gz: 94c7af9a7d499b545956f3f4363eb622aba5d78c67be914958867381764e43d6
5
5
  SHA512:
6
- metadata.gz: 70fcc7a0e276e48ecf4ab38633398bd875e02bf354b9f25ee474855c4cd249cc2a57e042f3fdc42caaa21d9e2aef8beac71b1cd76de4d847de977428af20581d
7
- data.tar.gz: b0d765030302b31efab0434bd7f44aec26425a2c6ebb01196a1ba4df43da7198a28aaba06467429982c4ff8d405b7451b23d7e165e245c36ca72c283af15dc57
6
+ metadata.gz: ceee62403d3d7c232713c554600bc774edea66c5aeb059471ea2a1f3ce6f8a5e96826b5204d8ec3e5e825b192648573ac2f4b1c8aee6358e104c714fa2f5a97e
7
+ data.tar.gz: aa71d8cf174190ee50e8b2347509160b8890b963dbba84e25e2133dc90e7d25608b192dcb6d72ff22e799e714b672c665c24fdad6df7fb8bbc7c8f27e8aa70bf
@@ -0,0 +1,223 @@
1
+ /**********************************************
2
+ _______________________________________
3
+ ___________ Cook Darwin __________
4
+ _______________________________________
5
+ descript:
6
+ author : Cook.Darwin
7
+ Version: VERA.1.0
8
+ just fot tdl
9
+ Version: VERC.0.0
10
+ just fot tdl, use class parameter
11
+ creaded: 2017/4/5
12
+ madified:
13
+ ***********************************************/
14
+ `timescale 1ns/1ps
15
+ `include "define_macro.sv"
16
+ module axi4_direct_algin_addr_step #(
17
+ // parameter ABANDON = "MASTER";
18
+ parameter SLAVER_ADDR_STEP = 1024,
19
+ // parameter MASTER_ADDR_STEP = 1024,
20
+ parameter TERMENAL_ADDR_STEP = 1024,
21
+ parameter TERMENAL_DSIZE = 128,
22
+ `parameter_string MODE = "BOTH_to_BOTH", //ONLY_READ to BOTH,ONLY_WRITE to BOTH,BOTH to BOTH,BOTH to ONLY_READ,BOTH to ONLY_WRITE
23
+ `parameter_string SLAVER_MODE = "BOTH", //
24
+ `parameter_string MASTER_MODE = "BOTH", //
25
+ //(* show = "false" *)
26
+ `parameter_string IGNORE_IDSIZE = "FALSE", //(* show = "false" *)
27
+ `parameter_string IGNORE_DSIZE = "FALSE", //(* show = "false" *)
28
+ `parameter_string IGNORE_ASIZE = "FALSE", //(* show = "false" *)
29
+ `parameter_string IGNORE_LSIZE = "FALSE" //(* show = "false" *)
30
+ )(
31
+ axi_inf.slaver slaver_inf,
32
+ axi_inf.master master_inf
33
+ );
34
+
35
+
36
+ import SystemPkg::*;
37
+
38
+ initial begin
39
+ #(1us);
40
+ if(IGNORE_IDSIZE == "FALSE")begin
41
+ assert(slaver_inf.IDSIZE <= master_inf.IDSIZE) //idsize of slaver_inf can be smaller thane master_inf's
42
+ else begin
43
+ $error("SLAVER AXIS IDSIZE != MASTER AXIS IDSIZE");
44
+ $finish;
45
+ end
46
+ end
47
+ if(IGNORE_DSIZE == "FALSE")begin
48
+ assert(slaver_inf.DSIZE == master_inf.DSIZE)
49
+ else $error("SLAVER AXIS DSIZE != MASTER AXIS DSIZE");
50
+ end
51
+ // if(IGNORE_ASIZE == "FALSE")begin
52
+ // assert(slaver_inf.ASIZE == master_inf.ASIZE)
53
+ // else $error("SLAVER AXIS ASIZE != MASTER AXIS ASIZE");
54
+ // end
55
+ if(IGNORE_LSIZE == "FALSE")begin
56
+ assert(slaver_inf.LSIZE == master_inf.LSIZE)
57
+ else $error("SLAVER AXIS LSIZE != MASTER AXIS LSIZE");
58
+ end
59
+ case(MODE)
60
+ "BOTH_to_BOTH","BOTH_to_ONLY_READ","BOTH_to_ONLY_WRITE":
61
+ assert(slaver_inf.MODE =="BOTH" && SLAVER_MODE=="BOTH")
62
+ else $error("SLAVER AXIS MODE<%s> != BOTH",slaver_inf.MODE);
63
+ "ONLY_READ_to_BOTH":
64
+ assert(slaver_inf.MODE == "ONLY_READ" && SLAVER_MODE=="ONLY_READ")
65
+ else $error("SLAVER AXIS MODE != ONLY_READ");
66
+ "ONLY_WRITE_to_BOTH","ONLY_WRITE_to_ONLY_WRITE":
67
+ assert(slaver_inf.MODE == "ONLY_WRITE" && SLAVER_MODE=="ONLY_WRITE")
68
+ else begin
69
+ $error("SLAVER AXIS MODE != ONLY_WRITE");
70
+ $finish;
71
+ end
72
+ "ONLY_READ_to_ONLY_READ","ONLY_READ_TO_ONLY_READ":
73
+ assert(slaver_inf.MODE == "ONLY_READ" && SLAVER_MODE=="ONLY_READ")
74
+ else $error("SLAVER AXIS MODE != ONLY_READ");
75
+ "ONLY_WRITE_TO_ONLY_WRITE":
76
+ assert(slaver_inf.MODE == "ONLY_WRITE" && SLAVER_MODE=="ONLY_WRITE")
77
+ else $error("SLAVER AXIS MODE != ONLY_WRITE");
78
+ default:
79
+ assert(slaver_inf.MODE == "_____")
80
+ else $error("SLAVER AXIS MODE ERROR") ;
81
+ endcase
82
+
83
+ case(MODE)
84
+ "ONLY_WRITE_to_BOTH","ONLY_READ_to_BOTH","BOTH_to_BOTH":
85
+ assert(master_inf.MODE == "BOTH" && MASTER_MODE=="BOTH")
86
+ else $error("MASTER AXIS MODE != BOTH");
87
+ "BOTH_to_ONLY_READ":
88
+ assert(master_inf.MODE == "ONLY_READ" && MASTER_MODE=="ONLY_READY")
89
+ else $error("MASTER AXIS MODE != ONLY_READ");
90
+ "BOTH_to_ONLY_WRITE","ONLY_WRITE_to_ONLY_WRITE":
91
+ assert(master_inf.MODE == "ONLY_WRITE" && MASTER_MODE=="ONLY_WRITE")
92
+ else $error("MASTER AXIS MODE != ONLY_WRITE");
93
+ "ONLY_READ_to_ONLY_READ","ONLY_READ_TO_ONLY_READ":
94
+ assert(master_inf.MODE == "ONLY_READ" && MASTER_MODE=="ONLY_READ")
95
+ else $error("MASTER AXIS MODE != ONLY_READ");
96
+ "ONLY_WRITE_TO_ONLY_WRITE":
97
+ assert(master_inf.MODE == "ONLY_WRITE" && MASTER_MODE=="ONLY_WRITE")
98
+ else $error("MASTER AXIS MODE != ONLY_WRITE");
99
+ default:
100
+ assert(master_inf.MODE == "_____")
101
+ else $error("MASTER AXIS MODE<%0s> ERROR",MODE);
102
+ endcase
103
+
104
+ end
105
+
106
+ localparam RF = $clog2(TERMENAL_DSIZE) - $clog2(slaver_inf.DSIZE) + $clog2(SLAVER_ADDR_STEP) - $clog2(TERMENAL_ADDR_STEP);
107
+
108
+ localparam FR = $clog2(TERMENAL_DSIZE) + $clog2(SLAVER_ADDR_STEP);
109
+ localparam FL = $clog2(slaver_inf.DSIZE) + $clog2(TERMENAL_ADDR_STEP);
110
+
111
+ generate
112
+ if( (MASTER_MODE=="ONLY_WRITE") || (MASTER_MODE=="BOTH" && (SLAVER_MODE=="ONLY_WRITE" || SLAVER_MODE=="BOTH") ) )begin
113
+ assign master_inf.axi_awid = slaver_inf.axi_awid ;
114
+
115
+ if(FR == FL)
116
+ assign master_inf.axi_awaddr = slaver_inf.axi_awaddr ;
117
+ else if(FR < FL)
118
+ assign master_inf.axi_awaddr = slaver_inf.axi_awaddr << (FL - FR) ;
119
+ else if(FR > FL)
120
+ assign master_inf.axi_awaddr = slaver_inf.axi_awaddr >> (FR - FL) ;
121
+
122
+ assign master_inf.axi_awlen = slaver_inf.axi_awlen ;
123
+ assign master_inf.axi_awsize = slaver_inf.axi_awsize ;
124
+ assign master_inf.axi_awburst = slaver_inf.axi_awburst;
125
+ assign master_inf.axi_awlock = slaver_inf.axi_awlock ;
126
+ assign master_inf.axi_awcache = slaver_inf.axi_awcache;
127
+ assign master_inf.axi_awprot = slaver_inf.axi_awprot ;
128
+ assign master_inf.axi_awqos = slaver_inf.axi_awqos ;
129
+ assign master_inf.axi_awvalid = slaver_inf.axi_awvalid;
130
+ assign slaver_inf.axi_awready = master_inf.axi_awready;
131
+ assign master_inf.axi_wdata = slaver_inf.axi_wdata ;
132
+ assign master_inf.axi_wstrb = slaver_inf.axi_wstrb ;
133
+ assign master_inf.axi_wlast = slaver_inf.axi_wlast ;
134
+ assign master_inf.axi_wvalid = slaver_inf.axi_wvalid ;
135
+ assign slaver_inf.axi_wready = master_inf.axi_wready ;
136
+ assign master_inf.axi_bready = slaver_inf.axi_bready ;
137
+ assign slaver_inf.axi_bid = master_inf.axi_bid ;
138
+ assign slaver_inf.axi_bresp = master_inf.axi_bresp ;
139
+ assign slaver_inf.axi_bvalid = master_inf.axi_bvalid ;
140
+ end
141
+ endgenerate
142
+
143
+
144
+ generate
145
+ if( (MASTER_MODE=="ONLY_READ") || (MASTER_MODE=="BOTH" && (SLAVER_MODE=="ONLY_READ" || SLAVER_MODE=="BOTH") ) )begin
146
+ assign master_inf.axi_arid = slaver_inf.axi_arid ;
147
+ // assign master_inf.axi_araddr = slaver_inf.axi_araddr ;
148
+
149
+ if(FR == FL)
150
+ assign master_inf.axi_araddr = slaver_inf.axi_araddr ;
151
+ else if(FR < FL)
152
+ assign master_inf.axi_araddr = slaver_inf.axi_araddr << (FL - FR) ;
153
+ else if(FR > FL)
154
+ assign master_inf.axi_araddr = slaver_inf.axi_araddr >> (FR - FL) ;
155
+
156
+ assign master_inf.axi_arlen = slaver_inf.axi_arlen ;
157
+ assign master_inf.axi_arsize = slaver_inf.axi_arsize ;
158
+ assign master_inf.axi_arburst = slaver_inf.axi_arburst;
159
+ assign master_inf.axi_arlock = slaver_inf.axi_arlock ;
160
+ assign master_inf.axi_arcache = slaver_inf.axi_arcache;
161
+ assign master_inf.axi_arprot = slaver_inf.axi_arprot ;
162
+ assign master_inf.axi_arqos = slaver_inf.axi_arqos ;
163
+ assign master_inf.axi_arvalid = slaver_inf.axi_arvalid;
164
+ assign slaver_inf.axi_arready = master_inf.axi_arready;
165
+ assign master_inf.axi_rready = slaver_inf.axi_rready ;
166
+ assign slaver_inf.axi_rid = master_inf.axi_rid ;
167
+ assign slaver_inf.axi_rdata = master_inf.axi_rdata ;
168
+ assign slaver_inf.axi_rresp = master_inf.axi_rresp ;
169
+ assign slaver_inf.axi_rlast = master_inf.axi_rlast ;
170
+ assign slaver_inf.axi_rvalid = master_inf.axi_rvalid ;
171
+ end
172
+ endgenerate
173
+
174
+ generate
175
+ if(MASTER_MODE=="BOTH")begin
176
+ if(SLAVER_MODE == "ONLY_READ")begin
177
+ assign master_inf.axi_awid = '0;
178
+ assign master_inf.axi_awaddr = '0;
179
+ assign master_inf.axi_awlen = '0;
180
+ assign master_inf.axi_awsize = '0;
181
+ assign master_inf.axi_awburst = '0;
182
+ assign master_inf.axi_awlock = '0;
183
+ assign master_inf.axi_awcache = '0;
184
+ assign master_inf.axi_awprot = '0;
185
+ assign master_inf.axi_awqos = '0;
186
+ assign master_inf.axi_awvalid = '0;
187
+ assign master_inf.axi_wdata = '0;
188
+ assign master_inf.axi_wstrb = '0;
189
+ assign master_inf.axi_wlast = '0;
190
+ assign master_inf.axi_wvalid = '0;
191
+ assign master_inf.axi_bready = 1'b1;
192
+ end if(SLAVER_MODE == "ONLY_WRITE")begin
193
+ assign master_inf.axi_arid = '0;
194
+ assign master_inf.axi_araddr = '0;
195
+ assign master_inf.axi_arlen = '0;
196
+ assign master_inf.axi_arsize = '0;
197
+ assign master_inf.axi_arburst = '0;
198
+ assign master_inf.axi_arlock = '0;
199
+ assign master_inf.axi_arcache = '0;
200
+ assign master_inf.axi_arprot = '0;
201
+ assign master_inf.axi_arqos = '0;
202
+ assign master_inf.axi_arvalid = '0;
203
+ assign master_inf.axi_rready = 1'b1;
204
+ end
205
+ end else if(SLAVER_MODE == "BOTH")begin
206
+ if(MASTER_MODE == "ONLY_READ")begin
207
+ assign slaver_inf.axi_awready = 1'b1;
208
+ assign slaver_inf.axi_wready = 1'b1;
209
+ assign slaver_inf.axi_bid = '0;
210
+ assign slaver_inf.axi_bresp = '0;
211
+ assign slaver_inf.axi_bvalid = '0;
212
+ end else if(SLAVER_MODE == "ONLY_WRITE")begin
213
+ assign slaver_inf.axi_arready = 1'b1;
214
+ assign slaver_inf.axi_rid = '0;
215
+ assign slaver_inf.axi_rdata = '0;
216
+ assign slaver_inf.axi_rresp = '0;
217
+ assign slaver_inf.axi_rlast = '0;
218
+ assign slaver_inf.axi_rvalid = '0;
219
+ end
220
+ end
221
+ endgenerate
222
+
223
+ endmodule
@@ -67,7 +67,7 @@ initial begin
67
67
  $error("SLAVER AXIS MODE != ONLY_WRITE");
68
68
  $finish;
69
69
  end
70
- "ONLY_READ_to_ONLY_READ":
70
+ "ONLY_READ_to_ONLY_READ","ONLY_READ_TO_ONLY_READ":
71
71
  assert(slaver_inf.MODE == "ONLY_READ" && SLAVER_MODE=="ONLY_READ")
72
72
  else $error("SLAVER AXIS MODE != ONLY_READ");
73
73
  "ONLY_WRITE_TO_ONLY_WRITE":
@@ -88,7 +88,7 @@ initial begin
88
88
  "BOTH_to_ONLY_WRITE","ONLY_WRITE_to_ONLY_WRITE":
89
89
  assert(master_inf.MODE == "ONLY_WRITE" && MASTER_MODE=="ONLY_WRITE")
90
90
  else $error("MASTER AXIS MODE != ONLY_WRITE");
91
- "ONLY_READ_to_ONLY_READ":
91
+ "ONLY_READ_to_ONLY_READ","ONLY_READ_TO_ONLY_READ":
92
92
  assert(master_inf.MODE == "ONLY_READ" && MASTER_MODE=="ONLY_READ")
93
93
  else $error("MASTER AXIS MODE != ONLY_READ");
94
94
  "ONLY_WRITE_TO_ONLY_WRITE":
@@ -96,13 +96,13 @@ initial begin
96
96
  else $error("MASTER AXIS MODE != ONLY_WRITE");
97
97
  default:
98
98
  assert(master_inf.MODE == "_____")
99
- else $error("MASTER AXIS MODE ERROR");
99
+ else $error("MASTER AXIS MODE<%0s> ERROR",MODE);
100
100
  endcase
101
101
 
102
102
  end
103
103
 
104
104
  generate
105
- if(MASTER_MODE!="ONLY_READ")begin
105
+ if( (MASTER_MODE=="ONLY_WRITE") || (MASTER_MODE=="BOTH" && (SLAVER_MODE=="ONLY_WRITE" || SLAVER_MODE=="BOTH") ) )begin
106
106
  assign master_inf.axi_awid = slaver_inf.axi_awid ;
107
107
  assign master_inf.axi_awaddr = slaver_inf.axi_awaddr ;
108
108
  assign master_inf.axi_awlen = slaver_inf.axi_awlen ;
@@ -128,7 +128,7 @@ endgenerate
128
128
 
129
129
 
130
130
  generate
131
- if(MASTER_MODE!="ONLY_WRITE")begin
131
+ if( (MASTER_MODE=="ONLY_READ") || (MASTER_MODE=="BOTH" && (SLAVER_MODE=="ONLY_READ" || SLAVER_MODE=="BOTH") ) )begin
132
132
  assign master_inf.axi_arid = slaver_inf.axi_arid ;
133
133
  assign master_inf.axi_araddr = slaver_inf.axi_araddr ;
134
134
  assign master_inf.axi_arlen = slaver_inf.axi_arlen ;
@@ -149,4 +149,53 @@ generate
149
149
  end
150
150
  endgenerate
151
151
 
152
+ generate
153
+ if(MASTER_MODE=="BOTH")begin
154
+ if(SLAVER_MODE == "ONLY_READ")begin
155
+ assign master_inf.axi_awid = '0;
156
+ assign master_inf.axi_awaddr = '0;
157
+ assign master_inf.axi_awlen = '0;
158
+ assign master_inf.axi_awsize = '0;
159
+ assign master_inf.axi_awburst = '0;
160
+ assign master_inf.axi_awlock = '0;
161
+ assign master_inf.axi_awcache = '0;
162
+ assign master_inf.axi_awprot = '0;
163
+ assign master_inf.axi_awqos = '0;
164
+ assign master_inf.axi_awvalid = '0;
165
+ assign master_inf.axi_wdata = '0;
166
+ assign master_inf.axi_wstrb = '0;
167
+ assign master_inf.axi_wlast = '0;
168
+ assign master_inf.axi_wvalid = '0;
169
+ assign master_inf.axi_bready = 1'b1;
170
+ end if(SLAVER_MODE == "ONLY_WRITE")begin
171
+ assign master_inf.axi_arid = '0;
172
+ assign master_inf.axi_araddr = '0;
173
+ assign master_inf.axi_arlen = '0;
174
+ assign master_inf.axi_arsize = '0;
175
+ assign master_inf.axi_arburst = '0;
176
+ assign master_inf.axi_arlock = '0;
177
+ assign master_inf.axi_arcache = '0;
178
+ assign master_inf.axi_arprot = '0;
179
+ assign master_inf.axi_arqos = '0;
180
+ assign master_inf.axi_arvalid = '0;
181
+ assign master_inf.axi_rready = 1'b1;
182
+ end
183
+ end else if(SLAVER_MODE == "BOTH")begin
184
+ if(MASTER_MODE == "ONLY_READ")begin
185
+ assign slaver_inf.axi_awready = 1'b1;
186
+ assign slaver_inf.axi_wready = 1'b1;
187
+ assign slaver_inf.axi_bid = '0;
188
+ assign slaver_inf.axi_bresp = '0;
189
+ assign slaver_inf.axi_bvalid = '0;
190
+ end else if(SLAVER_MODE == "ONLY_WRITE")begin
191
+ assign slaver_inf.axi_arready = 1'b1;
192
+ assign slaver_inf.axi_rid = '0;
193
+ assign slaver_inf.axi_rdata = '0;
194
+ assign slaver_inf.axi_rresp = '0;
195
+ assign slaver_inf.axi_rlast = '0;
196
+ assign slaver_inf.axi_rvalid = '0;
197
+ end
198
+ end
199
+ endgenerate
200
+
152
201
  endmodule
@@ -0,0 +1,146 @@
1
+ /**********************************************
2
+ _______________________________________
3
+ ___________ Cook Darwin __________
4
+ _______________________________________
5
+ descript:
6
+ author : Cook.Darwin
7
+ Version: VERA.0.1 2017/5/24
8
+ use axi4_data_convert_A1
9
+ Version: VERA.1.0 2017/9/30
10
+ can discard partition
11
+ Version: VERB.0.0 2017/12/7
12
+ if slaver_inf.DSIZE is not 2**N,then 'width_convert' fisrt
13
+ Version: VERB.1.0 2021/10/03
14
+ axi4_direct_verc replace axi4_direct_verb
15
+ creaded: 2017/3/1
16
+ madified:
17
+ ***********************************************/
18
+ `timescale 1ns/1ps
19
+ `include "define_macro.sv"
20
+ module axi4_long_to_axi4_wide_B1 #(
21
+ parameter PIPE = "OFF",
22
+ parameter PARTITION = "ON", //ON OFF
23
+ `parameter_string MODE = "BOTH_to_BOTH", //ONLY_READ to BOTH,ONLY_WRITE to BOTH,BOTH to BOTH,BOTH to ONLY_READ,BOTH to ONLY_WRITE
24
+ `parameter_string SLAVER_MODE = "BOTH", //
25
+ `parameter_string MASTER_MODE = "BOTH" //
26
+ )(
27
+ axi_inf.slaver slaver_inf,
28
+ axi_inf.master master_inf //wide ADDR_STEP == 1
29
+ );
30
+
31
+ // localparam real ADDR_STEP = slaver_inf.DSIZE/(master_inf.DSIZE/8.0); //addr burst == 8
32
+
33
+ import SystemPkg::*;
34
+
35
+ initial begin
36
+ assert(slaver_inf.MODE == master_inf.MODE)
37
+ else begin
38
+ $error("SLAVER AXIS MODE != MASTER AXIS MODE");
39
+ $stop;
40
+ end
41
+ end
42
+
43
+
44
+ //--->> width first <<------------------------------
45
+
46
+ localparam WCSIZE = 2**($clog2(slaver_inf.DSIZE));
47
+
48
+ axi_inf #(
49
+ .IDSIZE (slaver_inf.IDSIZE ),
50
+ .ASIZE (slaver_inf.ASIZE ),
51
+ .LSIZE (slaver_inf.LSIZE ),
52
+ .DSIZE (WCSIZE ),
53
+ .MODE (slaver_inf.MODE ),
54
+ .ADDR_STEP (slaver_inf.ADDR_STEP*WCSIZE/slaver_inf.DSIZE )
55
+ )axi_inf_first_wc(
56
+ .axi_aclk (slaver_inf.axi_aclk ),
57
+ .axi_aresetn (slaver_inf.axi_aresetn )
58
+ );
59
+
60
+ generate
61
+ if(WCSIZE != slaver_inf.DSIZE)
62
+ axi4_data_convert_A1 axi4_data_convert_inst(
63
+ /* axi_inf.slaver_inf */ .axi_in (slaver_inf ),
64
+ /* axi_inf.master_inf */ .axi_out (axi_inf_first_wc )
65
+ );
66
+ else
67
+ axi4_direct_verc #(
68
+ .MODE (MODE), //ONLY_READ to BOTH,ONLY_WRITE to BOTH,BOTH to BOTH,BOTH to ONLY_READ,BOTH to ONLY_WRITE
69
+ .SLAVER_MODE (SLAVER_MODE), //
70
+ .MASTER_MODE (MASTER_MODE) //
71
+ )axi4_direct_verc_inst(
72
+ /* axi_inf.slaver_inf */ .slaver_inf (slaver_inf ),
73
+ /* axi_inf.master_inf */ .master_inf (axi_inf_first_wc )
74
+ );
75
+ endgenerate
76
+ //---<< width first >>------------------------------
77
+
78
+ axi_inf #(
79
+ .IDSIZE (master_inf.IDSIZE ),
80
+ .ASIZE (axi_inf_first_wc.ASIZE ),
81
+ .LSIZE (axi_inf_first_wc.LSIZE ),
82
+ .DSIZE (axi_inf_first_wc.DSIZE ),
83
+ .MODE (axi_inf_first_wc.MODE ),
84
+ .ADDR_STEP (axi_inf_first_wc.ADDR_STEP )
85
+ )axi_inf_pout(
86
+ .axi_aclk (slaver_inf.axi_aclk ),
87
+ .axi_aresetn (slaver_inf.axi_aresetn )
88
+ );
89
+
90
+ axi_inf #(
91
+ .IDSIZE (master_inf.IDSIZE ),
92
+ .ASIZE (master_inf.ASIZE ),
93
+ .LSIZE (master_inf.LSIZE ),
94
+ .DSIZE (master_inf.DSIZE ),
95
+ .MODE (axi_inf_first_wc.MODE ),
96
+ .ADDR_STEP (master_inf.ADDR_STEP )
97
+ )axi_inf_cdout(
98
+ .axi_aclk (slaver_inf.axi_aclk ),
99
+ .axi_aresetn (slaver_inf.axi_aresetn )
100
+ );
101
+
102
+
103
+ // localparam PSIZE = (((128/slaver_inf.DSIZE) * (slaver_inf.DSIZE+0.0)) * master_inf.DSIZE) / slaver_inf.DSIZE;
104
+ generate
105
+ if(PARTITION == "ON" || PARTITION == "TRUE")begin
106
+ axi4_partition_OD #(
107
+ // .PSIZE (master_inf.DSIZE*128/slaver_inf.DSIZE ),
108
+ .PSIZE (int'((((128/axi_inf_first_wc.DSIZE) * (axi_inf_first_wc.DSIZE+0.0)) * master_inf.DSIZE) / axi_inf_first_wc.DSIZE ))
109
+ // .ADDR_STEP (slaver_inf.DSIZE/(master_inf.DSIZE/8.0) )
110
+ // .ADDR_STEP (4*slaver_inf.DSIZE/16.0 )
111
+ )axi4_partition_inst(
112
+ /* axi_inf.slaver_inf */ .slaver_inf (axi_inf_first_wc ),
113
+ /* axi_inf.master_inf */ .master_inf (axi_inf_pout )
114
+ );
115
+
116
+ axi4_data_convert_verb #(
117
+ .SLAVER_MODE (SLAVER_MODE), //
118
+ .MASTER_MODE (MASTER_MODE) //
119
+ )axi4_data_convert_inst(
120
+ /* axi_inf.slaver_inf */ .axi_in (axi_inf_pout ),
121
+ /* axi_inf.master_inf */ .axi_out (axi_inf_cdout )
122
+ );
123
+ end else begin
124
+ axi4_data_convert_verb #(
125
+ .SLAVER_MODE (SLAVER_MODE), //
126
+ .MASTER_MODE (MASTER_MODE) //
127
+ )axi4_data_convert_inst(
128
+ /* axi_inf.slaver_inf */ .axi_in (axi_inf_first_wc ),
129
+ /* axi_inf.master_inf */ .axi_out (axi_inf_cdout )
130
+ );
131
+
132
+ end
133
+ endgenerate
134
+
135
+
136
+ axi4_packet_fifo_verb #( //512
137
+ .PIPE (PIPE ),
138
+ .DEPTH (4 ),
139
+ .SLAVER_MODE (SLAVER_MODE ), //
140
+ .MASTER_MODE (MASTER_MODE ) //
141
+ )axi4_packet_fifo_inst(
142
+ /* axi_inf.slaver_inf */ .axi_in (axi_inf_cdout ),
143
+ /* axi_inf.master_inf */ .axi_out (master_inf )
144
+ );
145
+
146
+ endmodule
@@ -0,0 +1,62 @@
1
+ /**********************************************
2
+ _______________________________________
3
+ ___________ Cook Darwin __________
4
+ _______________________________________
5
+ descript:
6
+ author : Cook.Darwin
7
+ Version: VERA.0.0
8
+ creaded: 2017/2/28
9
+ madified:
10
+ ***********************************************/
11
+ `timescale 1ns/1ps
12
+ `include "define_macro.sv"
13
+ module axi4_packet_fifo_verb #(
14
+ parameter PIPE = "OFF",
15
+ parameter DEPTH = 4,
16
+ `parameter_string MODE = "BOTH", //ONLY_WRITE ONLY_READ BOTH
17
+ `parameter_string SLAVER_MODE = "BOTH", //
18
+ `parameter_string MASTER_MODE = "BOTH" //
19
+ )(
20
+ axi_inf.slaver axi_in,
21
+ axi_inf.master axi_out
22
+ );
23
+
24
+ import SystemPkg::*;
25
+
26
+ initial begin
27
+ assert(SLAVER_MODE == MASTER_MODE)
28
+ else begin
29
+ $error("SLAVER AXIS MODE != MASTER AXIS MODE");
30
+ $stop;
31
+ end
32
+ end
33
+
34
+
35
+ `VCS_AXI4_CPT(axi_in,slaver,slaver_rd,Read)
36
+ `VCS_AXI4_CPT(axi_in,slaver,slaver_wr,Write)
37
+ `VCS_AXI4_CPT_LT(axi_out,master_rd,master,Read)
38
+ `VCS_AXI4_CPT_LT(axi_out,master_wr,master,Write)
39
+
40
+
41
+ generate
42
+ if(SLAVER_MODE=="BOTH" || SLAVER_MODE=="ONLY_WRITE")
43
+ axi4_wr_packet_fifo #(
44
+ .PIPE (PIPE ),
45
+ .DEPTH (DEPTH )
46
+ )axi4_wr_packet_fifo_inst(
47
+ /* axi_inf.slaver_wr */ .axi_in (`axi_in_vcs_cptWrite ),
48
+ /* axi_inf.master_wr */ .axi_out (`axi_out_vcs_cptWrite )
49
+ );
50
+ endgenerate
51
+
52
+ generate
53
+ if(SLAVER_MODE=="BOTH" || SLAVER_MODE=="ONLY_READ")
54
+ axi4_rd_packet_fifo #(
55
+ .DEPTH (DEPTH )
56
+ )axi4_rd_packet_fifo_inst(
57
+ /* axi_inf.slaver_rd */ .slaver (`axi_in_vcs_cptRead ),
58
+ /* axi_inf.master_rd */ .master (`axi_out_vcs_cptRead )
59
+ );
60
+ endgenerate
61
+
62
+ endmodule
@@ -46,7 +46,7 @@ assign axi_in.axi_awready = !auxiliary_fifo_full;
46
46
 
47
47
  logic stream_fifo_empty;
48
48
 
49
- axi_stream_inf #(.DSIZE(axi_in.ASIZE+axi_in.LSIZE+axi_in.IDSIZE)) id_add_len_in(.aclk(axi_in.axi_aclk),.aresetn(axi_in.axi_aresetn),.aclken(1'b1));
49
+ axi_stream_inf #(.DSIZE(axi_in.ASIZE+axi_in.LSIZE+axi_in.IDSIZE)) id_add_len_in(.aclk(axi_out.axi_aclk),.aresetn(axi_out.axi_aresetn),.aclken(1'b1));
50
50
 
51
51
  assign id_add_len_in.axis_tdata = auxiliary_fifo_rd_data;
52
52
  assign id_add_len_in.axis_tvalid = !auxiliary_fifo_empty && !stream_fifo_empty;
@@ -54,10 +54,11 @@ assign id_add_len_in.axis_tlast = 1'b1;
54
54
  assign auxiliary_fifo_rd_en = id_add_len_in.axis_tready && !stream_fifo_empty;
55
55
 
56
56
  logic axi_stream_en;
57
-
57
+ `VCS_AXI4_CPT_LT(axi_out,master_wr_aux_no_resp,master_wr,Aux_Write)
58
58
  axi4_wr_auxiliary_gen_without_resp axi4_wr_auxiliary_gen_without_resp_inst(
59
59
  /* axi_stream_inf.slaver */ .id_add_len_in (id_add_len_in ), //tlast is not necessary
60
- /* axi_inf.master_wr_aux_no_resp */ .axi_wr_aux (axi_out ),
60
+ // /* axi_inf.master_wr_aux_no_resp */ .axi_wr_aux (axi_out ),
61
+ /* axi_inf.master_wr_aux_no_resp */ .axi_wr_aux (`axi_out_vcs_cptAux_Write ),
61
62
  /* output logic */ .stream_en (axi_stream_en )
62
63
  );
63
64
  //---<< AUXILIARY >>------------------
@@ -127,7 +127,7 @@ assign addr_s = addr_cur;
127
127
  assign len_s = split_out.axis_tcnt;
128
128
  assign id_add_len_in.axis_tvalid = ~fifo_empty;
129
129
  assign id_add_len_in.axis_tdata = fifo_rdata;
130
- assign id_add_len_in.axis_tlast = "1'b1";
130
+ assign id_add_len_in.axis_tlast = 1'b1;
131
131
  assign fifo_rd_en = id_add_len_in.axis_tready;
132
132
 
133
133
  assign axi_wr.axi_wdata = pipe_axis.axis_tdata;