axi_tdl 0.1.1 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (111) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +7 -0
  3. data/lib/axi/AXI4/axi4_direct_A1.sv +1 -1
  4. data/lib/axi/AXI4/axi4_direct_verc.sv +54 -54
  5. data/lib/axi/AXI4/axi4_dpram_cache.sv +2 -2
  6. data/lib/axi/AXI4/axis_to_axi4_wr.sv +8 -8
  7. data/lib/axi/AXI4/odata_pool_axi4_A3.sv +7 -0
  8. data/lib/axi/AXI4/packet_partition/axi4_partition_rd_verb.sv +1 -1
  9. data/lib/axi/AXI4/packet_partition/data_inf_partition.sv +2 -2
  10. data/lib/axi/AXI4/wide_axis_to_axi4_wr.sv +8 -8
  11. data/lib/axi/AXI_stream/axi_stream_split_channel.sv +154 -0
  12. data/lib/axi/AXI_stream/axis_head_cut_verc.sv +242 -0
  13. data/lib/axi/AXI_stream/axis_insert_copy.sv +79 -0
  14. data/lib/axi/AXI_stream/axis_pipe_sync_seam.sv +48 -0
  15. data/lib/axi/AXI_stream/axis_rom_contect_sim.sv +113 -0
  16. data/lib/axi/AXI_stream/axis_sim_master_model.rb +2 -0
  17. data/lib/axi/AXI_stream/axis_sim_master_model.sv +46 -0
  18. data/lib/axi/AXI_stream/axis_split_channel_verb.sv +62 -0
  19. data/lib/axi/common/common_ram_sim_wrapper.sv +1 -1
  20. data/lib/axi/common/common_ram_wrapper.sv +1 -1
  21. data/lib/axi/data_interface/data_inf_c/data_c_pipe_sync_seam.sv +11 -11
  22. data/lib/axi/data_interface/data_inf_c/data_c_sim_master_model.sv +14 -11
  23. data/lib/axi/platform_ip/fifo_36kb_long.sv +1 -1
  24. data/lib/axi/techbench/tb_axi_stream_split_channel.rb +1 -1
  25. data/lib/axi/techbench/tb_axi_stream_split_channel.sv +46 -45
  26. data/lib/axi_tdl/version.rb +1 -1
  27. data/lib/public_atom_module/CheckPClock.sv +53 -0
  28. data/lib/public_atom_module/LICENSE.md +674 -0
  29. data/lib/public_atom_module/altera_xilinx_always_block_sw.rb +57 -0
  30. data/lib/public_atom_module/bits_decode.sv +71 -0
  31. data/lib/public_atom_module/bits_decode_verb.sv +71 -0
  32. data/lib/public_atom_module/bits_decode_verb_sdl.rb +24 -0
  33. data/lib/public_atom_module/broaden.v +43 -0
  34. data/lib/public_atom_module/broaden_and_cross_clk.v +47 -0
  35. data/lib/public_atom_module/ceiling.v +39 -0
  36. data/lib/public_atom_module/ceiling_A1.v +42 -0
  37. data/lib/public_atom_module/clock_rst.sv +64 -0
  38. data/lib/public_atom_module/cross_clk_sync.v +37 -0
  39. data/lib/public_atom_module/edge_generator.v +50 -0
  40. data/lib/public_atom_module/flooring.v +36 -0
  41. data/lib/public_atom_module/latch_data.v +30 -0
  42. data/lib/public_atom_module/latency.v +48 -0
  43. data/lib/public_atom_module/latency_dynamic.v +83 -0
  44. data/lib/public_atom_module/latency_long.v +84 -0
  45. data/lib/public_atom_module/latency_verb.v +52 -0
  46. data/lib/public_atom_module/once_event.sv +65 -0
  47. data/lib/public_atom_module/pipe_reg.v +93 -0
  48. data/lib/public_atom_module/pipe_reg_2write_ports.v +84 -0
  49. data/lib/public_atom_module/sim/clock_rst_verb.sv +54 -0
  50. data/lib/public_atom_module/sim/latency_long_tb.sv +49 -0
  51. data/lib/public_atom_module/sim/latency_long_tb.sv.bak +49 -0
  52. data/lib/tdl/Logic/logic_edge.rb +1 -1
  53. data/lib/tdl/axi4/axi4_interconnect_verb.rb +46 -9
  54. data/lib/tdl/class_hdl/hdl_always_comb.rb +4 -1
  55. data/lib/tdl/class_hdl/hdl_always_ff.rb +2 -2
  56. data/lib/tdl/class_hdl/hdl_assign.rb +7 -1
  57. data/lib/tdl/class_hdl/hdl_block_ifelse.rb +7 -7
  58. data/lib/tdl/class_hdl/hdl_foreach.rb +2 -2
  59. data/lib/tdl/class_hdl/hdl_function.rb +4 -4
  60. data/lib/tdl/class_hdl/hdl_generate.rb +4 -1
  61. data/lib/tdl/class_hdl/hdl_initial.rb +25 -3
  62. data/lib/tdl/class_hdl/hdl_module_def.rb +9 -6
  63. data/lib/tdl/class_hdl/hdl_package.rb +45 -0
  64. data/lib/tdl/class_hdl/hdl_redefine_opertor.rb +99 -27
  65. data/lib/tdl/class_hdl/hdl_struct.rb +2 -2
  66. data/lib/tdl/elements/Reset.rb +5 -9
  67. data/lib/tdl/elements/clock.rb +5 -9
  68. data/lib/tdl/elements/data_inf.rb +0 -17
  69. data/lib/tdl/elements/logic.rb +9 -31
  70. data/lib/tdl/elements/mail_box.rb +6 -1
  71. data/lib/tdl/elements/originclass.rb +17 -47
  72. data/lib/tdl/elements/parameter.rb +5 -6
  73. data/lib/tdl/examples/11_test_unit/dve.tcl +6 -153
  74. data/lib/tdl/examples/11_test_unit/exp_test_unit.sv +1 -1
  75. data/lib/tdl/examples/11_test_unit/modules/sub_md0.sv +1 -1
  76. data/lib/tdl/examples/11_test_unit/tb_exp_test_unit.sv +1 -3
  77. data/lib/tdl/examples/11_test_unit/tb_exp_test_unit_sim.sv +1 -2
  78. data/lib/tdl/examples/11_test_unit/tu0.sv +1 -1
  79. data/lib/tdl/examples/1_define_module/exmple_md.sv +1 -1
  80. data/lib/tdl/examples/2_hdl_class/tmp/module_instance_test.sv +1 -1
  81. data/lib/tdl/examples/2_hdl_class/tmp/test_inst_sugar.sv +1 -1
  82. data/lib/tdl/examples/2_hdl_class/tmp/test_module.sv +3 -3
  83. data/lib/tdl/examples/2_hdl_class/tmp/test_module_port.sv +1 -1
  84. data/lib/tdl/examples/2_hdl_class/tmp/test_module_var.sv +1 -1
  85. data/lib/tdl/examples/2_hdl_class/tmp/test_package.sv +4 -3
  86. data/lib/tdl/examples/2_hdl_class/tmp/test_vcs_string.sv +1 -1
  87. data/lib/tdl/examples/3_hdl_sdl_instance/main_md.sv +1 -1
  88. data/lib/tdl/examples/3_hdl_sdl_instance/sdl_md.sv +1 -1
  89. data/lib/tdl/examples/6_module_with_interface/inf_collect.sv +1 -1
  90. data/lib/tdl/examples/7_module_with_package/body_package.sv +4 -3
  91. data/lib/tdl/examples/7_module_with_package/example_pkg.sv +1 -1
  92. data/lib/tdl/examples/7_module_with_package/head_package.sv +4 -3
  93. data/lib/tdl/examples/8_top_module/dve.tcl +2 -155
  94. data/lib/tdl/examples/8_top_module/tb_test_top.sv +1 -1
  95. data/lib/tdl/examples/8_top_module/tb_test_top_sim.sv +1 -1
  96. data/lib/tdl/examples/8_top_module/test_top.sv +1 -1
  97. data/lib/tdl/examples/9_itegration/dve.tcl +2 -155
  98. data/lib/tdl/examples/9_itegration/tb_test_tttop.sv +3 -1
  99. data/lib/tdl/examples/9_itegration/tb_test_tttop_sim.sv +1 -1
  100. data/lib/tdl/examples/9_itegration/test_tttop.sv +1 -1
  101. data/lib/tdl/exlib/axis_verify.rb +4 -3
  102. data/lib/tdl/rebuild_ele/ele_base.rb +8 -8
  103. data/lib/tdl/sdlmodule/sdlmodule.rb +61 -51
  104. data/lib/tdl/sdlmodule/sdlmodule_arraychain.rb +1 -1
  105. data/lib/tdl/sdlmodule/sdlmodule_instance.rb +3 -0
  106. data/lib/tdl/sdlmodule/sdlmodule_port_define.rb +6 -6
  107. data/lib/tdl/sdlmodule/sdlmodule_varible.rb +6 -6
  108. data/lib/tdl/sdlmodule/test_unit_module.rb +5 -0
  109. data/lib/tdl/tdlerror/tdlerror.rb +1 -1
  110. metadata +34 -3
  111. data/lib/axi/AXI_stream/axis_length_split_writh_user.sv +0 -87
