axi_tdl 0.1.20 → 0.2.0

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.
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;