axi_tdl 0.0.12 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (175) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/gem-push.yml +4 -2
  3. data/.gitignore +3 -1
  4. data/README.EN.md +7 -2
  5. data/README.md +6 -2
  6. data/Rakefile +8 -1
  7. data/axi_tdl.gemspec +1 -2
  8. data/lib/axi/AXI4/axi4_direct_A1.sv +1 -1
  9. data/lib/axi/AXI4/axi4_direct_B1.sv +23 -23
  10. data/lib/axi/AXI4/axi4_direct_verc.sv +54 -54
  11. data/lib/axi/AXI4/axi4_dpram_cache.sv +34 -34
  12. data/lib/axi/AXI4/axis_to_axi4_wr.rb +1 -0
  13. data/lib/axi/AXI4/axis_to_axi4_wr.sv +24 -24
  14. data/lib/axi/AXI4/odata_pool_axi4_A3.sv +7 -0
  15. data/lib/axi/AXI4/packet_partition/axi4_partition_rd_verb.sv +33 -33
  16. data/lib/axi/AXI4/packet_partition/data_inf_partition.rb +2 -0
  17. data/lib/axi/AXI4/packet_partition/data_inf_partition.sv +72 -72
  18. data/lib/axi/AXI4/wide_axis_to_axi4_wr.rb +2 -1
  19. data/lib/axi/AXI4/wide_axis_to_axi4_wr.sv +21 -21
  20. data/lib/axi/AXI_stream/axi_stream_split_channel.rb +7 -1
  21. data/lib/axi/AXI_stream/axi_stream_split_channel.sv +45 -40
  22. data/lib/axi/AXI_stream/axis_head_cut_verb.sv +6 -2
  23. data/lib/axi/AXI_stream/axis_head_cut_verc.sv +30 -30
  24. data/lib/axi/AXI_stream/axis_insert_copy.rb +18 -4
  25. data/lib/axi/AXI_stream/axis_insert_copy.sv +29 -16
  26. data/lib/axi/AXI_stream/axis_pipe_sync_seam.sv +9 -9
  27. data/lib/axi/AXI_stream/axis_rom_contect_sim.sv +38 -38
  28. data/lib/axi/AXI_stream/axis_sim_master_model.rb +30 -0
  29. data/lib/axi/AXI_stream/axis_sim_master_model.sv +46 -0
  30. data/lib/axi/AXI_stream/axis_sim_slaver_model.rb +26 -0
  31. data/lib/axi/AXI_stream/axis_sim_verify_by_coe.sv +101 -0
  32. data/lib/axi/AXI_stream/axis_split_channel_verb.rb +2 -0
  33. data/lib/axi/AXI_stream/axis_split_channel_verb.sv +4 -4
  34. data/lib/axi/common/common_ram_sim_wrapper.sv +10 -10
  35. data/lib/axi/common/common_ram_wrapper.sv +13 -13
  36. data/lib/axi/data_interface/data_inf_c/data_c_pipe_sync_seam.sv +27 -27
  37. data/lib/axi/data_interface/data_inf_c/data_c_sim_master_model.sv +72 -0
  38. data/lib/axi/data_interface/data_inf_c/data_c_sim_slaver_model.sv +58 -0
  39. data/lib/axi/data_interface/data_inf_c/logic_sim_model.sv +64 -0
  40. data/lib/axi/platform_ip/fifo_36kb_long.sv +1 -1
  41. data/lib/axi/techbench/tb_axi_stream_split_channel.rb +69 -0
  42. data/lib/axi/techbench/tb_axi_stream_split_channel.sv +150 -0
  43. data/lib/axi/techbench/tb_axis_split_channel_verb.rb +69 -0
  44. data/lib/axi/techbench/tb_axis_split_channel_verb.sv +125 -0
  45. data/lib/axi_tdl.rb +1 -0
  46. data/lib/axi_tdl/version.rb +1 -1
  47. data/lib/public_atom_module/CheckPClock.sv +53 -0
  48. data/lib/public_atom_module/LICENSE.md +674 -0
  49. data/lib/public_atom_module/altera_xilinx_always_block_sw.rb +57 -0
  50. data/lib/public_atom_module/bits_decode.sv +71 -0
  51. data/lib/public_atom_module/bits_decode_verb.sv +71 -0
  52. data/lib/public_atom_module/bits_decode_verb_sdl.rb +24 -0
  53. data/lib/public_atom_module/broaden.v +43 -0
  54. data/lib/public_atom_module/broaden_and_cross_clk.v +47 -0
  55. data/lib/public_atom_module/ceiling.v +39 -0
  56. data/lib/public_atom_module/ceiling_A1.v +42 -0
  57. data/lib/public_atom_module/clock_rst.sv +64 -0
  58. data/lib/public_atom_module/cross_clk_sync.v +37 -0
  59. data/lib/public_atom_module/edge_generator.v +50 -0
  60. data/lib/public_atom_module/flooring.v +36 -0
  61. data/lib/public_atom_module/latch_data.v +30 -0
  62. data/lib/public_atom_module/latency.v +48 -0
  63. data/lib/public_atom_module/latency_dynamic.v +83 -0
  64. data/lib/public_atom_module/latency_long.v +84 -0
  65. data/lib/public_atom_module/latency_verb.v +52 -0
  66. data/lib/public_atom_module/once_event.sv +65 -0
  67. data/lib/public_atom_module/pipe_reg.v +93 -0
  68. data/lib/public_atom_module/pipe_reg_2write_ports.v +84 -0
  69. data/lib/public_atom_module/sim/clock_rst_verb.sv +54 -0
  70. data/lib/public_atom_module/sim/latency_long_tb.sv +49 -0
  71. data/lib/public_atom_module/sim/latency_long_tb.sv.bak +49 -0
  72. data/lib/tdl/Logic/logic_edge.rb +1 -1
  73. data/lib/tdl/auto_script/autogensdl.rb +16 -5
  74. data/lib/tdl/axi4/axi4_interconnect_verb.rb +49 -10
  75. data/lib/tdl/basefunc.rb +1 -0
  76. data/lib/tdl/class_hdl/hdl_always_comb.rb +8 -4
  77. data/lib/tdl/class_hdl/hdl_always_ff.rb +49 -8
  78. data/lib/tdl/class_hdl/hdl_assign.rb +12 -4
  79. data/lib/tdl/class_hdl/hdl_block_ifelse.rb +18 -16
  80. data/lib/tdl/class_hdl/hdl_foreach.rb +4 -4
  81. data/lib/tdl/class_hdl/hdl_function.rb +8 -6
  82. data/lib/tdl/class_hdl/hdl_generate.rb +9 -5
  83. data/lib/tdl/class_hdl/hdl_initial.rb +36 -13
  84. data/lib/tdl/class_hdl/hdl_module_def.rb +27 -7
  85. data/lib/tdl/class_hdl/hdl_package.rb +45 -0
  86. data/lib/tdl/class_hdl/hdl_redefine_opertor.rb +117 -24
  87. data/lib/tdl/class_hdl/hdl_struct.rb +3 -3
  88. data/lib/tdl/class_hdl/hdl_verify.rb +1 -1
  89. data/lib/tdl/elements/Reset.rb +5 -9
  90. data/lib/tdl/elements/clock.rb +5 -9
  91. data/lib/tdl/elements/data_inf.rb +0 -17
  92. data/lib/tdl/elements/logic.rb +9 -31
  93. data/lib/tdl/elements/mail_box.rb +6 -1
  94. data/lib/tdl/elements/originclass.rb +23 -48
  95. data/lib/tdl/elements/parameter.rb +6 -7
  96. data/lib/tdl/examples/10_random/exp_random.sv +3 -3
  97. data/lib/tdl/examples/11_test_unit/dve.tcl +6 -0
  98. data/lib/tdl/examples/11_test_unit/exp_test_unit.rb +9 -8
  99. data/lib/tdl/examples/11_test_unit/exp_test_unit.sv +1 -1
  100. data/lib/tdl/examples/11_test_unit/exp_test_unit_sim.sv +9 -0
  101. data/lib/tdl/examples/11_test_unit/modules/sub_md0.rb +6 -3
  102. data/lib/tdl/examples/11_test_unit/modules/sub_md0.sv +5 -5
  103. data/lib/tdl/examples/11_test_unit/modules/sub_md1.rb +9 -4
  104. data/lib/tdl/examples/11_test_unit/modules/sub_md1.sv +5 -5
  105. data/lib/tdl/examples/11_test_unit/tb_exp_test_unit.sv +1 -2
  106. data/lib/tdl/examples/11_test_unit/tb_exp_test_unit_sim.sv +42 -0
  107. data/lib/tdl/examples/11_test_unit/tu0.sv +9 -9
  108. data/lib/tdl/examples/11_test_unit/tu1.sv +1 -1
  109. data/lib/tdl/examples/1_define_module/exmple_md.sv +13 -13
  110. data/lib/tdl/examples/2_hdl_class/tmp/always_comb_test.sv +60 -60
  111. data/lib/tdl/examples/2_hdl_class/tmp/always_ff_test.sv +2 -2
  112. data/lib/tdl/examples/2_hdl_class/tmp/case_test.sv +17 -17
  113. data/lib/tdl/examples/2_hdl_class/tmp/head_pkg_module.sv +9 -9
  114. data/lib/tdl/examples/2_hdl_class/tmp/module_instance_test.sv +1 -1
  115. data/lib/tdl/examples/2_hdl_class/tmp/simple_assign_test.sv +1 -1
  116. data/lib/tdl/examples/2_hdl_class/tmp/state_case_test.sv +10 -10
  117. data/lib/tdl/examples/2_hdl_class/tmp/test_foreach.sv +3 -3
  118. data/lib/tdl/examples/2_hdl_class/tmp/test_function.sv +7 -7
  119. data/lib/tdl/examples/2_hdl_class/tmp/test_initial_assert.sv +3 -3
  120. data/lib/tdl/examples/2_hdl_class/tmp/test_inst_sugar.sv +1 -1
  121. data/lib/tdl/examples/2_hdl_class/tmp/test_module.sv +3 -3
  122. data/lib/tdl/examples/2_hdl_class/tmp/test_module_port.sv +1 -1
  123. data/lib/tdl/examples/2_hdl_class/tmp/test_module_var.sv +1 -1
  124. data/lib/tdl/examples/2_hdl_class/tmp/test_package.sv +2 -2
  125. data/lib/tdl/examples/2_hdl_class/tmp/test_package2.sv +4 -4
  126. data/lib/tdl/examples/2_hdl_class/tmp/test_struct_function.sv +2 -2
  127. data/lib/tdl/examples/2_hdl_class/tmp/test_vcs_string.sv +1 -1
  128. data/lib/tdl/examples/2_hdl_class/tmp/text_generate.sv +7 -7
  129. data/lib/tdl/examples/3_hdl_sdl_instance/main_md.sv +1 -1
  130. data/lib/tdl/examples/3_hdl_sdl_instance/sdl_md.sv +1 -1
  131. data/lib/tdl/examples/4_generate/test_generate.sv +11 -11
  132. data/lib/tdl/examples/5_logic_combin/test_logic_combin.sv +3 -3
  133. data/lib/tdl/examples/6_module_with_interface/inf_collect.sv +1 -1
  134. data/lib/tdl/examples/7_module_with_package/body_package.sv +1 -1
  135. data/lib/tdl/examples/7_module_with_package/example_pkg.sv +5 -5
  136. data/lib/tdl/examples/7_module_with_package/head_package.sv +1 -1
  137. data/lib/tdl/examples/8_top_module/tb_test_top.sv +1 -2
  138. data/lib/tdl/examples/8_top_module/tb_test_top_sim.sv +29 -0
  139. data/lib/tdl/examples/8_top_module/test_top.sv +1 -1
  140. data/lib/tdl/examples/8_top_module/test_top_sim.sv +9 -0
  141. data/lib/tdl/examples/9_itegration/clock_manage/itgt_module_clock_manage.rb +13 -0
  142. data/lib/tdl/examples/9_itegration/clock_manage/test_clock_bb.sv +34 -0
  143. data/lib/tdl/examples/9_itegration/tb_test_top.sv +2 -2
  144. data/lib/tdl/examples/9_itegration/tb_test_tttop.sv +4 -2
  145. data/lib/tdl/examples/9_itegration/tb_test_tttop_sim.sv +39 -0
  146. data/lib/tdl/examples/9_itegration/test_top.sv +4 -4
  147. data/lib/tdl/examples/9_itegration/test_tttop.sv +4 -4
  148. data/lib/tdl/examples/9_itegration/test_tttop_sim.sv +9 -0
  149. data/lib/tdl/examples/9_itegration/top.rb +1 -0
  150. data/lib/tdl/exlib/axis_eth_ex.rb +95 -0
  151. data/lib/tdl/exlib/axis_verify.rb +265 -0
  152. data/lib/tdl/exlib/clock_reset_verify.rb +29 -0
  153. data/lib/tdl/exlib/dve_tcl.rb +30 -11
  154. data/lib/tdl/exlib/itegration.rb +15 -3
  155. data/lib/tdl/exlib/itegration_verb.rb +167 -130
  156. data/lib/tdl/exlib/logic_verify.rb +88 -0
  157. data/lib/tdl/exlib/test_point.rb +96 -94
  158. data/lib/tdl/exlib/test_point.rb.bak +293 -0
  159. data/lib/tdl/rebuild_ele/ele_base.rb +9 -9
  160. data/lib/tdl/sdlmodule/sdlmodlule_path_db.rb +34 -0
  161. data/lib/tdl/sdlmodule/sdlmodule.rb +79 -65
  162. data/lib/tdl/sdlmodule/sdlmodule_arraychain.rb +1 -1
  163. data/lib/tdl/sdlmodule/sdlmodule_draw.rb +81 -16
  164. data/lib/tdl/sdlmodule/sdlmodule_instance.rb +3 -0
  165. data/lib/tdl/sdlmodule/sdlmodule_port_define.rb +6 -6
  166. data/lib/tdl/sdlmodule/sdlmodule_varible.rb +6 -6
  167. data/lib/tdl/sdlmodule/test_unit_module.rb +283 -33
  168. data/lib/tdl/sdlmodule/test_unit_module.rb.bak +143 -0
  169. data/lib/tdl/sdlmodule/top_module.rb +62 -58
  170. data/lib/tdl/sdlmodule/top_module.rb.bak +547 -0
  171. data/lib/tdl/tdl.rb +18 -3
  172. data/lib/tdl/tdlerror/tdlerror.rb +1 -1
  173. metadata +54 -121
  174. data/CODE_OF_CONDUCT.md +0 -74
  175. 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: xxxx.xx.xx