@@ -5,7 +5,7 @@ _______________________________________
5
5
  descript:
6
6
  author : Cook.Darwin
7
7
  Version: VERA.0.0
8
- created: 2021-03-21 23:51:36 +0800
8
+ created: 2021-04-03 13:14:45 +0800
9
9
  madified:
10
10
  ***********************************************/
11
11
  `timescale 1ns/1ps
@@ -12,128 +12,6 @@ gui_set_time_units 1ps
12
12
  ## gui_sg_addsignal -group "$_wave_session_group" { {Sim:tb_Mammo_TCP_sim.g1_test_mac_1g_inst.test_fpga_version_inst.ctrl_udp_rd_version} {Sim:tb_Mammo_TCP_sim.rtl_top.fpga_version_verb.to_ctrl_tap_in_inf} {Sim:tb_Mammo_TCP_sim.rtl_top.fpga_version_verb.ctrl_tap_inf} {Sim:tb_Mammo_TCP_sim.g1_test_mac_1g_inst.tcp_udp_proto_workshop_1G_inst.genblk1[0].tcp_data_stack_top_inst.client_port} }
13
13
  ## ==== [add_signal] ===== ##
14
14
 
15
- ## -------------- sub_md0_logic -------------------------
16
- set _wave_session_group_sub_md0_logic sub_md0_logic
17
- # set _wave_session_group_sub_md0_logic [gui_sg_generate_new_name -seed sub_md0_logic]
18
- if {[gui_sg_is_group -name "$_wave_session_group_sub_md0_logic"]} {
19
- set _wave_session_group_sub_md0_logic [gui_sg_generate_new_name]
20
- }
21
- set Group2_sub_md0_logic "$_wave_session_group_sub_md0_logic"
22
-
23
- ## 添加信号到 group
24
- gui_sg_addsignal -group "$_wave_session_group_sub_md0_logic" { {Sim:tb_exp_test_unit.rtl_top.sub_md0_inst.cnt} }
25
- ## ============== sub_md0_logic =========================
26
-
27
-
28
- ## -------------- sub_md0_interface -------------------------
29
- set _wave_session_group_sub_md0_interface sub_md0_interface
30
- # set _wave_session_group_sub_md0_interface [gui_sg_generate_new_name -seed sub_md0_interface]
31
- if {[gui_sg_is_group -name "$_wave_session_group_sub_md0_interface"]} {
32
- set _wave_session_group_sub_md0_interface [gui_sg_generate_new_name]
33
- }
34
- set Group2_sub_md0_interface "$_wave_session_group_sub_md0_interface"
35
-
36
- ## 添加信号到 group
37
- gui_sg_addsignal -group "$_wave_session_group_sub_md0_interface" { {Sim:tb_exp_test_unit.rtl_top.sub_md0_inst.axis_in} }
38
- ## ============== sub_md0_interface =========================
39
-
40
-
41
- ## -------------- sub_md0_default -------------------------
42
- set _wave_session_group_sub_md0_default sub_md0_default
43
- # set _wave_session_group_sub_md0_default [gui_sg_generate_new_name -seed sub_md0_default]
44
- if {[gui_sg_is_group -name "$_wave_session_group_sub_md0_default"]} {
45
- set _wave_session_group_sub_md0_default [gui_sg_generate_new_name]
46
- }
47
- set Group2_sub_md0_default "$_wave_session_group_sub_md0_default"
48
-
49
- ## 添加信号到 group
50
- gui_sg_addsignal -group "$_wave_session_group_sub_md0_default" { }
51
- ## ============== sub_md0_default =========================
52
-
53
-
54
- ## -------------- sub_md0_default.inter_tf -------------------------
55
- ## set _wave_session_group_sub_md0_default_inter_tf Group1
56
- ## set _wave_session_group_sub_md0_default_inter_tf [gui_sg_generate_new_name -seed inter_tf -parent $_wave_session_group_sub_md0_default ]
57
-
58
- set _wave_session_group_sub_md0_default_inter_tf $_wave_session_group_sub_md0_default|
59
- append _wave_session_group_sub_md0_default_inter_tf inter_tf
60
- set sub_md0_default|inter_tf "$_wave_session_group_sub_md0_default_inter_tf"
61
-
62
- # set Group2_sub_md0_default_inter_tf "$_wave_session_group_sub_md0_default_inter_tf"
63
-
64
- ## 添加信号到 group
65
- gui_sg_addsignal -group "$_wave_session_group_sub_md0_default_inter_tf" { {Sim:tb_exp_test_unit.rtl_top.sub_md0_inst.inter_tf} }
66
- ## ============== sub_md0_default.inter_tf =========================
67
-
68
-
69
- ## -------------- sub_md1_default -------------------------
70
- set _wave_session_group_sub_md1_default sub_md1_default
71
- # set _wave_session_group_sub_md1_default [gui_sg_generate_new_name -seed sub_md1_default]
72
- if {[gui_sg_is_group -name "$_wave_session_group_sub_md1_default"]} {
73
- set _wave_session_group_sub_md1_default [gui_sg_generate_new_name]
74
- }
75
- set Group2_sub_md1_default "$_wave_session_group_sub_md1_default"
76
-
77
- ## 添加信号到 group
78
- gui_sg_addsignal -group "$_wave_session_group_sub_md1_default" { {Sim:tb_exp_test_unit.rtl_top.sub_md1_inst.cnt} {Sim:tb_exp_test_unit.rtl_top.sub_md1_inst.axis_out} {Sim:tb_exp_test_unit.rtl_top.sub_md1_inst.enable} }
79
- ## ============== sub_md1_default =========================
80
-
81
-
82
- ## -------------- sub_md1_inner -------------------------
83
- set _wave_session_group_sub_md1_inner sub_md1_inner
84
- # set _wave_session_group_sub_md1_inner [gui_sg_generate_new_name -seed sub_md1_inner]
85
- if {[gui_sg_is_group -name "$_wave_session_group_sub_md1_inner"]} {
86
- set _wave_session_group_sub_md1_inner [gui_sg_generate_new_name]
87
- }
88
- set Group2_sub_md1_inner "$_wave_session_group_sub_md1_inner"
89
-
90
- ## 添加信号到 group
91
- gui_sg_addsignal -group "$_wave_session_group_sub_md1_inner" { }
92
- ## ============== sub_md1_inner =========================
93
-
94
-
95
- ## -------------- sub_md1_inner.inter_tf -------------------------
96
- ## set _wave_session_group_sub_md1_inner_inter_tf Group1
97
- ## set _wave_session_group_sub_md1_inner_inter_tf [gui_sg_generate_new_name -seed inter_tf -parent $_wave_session_group_sub_md1_inner ]
98
-
99
- set _wave_session_group_sub_md1_inner_inter_tf $_wave_session_group_sub_md1_inner|
100
- append _wave_session_group_sub_md1_inner_inter_tf inter_tf
101
- set sub_md1_inner|inter_tf "$_wave_session_group_sub_md1_inner_inter_tf"
102
-
103
- # set Group2_sub_md1_inner_inter_tf "$_wave_session_group_sub_md1_inner_inter_tf"
104
-
105
- ## 添加信号到 group
106
- gui_sg_addsignal -group "$_wave_session_group_sub_md1_inner_inter_tf" { {Sim:tb_exp_test_unit.rtl_top.sub_md1_inst.inter_tf} }
107
- ## ============== sub_md1_inner.inter_tf =========================
108
-
109
-
110
- ## -------------- exp_test_unit_default -------------------------
111
- set _wave_session_group_exp_test_unit_default exp_test_unit_default
112
- # set _wave_session_group_exp_test_unit_default [gui_sg_generate_new_name -seed exp_test_unit_default]
113
- if {[gui_sg_is_group -name "$_wave_session_group_exp_test_unit_default"]} {
114
- set _wave_session_group_exp_test_unit_default [gui_sg_generate_new_name]
115
- }
116
- set Group2_exp_test_unit_default "$_wave_session_group_exp_test_unit_default"
117
-
118
- ## 添加信号到 group
119
- gui_sg_addsignal -group "$_wave_session_group_exp_test_unit_default" { }
120
- ## ============== exp_test_unit_default =========================
121
-
122
-
123
- ## -------------- exp_test_unit_default.axis_data_inf -------------------------
124
- ## set _wave_session_group_exp_test_unit_default_axis_data_inf Group1
125
- ## set _wave_session_group_exp_test_unit_default_axis_data_inf [gui_sg_generate_new_name -seed axis_data_inf -parent $_wave_session_group_exp_test_unit_default ]
126
-
127
- set _wave_session_group_exp_test_unit_default_axis_data_inf $_wave_session_group_exp_test_unit_default|
128
- append _wave_session_group_exp_test_unit_default_axis_data_inf axis_data_inf
129
- set exp_test_unit_default|axis_data_inf "$_wave_session_group_exp_test_unit_default_axis_data_inf"
130
-
131
- # set Group2_exp_test_unit_default_axis_data_inf "$_wave_session_group_exp_test_unit_default_axis_data_inf"
132
-
133
- ## 添加信号到 group
134
- gui_sg_addsignal -group "$_wave_session_group_exp_test_unit_default_axis_data_inf" { {Sim:tb_exp_test_unit.rtl_top.axis_data_inf} }
135
- ## ============== exp_test_unit_default.axis_data_inf =========================
136
-
137
15
 
138
16
  ## 创建波形窗口
139
17
  if {![info exists useOldWindow]} {
@@ -162,33 +40,7 @@ gui_wv_zoom_timerange -id ${Wave.3} 0 1000000000
162
40
  ## gui_list_add_group -id ${Wave.3} -after ${Group2} [list ${Group2|tx_inf}]
163
41
  ## gui_list_expand -id ${Wave.3} tb_Mammo_TCP_sim.rtl_top.fpga_version_verb.ctrl_tap_inf
164
42
  ## === [add_signal_wave] === ##
165
- ## -------------- Group2_sub_md0_logic -------------------------
166
- gui_list_add_group -id ${Wave.3} -after {New Group} [list ${Group2_sub_md0_logic}]
167
- ## ============== Group2_sub_md0_logic =========================
168
- ## -------------- Group2_sub_md0_interface -------------------------
169
- gui_list_add_group -id ${Wave.3} -after {New Group} [list ${Group2_sub_md0_interface}]
170
- ## ============== Group2_sub_md0_interface =========================
171
- ## -------------- Group2_sub_md0_default -------------------------
172
- gui_list_add_group -id ${Wave.3} -after {New Group} [list ${Group2_sub_md0_default}]
173
- ## ============== Group2_sub_md0_default =========================
174
- ## -------------- sub_md0_default|inter_tf -------------------------
175
- gui_list_add_group -id ${Wave.3} -after {New Group} [list ${sub_md0_default|inter_tf}]
176
- ## ============== sub_md0_default|inter_tf =========================
177
- ## -------------- Group2_sub_md1_default -------------------------
178
- gui_list_add_group -id ${Wave.3} -after {New Group} [list ${Group2_sub_md1_default}]
179
- ## ============== Group2_sub_md1_default =========================
180
- ## -------------- Group2_sub_md1_inner -------------------------
181
- gui_list_add_group -id ${Wave.3} -after {New Group} [list ${Group2_sub_md1_inner}]
182
- ## ============== Group2_sub_md1_inner =========================
183
- ## -------------- sub_md1_inner|inter_tf -------------------------
184
- gui_list_add_group -id ${Wave.3} -after {New Group} [list ${sub_md1_inner|inter_tf}]
185
- ## ============== sub_md1_inner|inter_tf =========================
186
- ## -------------- Group2_exp_test_unit_default -------------------------
187
- gui_list_add_group -id ${Wave.3} -after {New Group} [list ${Group2_exp_test_unit_default}]
188
- ## ============== Group2_exp_test_unit_default =========================
189
- ## -------------- exp_test_unit_default|axis_data_inf -------------------------
190
- gui_list_add_group -id ${Wave.3} -after {New Group} [list ${exp_test_unit_default|axis_data_inf}]
191
- ## ============== exp_test_unit_default|axis_data_inf =========================
43
+
192
44
 
193
45
  gui_seek_criteria -id ${Wave.3} {Any Edge}
194
46
 
@@ -205,12 +57,7 @@ gui_list_set_filter -id ${Wave.3} -list { {Buffer 1} {Input 1} {Others 1} {Linka
205
57
  gui_list_set_filter -id ${Wave.3} -text {*}
206
58
  ##gui_list_set_insertion_bar -id ${Wave.3} -group ${Group2} -position in
207
59
  ## === [add_bar] === ##
208
- gui_list_set_insertion_bar -id ${Wave.3} -group ${Group2_sub_md0_logic} -position in
209
- gui_list_set_insertion_bar -id ${Wave.3} -group ${Group2_sub_md0_interface} -position in
210
- gui_list_set_insertion_bar -id ${Wave.3} -group ${Group2_sub_md0_default} -position in
211
- gui_list_set_insertion_bar -id ${Wave.3} -group ${Group2_sub_md1_default} -position in
212
- gui_list_set_insertion_bar -id ${Wave.3} -group ${Group2_sub_md1_inner} -position in
213
- gui_list_set_insertion_bar -id ${Wave.3} -group ${Group2_exp_test_unit_default} -position in
60
+
214
61
 
215
62
  gui_marker_move -id ${Wave.3} {C1} 560248001
216
63
  gui_view_scroll -id ${Wave.3} -vertical -set 35
@@ -5,10 +5,12 @@ _______________________________________
5
5
  descript:
6
6
  author : Cook.Darwin
7
7
  Version: VERA.0.0
8
- created: 2021-03-21 23:54:11 +0800
8
+ created: 2021-04-03 13:14:45 +0800
9
9
  madified:
10
10
  ***********************************************/
11
11
  `timescale 1ns/1ps
