当前位置:中国高校自动化网 >> fpga >> 浏览文章

串口接收最小系统

文章来源:不详 作者:佚名


该文章讲述了串口接收最小系统.

1 提

最小系统的概念已经很久了。这里赋予的内涵是从功能上来讲的:通过串口接收一个数据,然后将其并行输出。之所以叫最小系统,是因为它涵盖了串口接收的最基本的知识点,具备板级验证功能,别的都没有。基本的知识点是:

下降沿检测;

波特率时钟生成;

逐位处理。

并行输出验证接收,简单可靠。只需要几个led灯或者数码管就可以。

裁掉的知识点有:

奇偶验证;

多次接收等。

这样的最小系统简单易学。然而一旦掌握,便入了门,后面很容易提高。

 

2 基本知识点

2.1 下降沿检测

要检测下降沿,至少需要2个量。一般用3个,特老师用了4个,目的是滤波。但是我还没有理解。这里想说的是,除了输入外,其余量应该初始化为1。这符合串口描述,闲置时该路为高电平。监测下降沿的前提是移位,那么实际上监测下降沿的这一路,从输入到最后一个量,应该都是一条线。

下降沿的检测要按系统时钟的频率移位并判断。用波特率时钟频率检测实时性降低,没有必要。

2.2波特率时钟生成

波特率时钟用来和输入帧各位搭接。首先要有一个计数器,对系统时钟计数。每个波特率时钟周期复位一次。可以半周期取反,也可以每个周期置高或置低一次。

2.3逐位处理

下降沿到来后,要推迟一个波特率周期开始接收。有的初学者会在这里小小受挫,比如我。因为是初学,难免遗鞋掉帽子。只要一仿真,马上就明白了。

中间各位依次接收。为便于理解,用8位变量各位对应接收即可,移位有些复杂。

还有一个容易犯的错误是,最后接收完最高位后,位计数器不累加。这样会把停止位付给最高位。通过仿真也很容易纠正。

3.Testbench仿真

仿真其实很容易,不管是ISE还是ModelSim,都有简单易学的教程Tutorial。

建立波形文件猛一看很容易,其实很烦。为了减少数数的负担,我就让波特率周期等于两个系统时钟周期。结果有一些假象,如果你用了好几个reg变量移位接收,就更是如此。其实一般的系统时钟都是几十兆,常用波特率上限115200bps,差着量级呢。

编写testbench也很容易上手。主要的一点是,它可以让你把程序运行看得更清楚。看到预计的波形的时候,你就会有这样的感觉。

不罗嗦了,上一个我写的Testbench。源文件是小试牛刀那篇。一定要把下降沿检测用的两个reg变量初始化为1。

 

`timescale 1ns/1ps

module rxd_test1;

 

reg clk;

reg rx;

wire [7:0]rx_reg;

 

rxd1 d(

                     .clk(clk),

                     .rx(rx),

                     .rx_reg(rx_reg)

              );

             

initial

begin

       clk = 0;

       forever

       #10 clk = ~clk;

end

      

parameter             BPS9600 = 104160;

parameter                     data_given = 8'h01;

integer i;

initial

begin

       rx = 1'b1;

       # BPS9600 rx = 1'b0;

      

       for(i=0;i<8;i=i+1)

       # BPS9600 rx = data_given[i];

      

       # BPS9600 rx = 1'b1;

       $display("%b recieved",rx_reg);

       # BPS9600 rx = 1'b1;

       $stop;

end

 

endmodule

 

仿真结果如下:

 

点击浏览下一页 

 

最后要感谢特权老师。这个testbench是参考他的串口自收发仿真那篇博文写的。真是一个好课件。

最后,对我的仿真步骤做个小总结:

1 建立一个工程。

2 把源文件和testbench文件添加到该工程。

3 在project标签页选中这两个文件,右键菜单选compile all。

4 在library页点开work,双击testbench文件。

5 sim页选testbench文件,右键add/add to wave。Wave窗口打开。

相关文章:
  • 分享modelsim下编译xilinx库的方法
  • 基础篇 第六章 编程与配置
  • 简易频率计
  • 上一篇:3分频——不可综合
    下一篇:基础篇第四章 altera 的IP工具
    最近更新