8
+ creaded: XXXX.XX.XX
9
9
  madified:
10
10
  ***********************************************/
11
11
  `timescale 1ns/1ps
@@ -14,8 +14,8 @@ module data_c_pipe_sync_seam #(
14
14
  parameter LAT = 4,
15
15
  parameter DSIZE = 32
16
16
  )(
17
- input [ DSIZE-1:0] in_datas [LAT-1:0],
18
- output [ DSIZE-1:0] out_datas [LAT-1:0],
17
+ input [DSIZE-1:0] in_datas [LAT-1:0],
18
+ output [DSIZE-1:0] out_datas [LAT-1:0],
19
19
  data_inf_c.slaver in_inf,
20
20
  data_inf_c.master out_inf
21
21
  );
@@ -35,35 +35,35 @@ for(genvar KK0=0;KK0 < LAT;KK0++)begin
35
35
  data_c_pipe_sync #(
36
36
  .DSIZE (DSIZE )
37
37
  )data_c_pipe_sync_inst(
38
- /* input */.in_data (in_datas[ KK0] ),
39
- /* output */.out_data (out_datas[ KK0] ),
40
- /* data_inf_c.slaver */.in_inf (in_inf_array[ KK0] ),
41
- /* data_inf_c.master */.out_inf (out_inf_array[ KK0] )
38
+ /* input */.in_data (in_datas[KK0] ),
39
+ /* output */.out_data (out_datas[KK0] ),
40
+ /* data_inf_c.slaver */.in_inf (in_inf_array[KK0] ),
41
+ /* data_inf_c.master */.out_inf (out_inf_array[KK0] )
42
42
  );
43
- if( KK0!=0)begin
44
- assign in_inf_array[ KK0].valid = out_inf_array[ KK0-1].valid;
45
- assign in_inf_array[ KK0].data = out_inf_array[ KK0-1].data;
46
- assign out_inf_array[ KK0-1].ready = in_inf_array[ KK0].ready;
43
+ if(KK0!=0)begin
44
+ assign in_inf_array[KK0].valid = out_inf_array[KK0-1].valid;
45
+ assign in_inf_array[KK0].data = out_inf_array[KK0-1].data;
46
+ assign out_inf_array[KK0-1].ready = in_inf_array[KK0].ready;
47
47
  end end
48
48
  endgenerate
49
49
  //-------- CLOCKs Total 2 ----------------------
50
50
  //--->> CheckClock <<----------------
51
- logic cc_done_10,cc_same_10;
52
- integer cc_afreq_10,cc_bfreq_10;
53
- ClockSameDomain CheckPClock_inst_10(
51
+ logic cc_done_9,cc_same_9;
52
+ integer cc_afreq_9,cc_bfreq_9;
53
+ ClockSameDomain CheckPClock_inst_9(
54
54
  /* input */ .aclk (in_inf.clock ),
55
55
  /* input */ .bclk (out_inf.clock ),
56
- /* output logic */ .done (cc_done_10),
57
- /* output logic */ .same (cc_same_10),
58
- /* output integer */ .aFreqK (cc_afreq_10),
59
- /* output integer */ .bFreqK (cc_bfreq_10)
56
+ /* output logic */ .done (cc_done_9),
57
+ /* output logic */ .same (cc_same_9),
58
+ /* output integer */ .aFreqK (cc_afreq_9),
59
+ /* output integer */ .bFreqK (cc_bfreq_9)
60
60
  );
61
61
 
62
62
  initial begin
63
- wait(cc_done_10);
64
- assert(cc_same_10)
63
+ wait(cc_done_9);
64
+ assert(cc_same_9)
65
65
  else begin
66
- $error("--- Error : `data_c_pipe_sync_seam` clock is not same, in_inf.clock< %0f M> != out_inf.clock<%0f M>",1000000.0/cc_afreq_10, 1000000.0/cc_bfreq_10);
66
+ $error("--- Error : `data_c_pipe_sync_seam` clock is not same, in_inf.clock< %0f M> != out_inf.clock<%0f M>",1000000.0/cc_afreq_9, 1000000.0/cc_bfreq_9);
67
67
  repeat(10)begin
68
68
  @(posedge in_inf.clock);
69
69
  end
@@ -73,12 +73,12 @@ end
73
73
  //---<< CheckClock >>----------------
74
74
 
75
75
  //======== CLOCKs Total 2 ======================
76
- assign in_inf_array[0].valid = in_inf.valid;
77
- assign in_inf_array[0].data = in_inf.data;
78
- assign in_inf.ready = in_inf_array[0].ready;
76
+ assign in_inf_array[0].valid = in_inf.valid;
77
+ assign in_inf_array[0].data = in_inf.data;
78
+ assign in_inf.ready = in_inf_array[0].ready;
79
79
 
80
- assign out_inf.data = out_inf_array[ LAT-1].data;
81
- assign out_inf.valid = out_inf_array[ LAT-1].valid;
82
- assign out_inf_array[ LAT-1].ready = out_inf.ready;
80
+ assign out_inf.data = out_inf_array[LAT-1].data;
81
+ assign out_inf.valid = out_inf_array[LAT-1].valid;
82
+ assign out_inf_array[LAT-1].ready = out_inf.ready;
83
83
 
84
84
  endmodule
@@ -0,0 +1,72 @@
1
+ /**********************************************
2
+ _______________________________________
3
+ ___________ Cook Darwin __________
4
+ _______________________________________
5
+ descript:
6
+ author : Cook.Darwin
7
+ Version: VERA.0.0
8
+ created: xxxx.xx.xx
9
+ madified:
10
+ ***********************************************/
11
+ `timescale 1ns/1ps
12
+ module data_c_sim_master_model #(
13
+ parameter LOOP = "TRUE",
14
+ parameter RAM_DEPTH = 10000
15
+ )(
16
+ input enable,
17
+ input load_trigger,
18
+ input [31:0] total_length,
19
+ input[512*8-1:0] mem_file,
20
+ data_inf_c.master out_inf
21
+ );
22
+
23
+
24
+ logic [out_inf.DSIZE+1-1:0] BRAM [RAM_DEPTH-1:0];
25
+ int total_length_lock;
26
+ initial begin
27
+ #(5ns);
28
+ total_length_lock = RAM_DEPTH;
29
+ $display(" -- Load File %0s",mem_file);
30
+ $readmemh(mem_file, BRAM, 0, RAM_DEPTH-1);
31
+ end
32
+
33
+ always@(posedge load_trigger)begin
34
+ total_length_lock = total_length;
35
+ $display(" -- Load File %0s",mem_file);
36
+ $readmemh(mem_file, BRAM, 0, RAM_DEPTH-1);
37
+ end
38
+
39
+ int index;
40
+ logic disable_coe;
41
+ initial begin
42
+ index = 0;
43
+ disable_coe = 1'b0;
44
+ end
45
+
46
+
47
+ always@(posedge out_inf.clock) begin
48
+ if(~out_inf.rst_n) index <= 0;
49
+ else begin
50
+ if(enable)begin
51
+ if(out_inf.ready) begin
52
+ if(index >= total_length_lock-1)begin
53
+ if(LOOP == "TRUE" || LOOP == "ON")begin
54
+ index <= 0;
55
+ end else begin
56
+ index <= total_length_lock-1;
57
+ disable_coe <= 1'b1;
58
+ end
59
+ end else begin
60
+ index <= index + 1;
61
+ end
62
+ end else begin
63
+ index <= index;
64
+ end
65
+ end
66
+ end
67
+ end
68
+
69
+ assign out_inf.data = BRAM[index][out_inf.DSIZE-1:0];
70
+ assign out_inf.valid = BRAM[index][out_inf.DSIZE] && ~disable_coe && enable;
71
+
72
+ endmodule
@@ -0,0 +1,58 @@
1
+ /**********************************************
2
+ _______________________________________
3
+ ___________ Cook Darwin __________
4
+ _______________________________________
5
+ descript:
6
+ author : Cook.Darwin
7
+ Version: VERA.0.0
8
+ created: xxxx.xx.xx
9
+ madified:
10
+ ***********************************************/
11
+ `timescale 1ns/1ps
12
+ module data_c_sim_slaver_model #(
13
+ parameter RAM_DEPTH = 10000
14
+ )(
15
+ input load_trigger,
16
+ input [31:0] total_length,
17
+ input[512*8-1:0] mem_file,
18
+ data_inf_c.slaver in_inf
19
+ );
20
+
21
+ int total_length_lock;
22
+
23
+ logic [0:0] BRAM [RAM_DEPTH-1:0];
24
+
25
+ initial begin
26
+ #(1ns);
27
+ total_length_lock = RAM_DEPTH;
28
+ $readmemh(mem_file, BRAM, 0, RAM_DEPTH-1);
29
+ end
30
+
31
+ always@(posedge load_trigger)begin
32
+ total_length_lock = total_length;
33
+ $readmemh(mem_file, BRAM, 0, RAM_DEPTH-1);
34
+ end
35
+
36
+ int index;
37
+ initial begin
38
+ index = 0;
39
+ end
40
+
41
+ always@(posedge out_inf.clock) begin
42
+ if(~out_inf.rst_n) index <= 0;
43
+ else begin
44
+ if(out_inf.ready) begin
45
+ if(index >= total_length_lock-1)begin
46
+ index <= 0;
47
+ end else begin
48
+ index <= index + 1;
49
+ end
50
+ end else begin
51
+ index <= index;
52
+ end
53
+ end
54
+ end
55
+
56
+ assign out_inf.ready = BRAM[index];
57
+
58
+ endmodule
@@ -0,0 +1,64 @@
1
+ /**********************************************
2
+ _______________________________________
3
+ ___________ Cook Darwin __________
4
+ _______________________________________
5
+ descript:
6
+ author : Cook.Darwin
7
+ Version: VERA.0.0
8
+ creaded: XXXX.XX.XX
9
+ madified:
10
+ ***********************************************/
11
+ `timescale 1ns/1ps
12
+ module logic_sim_model #(
13
+ parameter LOOP = "TRUE",
14
+ parameter DSIZE = 32,
15
+ parameter RAM_DEPTH = 10000
16
+ )(
17
+ input next_at_negedge_of,
18
+ input next_at_posedge_of,
19
+ input load_trigger,
20
+ input [31:0] total_length,
21
+ input[512*8-1:0] mem_file,
22
+ output[DSIZE-1:0] data
23
+ );
24
+
25
+
26
+ logic [DSIZE+1-1:0] BRAM [RAM_DEPTH-1:0];
27
+ int total_length_lock;
28
+ int index;
29
+
30
+ initial begin
31
+ #(1ns);
32
+ total_length_lock = RAM_DEPTH;
33
+ $readmemh(mem_file, BRAM, 0, RAM_DEPTH-1);
34
+ end
35
+
36
+ always@(posedge load_trigger)begin
37
+ total_length_lock = total_length;
38
+ index = 0;
39
+ $readmemh(mem_file, BRAM, 0, RAM_DEPTH-1);
40
+ end
41
+
42
+ logic init_lock;
43
+ initial begin
44
+ index = 0;
45
+ init_lock = 1'b0;
46
+ #(100ns);
47
+ init_lock = 1'b1;
48
+ end
49
+
50
+ always@(negedge next_at_negedge_of,posedge next_at_posedge_of) begin
51
+ if(index >= total_length_lock-1)begin
52
+ if(LOOP=="TRUE" || LOOP=="ON")begin
53
+ index <= 0;
54
+ end else begin
55
+ index <= total_length_lock-1;
56
+ end
57
+ end else begin
58
+ index <= index + init_lock;
59
+ end
60
+ end
61
+
62
+ assign data = BRAM[index];
63
+
64
+ endmodule
@@ -53,7 +53,7 @@ localparam DIV = ((DSIZE>=37) && (DSIZE<=72)) ? 512 :
53
53
  ((DSIZE>=5 ) && (DSIZE<=9 )) ? 4096 :