12
+ `timescale 1ns/1ps
13
+ `timescale 1ns/1ps
12
14
 
13
15
  module tb_test_tttop();
14
16
  //==========================================================================
@@ -5,7 +5,7 @@ _______________________________________
5
5
  descript:
6
6
  author : Cook.Darwin
7
7
  Version: VERA.0.0
8
- created: 2021-03-21 23:51:36 +0800
8
+ created: 2021-04-03 12:39:31 +0800
9
9
  madified:
10
10
  ***********************************************/
11
11
  `timescale 1ns/1ps
@@ -5,7 +5,7 @@ _______________________________________
5
5
  descript:
6
6
  author : Cook.Darwin
7
7
  Version: VERA.0.0
8
- created: 2021-03-21 23:54:11 +0800
8
+ created: 2021-04-03 13:14:45 +0800
9
9
  madified:
10
10
  ***********************************************/
11
11
  `timescale 1ns/1ps
@@ -128,9 +128,9 @@ end
128
128
 
129
129
  class AxiStream
130
130
 
131
- def to_simple_sim_master_coe(length: [10,200], gap_len: [0,10], data: [ (0...100) ] , vld_perc: [50, 100], loop_coe: true)
131
+ def to_simple_sim_master_coe(enable: 1.b1, length: [10,200], gap_len: [0,10], data: [ (0...100) ] , vld_perc: [50, 100], loop_coe: true)
132
132
  # raise TdlError.new "file cant be empty" unless file
