明德扬娄老师 发表于 2020-4-12 09:54:07

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

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

一、计数器问题
【问题1.1】变量的表示能不能直接用en1、en2来决定,而不用flag_sel?如下图所示。

答:不能,这会违反“组合逻辑的设计规范”,组合逻辑不能有保持不变的功能,否则会生成锁存器,而锁存器是我们不希望有的。
   关于锁存器的问题,可以看如下帖子:【答疑】关于锁存器问题的讨论
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】 状态机写输出的时候,为什么要用时序逻辑呢?这样的话状态改变后,要在第二拍 输出才改变。


答:一般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】如下图所示,在时钟上升沿看信号的问题。

答:采集到的是a点的状态。即MDY看波形的技巧:时钟上升沿前看输入。
注意,该技巧有前提条件:默认为同步信号,即信号与该时钟是同一时钟域信号。

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


【问题4.3】 如下图所示,收到en之后并没有间隔一个时钟周期,只有半个时钟周期。

答:仿真的时候,是以时钟为单位进行判断的。以时钟上升沿看到en=1为开始点,这样看的话,就是1个时钟周期。

五、代码逻辑问题
【问题5.1】如下图所示,tx_flag==0这个条件是否可以不要?为什么要添加这个条件?

答:可以去掉的,结果不会变,这种情况一般是为了符合逻辑上的合理性,比如tx_flag是发送状态的指示信号。当目前是空闲状态的时候,检测到输入数据有效,就进入发送状态,所以条件为tx_flag==0&&din_vld。







a121440357 发表于 2020-6-23 16:46:30

没人理我。。。。

admin 发表于 2020-6-24 10:29:19

a121440357 发表于 2020-6-23 16:46


亲,你是哪里遇到问题了呢?
页: [1]
查看完整版本: 至简设计法问题【汇总贴】