54
54
  ((DSIZE>=1 ) && (DSIZE<=4 )) ? 8192 : 8192;
55
55
 
56
- localparam KNUM = DEPTH/DIV;
56
+ localparam KNUM = DEPTH/DIV + (DEPTH/DIV == 0);
57
57
 
58
58
  // FIFO_DUALCLOCK_MACRO: Dual Clock First-In, First-Out (FIFO) RAM Buffer
59
59
  // Artix-7
@@ -0,0 +1,69 @@
1
+ require_relative '../../axi_tdl.rb'
2
+ require_sdl 'axi_stream_split_channel.rb'
3
+
4
+ TdlBuild.tb_axi_stream_split_channel(__dir__) do
5
+
6
+ logic.clock(100) - 'clock'
7
+ logic.reset('low') - 'rst_n'
8
+
9
+ clock.to_sim_source
10
+ rst_n.to_sim_source(200) # keep 200ns when initial
11
+
12
+ axi_stream_inf(clock: clock, reset: rst_n, dsize:8) - 'origin_inf'
13
+ origin_inf.copy(name: 'first_inf')
14
+ origin_inf.copy(name: 'end_inf')
15
+
16
+ axi_stream_split_channel.axis_split_channel_inst do |h|
17
+ h.input[16].split_len logic[16].split_len # 1:need 1 size ; split len must large than 2
18
+ h.port.axis.slaver.origin_inf origin_inf
19
+ h.port.axis.master.first_inf first_inf
20
+ h.port.axis.master.end_inf end_inf
21
+ end
22
+
23
+ origin_param = {
24
+ split_len: [3,4,5,6],
25
+ length: [16,32,24,50,12],
26
+ gap_len: [3,0,1,0,5],
27
+ data: [(0..100)],
28
+ vld_perc: [50,100,30,80]
29
+ }
30
+
31
+ split_len.to_sim_source_coe(
32
+ data: origin_param[:split_len] * ( (origin_param[:length].size/ origin_param[:split_len].size + 1)),
33
+ posedge: nil ,
34
+ negedge: origin_inf.vld_rdy_last
35
+ )
36
+
37
+ origin_inf.to_simple_sim_master_coe(
38
+ length: origin_param[:length],
39
+ gap_len: origin_param[:gap_len],
40
+ data: origin_param[:data],
41
+ vld_perc: origin_param[:vld_perc]
42
+ )
43
+
44
+ first_inf.to_simple_sim_slaver([50,100,30])
45
+ end_inf.to_simple_sim_slaver([100,50,100])
46
+
47
+
48
+ ## 验证输出
49
+ fcollect = []
50
+ ecollect = []
51
+ origin_param[:length].each_index do |index|
52
+ _data = origin_param[:data][index] || origin_param[:data][0]
53
+ _data = _data.to_a[0,origin_param[:length][index]]
54
+
55
+ insert_seed = origin_param[:split_len][index] || origin_param[:split_len][0]
56
+
57
+ # _data.insert(insert_seed,_data[insert_seed])
58
+
59
+ fcollect += _data[0,insert_seed]
60
+ fcollect[fcollect.size-1] = fcollect.last + 256
61
+ ecollect += _data[insert_seed, _data.size-insert_seed]
62
+ ecollect[ecollect.size-1] = ecollect.last + 256
63
+ end
64
+
65
+
66
+ first_inf.simple_verify_by_coe(AxiTdl::Verification::CoeArray.new(fcollect).coe)
67
+ end_inf.simple_verify_by_coe(AxiTdl::Verification::CoeArray.new(ecollect).coe)
68
+
69
+ end
@@ -0,0 +1,150 @@
1
+ /**********************************************
2
+ _______________________________________
3
+ ___________ Cook Darwin __________
4
+ _______________________________________
5
+ descript:
6
+ author : Cook.Darwin
7
+ Version: VERA.0.0
8
+ created: 2021-04-03 12:04:15 +0800
9
+ madified:
10
+ ***********************************************/
11
+ `timescale 1ns/1ps
12
+
13
+ module tb_axi_stream_split_channel ();
14
+ //==========================================================================
15
+ //-------- define ----------------------------------------------------------
16
+ logic clock;
17
+ logic rst_n;
18
+ logic [16-1:0] split_len ;
19
+ logic [32-1:0] first_inf_rdy_percetage_index ;
20
+ logic [32-1:0] first_inf_rdy_percetage[3-1:0] ;
21
+ logic [32-1:0] end_inf_rdy_percetage_index ;
22
+ logic [32-1:0] end_inf_rdy_percetage[3-1:0] ;
23
+ axi_stream_inf #(.DSIZE(8),.USIZE(1)) origin_inf (.aclk(clock),.aresetn(rst_n),.aclken(1'b1)) ;
24
+ axi_stream_inf #(.DSIZE(8),.USIZE(1)) first_inf (.aclk(clock),.aresetn(rst_n),.aclken(1'b1)) ;
25
+ axi_stream_inf #(.DSIZE(8),.USIZE(1)) end_inf (.aclk(clock),.aresetn(rst_n),.aclken(1'b1)) ;
26
+ //==========================================================================
27
+ //-------- instance --------------------------------------------------------
28
+ axi_stream_split_channel axis_split_channel_inst(
29
+ /* input */.split_len (split_len ),
30
+ /* axi_stream_inf.slaver */.origin_inf (origin_inf ),
31
+ /* axi_stream_inf.master */.first_inf (first_inf ),
32
+ /* axi_stream_inf.master */.end_inf (end_inf )
33
+ );
34
+ logic_sim_model #(
35
+ .LOOP ("TRUE" ),
36
+ .DSIZE (16 ),
37
+ .RAM_DEPTH (8 )
38
+ )split_len_sim_model_inst(
39
+ /* input */.next_at_negedge_of (origin_inf.axis_tvalid && origin_inf.axis_tready && origin_inf.axis_tlast ),
40
+ /* input */.next_at_posedge_of (1'b0 ),
41
+ /* input */.load_trigger (1'b0 ),
42
+ /* input */.total_length (8 ),
43
+ /* input */.mem_file ("/home/wmy367/work/gem/axi_tdl/lib/tdl/auto_script/tmp/split_len_R674.coe" ),
44
+ /* output */.data (split_len )
45
+ );
46
+ axis_sim_master_model #(
47
+ .LOOP ("TRUE" ),
48
+ .RAM_DEPTH (246 )
49
+ )sim_model_inst_origin_inf(
50
+ /* input */.enable (/*unused */ ),
51
+ /* input */.load_trigger (1'b0 ),
52
+ /* input */.total_length (246 ),
53
+ /* input */.mem_file ("/home/wmy367/work/gem/axi_tdl/lib/tdl/auto_script/tmp/origin_inf_R1699.coe" ),
54
+ /* axi_stream_inf.master */.out_inf (origin_inf )
55
+ );
56
+ axis_sim_verify_by_coe #(
57
+ .RAM_DEPTH (21 ),
58
+ .VERIFY_KEEP ("OFF" ),
59
+ .VERIFY_USER ("OFF" )
60
+ )axis_sim_verify_by_coe_inst_first_inf(
61
+ /* input */.load_trigger (1'b0 ),
62
+ /* input */.total_length (21 ),
63
+ /* input */.mem_file ("/home/wmy367/work/gem/axi_tdl/lib/tdl/auto_script/tmp/first_inf_R1282.coe" ),
64
+ /* axi_stream_inf.mirror */.mirror_inf (first_inf )
65
+ );
66
+ axis_sim_verify_by_coe #(
67
+ .RAM_DEPTH (113 ),
68
+ .VERIFY_KEEP ("OFF" ),
69
+ .VERIFY_USER ("OFF" )
70
+ )axis_sim_verify_by_coe_inst_end_inf(
71
+ /* input */.load_trigger (1'b0 ),
72
+ /* input */.total_length (113 ),
73
+ /* input */.mem_file ("/home/wmy367/work/gem/axi_tdl/lib/tdl/auto_script/tmp/end_inf_R1315.coe" ),
74
+ /* axi_stream_inf.mirror */.mirror_inf (end_inf )
75
+ );
76
+ //==========================================================================
77
+ //-------- expression ------------------------------------------------------
78
+ initial begin
79
+ clock = 1'b0;
80
+ #(100ns);
81
+ forever begin #(5.0ns);clock = ~clock;end;
82
+ end
83
+
84
+ initial begin
85
+ rst_n = 1'b0;
86
+ #(200ns);
87
+ rst_n = ~rst_n;
88
+ end
89
+
90
+ initial begin
91
+ first_inf_rdy_percetage_index = 0;
92
+ first_inf_rdy_percetage[0] = 50;
93
+ first_inf_rdy_percetage[1] = 100;
94
+ first_inf_rdy_percetage[2] = 30;
95
+ end
96
+
97
+ always@(posedge clock) begin
98
+ if(first_inf.axis_tvalid && first_inf.axis_tready && first_inf.axis_tlast)begin
99
+ if(first_inf_rdy_percetage_index>=(3-1))begin
100
+ first_inf_rdy_percetage_index <= 0;
101
+ end
102
+ else begin
103
+ first_inf_rdy_percetage_index <= (first_inf_rdy_percetage_index+1'b1);
104
+ end
105
+ end
106
+ else begin
107
+ first_inf_rdy_percetage_index <= first_inf_rdy_percetage_index;
108
+ end
109
+ end
110
+
111
+ always@(posedge clock) begin
112
+ if(~rst_n)begin
113
+ first_inf.axis_tready <= 1'b0;
114
+ end
115
+ else begin
116
+ first_inf.axis_tready <= ($urandom_range(0,99) <= first_inf_rdy_percetage[first_inf_rdy_percetage_index]);
117
+ end
118
+ end
119
+
120
+ initial begin
121
+ end_inf_rdy_percetage_index = 0;
122
+ end_inf_rdy_percetage[0] = 100;
123
+ end_inf_rdy_percetage[1] = 50;
124
+ end_inf_rdy_percetage[2] = 100;
125
+ end
126
+
127
+ always@(posedge clock) begin
128
+ if(end_inf.axis_tvalid && end_inf.axis_tready && end_inf.axis_tlast)begin
129
+ if(end_inf_rdy_percetage_index>=(3-1))begin
130
+ end_inf_rdy_percetage_index <= 0;
131
+ end
132
+ else begin
133
+ end_inf_rdy_percetage_index <= (end_inf_rdy_percetage_index+1'b1);
134
+ end
135
+ end
136
+ else begin
137
+ end_inf_rdy_percetage_index <= end_inf_rdy_percetage_index;
138
+ end
139
+ end
140
+
141
+ always@(posedge clock) begin
142
+ if(~rst_n)begin
143
+ end_inf.axis_tready <= 1'b0;
144
+ end
145
+ else begin
146
+ end_inf.axis_tready <= ($urandom_range(0,99) <= end_inf_rdy_percetage[end_inf_rdy_percetage_index]);
147
+ end
148
+ end
149
+
150
+ endmodule