133
- file = File.join(AxiTdl::TDL_PATH,"./auto_script/tmp/","#{self.name}_#{globle_random_name_flag}.coe")
133
+ file = File.join(AxiTdl::TDL_PATH,"./auto_script/tmp/","coe_#{self.name}_#{globle_random_name_flag}.coe")
134
134
  _sps = nil
135
135
  ClassHDL::AssignDefOpertor.with_rollback_opertors(:old) do
136
136
  require_sdl 'axis_sim_master_model.rb'
@@ -144,11 +144,12 @@ class AxiStream
144
144
  _sps
145
145
  end
146
146
 
147
- @belong_to_module.instance_exec(self,file,loop_coe) do |_self,file,loop_coe|
147
+ @belong_to_module.instance_exec(self,file,loop_coe,enable) do |_self,file,loop_coe,_enable|
148
148
 
149
149
  Instance(:axis_sim_master_model,"sim_model_inst_#{_self.name}") do |h|
150
150
  h.param.LOOP (loop_coe ? "TRUE" : "FALSE")
151
151
  h.param.RAM_DEPTH File.open(File.expand_path(file)).readlines.size
152
+ h.input.enable _enable
152
153
  h.input.load_trigger 1.b0
153
154
  h.input[32].total_length h.param.RAM_DEPTH
