axi_tdl 0.0.12 → 0.1.3

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 (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
@@ -0,0 +1,93 @@
1
+ /**********************************************
2
+ ______________ ______________
3
+ ______________ \ /\ /|\ /| ______________
4
+ ______________ \/ \/ | \/ | ______________
5
+ descript:
6
+ author : Young
7
+ Version: VERA.0.0
8
+ creaded: 2015/7/9 9:20:55
9
+ madified:
10
+ ***********************************************/
11
+ `timescale 1ns/1ps
12
+ module pipe_reg #(
13
+ parameter DSIZE = 8
14
+ )(
15
+ input clock ,
16
+ input rst_n ,
17
+ input wr_en ,
18
+ input [DSIZE-1:0] indata ,
19
+ input low_empty ,
20
+ output valid ,
21
+ output curr_empty ,
22
+ output sum_empty ,
23
+ output[DSIZE-1:0] outdata ,
24
+ output high_reload
25
+ );
26
+
27
+ /*
28
+ table
29
+ higher_vld(wr_en) curr_valid low_empty : next_valid next_data curr_empty sum_empty
30
+ 1 1 1 : 1 U 0 curr_empty | low_empty
31
+ 1 1 0 : 1 K 0 curr_empty | low_empty
32
+ 1 0 1 : 1 U 0 curr_empty | low_empty
33
+ 1 0 0 : 1 U 0 curr_empty | low_empty
34
+ 0 1 1 : 0 C 1 curr_empty | low_empty
35
+ 0 1 0 : 1 K 0 curr_empty | low_empty
36
+ 0 0 1 : 0 C 1 curr_empty | low_empty
37
+ 0 0 0 : 0 C 1 curr_empty | low_empty
38
+ */
39
+
40
+ reg data_vld;
41
+ reg[DSIZE-1:0] data_reg;
42
+ reg reload_reg;
43
+
44
+ always@(posedge clock/*,negedge rst_n*/)
45
+ if(~rst_n) data_vld <= 1'b0;
46
+ else
47
+ case({wr_en,data_vld,low_empty})
48
+ 3'b111,
49
+ 3'b110,
50
+ 3'b101,
51
+ 3'b100,
52
+ 3'b010: data_vld <= 1'b1;
53
+ default:data_vld <= 1'b0;
54
+ endcase
55
+
56
+ always@(posedge clock/*,negedge rst_n*/)
57
+ if(~rst_n) reload_reg <= 1'b0;
58
+ else
59
+ case({wr_en,data_vld,low_empty})
60
+ 3'b111: reload_reg <= 1'b1;
61
+ 3'b110: reload_reg <= 1'b0;
62
+ 3'b101: reload_reg <= 1'b1;
63
+ 3'b100: reload_reg <= 1'b1;
64
+ 3'b011: reload_reg <= 1'b1;
65
+ 3'b010: reload_reg <= 1'b0;
66
+ 3'b001: reload_reg <= 1'b1;
67
+ 3'b000: reload_reg <= 1'b1;
68
+ default:reload_reg <= 1'b0;
69
+ endcase
70
+
71
+ always@(posedge clock/*,negedge rst_n*/)
72
+ if(~rst_n) data_reg <= {DSIZE{1'b0}};
73
+ else
74
+ case({wr_en,data_vld,low_empty})
75
+ 3'b111: data_reg <= indata;
76
+ 3'b110: data_reg <= data_reg;
77
+ 3'b101: data_reg <= indata;
78
+ 3'b100: data_reg <= indata;
79
+ 3'b011: data_reg <= {DSIZE{1'b0}};
80
+ 3'b010: data_reg <= data_reg;
81
+ 3'b001: data_reg <= {DSIZE{1'b0}};
82
+ 3'b000: data_reg <= {DSIZE{1'b0}};
83
+ default:data_reg <= {DSIZE{1'b0}};
84
+ endcase
85
+
86
+ assign curr_empty = !data_vld;
87
+ assign outdata = data_reg;
88
+ assign valid = data_vld;
89
+ assign sum_empty = curr_empty | low_empty;
90
+ assign high_reload = reload_reg;
91
+
92
+ endmodule
93
+
@@ -0,0 +1,84 @@
1
+ /**********************************************
2
+ ______________ ______________
3
+ ______________ \ /\ /|\ /| ______________
4
+ ______________ \/ \/ | \/ | ______________
5
+ descript:
6
+ author : Young
7
+ Version: VERA.0.0
8
+ creaded: 2015/7/9 9:20:55
9
+ madified:
10
+ ***********************************************/
11
+ `timescale 1ns/1ps
12
+ module pipe_reg_2write_port #(
13
+ parameter DSIZE = 8
14
+ )(
15
+ input clock ,
16
+ input rst_n ,
17
+ input wr_en0 ,
18
+ input [DSIZE-1:0] indata0 ,
19
+ input wr_en1 ,
20
+ input [DSIZE-1:0] indata1 ,
21
+ input low_empty ,
22
+ output valid ,
23
+ output curr_empty ,
24
+ output sum_empty ,
25
+ output[DSIZE-1:0] outdata
26
+ );
27
+
28
+ wire[DSIZE-1:0] indata;
29
+ wire wr_en;
30
+
31
+ assign indata = wr_en0? indata0 : (wr_en1? indata0 :{DSIZE{1'b0}});
32
+ assign wr_en = wr_en0 | wr_en1;
33
+
34
+ /*
35
+ table
36
+ higher_vld(wr_en) curr_valid low_empty : next_valid next_data curr_empty sum_empty
37
+ 1 1 1 : 1 U 0 curr_empty | low_empty
38
+ 1 1 0 : 1 K 0 curr_empty | low_empty
39
+ 1 0 1 : 1 U 0 curr_empty | low_empty
40
+ 1 0 0 : 1 U 0 curr_empty | low_empty
41
+ 0 1 1 : 0 C 1 curr_empty | low_empty
42
+ 0 1 0 : 1 K 0 curr_empty | low_empty
43
+ 0 0 1 : 0 C 1 curr_empty | low_empty
44
+ 0 0 0 : 0 C 1 curr_empty | low_empty
45
+ */
46
+
47
+ reg data_vld;
48
+ reg[DSIZE-1:0] data_reg;
49
+
50
+ always@(posedge clock/*,negedge rst_n*/)
51
+ if(~rst_n) data_vld <= 1'b0;
52
+ else
53
+ case({wr_en,data_vld,low_empty})
54
+ 3'b111,
55
+ 3'b110,
56
+ 3'b101,
57
+ 3'b100,
58
+ 3'b010: data_vld <= 1'b1;
59
+ default:data_vld <= 1'b0;
60
+ endcase
61
+
62
+ always@(posedge clock/*,negedge rst_n*/)
63
+ if(~rst_n) data_reg <= {DSIZE{1'b0}};
64
+ else
65
+ case({wr_en,data_vld,low_empty})
66
+ 3'b111: data_reg <= indata;
67
+ 3'b110: data_reg <= data_reg;
68
+ 3'b101: data_reg <= indata;
69
+ 3'b100: data_reg <= indata;
70
+ 3'b011: data_reg <= {DSIZE{1'b0}};
71
+ 3'b010: data_reg <= data_reg;
72
+ 3'b001: data_reg <= {DSIZE{1'b0}};
73
+ 3'b000: data_reg <= {DSIZE{1'b0}};
74
+ default:data_reg <= {DSIZE{1'b0}};
75
+ endcase
76
+
77
+
78
+ assign curr_empty = !data_vld;
79
+ assign outdata = data_reg;
80
+ assign valid = data_vld;
81
+ assign sum_empty = curr_empty | low_empty;
82
+
83
+ endmodule
84
+
@@ -0,0 +1,54 @@
1
+ /**********************************************
2
+ ______________________________________________
3
+ _______ ___ ___ ___ __ _ _
4
+ _______ | | | |\ /| |___ | \ | /_\
5
+ _______ |___ |___| | \/ | |___ |__/ | / \
6
+ _______________________________________________
7
+ descript:
8
+ author : Young
9
+ Version: VERB.0.0
10
+ create a module for it
11
+ creaded: 2015/10/16 10:50:52
12
+ madified:
13
+ ***********************************************/
14
+ `timescale 1ns/1ps
15
+ (* data_inf = "true" *)
16
+ module clock_rst_verb #(
17
+ parameter bit ACTIVE = 1,
18
+ parameter longint PERIOD_CNT = 0,
19
+ parameter RST_HOLD = 5,
20
+ parameter real FreqM = 100
21
+ )(
22
+ output clock,
23
+ output rst_x
24
+ );
25
+
26
+ bit clk_pause = 1;
27
+ bit clock_reg;
28
+ bit rst_reg;
29
+
30
+ longint ccnt = 0;
31
+
32
+ initial begin
33
+ clk_pause = 1;
34
+ clock_reg = 0;
35
+ rst_reg = ACTIVE;
36
+ #(1000/FreqM*2);
37
+ clk_pause = 0;
38
+ repeat(RST_HOLD)
39
+ @(posedge clock_reg);
40
+ rst_reg = ~rst_reg;
41
+ end
42
+
43
+ always #(1000/FreqM/2) begin
44
+ if(clk_pause == 0 && (PERIOD_CNT==0 || ccnt < PERIOD_CNT))
45
+ clock_reg = ~clock_reg;
46
+ end
47
+
48
+ always@(posedge clock)
49
+ ccnt <= ccnt + 1;
50
+
51
+ assign clock = clock_reg;
52
+ assign rst_x = rst_reg;
53
+
54
+ endmodule
@@ -0,0 +1,49 @@
1
+ /**********************************************
2
+ ______________ ______________
3
+ ______________ \ /\ /|\ /| ______________
4
+ ______________ \/ \/ | \/ | ______________
5
+ descript:
6
+ author : Young
7
+ Version: VERA.0.0
8
+ creaded: 2015/12/1 14:28:31
9
+ madified:
10
+ ***********************************************/
11
+ `timescale 1ns/1ps
12
+ module latency_long_tb;
13
+
14
+ bit clock = 0;
15
+ bit rst_n = 0;
16
+
17
+ always #5 clock = ~clock;
18
+
19
+ initial begin
20
+ repeat(10) @(posedge clock);
21
+ rst_n = 1;
22
+ end
23
+
24
+ bit d;
25
+
26
+ initial begin
27
+ d = 0 ;
28
+ wait(rst_n);
29
+ repeat(20) @(posedge clock);
30
+ d = 1;
31
+ repeat(1) @(posedge clock);
32
+ d = 0;
33
+ end
34
+
35
+ latency_long #(
36
+ .LAT (5 )
37
+ )latency_long_inst(
38
+ .clock (clock ),
39
+ .rst_n (rst_n ),
40
+ .d (d ),
41
+ .q ( )
42
+ );
43
+
44
+
45
+ endmodule
46
+
47
+
48
+
49
+
@@ -0,0 +1,49 @@
1
+ /**********************************************
2
+ ______________ ______________
3
+ ______________ \ /\ /|\ /| ______________
4
+ ______________ \/ \/ | \/ | ______________
5
+ descript:
6
+ author : Young
7
+ Version: VERA.0.0
8
+ creaded: 2015/12/1 14:28:31
9
+ madified:
10
+ ***********************************************/
11
+ `timescale 1ns/1ps
12
+ module latency_long_tb;
13
+
14
+ bit clock = 0;
15
+ bit rst_n = 0;
16
+
17
+ always #5 clock = ~clock;
18
+
19
+ initial begin
20
+ repeat(10) @(posedge clock);
21
+ rst_n = 1;
22
+ end
23
+
24
+ bit d;
25
+
26
+ initial begin
27
+ d = 0 ;
28
+ wait(rst_n);
29
+ repeat(20) @(posedge clock);
30
+ d = 1;
31
+ repeat(10) @(posedge clock);
32
+ d = 0;
33
+ end
34
+
35
+ latency_long #(
36
+ .LAT (5 )
37
+ )latency_long_inst(
38
+ .clock (clock ),
39
+ .rst_n (rst_n ),
40
+ .d (d ),
41
+ .q ( )
42
+ );
43
+
44
+
45
+ endmodule
46
+
47
+
48
+
49
+
@@ -1,7 +1,7 @@
1
1
 
2
2
 
3
3
  class Logic ## EDGE METHOD
4
- def raising(cnt:1,clock:nil,reset:nil)
4
+ def raising(cnt:1,clock:nil,reset: 1.b1 )
5
5
 
6
6
  # if cnt==1 && clock == nil && reset==nil && @raising_record
7
7
  # return @raising_record
@@ -232,10 +232,21 @@ class AutoGenSdl
232
232
  end
233
233
 
234
234
  def gen_file
235
- @autof = File.open(@autof_name,"w") do |f|
236
- f.puts gen_head
237
- f.puts gen_content
238
- # f.puts "sm.origin_sv = true"
235
+ unless File.exist?(@autof_name)
236
+ @autof = File.open(@autof_name,"w") do |f|
237
+ f.print gen_head
238
+ f.print gen_content
239
+ # f.puts "sm.origin_sv = true"
240
+ end
241
+ else
242
+ _old_str = File.open(@autof_name).read
243
+ _new_str = gen_head+gen_content
244
+ if _old_str != _new_str
245
+ @autof = File.open(@autof_name,"w") do |f|
246
+ f.print _new_str
247
+ # f.puts "sm.origin_sv = true"
248
+ end
249
+ end
239
250
  end
240
251
  end
241
252
 
@@ -255,7 +266,7 @@ self.path = File.expand_path(__FILE__)
255
266
  end
256
267
 
257
268
  def gen_content
258
- (@param_port_inst+@signals_ports_inst+@inf_ports_inst + ["end"]).join("\n")
269
+ (@param_port_inst+@signals_ports_inst+@inf_ports_inst + ["end\n\n"]).join("\n")
259
270
  end
260
271
 
261
272
 
@@ -66,7 +66,34 @@ class Axi4
66
66
  # next unless e.is_a? Axi4
67
67
  if e.is_a? Axi4
68
68
  e.band_params_from(self)
69
- @interconnect_up_streams << e
69
+
70
+ ## e is a Vector
71
+ if e.dimension[0].is_a?(Integer) && e.dimension[0] > 1
72
+ # require_hdl 'axi4_direct_B1.sv'
73
+ require_hdl 'axi4_direct_verc.sv'
74
+
75
+ e.dimension[0].times do |xi|
76
+ _ne = e.copy(name: "#{e.inst_name}_toM_#{xi}")
77
+ # _ne << e[xi]
78
+ # belong_to_module.Instance('axi4_direct_B1',"axi4_direc_#{e.inst_name}_toM_#{xi}") do |h|
79
+ # # h.param.MODE mode_str #//ONLY_READ to BOTH,ONLY_WRITE to BOTH,BOTH to BOTH,BOTH to ONLY_READ,BOTH to ONLY_WRITE
80
+ # h.slaver_inf e[xi]
81
+ # h.master_inf _ne
82
+ # end
83
+
84
+ belong_to_module.Instance('axi4_direct_verc',"axi4_direc_#{e.inst_name}_toM_#{xi}") do |h|
85
+ h.param.MODE "#{_ne.mode}_to_#{_ne.mode}" # //ONLY_READ to BOTH,ONLY_WRITE to BOTH,BOTH to BOTH,BOTH to ONLY_READ,BOTH to ONLY_WRITE
86
+ h.param.SLAVER_MODE _ne.mode # //
87
+ h.param.MASTER_MODE _ne.mode # //
88
+ h.slaver_inf e[xi]
89
+ h.master_inf _ne
90
+ end
91
+
92
+ @interconnect_up_streams << _ne
93
+ end
94
+ else
95
+ @interconnect_up_streams << e
96
+ end
70
97
  else
71
98
  raise TdlError.new("When use `<<` for axi4's M2S ,argvs must be axi4 too.\nOtherwise use `naxi4_mix_interconnect_M2S` directly")
72
99
  end
@@ -218,16 +245,27 @@ class Axi4
218
245
  else
219
246
  mode_str = "ONLY_READ_to_BOTH"
220
247
  end
221
- # Axi4.axi4_direct_a1(mode:mode_str,slaver:lo,master:"#{sub_name}[#{index}]",belong_to_module:belong_to_module)
222
- belong_to_module.Instance('axi4_direct_B1',"axi4_direct_a1_long_to_wide_#{sub_name}_#{globle_random_name_flag()}") do |h|
223
- # h.param.MODE mode_str #//ONLY_READ to BOTH,ONLY_WRITE to BOTH,BOTH to BOTH,BOTH to ONLY_READ,BOTH to ONLY_WRITE
224
- h.slaver lo
225
- h.master "#{sub_name}[#{index}]".to_nq
248
+ # require_hdl 'axi4_direct_B1.sv'
249
+ # # Axi4.axi4_direct_a1(mode:mode_str,slaver:lo,master:"#{sub_name}[#{index}]",belong_to_module:belong_to_module)
250
+ # belong_to_module.Instance('axi4_direct_B1',"axi4_direct_a1_long_to_wide_#{sub_name}_#{globle_random_name_flag()}") do |h|
251
+ # # h.param.MODE mode_str #//ONLY_READ to BOTH,ONLY_WRITE to BOTH,BOTH to BOTH,BOTH to ONLY_READ,BOTH to ONLY_WRITE
252
+ # h.slaver_inf lo
253
+ # h.master_inf "#{sub_name}[#{index}]".to_nq
254
+ # end
255
+
256
+ require_hdl 'axi4_direct_verc.sv'
257
+ belong_to_module.Instance('axi4_direct_verc',"axi4_direct_a1_long_to_wide_#{sub_name}_#{globle_random_name_flag()}") do |h|
258
+ h.param.MODE mode_str # //ONLY_READ to BOTH,ONLY_WRITE to BOTH,BOTH to BOTH,BOTH to ONLY_READ,BOTH to ONLY_WRITE
259
+ h.param.SLAVER_MODE (wr_lg ? "ONLY_WRITE" : "ONLY_READ") # //
260
+ h.param.MASTER_MODE "BOTH" # //
261
+ h.slaver_inf lo
262
+ h.master_inf "#{sub_name}[#{index}]".to_nq
226
263
  end
227
264
 
228
265
  else
229
266
  los = short_only.pop
230
267
  @_long_slim_to_wide.delete los
268
+ require_hdl 'axi4_combin_wr_rd_batch.sv'
231
269
  if wr_lg
232
270
  # Axi4.axi4_combin_wr_rd_batch(wr_slaver:lo,rd_slaver:los,master:"#{sub_name}[#{index}]",belong_to_module:belong_to_module)
233
271
  belong_to_module.Instance(:axi4_combin_wr_rd_batch,"axi4_combin_wr_rd_batch_inst_#{sub_name}") do |h|
@@ -250,10 +288,11 @@ class Axi4
250
288
  @_long_slim_to_wide.each do |e|
251
289
  mode_str = e.mode + "_to_BOTH"
252
290
  # Axi4.axi4_direct_a1(mode:mode_str,slaver:e,master:"#{sub_name}[#{index}]",belong_to_module:belong_to_module)
291
+ require_hdl 'axi4_direct_B1.sv'
253
292
  belong_to_module.Instance('axi4_direct_B1',"axi4_direct_a1_inst_long_to_wide_#{sub_name}") do |h|
254
293
  # h.param.MODE mode_str #//ONLY_READ to BOTH,ONLY_WRITE to BOTH,BOTH to BOTH,BOTH to ONLY_READ,BOTH to ONLY_WRITE
255
- h.slaver e
256
- h.master "#{sub_name}[#{index}]".to_nq
294
+ h.slaver_inf e
295
+ h.master_inf "#{sub_name}[#{index}]".to_nq
257
296
  end
258
297
  index = index + 1
259
298
  end
@@ -309,8 +348,8 @@ class Axi4
309
348
  "\naxi4_direct_B1 /* #(
310
349
  .MODE (\"#{_str}\") //ONLY_READ to BOTH,ONLY_WRITE to BOTH,BOTH to BOTH,BOTH to ONLY_READ,BOTH to ONLY_WRITE
311
350
  )*/ iterconnect_direct_A1_#{name}_instMM(
312
- /* axi_inf.slaver */ .slaver (sub_axi_#{name}_inf[0]),
313
- /* axi_inf.master */ .master (#{name})
351
+ /* axi_inf.slaver */ .slaver_inf (sub_axi_#{name}_inf[0]),
352
+ /* axi_inf.master */ .master_inf (#{name})
314
353
  );\n"
315
354
  end
316
355