在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 890|回复: 1

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

[复制链接]
发表于 2018-9-20 09:01:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
至简设计法高效设计

上一节我们描述了明德扬的通用设计方法。在阐述案例过程中,我们画出了大量的波形图。有读者可能会问,在工作中,我们是不是也需要先大量地画波形图,再来写代码呢?

不是的!工作中,我们要设计的系统更加的复杂,一个模块的信号也非常地多,如果我们每个模块都要画波形图,这不是明德扬提倡的至简设计。何况,信号一天,画出来的波形信号也是相当地多,也容易迷糊当中。

上一节我们画的波形图,主要是为了让读者更清晰地理解功能、计数器和信号的关系。如果我们牢记明德扬的规则,我们的设计将非常简单。我们要做的不是波形设计,而是功能设计。

功能设计就是根据功能需求,编写我们的设计代码。我们以上一节中的案例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,从功能说明中找答案。经常训练这种思考和设计方式,几分钟就能设计出精妙的代码,而且因果关系、逻辑关系清楚,几乎不存在出错的可能,从而写出所想即所得的代码。


发表于 2018-9-21 21:42:46 | 显示全部楼层
money gaining???
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-3-29 04:10 , Processed in 0.015924 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表