当前位置: 首页 > 新闻与活动 > 技术文章 > 在CME-M5上实现线性反馈移位寄存器

在CME-M5上实现有趣的线性反馈移位寄存器

 

作者:京微雅格软件工程师 韩桂丽

 

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

 

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


LFSR在Primace中的一个示例程序lfsr.v如下:


首先,新建一个工程,工程名字为lfsr。


 
 

选择设备M5C06N3L144C7。



 


为工程添加文件,


 


选择使用Verilog来实现编码,文件名字为lfsr。


 


代码如下:


 


文件顶层模块名为lfsr。在工程模块名字lfsr上点击右键,选择Set As Top Module。



 

工程实现的简单逻辑为如下:




 
为了能够对代码有一个直观感受,我们可以把信号指定到实际电路管脚上。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分频,可以很容易精确地用示波器测出分频后的频率与周期。

 


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

 


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


假设开始的状态(D7,D6,D5,D4,D3,D2,D1,D0)=(0,0,0,0,0,0,0,0),那么每过一个周期(3.3554432 秒)就会进行跳变一次,可以看到具体的跳变如下所示:




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


视频:20130707_172555.mp4


主要看左侧LED灯的变化。


如果深入研究,也大有学问可做。可以参考谷晓忱,张民选2011年发表于《计算机工程与科学》期刊33卷第五期的《基于Galois线性反馈移位寄存器的随机数产生》。




     加入我们    |     联系我们    |     官方微博    |     官方博客 京ICP备案12039486号     京公网安备110114001125号