3052|6

69

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

炼狱传奇-层次化设计之战 [复制链接]

本帖最后由 梦翼师兄 于 2015-3-11 10:32 编辑

本节我们通过驱动流水灯的不同方式来体现Fpga中的一个重要思想—层次化设计。
首先介绍一下我所使用开发板的硬件资源,50MHZ时钟输入、4个低电平点亮的流水灯。然后通过两种不同驱动方式的对比使读者更加深层次的了解层次化设计
        下图提供了一段流水灯代码,请问能够实现流水现象吗?

与上述代码所对应的波形图如下


FPGA的时钟是50M,周期20ns,上述代码每隔20ns,流水灯的状态发生改变,即每个灯亮的状态是20ns,时间非常短,人的肉眼观察不到灯亮的状态。
    由于周期特别短导致无法观察到灯亮,因此只要通过计数器将周期延长一定的时间,就可以看到“流水”现象。以下代码通过设计一个计数器count将周期延长到两秒,代码如下
代码经过编译以后得到RTL图如下
下面提供相对应的仿真代码,通过参数传递的方式将led_fsm1 中的NUM赋值为50,代替NUM=28'd100000000,提高仿真效率

具体解释如下,在led_fsm1中NUM 达到28'd100000000-1(NUM-1)时,才会产生时钟的跳转,但是在波形仿真中仿真时间长,效率低,通过参数传递将50传给NUM,这样在仿真中,NUM-1=49时,时钟发生翻转,提高仿真效率,参数传递时,将参数定义为parameter 类型,并且在文件中凡是能够用到参数的地方,尽量要用参数表示,比如用到28'd100000000-1,可以用NUM-1代替,否则会导致参数传递失败。具体参考给出的波形文件
仿真结果如下
从上面的波形看出当count==50-1,led_out 发生改变,而不是count==28'd100000000-1 ,由此可知参数传递成功
那么,请问一下,在一个模块里面既要写count分频模块,又要写led_out的输出,有没有简单的思路呢?
下面我们介绍一种更简单的思考方式,层次化设计
所谓层次设计就是将一个整体项目划分成多个模块,就像电脑由键盘、鼠标、显示器构成一样。分好模块以后,我们就必须要一个顶层文件,将多个模块连接起来。
下面依然用一个50MHz的晶振点亮一个流水灯进行层次化设计为例进行讲解。
首先考虑流水灯由哪几个模块构成。如果用50MHz驱动流水灯的话,50MHz频率过快,会导致点亮流水灯的效果看不到,所以我们需要一个分频模块,将时钟频率降低。为了实现流水灯则需要一个逻辑控制模块,最后将这两个模块在顶层中进行连接
系统框图如下:
接下来,设计具体电路描述代码,实现各模块功能,首先,新建工程如下
然后建立起顶层文件
建立时钟分频模块 led_freq 在这里不建议调用锁相环(PLL),锁相环分频是有限制的,我试了一下如果用锁相环来点灯的话,时钟太快还是看不到流水的现象,所以需要独立编写一个led_freq模块
在写完分频模块以后,就要写如何让流水灯实现,以下是流水灯控制模块的代码,在控制模块(led_ctrl)中 注意信号clk, 此时钟不是50M时钟,是经过分频模块分频以后的时钟,这点是如何实现的呢?可以看后面提供的RTL图,看模块的连接关系,和顶层模块讲解
下面先提供一个led_ctrl 控制的仿真代码,用来测试单独的流水灯控制模块,具体代码如下
led_ctrl模块仿真波形如下
有以上波形可以看出,复位结束以后,流水灯的驱动端口led_out和状态机的状态寄存器state在时钟上升沿的驱动下有效配合,实现了数据的滚动赋值,可以正确实现流水灯设计。

下面编辑顶层模块,顶层模块的主要功能是将分频模块和流水灯控制模块连接起来,我们要求在顶层中只做端口连线,不做任何逻辑。顶层具体代码如下:
进行全编译,结果如下:
编译通过,我们可以首先查看一下RTL级视图,点击Tools->Netlist Viewers->RTL Viewer
查看结果如下
由上图可以说明,最终综合出来的电路和我们所设想的是完全一致的。

通过对比以上两种方法,可以很明显的发现层次化设计的RTL视图能够清晰的反映出模块之间的连接关系,在设计中可以独立的对每个模块进行设计,降低设计的复杂度,尤其是大规模的设计,也便于代码的调试,将一个复杂的系统转换为对每个独立模块的调试,所以层次化设计是一项非常重要的设计技巧

4.png (35.9 KB, 下载次数: 0)

4.png
此帖出自FPGA/CPLD论坛

最新回复

师兄你好,我是FPGA的新手,现在做毕业设计题目是基于FPGA的循环码编译码,想问问师兄   详情 回复 发表于 2015-5-1 14:38

赞赏

1

查看全部赞赏

点赞 关注
 

回复
举报

3414

帖子

0

TA的资源

纯净的硅(高级)

沙发
 
灰常牛x的理解啊,个人觉得数字系统设计的过程,基本上就是时钟处理的过程。
此帖出自FPGA/CPLD论坛

点评

时钟处理是很重要的一环,需要用到一些技巧  详情 回复 发表于 2015-3-11 10:53
个人签名

So TM what......?

 

 

回复

450

帖子

43

TA的资源

一粒金砂(高级)

板凳
 
大型系统分层设计那是必须的,还要层层验证,不然到最后你都不知道做的是不是一开始要做的东东
此帖出自FPGA/CPLD论坛

点评

是的,一开始必须养成这种层次化设计的思维和习惯,好的层次可以大大降低系统设计难度。  详情 回复 发表于 2015-3-11 10:55
个人签名一心一意,精益求精
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(中级)

4
 
ljj3166 发表于 2015-3-11 10:41
灰常牛x的理解啊,个人觉得数字系统设计的过程,基本上就是时钟处理的过程。

时钟处理是很重要的一环,需要用到一些技巧


此帖出自FPGA/CPLD论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(中级)

5
 
Laspide 发表于 2015-3-11 10:53
大型系统分层设计那是必须的,还要层层验证,不然到最后你都不知道做的是不是一开始要做的东东



是的,一开始必须养成这种层次化设计的思维和习惯,好的层次可以大大降低系统设计难度。
此帖出自FPGA/CPLD论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

6
 
师兄你好,我是FPGA的新手,现在做毕业设计题目是基于FPGA的循环码编译码,想问问师兄
此帖出自FPGA/CPLD论坛

点评

761664056 可以加我QQ  详情 回复 发表于 2015-5-1 16:41
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(中级)

7
 
georgefz 发表于 2015-5-1 14:38
师兄你好,我是FPGA的新手,现在做毕业设计题目是基于FPGA的循环码编译码,想问问师兄

761664056 可以加我QQ
此帖出自FPGA/CPLD论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表