huiyanhuishi 发表于 2011-11-3 18:22:17

求助:计数器不能自加1,与串行通信有关的东西---------有图有代码有注释------------谢

//此为某个串行通信协议,clk、fsin、data_s均为输入信号,data_p为并行输出数据,数据位数为8。通信协议如下图所示。硬件描述语言如下。
//出现的问题是:counter不能计数到8,因此未能将全部数据捕获。请教各位,为什么会出现这种问题,怎样解决这个问题?谢谢……

//代码在附件中。

module tdm(clk,fsin,data_s,data_p);

input clk,fsin,data_s;//串行输入信号
output data_p;//并行输出数据

reg data_p;
reg fstart;//开始标志
reg data;
reg counter;//计数用,在接收到一个数据时加1。

initial begin
        fstart <= 0;
        counter <= 0;
        data <= 0;
end

always @(posedge clk or negedge fsin)begin
        if(~fsin)begin
                fstart <= 1;//fsin的下降沿,开始标志置位。
                counter <= 0;//计数器清零
        end
        else begin
                if(fstart==1 && counter<8)begin//开始标志有效,计数个数小于8,则将数据置入data,同时counter自加1.
                        data <= data_s;
                        counter<=counter+1;
                end
                if(counter==8)begin
                        data_p <= data;//计数个数为8个,输出数据。
                        fstart<=0;//开始标志复位
                        counter<=0;
                end
        end
end

endmodule

代码ourdev_691406NQ40YA.rar(文件大小:684K) (原文件名:tdmfinal1.rar)

http://cache.amobbs.com/bbs_upload782111/files_47/ourdev_691401MDT077.JPG
通信协议时序图 (原文件名:通信协议.JPG)

http://cache.amobbs.com/bbs_upload782111/files_47/ourdev_691402CTIP7K.JPG
chipscope 时序图 (原文件名:chipscope.JPG)

huiyanhuishi 发表于 2011-11-3 18:43:16

不要沉了啊!!!各位前辈,给指点指点吧,弄了一天了,要崩溃了,呵呵……

wswuda2007 发表于 2011-11-9 15:09:28

我就是用你的代码跑的 为什么我的结果是正确的?其中fsin是手动输入的,是不是你没有输入fsin 。


http://cache.amobbs.com/bbs_upload782111/files_47/ourdev_693517DM8GFB.jpg
(原文件名:未命名.jpg)
页: [1]
查看完整版本: 求助:计数器不能自加1,与串行通信有关的东西---------有图有代码有注释------------谢