axi_tdl 0.1.0 → 0.1.8

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 (146) 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.rb +1 -0
  6. data/lib/axi/AXI4/axi4_dpram_cache.sv +10 -10
  7. data/lib/axi/AXI4/axi4_rd_burst_track.sv +2 -1
  8. data/lib/axi/AXI4/axi4_wr_burst_track.sv +2 -1
  9. data/lib/axi/AXI4/axis_to_axi4_wr.sv +9 -9
  10. data/lib/axi/AXI4/odata_pool_axi4_A3.sv +7 -0
  11. data/lib/axi/AXI4/packet_partition/axi4_partition_rd_verb.sv +5 -5
  12. data/lib/axi/AXI4/packet_partition/data_inf_partition.rb +8 -4
  13. data/lib/axi/AXI4/packet_partition/data_inf_partition.sv +6 -6
  14. data/lib/axi/AXI4/wide_axis_to_axi4_wr.sv +12 -12
  15. data/lib/axi/AXI_stream/axi_stream_split_channel.sv +154 -0
  16. data/lib/axi/AXI_stream/axis_head_cut_verc.sv +242 -0
  17. data/lib/axi/AXI_stream/axis_insert_copy.sv +79 -0
  18. data/lib/axi/AXI_stream/axis_pipe_sync_seam.sv +48 -0
  19. data/lib/axi/AXI_stream/axis_rom_contect_sim.sv +113 -0
  20. data/lib/axi/AXI_stream/axis_sim_master_model.rb +2 -0
  21. data/lib/axi/AXI_stream/axis_sim_master_model.sv +46 -0
  22. data/lib/axi/AXI_stream/axis_split_channel_verb.sv +62 -0
  23. data/lib/axi/AXI_stream/data_width/axis_width_convert_verb.sv +50 -0
  24. data/lib/axi/AXI_stream/packet_fifo/axi_stream_packet_long_fifo.sv +2 -0
  25. data/lib/axi/AXI_stream/parse_big_field_table_verb.sv +5 -3
  26. data/lib/axi/common/common_ram_sim_wrapper.sv +1 -1
  27. data/lib/axi/common/common_ram_wrapper.sv +1 -1
  28. data/lib/axi/common/test_write_mem.sv +1 -1
  29. data/lib/axi/data_interface/data_inf_c/data_c_pipe_sync_seam.sv +13 -13
  30. data/lib/axi/data_interface/data_inf_c/data_c_sim_master_model.sv +14 -11
  31. data/lib/axi/platform_ip/fifo_36kb_long.sv +1 -1
  32. data/lib/axi/platform_ip/long_fifo_verb.sv +1 -1
  33. data/lib/axi/platform_ip/wide_fifo.sv +1 -1
  34. data/lib/axi/platform_ip/xilinx_fifo_verb.sv +1 -1
  35. data/lib/axi/platform_ip/xilinx_fifo_verc.sv +2 -1
  36. data/lib/axi/techbench/tb_axi_stream_split_channel.rb +2 -1
  37. data/lib/axi/techbench/tb_axi_stream_split_channel.sv +46 -45
  38. data/lib/axi_tdl.rb +31 -1
  39. data/lib/axi_tdl/version.rb +1 -1
  40. data/lib/public_atom_module/CheckPClock.sv +53 -0
  41. data/lib/public_atom_module/LICENSE.md +674 -0
  42. data/lib/public_atom_module/altera_xilinx_always_block_sw.rb +57 -0
  43. data/lib/public_atom_module/bits_decode.sv +71 -0
  44. data/lib/public_atom_module/bits_decode_verb.sv +71 -0
  45. data/lib/public_atom_module/bits_decode_verb_sdl.rb +24 -0
  46. data/lib/public_atom_module/broaden.v +43 -0
  47. data/lib/public_atom_module/broaden_and_cross_clk.v +47 -0
  48. data/lib/public_atom_module/ceiling.v +39 -0
  49. data/lib/public_atom_module/ceiling_A1.v +42 -0
  50. data/lib/public_atom_module/clock_rst.sv +64 -0
  51. data/lib/public_atom_module/cross_clk_sync.v +37 -0
  52. data/lib/public_atom_module/edge_generator.v +50 -0
  53. data/lib/public_atom_module/flooring.v +36 -0
  54. data/lib/public_atom_module/latch_data.v +30 -0
  55. data/lib/public_atom_module/latency.v +48 -0
  56. data/lib/public_atom_module/latency_dynamic.v +83 -0
  57. data/lib/public_atom_module/latency_long.v +84 -0
  58. data/lib/public_atom_module/latency_verb.v +52 -0
  59. data/lib/public_atom_module/once_event.sv +65 -0
  60. data/lib/public_atom_module/pipe_reg.v +93 -0
  61. data/lib/public_atom_module/pipe_reg_2write_ports.v +84 -0
  62. data/lib/public_atom_module/sim/clock_rst_verb.sv +54 -0
  63. data/lib/public_atom_module/sim/clock_rst_verc.sv +69 -0
  64. data/lib/public_atom_module/sim/latency_long_tb.sv +49 -0
  65. data/lib/public_atom_module/sim/latency_long_tb.sv.bak +49 -0
  66. data/lib/public_atom_module/sim_system_pkg.sv +4 -0
  67. data/lib/public_atom_module/synth_system_pkg.sv +4 -0
  68. data/lib/tdl/Logic/logic_edge.rb +1 -1
  69. data/lib/tdl/auto_script/autogensdl.rb +2 -3
  70. data/lib/tdl/auto_script/import_hdl.rb +40 -5
  71. data/lib/tdl/axi4/axi4_interconnect_verb.rb +47 -10
  72. data/lib/tdl/class_hdl/hdl_always_comb.rb +4 -1
  73. data/lib/tdl/class_hdl/hdl_always_ff.rb +3 -3
  74. data/lib/tdl/class_hdl/hdl_assign.rb +7 -1
  75. data/lib/tdl/class_hdl/hdl_block_ifelse.rb +7 -7
  76. data/lib/tdl/class_hdl/hdl_foreach.rb +2 -2
  77. data/lib/tdl/class_hdl/hdl_function.rb +4 -4
  78. data/lib/tdl/class_hdl/hdl_generate.rb +5 -2
  79. data/lib/tdl/class_hdl/hdl_initial.rb +25 -3
  80. data/lib/tdl/class_hdl/hdl_module_def.rb +9 -6
  81. data/lib/tdl/class_hdl/hdl_package.rb +45 -0
  82. data/lib/tdl/class_hdl/hdl_redefine_opertor.rb +99 -27
  83. data/lib/tdl/class_hdl/hdl_struct.rb +2 -2
  84. data/lib/tdl/elements/Reset.rb +5 -9
  85. data/lib/tdl/elements/clock.rb +5 -9
  86. data/lib/tdl/elements/data_inf.rb +0 -17
  87. data/lib/tdl/elements/logic.rb +9 -31
  88. data/lib/tdl/elements/mail_box.rb +6 -1
  89. data/lib/tdl/elements/originclass.rb +17 -47
  90. data/lib/tdl/elements/parameter.rb +5 -6
  91. data/lib/tdl/examples/11_test_unit/dve.tcl +6 -153
  92. data/lib/tdl/examples/11_test_unit/exp_test_unit.sv +2 -2
  93. data/lib/tdl/examples/11_test_unit/exp_test_unit_sim.sv +9 -0
  94. data/lib/tdl/examples/11_test_unit/modules/sub_md0.sv +2 -2
  95. data/lib/tdl/examples/11_test_unit/modules/sub_md1.sv +2 -2
  96. data/lib/tdl/examples/11_test_unit/tb_exp_test_unit.sv +1 -1
  97. data/lib/tdl/examples/11_test_unit/tb_exp_test_unit_sim.sv +41 -0
  98. data/lib/tdl/examples/11_test_unit/tu0.sv +2 -1
  99. data/lib/tdl/examples/1_define_module/exmple_md.sv +1 -1
  100. data/lib/tdl/examples/2_hdl_class/tmp/always_comb_test.sv +3 -3
  101. data/lib/tdl/examples/2_hdl_class/tmp/always_ff_test.sv +3 -3
  102. data/lib/tdl/examples/2_hdl_class/tmp/case_test.sv +3 -3
  103. data/lib/tdl/examples/2_hdl_class/tmp/module_instance_test.sv +1 -1
  104. data/lib/tdl/examples/2_hdl_class/tmp/simple_assign_test.sv +3 -3
  105. data/lib/tdl/examples/2_hdl_class/tmp/state_case_test.sv +3 -3
  106. data/lib/tdl/examples/2_hdl_class/tmp/test_inst_sugar.sv +1 -1
  107. data/lib/tdl/examples/2_hdl_class/tmp/test_module.sv +3 -3
  108. data/lib/tdl/examples/2_hdl_class/tmp/test_module_port.sv +2 -2
  109. data/lib/tdl/examples/2_hdl_class/tmp/test_module_var.sv +7 -7
  110. data/lib/tdl/examples/2_hdl_class/tmp/test_package.sv +4 -3
  111. data/lib/tdl/examples/2_hdl_class/tmp/test_vcs_string.sv +1 -1
  112. data/lib/tdl/examples/3_hdl_sdl_instance/main_md.sv +2 -2
  113. data/lib/tdl/examples/3_hdl_sdl_instance/sdl_md.sv +1 -1
  114. data/lib/tdl/examples/6_module_with_interface/example_interface.sv +8 -8
  115. data/lib/tdl/examples/6_module_with_interface/inf_collect.sv +9 -9
  116. data/lib/tdl/examples/7_module_with_package/body_package.sv +4 -3
  117. data/lib/tdl/examples/7_module_with_package/example_pkg.sv +1 -1
  118. data/lib/tdl/examples/7_module_with_package/head_package.sv +4 -3
  119. data/lib/tdl/examples/8_top_module/dve.tcl +6 -0
  120. data/lib/tdl/examples/8_top_module/tb_test_top.sv +1 -1
  121. data/lib/tdl/examples/8_top_module/tb_test_top_sim.sv +29 -0
  122. data/lib/tdl/examples/8_top_module/test_top.sv +1 -1
  123. data/lib/tdl/examples/8_top_module/test_top_sim.sv +9 -0
  124. data/lib/tdl/examples/9_itegration/clock_manage/test_clock_bb.sv +2 -1
  125. data/lib/tdl/examples/9_itegration/dve.tcl +155 -2
  126. data/lib/tdl/examples/9_itegration/tb_test_tttop.sv +1 -1
  127. data/lib/tdl/examples/9_itegration/tb_test_tttop_sim.sv +1 -1
  128. data/lib/tdl/examples/9_itegration/test_tttop.sv +7 -38
  129. data/lib/tdl/examples/9_itegration/test_tttop_sim.sv +38 -7
  130. data/lib/tdl/exlib/axis_verify.rb +4 -3
  131. data/lib/tdl/exlib/constraints_verb.rb +1 -0
  132. data/lib/tdl/exlib/itegration_verb.rb +47 -41
  133. data/lib/tdl/rebuild_ele/ele_base.rb +15 -10
  134. data/lib/tdl/sdlmodule/sdlmodule.rb +117 -51
  135. data/lib/tdl/sdlmodule/sdlmodule_arraychain.rb +1 -1
  136. data/lib/tdl/sdlmodule/sdlmodule_draw.rb +2 -2
  137. data/lib/tdl/sdlmodule/sdlmodule_instance.rb +3 -0
  138. data/lib/tdl/sdlmodule/sdlmodule_port_define.rb +6 -6
  139. data/lib/tdl/sdlmodule/sdlmodule_varible.rb +6 -6
  140. data/lib/tdl/sdlmodule/test_unit_module.rb +6 -0
  141. data/lib/tdl/sdlmodule/top_module.rb +4 -0
  142. data/lib/tdl/tdl.rb +1 -11
  143. data/lib/tdl/tdlerror/tdlerror.rb +1 -1
  144. metadata +43 -5
  145. data/CODE_OF_CONDUCT.md +0 -74
  146. data/lib/axi/AXI_stream/axis_length_split_writh_user.sv +0 -87
