在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3370|回复: 3

[讨论] 有一个现成的UART波特率发生器的RTL代码请高手给讲讲

[复制链接]
发表于 2014-3-9 05:20:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
多亏论坛上大侠们的帮助,我已经成功地使我写的uart和PC正确通信了 :)
感觉写的太简单了,可能不对,于是找了网上的一个RTL代码,再试试,结果主要就坑在波特率设置上:
比如:人家可能用的是50MHz的时钟,而我用的是66MHz。还有虽然我原来的程序用的是115200,但这段代码的目标波特率是多少我也不知道。。。
module bps_set(
               clk,rst_n,
      bps_start,
      sample
               );
input clk;
input rst_n;
input bps_start;
output sample;
/*
`define      BPS_PARA           5207
`define      BPS_PARA_HALF      2603
*/
reg [12:0] cnt;
always @ (posedge clk or posedge rst_n) begin
  if (rst_n)
    cnt <= 13'd0;
  else if ((cnt == 868) || (!bps_start))    ///// 我很不解这个数是怎么算出来的?
cnt <= 13'd0;
  else
    cnt <= cnt+1'b1;
end
reg sample_reg;
always @ (posedge clk or posedge rst_n) begin  
  if (rst_n)
    sample_reg <= 1'b0;
  else if (cnt ==  434)                          ///// 我很不解这个数是怎么算出来的?
    sample_reg <= 1'b1;
  else
    sample_reg <= 1'b0;
end
assign sample = sample_reg;
endmodule
////////////////////////////////////////////////////////sample信号用法如下//////////////////////////////////////////////
always @ (posedge clk or posedge rst_n) begin
   if (rst_n)
      begin
      rs232_tx_r <= 1'b1;
   num <= 4'd0;
      end
   else if (tx_en)
      if (sample)
   begin
      num <= num+1'b1;
   case(num)
      4'd0: rs232_tx_r <= 1'b0;  
      4'd1: rs232_tx_r <= tx_data[0];
      4'd2: rs232_tx_r <= tx_data[1];
      4'd3: rs232_tx_r <= tx_data[2];
      4'd4: rs232_tx_r <= tx_data[3];
      4'd5: rs232_tx_r <= tx_data[4];
      4'd6: rs232_tx_r <= tx_data[5];
      4'd7: rs232_tx_r <= tx_data[6];
      4'd8: rs232_tx_r <= tx_data[7];
      4'd9: rs232_tx_r <= 1'b1;
      default: rs232_tx_r <= 1'b1;
   endcase
      end
   else if (num == 4'd10)   
      num <= 4'b0;
end
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
请高手指点一下如何通过目标波特率115200和我的物理时钟66MHz,算出何时的计数值?
发表于 2014-3-9 14:59:40 | 显示全部楼层
直接计算一下就好了  不难的
发表于 2014-3-9 15:01:06 | 显示全部楼层
这些代码百度文库里面很多 而且都是可以直接使用的
发表于 2014-3-10 11:14:32 | 显示全部楼层
用66M除以115200就可以吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-22 16:57 , Processed in 0.027678 second(s), 10 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表