|
|
@@ -6,17 +6,17 @@ module MmcmWrapper
|
|
|
(
|
|
|
input Clk_i,
|
|
|
input Rst_i,
|
|
|
- input [6:0] ClkDiv1_i,
|
|
|
- input [15:0] ClkDiv2_i,
|
|
|
- input [15:0] ClkDiv3_i,
|
|
|
- input [15:0] ClkDiv4_i,
|
|
|
- input [15:0] ClkDiv5_i,
|
|
|
- input [15:0] ClkDiv6_i,
|
|
|
- input [15:0] ClkDiv7_i,
|
|
|
+ input [7:0] BaudRate0_i,
|
|
|
+ input [7:0] BaudRate1_i,
|
|
|
+ input [7:0] BaudRate2_i,
|
|
|
+ input [7:0] BaudRate3_i,
|
|
|
+ input [7:0] BaudRate4_i,
|
|
|
+ input [7:0] BaudRate5_i,
|
|
|
+ input [7:0] BaudRate6_i,
|
|
|
|
|
|
|
|
|
|
|
|
- output [SpiNum-1:0] SpiClk_o
|
|
|
+ output [SpiNum-1:0] SpiClk_o
|
|
|
);
|
|
|
//================================================================================
|
|
|
// REG/WIRE
|
|
|
@@ -29,228 +29,136 @@ wire clk3out;
|
|
|
wire clk4out;
|
|
|
wire clk5out;
|
|
|
wire clk6out;
|
|
|
-wire SRDY;
|
|
|
wire locked;
|
|
|
|
|
|
-reg [1:0] SM = STARTUP;
|
|
|
-reg SSTEP;
|
|
|
+wire [SpiNum-1:0] clkOutMMCM;
|
|
|
|
|
|
-reg sStep1;
|
|
|
-reg sStep2;
|
|
|
-reg sStep3;
|
|
|
-reg sStep4;
|
|
|
-reg sStep5;
|
|
|
-reg sStep6;
|
|
|
-reg sStep7;
|
|
|
|
|
|
+wire [SpiNum-1:0] clkMan;
|
|
|
|
|
|
-reg clkDiv1R;
|
|
|
-reg clkDiv2R;
|
|
|
-reg clkDiv3R;
|
|
|
-reg clkDiv4R;
|
|
|
-reg clkDiv5R;
|
|
|
-reg clkDiv6R;
|
|
|
-reg clkDiv7R;
|
|
|
+wire [0:2] clkNum [SpiNum-1:0];
|
|
|
+wire [0:3] clkDiv [SpiNum-1:0];
|
|
|
+wire [SpiNum-1:0] clkCh;
|
|
|
+wire [SpiNum-1:0] spiClk;
|
|
|
|
|
|
|
|
|
|
|
|
//================================================================================
|
|
|
// ASSIGNMENTS
|
|
|
//================================================================================
|
|
|
- assign SpiClk_o[0] = clk0out;
|
|
|
- assign SpiClk_o[1] = clk1out;
|
|
|
- assign SpiClk_o[2] = clk2out;
|
|
|
- assign SpiClk_o[3] = clk3out;
|
|
|
- assign SpiClk_o[4] = clk4out;
|
|
|
- assign SpiClk_o[5] = clk5out;
|
|
|
- assign SpiClk_o[6] = clk6out;
|
|
|
+ // assign SpiClk_o[0] = clk1out;
|
|
|
+ // assign SpiClk_o[1] = clk2out;
|
|
|
+ // assign SpiClk_o[2] = clk3out;
|
|
|
+ // assign SpiClk_o[3] = clk4out;
|
|
|
+ // assign SpiClk_o[4] = clk5out;
|
|
|
+ // assign SpiClk_o[5] = clk6out;
|
|
|
+ // assign SpiClk_o[6] = clk7out;
|
|
|
+
|
|
|
+ assign clkNum[0] = BaudRate0_i[7:5];
|
|
|
+ assign clkNum[1] = BaudRate1_i[7:5];
|
|
|
+ assign clkNum[2] = BaudRate2_i[7:5];
|
|
|
+ assign clkNum[3] = BaudRate3_i[7:5];
|
|
|
+ assign clkNum[4] = BaudRate4_i[7:5];
|
|
|
+ assign clkNum[5] = BaudRate5_i[7:5];
|
|
|
+ assign clkNum[6] = BaudRate6_i[7:5];
|
|
|
+
|
|
|
+ assign clkDiv[0] = BaudRate0_i[3:0];
|
|
|
+ assign clkDiv[1] = BaudRate1_i[3:0];
|
|
|
+ assign clkDiv[2] = BaudRate2_i[3:0];
|
|
|
+ assign clkDiv[3] = BaudRate3_i[3:0];
|
|
|
+ assign clkDiv[4] = BaudRate4_i[3:0];
|
|
|
+ assign clkDiv[5] = BaudRate5_i[3:0];
|
|
|
+ assign clkDiv[6] = BaudRate6_i[3:0];
|
|
|
+
|
|
|
+ assign clkCh[0] = BaudRate0_i[4];
|
|
|
+ assign clkCh[1] = BaudRate1_i[4];
|
|
|
+ assign clkCh[2] = BaudRate2_i[4];
|
|
|
+ assign clkCh[3] = BaudRate3_i[4];
|
|
|
+ assign clkCh[4] = BaudRate4_i[4];
|
|
|
+ assign clkCh[5] = BaudRate5_i[4];
|
|
|
+ assign clkCh[6] = BaudRate6_i[4];
|
|
|
+
|
|
|
+ assign SpiClk_o[0] = spiClk[0];
|
|
|
+ assign SpiClk_o[1] = spiClk[1];
|
|
|
+ assign SpiClk_o[2] = spiClk[2];
|
|
|
+ assign SpiClk_o[3] = spiClk[3];
|
|
|
+ assign SpiClk_o[4] = spiClk[4];
|
|
|
+ assign SpiClk_o[5] = spiClk[5];
|
|
|
+ assign SpiClk_o[6] = spiClk[6];
|
|
|
+
|
|
|
+
|
|
|
|
|
|
//================================================================================
|
|
|
// LOCALPARAMS
|
|
|
//================================================================================
|
|
|
-parameter [1:0] STARTUP = 0, STATE0 = 1, STATE1 = 2, UNDEFINED = 3;
|
|
|
+
|
|
|
|
|
|
//================================================================================
|
|
|
// CODING
|
|
|
//================================================================================
|
|
|
-top_mmcme2 MMCE2_inst (
|
|
|
- .SSTEP (),
|
|
|
- .STATE (),
|
|
|
- .RST (Rst_i),
|
|
|
- .CLKIN (Clk_i),
|
|
|
- .SRDY (SRDY),
|
|
|
- .LOCKED_OUT (locked),
|
|
|
- .CLK0OUT (clk0out),
|
|
|
- .CLK1OUT (clk1out),
|
|
|
- .CLK2OUT (clk2out),
|
|
|
- .CLK3OUT (clk3out),
|
|
|
- .CLK4OUT (clk4out),
|
|
|
- .CLK5OUT (clk5out),
|
|
|
- .CLK6OUT (clk6out)
|
|
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
|
|
+genvar i;
|
|
|
|
|
|
+generate
|
|
|
+ for (i=0; i < SpiNum; i = i +1) begin : ClkGen
|
|
|
+ ClkGen ClkGen_inst (
|
|
|
+ .Clk_i(clk1out),
|
|
|
+ .ClkDiv_i(clkDiv[i]),
|
|
|
+ .Rst_i(Rst_i),
|
|
|
+ .Clk_o(clkMan[i])
|
|
|
+ );
|
|
|
|
|
|
+ clkOutMMCM clkOutMMCM_inst (
|
|
|
+ .Rst_i(Rst_i),
|
|
|
+ .clkNum(clkNum[i]),
|
|
|
+ .clk0out(clk0out),
|
|
|
+ .clk1out(clk1out),
|
|
|
+ .clk2out(clk2out),
|
|
|
+ .clk3out(clk3out),
|
|
|
+ .clk4out(clk4out),
|
|
|
+ .clk5out(clk5out),
|
|
|
+ .clk6out(clk6out),
|
|
|
+ .clkOutMMCM(clkOutMMCM[i])
|
|
|
+ );
|
|
|
|
|
|
+ ClkCh ClkCh_inst (
|
|
|
+ .Rst_i(Rst_i),
|
|
|
+ .clkCh(clkCh[i]),
|
|
|
+ .clkOutMMCM(clkOutMMCM[i]),
|
|
|
+ .clkMan(clkMan[i]),
|
|
|
+ .SpiClk_o(spiClk[i])
|
|
|
+ );
|
|
|
+ end
|
|
|
|
|
|
|
|
|
-);
|
|
|
+endgenerate
|
|
|
|
|
|
-always @(posedge Clk_i) begin
|
|
|
- if (Rst_i) begin
|
|
|
- clkDiv1R <= 1'b0;
|
|
|
- clkDiv2R <= 1'b0;
|
|
|
- clkDiv3R <= 1'b0;
|
|
|
- clkDiv4R <= 1'b0;
|
|
|
- clkDiv5R <= 1'b0;
|
|
|
- clkDiv6R <= 1'b0;
|
|
|
- clkDiv7R <= 1'b0;
|
|
|
- end
|
|
|
- else begin
|
|
|
- clkDiv1R <= ClkDiv1_i;
|
|
|
- clkDiv2R <= ClkDiv2_i;
|
|
|
- clkDiv3R <= ClkDiv3_i;
|
|
|
- clkDiv4R <= ClkDiv4_i;
|
|
|
- clkDiv5R <= ClkDiv5_i;
|
|
|
- clkDiv6R <= ClkDiv6_i;
|
|
|
- clkDiv7R <= ClkDiv7_i;
|
|
|
- end
|
|
|
-end
|
|
|
|
|
|
|
|
|
-always @(*) begin
|
|
|
- if (Rst_i) begin
|
|
|
- sStep1<= 1'b0;
|
|
|
- end
|
|
|
- else begin
|
|
|
- if (clkDiv1R != ClkDiv1_i) begin
|
|
|
- sStep1 <= 1'b1;
|
|
|
- end
|
|
|
- else begin
|
|
|
- sStep1 <= 1'b0;
|
|
|
- end
|
|
|
- end
|
|
|
-end
|
|
|
-
|
|
|
-always @(*) begin
|
|
|
- if (Rst_i) begin
|
|
|
- sStep2<= 1'b0;
|
|
|
- end
|
|
|
- else begin
|
|
|
- if (clkDiv2R != ClkDiv2_i) begin
|
|
|
- sStep2 <= 1'b1;
|
|
|
- end
|
|
|
- else begin
|
|
|
- sStep2 <= 1'b0;
|
|
|
- end
|
|
|
- end
|
|
|
-end
|
|
|
|
|
|
-always @(*) begin
|
|
|
- if (Rst_i) begin
|
|
|
- sStep3<= 1'b0;
|
|
|
- end
|
|
|
- else begin
|
|
|
- if (clkDiv3R != ClkDiv3_i) begin
|
|
|
- sStep3 <= 1'b1;
|
|
|
- end
|
|
|
- else begin
|
|
|
- sStep3 <= 1'b0;
|
|
|
- end
|
|
|
- end
|
|
|
-end
|
|
|
|
|
|
-always @(*) begin
|
|
|
- if (Rst_i) begin
|
|
|
- sStep4<= 1'b0;
|
|
|
- end
|
|
|
- else begin
|
|
|
- if (clkDiv4R!= ClkDiv4_i) begin
|
|
|
- sStep4 <= 1'b1;
|
|
|
- end
|
|
|
- else begin
|
|
|
- sStep4 <= 1'b0;
|
|
|
- end
|
|
|
- end
|
|
|
-end
|
|
|
+ ClkDiv ClkDiv_inst
|
|
|
+ (
|
|
|
+ // Clock out ports
|
|
|
+ .clk_out1(clk0out), //100 MHz
|
|
|
+ .clk_out2(clk1out), // 80 MHz
|
|
|
+ .clk_out3(clk2out), // 70 MHz
|
|
|
+ .clk_out4(clk3out), // 60MHz
|
|
|
+ .clk_out5(clk4out), // 50MHz
|
|
|
+ .clk_out6(clk5out), // 40MHz
|
|
|
+ .clk_out7(clk6out), // 30MHz
|
|
|
+ // Status and control signals
|
|
|
+ .reset(Rst_i), // input reset
|
|
|
+ .locked(locked), // output locked
|
|
|
+ // Clock in ports
|
|
|
+ .clk_in1(Clk_i)); // input clk_in1
|
|
|
|
|
|
-always @(*) begin
|
|
|
- if (Rst_i) begin
|
|
|
- sStep5<= 1'b0;
|
|
|
- end
|
|
|
- else begin
|
|
|
- if (clkDiv5R != ClkDiv5_i) begin
|
|
|
- sStep5 <= 1'b1;
|
|
|
- end
|
|
|
- else begin
|
|
|
- sStep5 <= 1'b0;
|
|
|
- end
|
|
|
- end
|
|
|
-end
|
|
|
|
|
|
-always @(*) begin
|
|
|
- if (Rst_i) begin
|
|
|
- sStep6<= 1'b0;
|
|
|
- end
|
|
|
- else begin
|
|
|
- if (clkDiv6R != ClkDiv6_i) begin
|
|
|
- sStep6 <= 1'b1;
|
|
|
- end
|
|
|
- else begin
|
|
|
- sStep6 <= 1'b0;
|
|
|
- end
|
|
|
- end
|
|
|
-end
|
|
|
|
|
|
-always @(*) begin
|
|
|
- if (Rst_i) begin
|
|
|
- sStep7<= 1'b0;
|
|
|
- end
|
|
|
- else begin
|
|
|
- if (clkDiv7R != ClkDiv7_i) begin
|
|
|
- sStep7 <= 1'b1;
|
|
|
- end
|
|
|
- else begin
|
|
|
- sStep7 <= 1'b0;
|
|
|
- end
|
|
|
- end
|
|
|
-end
|
|
|
-
|
|
|
-// always @ (posedge Clk_i) begin
|
|
|
-// if (Rst_i) begin
|
|
|
-// SM <= STARTUP;
|
|
|
-// end
|
|
|
-// else begin
|
|
|
-// case (SM)
|
|
|
-// STARTUP: begin
|
|
|
-// SM <= STATE0;
|
|
|
-// SSTEP <= 1'b0;
|
|
|
-// STATE <= 1'b0;
|
|
|
-// end
|
|
|
-// STATE0: begin
|
|
|
-// if(locked) begin
|
|
|
-// if (ssTep1 | ssTep2 | ssTep3 | ssTep4 | ssTep5 | ssTep6 | ssTep7) begin
|
|
|
-// SSTEP <= 1'b1;
|
|
|
-// end
|
|
|
-// else begin
|
|
|
-// SSTEP <= 1'b0;
|
|
|
-// end
|
|
|
-// end
|
|
|
-// end
|
|
|
-// end
|
|
|
-// STATE1: begin
|
|
|
-// if (SRDY) begin
|
|
|
-// SM <= STATE0;
|
|
|
-// end
|
|
|
-// end
|
|
|
-// UNDEFINED: begin
|
|
|
-// SM <= STARTUP;
|
|
|
-// end
|
|
|
-// endcase
|
|
|
-// end
|
|
|
-// end
|
|
|
|
|
|
|
|
|
|