求助:计数器不能自加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) 不要沉了啊!!!各位前辈,给指点指点吧,弄了一天了,要崩溃了,呵呵…… 我就是用你的代码跑的 为什么我的结果是正确的?其中fsin是手动输入的,是不是你没有输入fsin 。
http://cache.amobbs.com/bbs_upload782111/files_47/ourdev_693517DM8GFB.jpg
(原文件名:未命名.jpg)
页:
[1]