请选择 进入手机版 | 继续访问电脑版

明德扬论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信扫一扫,快捷登录!

查看: 246642|回复: 4

至简设计法问题【汇总贴】

[复制链接]
发表于 2020-4-12 09:54:07 | 显示全部楼层 |阅读模式

马上注册,看完整文章,学更多FPGA知识。

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

x
【前言】经常被问到,不使用至简设计法,而是XXXX方法来实现,行不行的问题。现在先统一回复一下。
1. 实现一个功能的方法有很多,所以结论是可行。至于您所提的方法行不行,我们可能没实践过,需要您实际验证一下为好。
2. 您在实际验证中,要注意一下代码规范。
3. 至简设计法,是我们认为的最好方法,它方法综合考虑了接口时序、代码规范、复用性这些因素。特别是复用性要留意。
4. 特别是复用性,部分人由于缺少实践的缘故,难以想象到复用的场合。因此与我们讨论时,容易陷入“这一道题”有哪些方法可以设计,但没想过不同场景下的复用情形。

一、计数器问题
【问题1.1】变量的表示能不能直接用en1、en2来决定,而不用flag_sel?如下图所示。
32142D0B-21FD-4207-9B92-6D88A250DDDE.png
答:不能,这会违反“组合逻辑的设计规范”,组合逻辑不能有保持不变的功能,否则会生成锁存器,而锁存器是我们不希望有的。
     关于锁存器的问题,可以看如下帖子:【答疑】关于锁存器问题的讨论
[url=【答疑】关于锁存器问题的讨论 http://www.fpgabbs.cn/forum.php? ... =899&fromuid=100782

【问题1.2】变量法时,使用时序逻辑,判断en1和en2来决定变量x,是否可行?
答:功能可以实现,但意味着这需要一个寄存器组来存储变量x的值。注意,是一个寄存器组,非一个寄存器,因为x的每个比特都要存储,例如x=5,就需要3个寄存器存储。
      所以,功能可以实现,但消耗的资源更多。

【问题1.3】 设计功能要求实现一个倒计时功能,数字是递减的。MDY的计数器模板都是递增的,是不是要改这个模板?
答:强烈建议不要改动模板,仍然是使用自增的计数器,例如cnt0,它是递增的,并且数20个。
      然后再设计一个信号,例如data,data = 19-cnt0。这样就实现了递减功能。
      所以,不要改架构。      

二、状态机问题
【问题2.1】 状态机写输出的时候,为什么要用时序逻辑呢?这样的话状态改变后,要在第二拍 输出才改变。
TIM图片20200611183356.png

答:一般FPGA设计,时序逻辑是常态,组合逻辑是例外。也就是说,一般设计时,就优先考虑时序逻辑设计,当时序对不齐的时候,再考虑写成组合逻辑的形式。
模块的输出信号,一般就是时序逻辑输出,以输出稳定的、不会跳变的信号给下游模块处理。

【问题2.2】 状态机写输出用时序逻辑,导致输出信号dout与state_c对不齐。
答:状态机的state_c是与输入或者条件对齐的,不是与输出对齐的。
      一般不会有功能要求,说输出要与state_c对齐的。


三、信号定义问题
【问题3.1】请问咱这个cmos信号采集模块输出的dout_vld信号,当输出数据有效时,它是一个脉冲信号,还是持续的高电平信号呐
答:MDY里的任何vld信号,都用来表示数据的有效性,并且还表示了有效的个数。 即1个时钟的高电平脉冲表示1个数据有效;2个时钟的高电平脉冲,表示2个数据有效。

【问题3.2:使能信号同时出现问题】 明德扬的练习中,接口信号会有多个en的情况,如en1,en2,en3等,或者如读使能rd_en和写使能wr_en。当这些信号同时有效时,该如何处理?
答:在模块内设计的时候,如果接口存在多个输入的en信号,我们有如下两个要求
       1. 上游模块发en的时候,同一个时刻只能一个en有效,不能同时多个en有效。(上游模块设计时保证)
       2. 本模块在处理en的期间,上游期间不要再发en过来。(模块之间使用rdy来确认)
       这样的处理方式,将大大简化了模块内部的设计;同时,也不会增加上游模块的负担。

四、FPGA波形的问题
【问题4.1】如下图所示,在时钟上升沿看信号的问题。
TIM图片20200519101514.png
答:采集到的是a点的状态。即MDY看波形的技巧:时钟上升沿前看输入。
注意,该技巧有前提条件:默认为同步信号,即信号与该时钟是同一时钟域信号。

【问题4.2】按照MDY看波形的技巧:时钟上升沿前看输入信号,即信号等于1后,下一个时钟沿才检查到该信号为1。但我在仿真的时候,发现是信号变1的瞬间就检查到了。
答:该问题的解答,请看如下贴子:关于在仿真软件中计数器提前计数的问题   http://www.fpgabbs.cn/forum.php?mod=viewthread&tid=709


【问题4.3】 如下图所示,收到en之后并没有间隔一个时钟周期,只有半个时钟周期。
0A937C1E-50FF-4bc7-AE20-BD6A42FB8F7D.png
答:仿真的时候,是以时钟为单位进行判断的。以时钟上升沿看到en=1为开始点,这样看的话,就是1个时钟周期。

、代码逻辑问题

【问题5.1】如下图所示,tx_flag==0这个条件是否可以不要?为什么要添加这个条件?
钉钉网络班.jpg
答:可以去掉的,结果不会变,这种情况一般是为了符合逻辑上的合理性,比如tx_flag是发送状态的指示信号。当目前是空闲状态的时候,检测到输入数据有效,就进入发送状态,所以条件为tx_flag==0&&din_vld。







0

主题

2

帖子

31

积分

新手上路

Rank: 1

积分
31
发表于 2020-6-23 16:46:30 | 显示全部楼层
没人理我。。。。
回复

使用道具 举报

78

主题

106

帖子

4625

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4625
发表于 2020-6-24 10:29:19 | 显示全部楼层

亲,你是哪里遇到问题了呢?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|MDYBBS ( 粤ICP备16061416号 )

GMT+8, 2024-3-28 17:55 , Processed in 0.052476 second(s), 23 queries .

Powered by Discuz! X3.4

本论坛由广州健飞通信有限公司所有

© 2001-2019 Comsenz Inc.

快速回复 返回顶部 返回列表