154
155
  h.input[512*8].mem_file File.expand_path(file) # {axis_tvalid, axis_tuser, axis_tkeep, axis_tlast, axis_tdata}
@@ -128,7 +128,7 @@ module TdlSpace
128
128
  define_method(tdl_key) do
129
129
  rel = self.instance_variable_get("@_#{tdl_key}_")
130
130
  unless rel
131
- "#{inst_name}.#{hdl_key}".to_nq
131
+ TdlSpace::ArrayChain.create(obj: "#{inst_name}.#{hdl_key}".to_nq, belong_to_module: belong_to_module)
132
132
  else
133
133
  rel
134
134
  end
@@ -152,9 +152,9 @@ module TdlSpace
152
152
  define_method('clock') do
153
153
  rel = self.instance_variable_get("@_#{tdl_key}_")
154
154
  if !dimension || dimension.empty?
155
- rel || TdlSpace::ArrayChain.new("#{self.inst_name}.#{hdl_key}")
155
+ rel || TdlSpace::ArrayChain.create(obj:"#{self.inst_name}.#{hdl_key}", belong_to_module: belong_to_module)
156
156
  else
157
- rel || TdlSpace::ArrayChain.new("#{self.inst_name}[0].#{hdl_key}")
157
+ rel || TdlSpace::ArrayChain.create(obj:"#{self.inst_name}[0].#{hdl_key}", belong_to_module: belong_to_module)
158
158
  end