@@ -0,0 +1,37 @@
1
+ /**********************************************
2
+ ______________ ______________
3
+ ______________ \ /\ /|\ /| ______________
4
+ ______________ \/ \/ | \/ | ______________
5
+ descript:
6
+ author : Young
7
+ Version:
8
+ creaded: 2015/5/8 17:05:00
9
+ madified:
10
+ ***********************************************/
11
+ `timescale 1ns/1ps
12
+ module cross_clk_sync #(
13
+ parameter LAT = 2,
14
+ parameter DSIZE = 1
15
+ )(
16
+ input clk,
17
+ input rst_n,
18
+ input [DSIZE-1:0] d,
19
+ output[DSIZE-1:0] q
20
+ );
21
+
22
+ reg [DSIZE-1:0] ltc [LAT-1:0];
23
+
24
+ always@(posedge clk/*,negedge rst_n*/)begin:GEN_LAT
25
+ integer II;
26
+ if(~rst_n)begin
27
+ for(II=0;II<LAT;II=II+1)
28
+ ltc[II] <= {DSIZE{1'b0}};
29
+ end else begin
30
+ ltc[0] <= d;
31
+ for(II=1;II<LAT;II=II+1)
32
+ ltc[II] <= ltc[II-1];
33
+ end end
34
+
35
+ assign q = ltc[LAT-1];
36
+
37
+ endmodule
@@ -0,0 +1,50 @@
1
+ /**********************************************
2
+ ______________ ______________
3
+ ______________ \ /\ /|\ /| ______________
4
+ ______________ \/ \/ | \/ | ______________
5
+ descript:
6
+ author : Young
7
+ Version:
8
+ creaded:
9
+ madified:
10
+ ***********************************************/
11
+ module edge_generator #(
12
+ parameter MODE = "NORMAL" // FAST NORMAL BEST
13
+ )(
14
+ input clk,
15
+ input rst_n,
16
+ input in,
17
+ output raising,
18
+ output falling
19
+ );
20
+
21
+ reg in_d0;
22
+ reg in_d1;
23
+ reg raising_reg;
24
+ reg falling_reg;
25
+
26
+ always@(posedge clk/*,negedge rst_n*/)begin
27
+ if(~rst_n)begin
28
+ in_d0 <= 1'b0;
29
+ in_d1 <= 1'b0;
30
+ raising_reg <= 1'b0;
31
+ falling_reg <= 1'b0;
32
+ end else begin
33
+ in_d0 <= in;
34
+ in_d1 <= in_d0;
35
+ if(MODE == "NORMAL")begin
36
+ raising_reg <= {in_d0,in} == 2'b01 ;
37
+ falling_reg <= {in_d0,in} == 2'b10 ;
38
+ end else if(MODE == "BEST")begin
39
+ raising_reg <= {in_d1,in_d0} == 2'b01 ;
40
+ falling_reg <= {in_d1,in_d0} == 2'b10 ;
41
+ end else begin
42
+ raising_reg <= 1'b0;
43
+ falling_reg <= 1'b0;
44
+ end end end
45
+
46
+
47
+ assign raising = (MODE == "FAST")? {in_d0,in} == 2'b01 : raising_reg;
48
+ assign falling = (MODE == "FAST")? {in_d0,in} == 2'b10 : falling_reg;
49
+
50
+ endmodule
@@ -0,0 +1,36 @@
1
+ /**********************************************
2
+ ______________ ______________
3
+ ______________ \ /\ /|\ /| ______________
4
+ ______________ \/ \/ | \/ | ______________
5
+ descript:
6
+ author : Young
7
+ Version: VERA.0.0
8
+ creaded: 2015/7/23 13:56:28
9
+ madified:2015/10/30 10:56:34
10
+ ***********************************************/
11
+ `timescale 1ns/1ps
12
+ module flooring #(
13
+ parameter DSIZE = 16,
14
+ parameter CSIZE = 4, //must smaller than DSIZE
15
+ parameter OSIZE = 8, //must not bigger than DSIZE-CSIZE
16
+ parameter SEQUENTIAL = "TRUE"
17
+ )(
18
+ input clock ,
19
+ input [DSIZE-1:0] indata ,
20
+ output[OSIZE-1:0] outdata
21
+ );
22
+
23
+
24
+ reg [OSIZE-1:0] result;
25
+ wire[OSIZE-1:0] cm_result;
26
+
27
+ assign cm_result = (indata[DSIZE-1-:CSIZE] == {CSIZE{1'b0}})? indata[DSIZE-1-CSIZE-:OSIZE] : {OSIZE{1'b1}};
28
+
29
+ always@(posedge clock)
30
+ result <= cm_result;
31
+
32
+
33
+ assign outdata = (SEQUENTIAL == "TRUE")? result : (SEQUENTIAL == "FALSE")? cm_result : {OSIZE{1'b0}};
34
+
35
+ endmodule
36
+
@@ -0,0 +1,30 @@
1
+ /**********************************************
2
+ ______________ ______________
3
+ ______________ \ /\ /|\ /| ______________
4
+ ______________ \/ \/ | \/ | ______________
5
+ descript:
6
+ author : Young
7
+ Version: VERA.0.0
8
+ creaded: 2015/6/5 17:26:19
9
+ madified:
10
+ ***********************************************/
11
+ `timescale 1ns/1ps
12
+ module latch_data #(
13
+ parameter DSIZE = 8
14
+ )(
15
+ input enable,
16
+ input [DSIZE-1:0] in,
17
+ output[DSIZE-1:0] out
18
+ );
19
+
20
+
21
+ reg [DSIZE-1:0] data;
22
+
23
+ always@(enable)
24
+ if(enable)
25
+ data = in;
26
+ else data = data;
27
+
28
+ assign out = data;
29
+
30
+ endmodule
@@ -0,0 +1,48 @@
1
+ /**********************************************
2
+ ______________ ______________
3
+ ______________ \ /\ /|\ /| ______________
4
+ ______________ \/ \/ | \/ | ______________
5
+ descript:
6
+ author : Young
7
+ Version: VERA.0.1 : 2015/12/25 15:53:03
8
+ supply LAT = 0
9
+ creaded: 2015/5/8 17:05:00
10
+ madified:
11
+ ***********************************************/
12
+ `timescale 1ns/1ps
13
+ module latency #(
14
+ parameter LAT = 2,
15
+ parameter DSIZE = 1
16
+ )(
17
+ input clk,
18
+ input rst_n,
19
+ input [DSIZE-1:0] d,
20
+ output[DSIZE-1:0] q
21
+ );
22
+
23
+ reg [DSIZE-1:0] ltc [LAT-1:0];
24
+
25
+ generate
26
+ if(LAT > 0)begin
27
+ always@(posedge clk/*,negedge rst_n*/)begin:GEN_LAT
28
+ integer II;
29
+ if(~rst_n)begin
30
+ for(II=0;II<LAT;II=II+1)
31
+ ltc[II] <= {DSIZE{1'b0}};
32
+ end else begin
33
+ ltc[0] <= d;
34
+ for(II=1;II<LAT;II=II+1)
35
+ ltc[II] <= ltc[II-1];
36
+ end end
37
+
38
+ assign q = ltc[LAT-1];
39
+
40
+ end else begin
41
+
42
+ assign q = d;
43
+
44
+ end
45
+ endgenerate
46
+
47
+
48
+ endmodule
@@ -0,0 +1,83 @@
1
+ /**********************************************
2
+ ______________ ______________
3
+ ______________ \ /\ /|\ /| ______________
4
+ ______________ \/ \/ | \/ | ______________
5
+ descript:
6
+ author : Young
7
+ Version: VERA.0.0
8
+ creaded: 2016/4/1 上午10:45:19
9
+ madified:
10
+ ***********************************************/
11
+ `timescale 1ns/1ps
12
+ module latency_dynamic #(
13
+ parameter LSIZE = 10
14
+ )(
15
+ input clk ,
16
+ input rst_n ,
17
+ input [LSIZE-1:0] lat ,
18
+ input d ,
19
+ output q
20
+ );
21
+
22
+ wire clock;
23
+ assign clock = clk;
24
+
25
+ wire d_falling;
26
+ wire d_raising;
27
+
28
+ edge_generator #(
29
+ .MODE ("FAST") // FAST NORMAL BEST
30
+ )edge_generator_inst(
31
+ .clk (clock ),
32
+ .rst_n (rst_n ),
33
+ .in (d ),
34
+ .raising (d_raising ),
35
+ .falling (d_falling )
36
+ );
37
+
38
+
39
+
40
+ reg [LSIZE-1:0] fedge_cnt;
41
+ reg [LSIZE-1:0] redge_cnt;
42
+
43
+ always@(posedge clock/*,negedge rst_n*/)begin
44
+ if(~rst_n) fedge_cnt <= {LSIZE{1'b0}};
45
+ else begin
46
+ if(fedge_cnt == {LSIZE{1'b0}})begin
47
+ if(d_falling)
48
+ fedge_cnt <= 10'd1;
49
+ else fedge_cnt <= {LSIZE{1'b0}};
50
+ end else begin
51
+ if(fedge_cnt == lat-1'b1)
52
+ fedge_cnt <= {LSIZE{1'b0}};
53
+ else fedge_cnt <= fedge_cnt + 1'd1;
54
+ end end end
55
+
56
+ always@(posedge clock/*,negedge rst_n*/)begin
57
+ if(~rst_n) redge_cnt <= {LSIZE{1'b0}};
58
+ else begin
59
+ if(redge_cnt == {LSIZE{1'b0}})begin
60
+ if(d_raising)
61
+ redge_cnt <= 10'd1;
62
+ else redge_cnt <= {LSIZE{1'b0}};
63
+ end else begin
64
+ if(redge_cnt == lat-1'b1)
65
+ redge_cnt <= {LSIZE{1'b0}};
66
+ else redge_cnt <= redge_cnt + 1'd1;
67
+ end end end
68
+
69
+ reg q_reg;
70
+
71
+ always@(posedge clock/*,negedge rst_n*/)begin
72
+ if(~rst_n) q_reg <= 1'b0;
73
+ else if(fedge_cnt == lat-1'b1)
74
+ q_reg <= 1'b0;
75
+ else if(redge_cnt == lat-1'b1)
76
+ q_reg <= 1'b1;
77
+ else q_reg <= q_reg;
78
+ end
79
+
80
+
81
+ assign q = q_reg;
82
+
83
+ endmodule
@@ -0,0 +1,84 @@
1
+ /**********************************************
2
+ ______________ ______________
3
+ ______________ \ /\ /|\ /| ______________
4
+ ______________ \/ \/ | \/ | ______________
5
+ descript:
6
+ author : Young
7
+ Version: VERA.0.0
8
+ creaded: 2015/12/1 13:44:09
9
+ madified:
10
+ ***********************************************/
11
+ `timescale 1ns/1ps
12
+ module latency_long #(
13
+ parameter LAT = 100
14
+ )(
15
+ input clock ,
16
+ input rst_n ,
17
+ input d ,
18
+ output q
19
+ );
20
+
21
+ wire d_falling;
22
+ wire d_raising;
23
+
24
+ edge_generator #(
25
+ .MODE ("FAST") // FAST NORMAL BEST
26
+ )edge_generator_inst(
27
+ .clk (clock ),
28
+ .rst_n (rst_n ),
29
+ .in (d ),
30
+ .raising (d_raising ),
31
+ .falling (d_falling )
32
+ );
33
+
34
+
35
+ localparam PLAT = LAT-1;
36
+ localparam DSIZE = (LAT<=64)? 6 : (LAT<=128)? 7 : (LAT<=256)? 8 :
37
+ (LAT<=512)? 9 : (LAT<=1024)? 10 : (LAT<=2048)? 11 : (LAT<=4096)? 12 : 32;
38
+
39
+ reg [DSIZE-1:0] fedge_cnt;
40
+ reg [DSIZE-1:0] redge_cnt;
41
+
42
+ always@(posedge clock/*,negedge rst_n*/)begin
43
+ if(~rst_n) fedge_cnt <= {DSIZE{1'b0}};
44
+ else begin
45
+ if(fedge_cnt == {DSIZE{1'b0}})begin
46
+ if(d_falling)
47
+ fedge_cnt <= 10'd1;
48
+ else fedge_cnt <= {DSIZE{1'b0}};
49
+ end else begin
50
+ if(fedge_cnt == PLAT)
51
+ fedge_cnt <= {DSIZE{1'b0}};
52
+ else fedge_cnt <= fedge_cnt + 1'd1;
53
+ end end end
54
+
55
+ always@(posedge clock/*,negedge rst_n*/)begin
56
+ if(~rst_n) redge_cnt <= {DSIZE{1'b0}};
57
+ else begin
58
+ if(redge_cnt == {DSIZE{1'b0}})begin
59
+ if(d_raising)
60
+ redge_cnt <= 10'd1;
61
+ else redge_cnt <= {DSIZE{1'b0}};
62
+ end else begin
63
+ if(redge_cnt == PLAT)
64
+ redge_cnt <= {DSIZE{1'b0}};
65
+ else redge_cnt <= redge_cnt + 1'd1;
66
+ end end end
67
+
68
+ reg q_reg;
69
+
70
+ always@(posedge clock/*,negedge rst_n*/)begin
71
+ if(~rst_n) q_reg <= 1'b0;
72
+ else if(fedge_cnt == PLAT)
73
+ q_reg <= 1'b0;
74
+ else if(redge_cnt == PLAT)
75
+ q_reg <= 1'b1;
76
+ else q_reg <= q_reg;
77
+ end
78
+
79
+
80
+ assign q = q_reg;
81
+
82
+ endmodule
83
+
84
+
@@ -0,0 +1,52 @@
1
+ /**********************************************
2
+ ______________ ______________
3
+ ______________ \ /\ /|\ /| ______________
4
+ ______________ \/ \/ | \/ | ______________
5
+ descript:
6
+ author : Young
7
+ Version: VERB.0.0 :2015/12/1 15:06:34
8
+ optimize long latency
9
+ creaded: 2015/12/1 15:05:58
10
+ madified:
11
+ ***********************************************/
12
+ `timescale 1ns/1ps
13
+ module latency_verb #(
14
+ parameter LAT = 10,
15
+ parameter DSIZE = 1
16
+ )(
17
+ input clk ,
18
+ input rst_n ,
19
+ input [DSIZE-1:0] d ,
20
+ output[DSIZE-1:0] q
21
+ );
22
+
23
+ genvar II;
24
+
25
+ generate
26
+ if(LAT<40)begin
27
+ latency #(
28
+ .LAT (LAT ),
29
+ .DSIZE (DSIZE )
30
+ )lat_int(
31
+ .clk (clk ),
32
+ .rst_n (rst_n ),
33
+ .d (d ),
34
+ .q (q )
35
+ );
36
+ end else begin
37
+ for(II=0;II<DSIZE;II=II+1)begin:FOR_BLOCK
38
+ latency_long #(
39
+ .LAT (LAT )
40
+ )lat_int(
41
+ .clock (clk ),
42
+ .rst_n (rst_n ),
43
+ .d (d[II] ),
44
+ .q (q[II] )
45
+ );
46
+ end
47
+ end
48
+ endgenerate
49
+
50
+ endmodule
51
+
52
+
@@ -0,0 +1,65 @@
1
+ /**********************************************
2
+ ______________ ______________
3
+ ______________ \ /\ /|\ /| ______________
4
+ ______________ \/ \/ | \/ | ______________
5
+ descript:
6
+ author : Young
7
+ Version:
8
+ creaded: xxxx.xx.xx
9
+ madified:
10
+ ***********************************************/
11
+ `timescale 1ns/1ps
12
+ module once_event #(
13
+ parameter MODE = "BOTH" //RAISE FALL
14
+ )(
15
+ input clock,
16
+ input rst_n,
17
+ input signal,
18
+ output logic trigger
19
+ );
20
+
21
+ logic signal_raising;
22
+ logic signal_falling;
23
+
24
+ edge_generator edge_generator_inst(
25
+ /*input */ .clk (clock ),
26
+ /*input */ .rst_n (rst_n ),
27
+ /*input */ .in (signal ),
28
+ /*output */ .raising (signal_raising ),
29
+ /*output */ .falling (signal_falling )
30
+ );
31
+
32
+ logic raising;
33
+ logic falling;
34
+
35
+ always_comb begin
36
+ if(MODE=="BOTH" || MODE=="RAISE")
37
+ raising = signal_raising;
38
+ else raising = 1'b0;
39
+ end
40
+
41
+ always_comb begin
42
+ if(MODE=="BOTH" || MODE=="FALL")
43
+ falling = signal_falling;
44
+ else falling = 1'b0;
45
+ end
46
+
47
+ always@(posedge clock,negedge rst_n)begin:TRIGGER_RECORD_BLOCK
48
+ logic record;
49
+ if(~rst_n)begin
50
+ record <= 1'b0;
51
+ trigger <= 1'b0;
52
+ end else begin
53
+ if(raising || falling)
54
+ record <= 1'b1;
55
+ else record <= record;
56
+
57
+ if(record)
58
+ trigger <= 1'b0;
59
+ else if(raising || falling)
60
+ trigger <= 1'b1;
61
+ else trigger <= 1'b0;
62
+ end
63
+ end
64
+
65
+ endmodule