axi_tdl 0.1.20 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/gem-push.yml +46 -28
  3. data/.github/workflows/ruby.yml +1 -1
  4. data/.gitignore +2 -1
  5. data/.travis.yml +1 -0
  6. data/axi_tdl.gemspec +1 -1
  7. data/lib/axi/AXI4/axi4_direct_algin_addr_step.sv +223 -0
  8. data/lib/axi/AXI4/axi4_direct_verc.sv +54 -5
  9. data/lib/axi/AXI4/axi4_long_to_axi4_wide_B1.sv +148 -0
  10. data/lib/axi/AXI4/long_axis_to_axi4_wr.rb +1 -0
  11. data/lib/axi/AXI4/odata_pool_axi4_A4.sv +173 -0
  12. data/lib/axi/AXI4/packet_fifo/axi4_packet_fifo_B1.sv +66 -0
  13. data/lib/axi/AXI4/packet_fifo/axi4_packet_fifo_verb.sv +62 -0
  14. data/lib/axi/AXI4/packet_fifo/axi4_rd_packet_fifo_A1.sv +260 -0
  15. data/lib/axi/AXI4/packet_fifo/axi4_wr_packet_fifo.sv +4 -3
  16. data/lib/axi/AXI4/packet_fifo/axi4_wr_packet_fifo_A1.sv +192 -0
  17. data/lib/axi/AXI4/wide_axis_to_axi4_wr.sv +2 -2
  18. data/lib/axi/AXI4/width_convert/axi4_data_convert_verb.sv +280 -0
  19. data/lib/axi/AXI_stream/axi_stream_interconnect_M2S_cpVCS.sv +80 -0
  20. data/lib/axi/AXI_stream/axi_stream_split_channel.sv +1 -1
  21. data/lib/axi/AXI_stream/axi_streams_combin.sv +2 -1
  22. data/lib/axi/AXI_stream/axi_streams_combin_A1.sv +2 -1
  23. data/lib/axi/AXI_stream/axi_streams_scaler.sv +2 -1
  24. data/lib/axi/AXI_stream/axi_streams_scaler_A1.sv +2 -1
  25. data/lib/axi/AXI_stream/axis_append_A1.sv +15 -2
  26. data/lib/axi/AXI_stream/axis_combin_with_fifo.sv +2 -1
  27. data/lib/axi/AXI_stream/axis_head_cut_verc.rb +2 -0
  28. data/lib/axi/AXI_stream/axis_uncompress_verb.sv +9 -9
  29. data/lib/axi/AXI_stream/gen_big_field_table.sv +3 -2
  30. data/lib/axi/AXI_stream/packet_fifo/axi_stream_packet_fifo_B1F.sv +129 -0
  31. data/lib/axi/AXI_stream/parse_big_field_table_main.sv +101 -0
  32. data/lib/axi/AXI_stream/parse_big_field_table_mirror.sv +94 -0
  33. data/lib/axi/AXI_stream/parse_big_field_table_verb.sv +3 -2
  34. data/lib/axi/axi4_to_xilinx_ddr_native/axi4_to_native_for_ddr_ip_C2.sv +75 -0
  35. data/lib/axi/axi4_to_xilinx_ddr_native/ddr_native_fifo_A2.sv +206 -0
  36. data/lib/axi/axi4_to_xilinx_ddr_native/ddr_native_fifo_B1.sv +297 -0
  37. data/lib/axi/axi4_to_xilinx_ddr_native/model_ddr_ip_app.sv +2 -2
  38. data/lib/axi/common/common_ram_wrapper.sv +1 -1
  39. data/lib/axi/data_interface/data_inf_c/data_c_pipe_sync_seam.sv +1 -1
  40. data/lib/axi/data_interface/data_inf_c/data_c_scaler.sv +2 -1
  41. data/lib/axi/data_interface/data_inf_c/data_c_scaler_A1.sv +4 -2
  42. data/lib/axi/data_interface/data_streams_combin.sv +2 -1
  43. data/lib/axi/data_interface/data_streams_combin_A1.sv +2 -1
  44. data/lib/axi/data_interface/data_streams_scaler.sv +2 -1
  45. data/lib/axi/interface_define/axi_inf.sv +1 -1
  46. data/lib/axi/macro/RTL/define_macro.sv +210 -0
  47. data/lib/axi/macro/SIM/define_macro.sv +194 -0
  48. data/lib/axi_tdl/version.rb +1 -1
  49. data/lib/tdl/auto_script/import_sdl.rb +3 -0
  50. data/lib/tdl/axi4/axi4_interconnect_verb.rb +81 -11
  51. data/lib/tdl/examples/11_test_unit/exp_test_unit.sv +7 -33
  52. data/lib/tdl/examples/11_test_unit/tb_exp_test_unit.sv +1 -1
  53. data/lib/tdl/examples/11_test_unit/tb_exp_test_unit_sim.sv +3 -14
  54. data/lib/tdl/examples/11_test_unit/tu0.sv +1 -1
  55. data/lib/tdl/examples/2_hdl_class/tmp/test_module_var.sv +2 -2
  56. data/lib/tdl/examples/2_hdl_class/tmp/test_vcs_string.sv +1 -1
  57. data/lib/tdl/examples/8_top_module/dve.tcl +0 -6
  58. data/lib/tdl/examples/8_top_module/test_top.sv +1 -1
  59. data/lib/tdl/examples/9_itegration/clock_manage/tu_ClockManage_test_clock_bb.sv +35 -0
  60. data/lib/tdl/examples/9_itegration/tb_test_tttop_sim.sv +2 -2
  61. data/lib/tdl/examples/9_itegration/test_tttop.sv +38 -7
  62. data/lib/tdl/examples/9_itegration/test_tttop_sim.sv +7 -38
  63. data/lib/tdl/examples/9_itegration/top.rb +1 -1
  64. data/lib/tdl/exlib/itegration_test_unit.rb +13 -0
  65. data/lib/tdl/exlib/itegration_verb.rb +22 -17
  66. data/lib/tdl/rebuild_ele/ele_base.rb +29 -3
  67. data/lib/tdl/sdlmodule/sdlmodule_arraychain.rb +1 -0
  68. data/lib/tdl/sdlmodule/sdlmodule_instance.rb +1 -1
  69. data/lib/tdl/sdlmodule/test_unit_module.rb +12 -16
  70. data/lib/tdl/tdl.rb +1 -0
  71. metadata +22 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a8eaf43500813537ef34b6dc527aa5bde8fc7ae089b89dfc27876f6461a8d484
