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

发布时间:2018年09月20日 09:09    作者: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,从功能说明中找答案。经常训练这种思考和设计方式,几分钟就能设计出精妙的代码,而且因果关系、逻辑关系清楚,几乎不存在出错的可能,从而写出所想即所得的代码。


欢迎分享本文,转载请保留出处:/thread-547471-1-1.html     【打印本页】
您需要登录后才可以发表评论 登录 | 立即注册

回顶部
网站地图