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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2252|回复: 5

[求助] 请大家帮看下这个串口程序为啥不好使呢

[复制链接]
发表于 2010-3-22 11:27:28 | 显示全部楼层 |阅读模式

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

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

x
前面生成波特率部分是按照例程写的。后面的状态机移位输出程序是自己写的。实现的功能是要按下txd_start这个键后要输出个AA来。但是接收到的数确是FF,郁闷坏了。我把程序贴出来给大家帮忙看下吧,多谢了。中间有一段程序时txd_start这个按键的消抖程序。另外,第二个always块的敏感表我试过改成CS和BaudTick也不好使





  1. module uart_send(clk,nrst,txd_start,txd);
  2. input clk,nrst,txd_start;
  3. output reg txd;
  4. parameter Baud = 9600;
  5. parameter Clock = 50_000_000;
  6. parameter BaudAccWidth = 16;
  7. wire [BaudAccWidth:0]BaudAccInc = (Baud<<(BaudAccWidth-4)+(Clock>>5))/(Clock>>4);
  8. reg [BaudAccWidth:0]BaudAcc;

  9. //产生波特率时钟
  10. always @(posedge clk) BaudAcc<=BaudAcc[BaudAccWidth-1:0]+BaudAccInc;
  11. wire BaudTick=BaudAcc[BaudAccWidth];
  12. reg dout1,dout2,dout3,buff;
  13. reg div_clk;        //分频时钟
  14. reg[16:0]count;       //时钟分频计数器

  15. //时钟分频部分
  16. always @(posedge clk)
  17. begin
  18.   if (count < 17'd120000)
  19.   begin
  20.        count <= count + 1'b1;
  21.        div_clk <= 1'b0;
  22.    end
  23.    else
  24.    begin
  25.        count <= 17'd0;
  26.        div_clk <= 1'b1;
  27.    end
  28. end

  29. //按键消抖部分
  30. always @(posedge clk)
  31. begin
  32.   if(div_clk)
  33.   begin
  34.    dout1 <= txd_start;
  35.    dout2 <= dout1;
  36.    dout3 <= dout2;
  37.   end
  38. end

  39. //按键边沿检测部分
  40. always @(posedge clk)
  41. begin
  42.   buff <= dout1 | dout2 | dout3;
  43. end

  44. wire key_edge_out;
  45. assign key_edge_out = ~(dout1 | dout2 | dout3) & buff;


  46. //状态机发送数据
  47. reg [3:0]CS,NS;
  48. parameter IDLE=4'b0000,
  49.       READY=4'b0001,
  50.       START=4'b0010,
  51.       BIT0=4'b0011,
  52.       BIT1=4'b0100,
  53.       BIT2=4'b0101,
  54.       BIT3=4'b0110,
  55.       BIT4=4'b0111,
  56.       BIT5=4'b1000,
  57.       BIT6=4'b1001,
  58.       BIT7=4'b1010,
  59.       STOP=4'b1011,
  60.       STOP2=4'b1100;

  61. always@(posedge clk or negedge nrst)
  62. begin
  63.   if(!nrst)
  64.    CS<=IDLE;
  65.   else
  66.    CS<=NS;
  67. end

  68. always@(*)
  69. begin
  70.   NS=4'bxxxx;
  71. case(CS)
  72.   IDLE:  begin if(key_edge_out) NS=READY; else NS=IDLE; end
  73.   READY: begin if(BaudTick) NS=START; else NS=READY; end
  74.   START: begin if(BaudTick) NS=BIT0; else NS=START; end
  75.   BIT0:  begin if(BaudTick) NS=BIT1; else NS=BIT0; end
  76.   BIT1:  begin if(BaudTick) NS=BIT2; else NS=BIT1; end
  77.   BIT2:  begin if(BaudTick) NS=BIT3; else NS=BIT2; end
  78.   BIT3:  begin if(BaudTick) NS=BIT4; else NS=BIT3; end
  79.   BIT4:  begin if(BaudTick) NS=BIT5; else NS=BIT4; end
  80.   BIT5:  begin if(BaudTick) NS=BIT6; else NS=BIT5; end
  81.   BIT6:  begin if(BaudTick) NS=BIT7; else NS=BIT6; end
  82.   BIT7:  begin if(BaudTick) NS=STOP; else NS=BIT7; end
  83.   STOP:  begin if(BaudTick) NS=STOP2; else NS=STOP; end
  84.   STOP2: NS=IDLE;
  85.   default: NS=IDLE;
  86. endcase
  87. end

  88. always @(posedge clk or negedge nrst)
  89. begin
  90.   if(!nrst)
  91.    txd<=1;
  92.   else
  93.   begin
  94.     case(NS)
  95.      IDLE:  txd<=1;
  96.      READY: txd<=1;
  97.      START: txd<=0;
  98.      BIT0:  txd<=0;
  99.      BIT1:  txd<=1;
  100.      BIT2:  txd<=0;
  101.      BIT3:  txd<=1;
  102.      BIT4:  txd<=0;
  103.      BIT5:  txd<=1;
  104.      BIT6:  txd<=0;
  105.      BIT7:  txd<=1;
  106.      STOP:  txd<=1;
  107.      STOP2: txd<=1;
  108.      default: txd<=1;
  109.     endcase
  110.   end
  111.   
  112. end
  113. endmodule




复制代码
 楼主| 发表于 2010-3-22 17:38:06 | 显示全部楼层
我自己先顶一下吧,多谢了~
 楼主| 发表于 2010-3-23 09:41:56 | 显示全部楼层
我再顶一下~
发表于 2010-3-23 10:00:17 | 显示全部楼层
你仿真过吗?量过波形吗?
发表于 2010-3-23 10:09:54 | 显示全部楼层
楼主啊,建议你先找那个FPGA设计高级篇的电子档或者书,把第一章看完了再来写代码吧。
发表于 2010-3-23 11:35:26 | 显示全部楼层
找开源的IP
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-11-26 00:01 , Processed in 0.033416 second(s), 8 queries , Gzip On, Redis On.

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