MmcmWrapper.v 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  1. module MmcmWrapper
  2. #(
  3. parameter SpiNum = 7
  4. )
  5. (
  6. input Clk_i,
  7. input Rst_i,
  8. input [6:0] ClkDiv1_i,
  9. input [15:0] ClkDiv2_i,
  10. input [15:0] ClkDiv3_i,
  11. input [15:0] ClkDiv4_i,
  12. input [15:0] ClkDiv5_i,
  13. input [15:0] ClkDiv6_i,
  14. input [15:0] ClkDiv7_i,
  15. output [SpiNum-1:0] SpiClk_o
  16. );
  17. //================================================================================
  18. // REG/WIRE
  19. //================================================================================
  20. wire clk0out;
  21. wire clk1out;
  22. wire clk2out;
  23. wire clk3out;
  24. wire clk4out;
  25. wire clk5out;
  26. wire clk6out;
  27. wire SRDY;
  28. wire locked;
  29. reg [1:0] SM = STARTUP;
  30. reg SSTEP;
  31. reg sStep1;
  32. reg sStep2;
  33. reg sStep3;
  34. reg sStep4;
  35. reg sStep5;
  36. reg sStep6;
  37. reg sStep7;
  38. reg clkDiv1R;
  39. reg clkDiv2R;
  40. reg clkDiv3R;
  41. reg clkDiv4R;
  42. reg clkDiv5R;
  43. reg clkDiv6R;
  44. reg clkDiv7R;
  45. //================================================================================
  46. // ASSIGNMENTS
  47. //================================================================================
  48. assign SpiClk_o[0] = clk0out;
  49. assign SpiClk_o[1] = clk1out;
  50. assign SpiClk_o[2] = clk2out;
  51. assign SpiClk_o[3] = clk3out;
  52. assign SpiClk_o[4] = clk4out;
  53. assign SpiClk_o[5] = clk5out;
  54. assign SpiClk_o[6] = clk6out;
  55. //================================================================================
  56. // LOCALPARAMS
  57. //================================================================================
  58. parameter [1:0] STARTUP = 0, STATE0 = 1, STATE1 = 2, UNDEFINED = 3;
  59. //================================================================================
  60. // CODING
  61. //================================================================================
  62. top_mmcme2 MMCE2_inst (
  63. .SSTEP (),
  64. .STATE (),
  65. .RST (Rst_i),
  66. .CLKIN (Clk_i),
  67. .SRDY (SRDY),
  68. .LOCKED_OUT (locked),
  69. .CLK0OUT (clk0out),
  70. .CLK1OUT (clk1out),
  71. .CLK2OUT (clk2out),
  72. .CLK3OUT (clk3out),
  73. .CLK4OUT (clk4out),
  74. .CLK5OUT (clk5out),
  75. .CLK6OUT (clk6out)
  76. );
  77. always @(posedge Clk_i) begin
  78. if (Rst_i) begin
  79. clkDiv1R <= 1'b0;
  80. clkDiv2R <= 1'b0;
  81. clkDiv3R <= 1'b0;
  82. clkDiv4R <= 1'b0;
  83. clkDiv5R <= 1'b0;
  84. clkDiv6R <= 1'b0;
  85. clkDiv7R <= 1'b0;
  86. end
  87. else begin
  88. clkDiv1R <= ClkDiv1_i;
  89. clkDiv2R <= ClkDiv2_i;
  90. clkDiv3R <= ClkDiv3_i;
  91. clkDiv4R <= ClkDiv4_i;
  92. clkDiv5R <= ClkDiv5_i;
  93. clkDiv6R <= ClkDiv6_i;
  94. clkDiv7R <= ClkDiv7_i;
  95. end
  96. end
  97. always @(*) begin
  98. if (Rst_i) begin
  99. sStep1<= 1'b0;
  100. end
  101. else begin
  102. if (clkDiv1R != ClkDiv1_i) begin
  103. sStep1 <= 1'b1;
  104. end
  105. else begin
  106. sStep1 <= 1'b0;
  107. end
  108. end
  109. end
  110. always @(*) begin
  111. if (Rst_i) begin
  112. sStep2<= 1'b0;
  113. end
  114. else begin
  115. if (clkDiv2R != ClkDiv2_i) begin
  116. sStep2 <= 1'b1;
  117. end
  118. else begin
  119. sStep2 <= 1'b0;
  120. end
  121. end
  122. end
  123. always @(*) begin
  124. if (Rst_i) begin
  125. sStep3<= 1'b0;
  126. end
  127. else begin
  128. if (clkDiv3R != ClkDiv3_i) begin
  129. sStep3 <= 1'b1;
  130. end
  131. else begin
  132. sStep3 <= 1'b0;
  133. end
  134. end
  135. end
  136. always @(*) begin
  137. if (Rst_i) begin
  138. sStep4<= 1'b0;
  139. end
  140. else begin
  141. if (clkDiv4R!= ClkDiv4_i) begin
  142. sStep4 <= 1'b1;
  143. end
  144. else begin
  145. sStep4 <= 1'b0;
  146. end
  147. end
  148. end
  149. always @(*) begin
  150. if (Rst_i) begin
  151. sStep5<= 1'b0;
  152. end
  153. else begin
  154. if (clkDiv5R != ClkDiv5_i) begin
  155. sStep5 <= 1'b1;
  156. end
  157. else begin
  158. sStep5 <= 1'b0;
  159. end
  160. end
  161. end
  162. always @(*) begin
  163. if (Rst_i) begin
  164. sStep6<= 1'b0;
  165. end
  166. else begin
  167. if (clkDiv6R != ClkDiv6_i) begin
  168. sStep6 <= 1'b1;
  169. end
  170. else begin
  171. sStep6 <= 1'b0;
  172. end
  173. end
  174. end
  175. always @(*) begin
  176. if (Rst_i) begin
  177. sStep7<= 1'b0;
  178. end
  179. else begin
  180. if (clkDiv7R != ClkDiv7_i) begin
  181. sStep7 <= 1'b1;
  182. end
  183. else begin
  184. sStep7 <= 1'b0;
  185. end
  186. end
  187. end
  188. // always @ (posedge Clk_i) begin
  189. // if (Rst_i) begin
  190. // SM <= STARTUP;
  191. // end
  192. // else begin
  193. // case (SM)
  194. // STARTUP: begin
  195. // SM <= STATE0;
  196. // SSTEP <= 1'b0;
  197. // STATE <= 1'b0;
  198. // end
  199. // STATE0: begin
  200. // if(locked) begin
  201. // if (ssTep1 | ssTep2 | ssTep3 | ssTep4 | ssTep5 | ssTep6 | ssTep7) begin
  202. // SSTEP <= 1'b1;
  203. // end
  204. // else begin
  205. // SSTEP <= 1'b0;
  206. // end
  207. // end
  208. // end
  209. // end
  210. // STATE1: begin
  211. // if (SRDY) begin
  212. // SM <= STATE0;
  213. // end
  214. // end
  215. // UNDEFINED: begin
  216. // SM <= STARTUP;
  217. // end
  218. // endcase
  219. // end
  220. // end
  221. endmodule