用PLL做分频有必要吗?

2019-03-25 10:45发布

学习板上的晶振是50M,AD是TLC549。我想把549采到的数通过led输出显示。程序如下:
module amyad(clk,din,clk_ad,cs,dout);
    input         clk;  //50MHz
    input         din;
    output  clk_ad;
    output reg cs;
    output reg [7:0]dout;
   
    reg [4:0]cnt_fre;
    reg clk1M = 1'b0;
    reg attach;
    reg [4:0]cnt_ad;
    reg [7:0]temp;
   
    parameter period_fre = 5'd24;
    parameter period_ad = 5'd27;
   
    always@(negedge clk)
    if(cnt_fre != period_fre)  
                cnt_fre <= cnt_fre + 5'd1;
    else begin  cnt_fre <= 5'd0;
                clk1M   <= !clk1M; end
   
    always@(negedge clk1M)
    if(cnt_ad != period_ad)  
             cnt_ad <= cnt_ad + 5'd1;
    else     cnt_ad <= 5'd0;
   
    always@(negedge clk1M)
    if(cnt_ad >= 5'd20 && cnt_ad <= 5'd27)
          attach <= 1'b1;
    else  attach <= 1'b0;
   
    assign clk_ad = (attach && clk1M);
      
    always@(negedge clk1M)
    case(cnt_ad)
        5'd0:   cs <= 1'b1;
        5'd1:   dout <= temp;
        5'd18:   cs <= 1'b0;
        5'd20:   temp[7] <= din;
        5'd21:   temp[6] <= din;
        5'd22:   temp[5] <= din;
        5'd23:   temp[4] <= din;
        5'd24:   temp[3] <= din;
        5'd25:   temp[2] <= din;
        5'd26:   temp[1] <= din;
        5'd27:   temp[0] <= din;
   endcase
   
endmodule
功能仿真正常。
编译时,时序分析好像说从cnt_fre[4]到clk1M的时钟延迟大于数据延迟,可能不工作。
要是用PLL而不是程序中的计数分频,是不是好些。我的片子可是cyclone2 的EP2C8,对于这样的小工程,应该默认就能轻松搞定的呀。
高手指点一下吧!先谢过! 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
eeleader
1楼-- · 2019-03-25 14:17
< /

楼主上兄弟,你这样的小工程确实没有必要用PLL,浪费资源!轻松用程序分频可以搞定。你搞不定的原因在于设计没有采用全同步,用分频时钟作D触发器时钟信号。

andyandy
2楼-- · 2019-03-25 16:39
如你所言,极是!
3Q!

一周热门 更多>