首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

[求助]关于UART的,测试却找不到原因

[求助]关于UART的,测试却找不到原因

设计UART的过程中遇到难以解决的问题,调试过程中,rst信号生成起始信号来开始传输数据,rm168,在内部直接置数out_xy然后利用out_xybuffer每次移8bit来给Txmiter。控制移位的是txmit的表示传输完毕的信号,后仿正确,然后下载到板子上,按rst信号后输出却是00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 89 01 23 11

即总是只有输出最后816进制,即108个二进制。采用其他的rm置数都是这样,换用其他数据也是只有816进制数据。

换用其他的波特率以及开发板产生相应时钟,也一样的结果。

 

 

在这个问题上纠缠了很久

 ,不知道之前的数据去哪了!

 ,不知道之前的数据去哪了!

[此贴子已经被作者于2007-3-8 1:06:02编辑过]

assign out_xy[rm*2-1:0]='hFFFFFFF89012311;

always@ (posedge clk1146x ) begin     //out_xybuffer 

       if(rst)

              out_xybuffer <= 0;

       else if (ready&&(!ecsm_ready)) begin

 

              out_xybuffer <= out_xy;

       end

       else if (tx_ready&&(!tx_rdy_reg)) 根据txmiter传输完毕的信号移位数据

       begin

              out_xybuffer[rm*2-1:8] <= out_xybuffer[rm*2-9:0];

              out_xybuffer[7:0] <= 8'b0;

       end

       else

              out_xybuffer <= out_xybuffer;

end

 

assign din[7:0] = out_xybuffer[rm*2-1:rm*2-8];

 

 

 

always@ (posedge clk1146x ) begin //outcounter

       if(rst)

              outcounter <= 0;

       else if (ready&&(!ecsm_ready))

              outcounter <= 0;

       else if (tx_ready&&(!tx_rdy_reg))

              begin

              outcounter[(m+7)/8*2-1:1] <= outcounter[(m+7)/8*2-2:0];

              outcounter[0] <= 1'b1;

       end

       else

              outcounter <= outcounter;

end

always@ (posedge clk1146x ) begin //outcounter

       if(rst)

              outcounter <= 0;

       else if (ready&&(!ecsm_ready))

              outcounter <= 0;

       else if (tx_ready&&(!tx_rdy_reg))

              begin

              outcounter[(m+7)/8*2-1:1] <= outcounter[(m+7)/8*2-2:0];

              outcounter[0] <= 1'b1;

       end

       else

              outcounter <= outcounter;

end

'hFFFFFFF89012311;

在<进制><数字>这种描述方式中,数字的位宽采用缺省位宽(这由具体的机器系统决定,但至少32位)。但你的太宽了,你可以算一下,这么大一个数需要多大的位宽。或者说这个数字太大了。

你的机器是应该是32位的吧?这可能就是为什么最后只有32位(即32个二进制)输出(816进制);

一般来说,只要后仿正确,下载到芯片后得到的结果应该和后访一样。但是上面说的那些可能影响到各种软件的极限或者限制,这也不能说是一个错误,所以它可以进行编译等各种操作。

以上是我的一点想法,楼主可以试验一下。

[此贴子已经被作者于2007-3-9 9:43:22编辑过]

美梦成真-->噩梦降临!
返回列表