园薇

跟我一起学习FPGA (4)

0
阅读(23312)

我们写软件入门程序,总有一个Hello World。在嵌入式领域,跑马灯相当于这个Hello World。之前的跑马灯我们总是关注于基本的硬件连接与软硬件配合及单步测试之类,其实跑马灯也可以很有科技含量,比如蕴含一个高深点儿的算法。

随着FPGA运算能力的提高,一些应用被放在FPGA上进行计算加速。其中有一个电路很有趣,那就是线性反馈移位寄存器LFSRLFSR可以产生随机数,应用在通信中的M序列,扰码,信道编码,密码学等。具体的理论部分可以查阅资料。另外可以顺便认识了Galois(伽罗瓦),一个天才的数学家http://wenku.baidu.com/view/7ed10b75f46527d3240ce038.html

 

LFSRPrimace中的一个示例程序lfsr.v如下:

为了能够对代码有一个直观的认识,我们可以把信号指定到实际电路管脚上。CME-M5-N-L144-EVB_V1开发板的相关原理图如下(详细资料参考http://www.capital-micro.com/cme_m5.htm。由于PIN62 (IO48)外接20M晶振,而20M对于我们的肉眼来讲太快,所以程序里面用到了分频。用一个26位的计数器来对这20M(20 000 000/s)的晶振进行2^26分频,可以很容易精确地用示波器测出分频后的频率与周期。

 

IO分配参照如下电路图:

 

 

由于开发板上开关没有接上拉,所以输入信号加一个默认状态上拉(pull up)

然后跑Flowplacement, router, bitgen),最后生成的代码Download到开发板上。

假设开始的状态(D7D6D5D4D3D2D1D0=(00000000),那么每过一个周期3.3554432 就会进行跳变一次,可以看到具体的跳变如下所示:

 

我们可以看到这个计数器循环起来了,很好玩吧。