159
159
  end
160
160
 
@@ -171,7 +171,7 @@ module TdlSpace
171
171
  self.class_exec(tdl_key) do |tdl_key|
172
172
  define_method('reset') do
173
173
  rel = self.instance_variable_get("@_#{tdl_key}_")
174
- rel || TdlSpace::ArrayChain.new("#{self.inst_name}.#{hdl_key}")
174
+ rel || TdlSpace::ArrayChain.create(obj:"#{self.inst_name}.#{hdl_key}", belong_to_module: belong_to_module)
175
175
  end
176
176
 
177
177
  define_method("reset=") do |arg|
@@ -200,7 +200,7 @@ module TdlSpace
200
200
  self.class_exec(tdl_key) do |tdl_key|
201
201
  define_method(tdl_key) do
202
202
  rel = self.instance_variable_get("@_#{tdl_key}_") || default_value
203
- rel || TdlSpace::ArrayChain.new("#{self.inst_name}.#{hdl_key}")
203
+ rel || TdlSpace::ArrayChain.create(obj:"#{self.inst_name}.#{hdl_key}", belong_to_module: belong_to_module)
204
204
  end
205
205
 
206
206
  define_method("#{tdl_key}=") do |arg|
@@ -215,7 +215,7 @@ module TdlSpace
215
215
  _io_map(e,e,nil,'sdata',nil)