4
- data.tar.gz: 1f05d920964b4123e8e1b8fdbb32b2b96e017d734364b3a325dfd6d2adc77b97
3
+ metadata.gz: 8dd62863539fff2708246a09927e479738b03d047133e734cc55f4e1829d6b54
4
+ data.tar.gz: ceb59ee036e1cefc3a21556a332e66b65f0c0dc57fab062614557546ca718b3f
5
5
  SHA512:
6
- metadata.gz: 70fcc7a0e276e48ecf4ab38633398bd875e02bf354b9f25ee474855c4cd249cc2a57e042f3fdc42caaa21d9e2aef8beac71b1cd76de4d847de977428af20581d
7
- data.tar.gz: b0d765030302b31efab0434bd7f44aec26425a2c6ebb01196a1ba4df43da7198a28aaba06467429982c4ff8d405b7451b23d7e165e245c36ca72c283af15dc57
6
+ metadata.gz: ecd12a65dc60bb8fb9eb2566df28cef78903c4660dd14606c08f9cd7192b5b4a0f51d7c2aa9c7ff95db88087b5f0123a0c5de66152ddd512f845e5f78d114377
7
+ data.tar.gz: 889d28213cbdc3bfc5179bb347902828af30008573030725e309bd227ee013e34906b2b967de83bb52480a04091c328a1ed42ae9d805bcf4e6d3f96816f19bd5
@@ -1,6 +1,18 @@
1
+ # This workflow uses actions that are not certified by GitHub.
2
+ # They are provided by a third-party and are governed by
3
+ # separate terms of service, privacy policy, and support
4
+ # documentation.
5
+
6
+ # GitHub recommends pinning actions to a commit SHA.
7
+ # To get a newer version, you will need to update the SHA.
8
+ # You can also reference a tag or branch, but the action may change without warning.
9
+
1
10
  name: Ruby Gem
2
11
 
3
12
  on:
13
+ # Manually publish
14
+ workflow_dispatch:
15
+ # Alternatively, publish whenever changes are merged to the `main` branch.
4
16
  push:
5
17
  branches: [ main ]
6
18
  pull_request:
@@ -10,35 +22,41 @@ jobs:
10
22
  build:
11
23
  name: Build + Publish
12
24
  runs-on: ubuntu-latest
25
+ permissions:
26
+ packages: write
27
+ contents: read
13
28
 
14
29
  steps:
