TriggerCtrlModule.v 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. `timescale 1ns / 1ps
  2. //////////////////////////////////////////////////////////////////////////////////
  3. // Company:
  4. // Engineer:
  5. //
  6. // Create Date: 10:02:35 04/20/2020
  7. // Design Name:
  8. // Module Name: mult_module
  9. // Project Name:
  10. // Target Devices:
  11. // Tool versions:
  12. // Description:
  13. //
  14. // Dependencies:
  15. //
  16. // Revision:
  17. // Revision 0.01 - File Created
  18. // Additional Comments:
  19. //
  20. //////////////////////////////////////////////////////////////////////////////////
  21. module TriggerCtrlModule
  22. #(
  23. parameter CmdDataRegWith = 24
  24. )
  25. (
  26. input Rst_i,
  27. input Clk_i,
  28. input [CmdDataRegWith-1:0] TrigCmd_i,
  29. input TrigFromExtDev_i, //trigger from some ext device
  30. input TrigFromExtDsp_i, //trigger from ext DSP
  31. output IntTrigToDsp_o, //trigger to ext DSP
  32. output IntTrigToExtDev_o, //trigger to some ext device
  33. output DelayDoneFlag_o,
  34. output TrigEn_o,
  35. output TrigDir_o
  36. );
  37. //================================================================================
  38. // LOCALPARAM
  39. localparam DelayValueWidth = 16;
  40. //================================================================================
  41. // REG/WIRE
  42. reg [DelayValueWidth-1:0] delayCnt;
  43. wire [DelayValueWidth-1:0] delayValue = TrigCmd_i[CmdDataRegWith-1-:DelayValueWidth];
  44. wire trigDir = TrigCmd_i[2]; //direction of the trigger 1-input trig (from ext dev) 0-output trig (to ext device)
  45. wire trigPl = TrigCmd_i[1]; //polarity of the trigger 1-'1' active, 0-'0' active
  46. wire trigEn = TrigCmd_i[0]; //using rigger or not
  47. reg intTrigToDsp;
  48. reg intTrigToExtDev;
  49. reg extTrigPosReg;
  50. reg extTrigNegReg;
  51. wire extTrigPos = (trigDir)? !extTrigPosReg&&TrigFromExtDev_i:!extTrigPosReg&&TrigFromExtDsp_i;
  52. wire extTrigNeg = (trigDir)? extTrigNegReg&&!TrigFromExtDev_i:extTrigNegReg&&!TrigFromExtDsp_i;
  53. wire delayDoneFlag = delayCnt==delayValue-1;
  54. reg delayStartFlag;
  55. //================================================================================
  56. // ASSIGNMENTS
  57. assign TrigDir_o = trigDir;
  58. assign IntTrigToDsp_o = intTrigToDsp;
  59. assign IntTrigToExtDev_o = intTrigToExtDev;
  60. assign DelayDoneFlag_o = delayDoneFlag;
  61. assign TrigEn_o = trigEn;
  62. assign TrigDir_o = trigDir;
  63. //================================================================================
  64. // CODING
  65. always @(posedge Clk_i) begin
  66. if (Rst_i||!trigEn) begin
  67. extTrigPosReg <= 1'bz;
  68. extTrigNegReg <= 1'bz;
  69. end else begin
  70. if (trigDir) begin
  71. if (trigPl) begin
  72. extTrigPosReg <= TrigFromExtDev_i;
  73. end else begin
  74. extTrigNegReg <= TrigFromExtDev_i;
  75. end
  76. end else begin
  77. if (trigPl) begin
  78. extTrigPosReg <= TrigFromExtDsp_i;
  79. end else begin
  80. extTrigNegReg <= TrigFromExtDsp_i;
  81. end
  82. end
  83. end
  84. end
  85. always @(posedge Clk_i) begin
  86. if (Rst_i) begin
  87. delayStartFlag <= 1'b0;
  88. end else begin
  89. if (!delayDoneFlag) begin
  90. if (extTrigPos|extTrigNeg) begin
  91. delayStartFlag <= 1'b1;
  92. end
  93. end else begin
  94. delayStartFlag <= 1'b0;
  95. end
  96. end
  97. end
  98. always @(posedge Clk_i) begin
  99. if (Rst_i|!trigEn) begin
  100. delayCnt <= {DelayValueWidth{1'b0}};
  101. end else if (delayStartFlag) begin
  102. if (!delayDoneFlag) begin
  103. if (delayCnt != delayValue) begin
  104. delayCnt <= delayCnt+{{{DelayValueWidth-1{1'b0}},1'b1}};
  105. end
  106. end else begin
  107. delayCnt <= {DelayValueWidth{1'b0}};
  108. end
  109. end
  110. end
  111. always @(posedge Clk_i) begin
  112. if (Rst_i||!trigEn) begin
  113. intTrigToDsp <= 1'b0;
  114. intTrigToExtDev <= 1'b0;
  115. end else begin
  116. if (trigDir) begin
  117. if (delayDoneFlag) begin
  118. intTrigToDsp <= 1'b1;
  119. end else begin
  120. intTrigToDsp <= 1'b0;
  121. end
  122. end else begin
  123. if (trigPl) begin
  124. intTrigToExtDev <= 1'b0;
  125. end else begin
  126. intTrigToExtDev <= 1'b1;
  127. end
  128. if (delayDoneFlag && trigPl) begin
  129. intTrigToExtDev <= 1'b1;
  130. end else if (delayDoneFlag && !trigPl) begin
  131. intTrigToExtDev <= 1'b0;
  132. end
  133. end
  134. end
  135. end
  136. endmodule