216
216
  self.class_exec(e) do |e|
217
217
  define_method(e) do
218
- TdlSpace::ArrayChain.new("#{self.inst_name}.#{e}")
218
+ TdlSpace::ArrayChain.create(obj:"#{self.inst_name}.#{e}", belong_to_module: belong_to_module)
219
219
  end
220
220
  end
221
221
  end
@@ -225,7 +225,7 @@ module TdlSpace
225
225
  _io_map(name,name,nil,'pdata',dimension)
226
226
  self.class_exec(name) do |e|
227
227
  define_method(e) do
228
- TdlSpace::ArrayChain.new("#{self.inst_name}.#{e}")
228
+ TdlSpace::ArrayChain.create(obj:"#{self.inst_name}.#{e}", belong_to_module: belong_to_module)
229
229
  end
230
230
  end
231
231
  end
@@ -374,7 +374,7 @@ module TdlSpace
374
374
  e.slaver = true
375
375
  end
376
376
  end
377
- TdlSpace::ArrayChain.new(self,a)
377
+ TdlSpace::ArrayChain.create(obj: self,lchain: a, belong_to_module: belong_to_module)
378
378
  end
379
379
 
380
380
  def instance(exp_len: nil)
@@ -74,7 +74,7 @@ class SdlModule
74
74
  if e.is_a? String
75
75
  next
76
76
  end
77
- tmp = e.new(name:"#{head}_NC")
77
+ tmp = e.new(name:"#{head}_NC",belong_to_module: self)
78
78
  tmp.belong_to_module = self
79
79
  tmp.ghost = true
80
80
  instance_variable_set("@#{head}_NC",tmp)