15
- - uses: actions/checkout@v2
16
- - name: Set up Ruby 2.6
17
- uses: actions/setup-ruby@v1
18
- with:
19
- ruby-version: 2.6.x
20
-
21
- - name: Publish to GPR
22
- run: |
23
- mkdir -p $HOME/.gem
24
- touch $HOME/.gem/credentials
25
- chmod 0600 $HOME/.gem/credentials
26
- printf -- "---\n:github: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
27
- gem build *.gemspec
28
- gem push --KEY github --host https://rubygems.pkg.github.com/${OWNER} *.gem
29
- env:
30
- GEM_HOST_API_KEY: "Bearer ${{secrets.GITHUB_TOKEN}}"
31
- OWNER: ${{ github.repository_owner }}
32
-
33
- - name: Publish to RubyGems
34
- run: |
35
- mkdir -p $HOME/.gem
36
- touch $HOME/.gem/credentials
37
- chmod 0600 $HOME/.gem/credentials
38
- printf -- "---\n:rubygems_api_key: ${RUBYGEMS_API_KEY}\n" > $HOME/.gem/credentials
39
- gem build *.gemspec
40
- gem push *.gem
41
- env:
30
+ - uses: actions/checkout@v3
31
+ - name: Set up Ruby 2.6
32
+ uses: ruby/setup-ruby@477b21f02be01bcb8030d50f37cfec92bfa615b6
33
+ with:
34
+ ruby-version: 2.6
35
+ - run: bundle install
36
+
37
+ - name: Publish to GPR
38
+ run: |
39
+ mkdir -p $HOME/.gem
40
+ touch $HOME/.gem/credentials
41
+ chmod 0600 $HOME/.gem/credentials
42
+ printf -- "---\n:github: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
43
+ gem build *.gemspec
44
+ gem push --KEY github --host https://rubygems.pkg.github.com/${OWNER} *.gem
45
+ env:
46
+ GEM_HOST_API_KEY: "Bearer ${{secrets.GITHUB_TOKEN}}"
47
+ OWNER: ${{ github.repository_owner }}
48
+
49
+ - name: Publish to RubyGems
50
+ run: |
51
+ mkdir -p $HOME/.gem
52
+ touch $HOME/.gem/credentials
53
+ chmod 0600 $HOME/.gem/credentials
54
+ printf -- "---\n:rubygems_api_key: ${RUBYGEMS_API_KEY}\n" > $HOME/.gem/credentials
55
+ gem build *.gemspec
56
+ gem push *.gem
57
+ env:
58
+ GEM_HOST_API_KEY: "${{secrets.RUBYGEMS_AUTH_TOKEN}}"
42
59
  GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
43
60
  RUBYGEMS_API_KEY: ${{secrets.RUBYGEMS_API_KEY}}
44
- # RELEASE_COMMAND: rake release
61
+
62
+
@@ -19,7 +19,7 @@ jobs:
19
19
  runs-on: ubuntu-latest
20
20
  strategy:
21
21
  matrix:
22
- ruby-version: ['2.6', '2.7', '3.0']
22
+ ruby-version: ['2.6','2.7', '3.0']
23
23
 
24
24
  steps:
25
25
  - uses: actions/checkout@v2
data/.gitignore CHANGED
@@ -9,4 +9,5 @@
9
9
  .rake_tasks~
10
10
  lib/tdl/auto_script/tmp/
11
11
  /*.gem
12
- Gemfile.lock
12
+ Gemfile.lock
13
+ bk*.yml
data/.travis.yml CHANGED
@@ -4,6 +4,7 @@ before_install:
4
4
 
5
5
  rvm:
6
6
  - 2.6
7
+ - 2.7
7
8
  - 3.0
8
9
 
9
10
  script: rake test
data/axi_tdl.gemspec CHANGED
@@ -15,7 +15,7 @@ Gem::Specification.new do |spec|
15
15
  spec.license = "LGPL-2.1"
16
16
  spec.files = Dir['lib/**/*']
17
17
  spec.require_paths = ["lib"]
18
- spec.required_ruby_version = '>= 2.5.0'
18
+ spec.required_ruby_version = '>= 2.6.0'
19
19
  # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
20
20
  # to allow pushing to a single host or delete this section to allow pushing to any host.
21
21
  if spec.respond_to?(:metadata)
@@ -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,148 @@
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 (axi_inf_first_wc ),
113
+ /* axi_inf.master_inf */ .master (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
+ axi4_packet_fifo_B1 #( //
138
+ .PIPE (PIPE ),
139
+ .DEPTH (4 ),
140
+ .MAX_DATA_LEN (1024*2),
141
+ .SLAVER_MODE (SLAVER_MODE ), //
142
+ .MASTER_MODE (MASTER_MODE ) //
143
+ )axi4_packet_fifo_inst(
144
+ /* axi_inf.slaver_inf */ .axi_in (axi_inf_cdout ),
145
+ /* axi_inf.master_inf */ .axi_out (master_inf )
146
+ );
147
+
148
+ endmodule
@@ -2,6 +2,7 @@
2
2
  require_hdl "axis_length_split_with_addr.sv"
3
3
  require_hdl 'axi_stream_long_fifo_verb.sv'
4
4
  require_shdl 'axi4_wr_auxiliary_gen_without_resp','axis_valve_with_pipe'
5
+ require_shdl 'independent_clock_fifo'
5
6
 
6
7
  TdlBuild.long_axis_to_axi4_wr(__dir__) do
7
8
  parameter.BYTE_DEPTH 8192*2