赞
踩
FPGA/IC设计中根据模块层次的不同有两种基本的设计方法:
设计中这两种方法往往是混用的。设计师首先根据功能定义好顶层模块,然后依据一定的标准来划分各个子模块。同时对子模块进行优化设计,并使用这些子模块来搭建上层模块。两者的工作按相反的方向独立进行,直至在某一中间点会合。
在设计系统时,首先根据系统功能需求进行分析,然后将复杂的系统分解为多个子模块,这些子模块还可以再继续分解为更下一级的子模块,直到满足设计要求。模块化设计可以提高代码的可读性,令设计思路更清晰,便于大型设计的分工合作和独立测试,且有助于设计文件的维护和复用。
假如现在需要你设计一个数字电路,它的功能是:开发板数码的管默认显示数字0,每按下一次按键key,则数码管显示的数字+1(显示10进制数字)。
首先需要的肯定是一个数码管显示模块,它可以根据输入的数据,来显示对应的数字。然后需要一个能检测到按键被按下的模块,它每检测到按键按下一次,都要输出一个使能信号。最后是数据累加1模块,每有一次按键模块使能信号(表示按了一次按键)传过来,它都要使数据累加1。
因为开发板上的按键是机械按键,按下和松开的瞬间都会存在一定的机械抖动,为了正确的检测到按键被按下,还需要设计一个按键消抖模块,而用下降沿检测即可检测按键是否被按下。由于数码管需要显示的数字为10进制,所以数据累加模块产生的数据还需要进行BCD转化,这意味着要再设计一个2进制转BCD模块。
这样一个系统的逐层分解就完成了。看到这你可能会很不解,就这么一个简单的模块还需要搞这么麻烦,直接写到一个模块不就完事了吗?虽然理论上任何设计都可以在同一个模块中完成,但是如果将不同功能、不同层次、不同类型的电路混淆在同一个模块中,却不是一种好的系统设计方法,对于比较复杂的设计,将会导致整个设计杂乱无章,不利于设计的阅读与维护,也会给综合和实现过程带来许多麻烦。
同时,像按键消抖模块,下降沿检测模块和BCD模块可能都是初学者在学习过程中已经设计过了的模块,那么是将这些模块直接拿过来例化方便还是重新写一遍RTL方便?
模块划分的方法和基本原则是:
下面是一些划分模块的优化设计方法:
模块化设计的优点:
模块化设计是设计复杂数字系统的重要方法,对复杂设计的分工、测试以及代码的阅读、维护和复用都有好处。模块划分非常重要,其关系到能否最大程度上发挥项目成员协同设计的能力,更重要的是它直接决定着设计的综合、 实现的耗时与效率。
复用都有好处。模块划分非常重要,其关系到能否最大程度上发挥项目成员协同设计的能力,更重要的是它直接决定着设计的综合、 实现的耗时与效率。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。