@@ -127,16 +127,6 @@ class SdlModule
127
127
  @@allmodule << self
128
128
  @module_name = name
129
129
  @real_sv_path = File.join(@out_sv_path,"#{@module_name}.sv") if @out_sv_path
130
- # @port_clocks = []
131
- # @port_resets = []
132
- # @port_params = []
133
- # @port_logics = []
134
- # @port_datainfs = []
135
- # @port_datainf_c_s = []
136
- # @port_videoinfs = []
137
- # @port_axisinfs = []
138
- # @port_axi4infs = []
139
- # @port_axilinfs = []
140
130
 
141
131
  @port_clocks = Hash.new
142
132
  @port_resets = Hash.new
@@ -164,52 +154,16 @@ class SdlModule
164
154
  # self.instance_variable_set("#{head_str}_NC",tmp)
165
155
  end
166
156
  create_ghost
167
- # @super_modules = []
168
- # @Logic_collect = []
169
- # @Logic_inst = []
170
- # @Logic_draw = []
171
- #
172
- # @Clock_collect = []
173
- # @Clock_inst = []
174
- # @Clock_draw = []
175
- #
176
- # @Reset_collect = []
177
- # @Reset_inst = []
178
- # @Reset_draw = []
179
- #
180
- # @Parameter_collect = []
181
- # @Parameter_inst = []
182
- # @Parameter_draw = []
183
- #
184
- # @DataInf_collect = []
185
- # @DataInf_inst = []
186
- # @DataInf_draw = []
187
- #
188
- # @DataInf_C_collect = []
189
- # @DataInf_C_inst = []
190
- # @DataInf_C_draw = []
191
- #
192
- # @AxiStream_collect = []
193
- # @AxiStream_inst = []
194
- # @AxiStream_draw = []
195
- #
196
- # @AxiLite_collect = []
197
- # @AxiLite_inst = []
198
- # @AxiLite_draw = []
199
- #
200
- # @VideoInf_collect = []
201
- # @VideoInf_inst = []
202
- # @VideoInf_draw = []
203
- #
204
- # @Axi4_collect = []
205
- # @Axi4_inst = []
206
- # @Axi4_draw = []
157
+
207
158
  if block_given?
208
159
  yield(self)
209
160
  end
210
161
 
211
162
  @instanced_and_parent_module ||= Hash.new
212
163
  @instance_and_children_module ||= Hash.new
164
+
165
+ ## 记录当前模块被例化的 具体对象
166
+ @instances =[]
213
167
  end
214
168
 
215
169
  public
@@ -473,3 +427,59 @@ class SdlModule
473
427
  end
474
428
  end
475
429
  end
430
+
431
+ class SdlModule
432
+
433
+ ## 获取信号的绝对路径
434
+ def path_refs(&block)
435
+ collects = []
436
+ if self != TopModule.current.techbench
437
+ @instances.each do |it|
438
+ it.origin.parents_inst_tree do |tree|
439
+ ll = ["$root"]
440
+ rt = tree.reverse
441
+ rt.each_index do |index|
442
+ if rt[index].respond_to? :module_name
443
+ ll << rt[index].module_name
444
+ else
445
+ ll << rt[index].inst_name
446
+ end
447
+ end
448
+ # ll << it.inst_name
449
+ new_name = ll.join('.').to_nq
450
+ if block_given?
451
+ if yield(new_name)
452
+ collects << new_name
453
+ end
454
+ else
455
+ collects << new_name
456
+ end
457
+ end
458
+ end
459
+ else
460
+ collects = ["$root.#{self.module_name}".to_nq]
461
+ end
462
+ collects
463
+ end
464
+
465
+ ## 定义获取 信号的绝对路径
466
+ def root_ref(&block)
467
+ ClassHDL::AssignDefOpertor.with_rollback_opertors(:old) do
468
+ rels = path_refs(&block)
469
+ if block_given?
470
+ sst = "block given"
471
+ else
472
+ sst = "no block"
473
+ end
474
+
475
+ if rels.size == 1
476
+ rels[0]
477
+ elsif rels.size == 0
478
+ raise TdlError.new "#{module_name} Cant find root ref {#{sst}}"
479
+ else
480
+ raise TdlError.new "#{module_name} Find multi root refs {#{sst}} \n#{rels.join("\n")}\n"
481
+ end
482
+ end
483
+ end
484
+
485
+ end