写了一个TLC549的采集显示程序,可是显示很怪异

2019-03-25 10:42发布

上电后,用于显示采样数据的8个led灯先全亮,然后最高位灭,下来全灭。
程序是这样的——
module amyad(clk,din,clk_ad,cs,dout);
    input clk;
    input din;
    output     clk_ad;
    output reg cs;
    output reg [7:0]dout;
   
    reg [5:0]cnt_fre;
    reg clk1M;
    reg attach;
    reg [4:0]cnt_ad;
    reg [7:0]temp;
   
    parameter period_fre = 6'd49;
    parameter period_ad = 5'd27;
   
    always@(negedge clk)
    if(cnt_fre != period_fre)  begin
                cnt_fre <= cnt_fre + 6'd1;
                clk1M   <= 1'b0;                     end
    else begin  cnt_fre <= 5'd0;
                clk1M   <= 1'b1;                      end
   
    always@(negedge clk)
    if(clk1M)begin
       if(cnt_ad != period_ad)  
             cnt_ad <= cnt_ad + 5'd1;
       else     cnt_ad <= 5'd0;                  end
   
    always@(negedge clk)
    if(clk1M)begin
       if(cnt_ad >= 5'd20 && cnt_ad <= 5'd27)
          attach <= 1'b1;
       else  attach <= 1'b0;                                end
   
    assign clk_ad = (attach && clk1M);
      
    always@(negedge clk)
    if(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
高手们,指点一下吧!谢谢! 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
eeleader
1楼-- · 2019-03-25 19:51
< /

能把你这个采集程序的作用说清楚一点吗?从程序上看,感觉的设计很乱,不知道要干啥?

andyandy
2楼-- · 2019-03-25 21:42
就是先一天那个程序,你还回复了。
第1个always语句,对输入的50M时钟分频,得到的1M时钟备用。
第2个always语句,按1M时钟为节奏计数。
第3个always语句,在必要的计数区间,生成需要1M时钟的标志。
assign语句,将1M时钟与标志相与,输出给AD作时钟。
第4个always语句,在不同的计数点控制片选、中间量输出以及把AD的串行输入分别赋给中间量的各位。
andyandy
3楼-- · 2019-03-26 03:05

思路是多么的清晰,步伐是多么的有条不紊!哈哈!

国庆期间已经通过硬件验证,稍后给大家共享共享(如果有人感兴趣)。

[ 本帖最后由 andyandy 于 2010-10-11 16:02 编辑 ]

一周热门 更多>