FPGA至简设计法高效设计[1241003385]

发布时间:2018-9-20 09:19    发布者:luckyb1
至简设计法高效设计
上一节我们描述了明德扬的通用设计方法。在阐述案例过程中,我们画出了大量的波形图。有读者可能会问,在工作中,我们是不是也需要先大量地画波形图,再来写代码呢?
不是的!工作中,我们要设计的系统更加的复杂,一个模块的信号也非常地多,如果我们每个模块都要画波形图,这不是明德扬提倡的至简设计。何况,信号一天,画出来的波形信号也是相当地多,也容易迷糊当中。
上一节我们画的波形图,主要是为了让读者更清晰地理解功能、计数器和信号的关系。如果我们牢记明德扬的规则,我们的设计将非常简单。我们要做的不是波形设计,而是功能设计。
功能设计就是根据功能需求,编写我们的设计代码。我们以上一节中的案例4为例,说明什么叫功能设计。
案例4的功能要求是:当收到en=1时,dout间隔1个时钟后,产生2个时钟周期的高电平脉冲,并且重复3次。
由题意可知,要对“间隔”和“高电平”个数进行计数,但没有信号表示“高隔”,为此想出补充一个信号flag_add,用来表示计数区域。间隔时间+高电平时间,得到计数器数3个。
                              
我们看到重复3次这一句话,这就说明还有一个计数器计数重复的次数。自然地想到,每完成一次就加1,一共加3次。得到代码如下。
在设计计数器0的时候,新增了信号flag_add。那进一步思考,什么时候要产生动作,那就让flag_add1。自然,从题意可知,en==1是开始,重复次数完了,那就结束,不用再产生信号。所以flag_add代码。
最后我们再来设计dout,由题意可知,每次均是间隔1个之后dout12个时钟之后变0。那用什么来数这个12呢?cnt0。综合起来,就是说cnt0数到1个后,dout1,数完后变0
总结:从功能的文字描述中出发,根据功能要求来设计代码。在设计时,一定要理解清楚信号的因果关系,例如为什么变0,为什么变1,从功能说明中找答案。经常训练这种思考和设计方式,几分钟就能设计出精妙的代码,而且因果关系、逻辑关系清楚,几乎不存在出错的可能,从而写出所想即所得的代码。

本文地址:https://www.eechina.com/thread-547471-1-1.html     【打印本页】

本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。
您需要登录后才可以发表评论 登录 | 立即注册

厂商推荐

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表