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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 7747|回复: 11

[求助] if……else内部的执行顺序

[复制链接]
发表于 2009-12-15 11:40:52 | 显示全部楼层 |阅读模式

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

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

x
最初吧,学习之后认识到,一个always一个触发器,可是不完全是这样,后来看资料学习到:在always 模块里面,只要有非阻塞判断也产生一个触发器。这样仔细想想,一个能实现的功能模块在一个always(都用非阻塞判断) 里面实现和多个always 实现,所用到触发器资源应该是一样的,可是我有一次的确发现,用多个always 还真是比一个always 模块实现占用资源多!!!!
其实,看到很多经典代码都是分很多always 来实现,可是有的时候 对一个变量的赋值,不能在多个always 里赋值,这样造成可能一个always 里面begin ^end 之间很长。
这样问题又来了,那if……else if A  ,if B ,if  C ,那A  B C 3个判断 是并行的吗?这里搞混了,很需要和人讨论一下。当然我知道,这3个判断不是所提倡的避免锁存器的风格,可是也看到过资料说:尽量避免缺少else  的锁存器代码,说明有时还是可以的。
希望高人 指点一下,内部 (次级)if  之间的执行顺序,谢谢!!
发表于 2009-12-15 15:30:41 | 显示全部楼层
建议贴几段典型的代码,大家讨论一下
发表于 2009-12-15 20:54:30 | 显示全部楼层
内部if之间的执行顺序应该是并行的,会根据代码产生相应的MUX逻辑电路
最好不要缺失else
 楼主| 发表于 2009-12-15 23:01:43 | 显示全部楼层
3# s0lar

很可能就是这种情况,生成 MUX ,并行执行。主要是我 电脑上装的synplify pro 卸载了,没装。同时QUARTUSII  上也不知道如何查看综合后的电路。
发表于 2009-12-16 02:33:02 | 显示全部楼层
4# ruiruio4

确实else可能会导致产生latch,不过最后的电路还是可以预知的
发表于 2009-12-16 08:35:51 | 显示全部楼层
1、在时序电路中缺失else并不会生成latch,只有在组合逻辑中缺失else才会生成latch
2、在QuartusⅡ中查看RTL的方法如下:
    Tools->Netlist Viewers->RTL Viewer
 楼主| 发表于 2009-12-16 10:00:02 | 显示全部楼层
今天继续查看了一下资料,看的是夏宇闻的334页的《verilog经典教程》中的第24页,大家可以去看看。下面也弄出来大家看看:
在“always”模块内,逻辑是按照指定的顺序执行的。“always”块中的语句称为“顺序语句”,
因为它们是顺序执行的。请注意,两个或更多的“always”模块也是同时执行的,但是模块内部的语
句是顺序执行的。 看一下“always”内的语句,你就会明白它是如何实现功能的。 if..else… if
必须顺序执行,否则其功能就没有任何意义。如果else语句在if语句之前执行,功能就会不符合要求!
为了能实现上述描述的功能,“always”模块内部的语句将按照书写的顺序执行。
这里提到的 “如果else语句在if语句之前执行,功能就会不符合要求!”可能是一种习惯性所为吧,至今很少“else语句在if语句之前执行”过。这么一说,才引起注意!!
 楼主| 发表于 2009-12-16 10:13:36 | 显示全部楼层
本帖最后由 ruiruio4 于 2009-12-16 10:32 编辑

6# sirius.yuan
非常感谢!回帖很有针对性嘛,现在逛论坛久了,发现没什么新资料值得下载了。
只有看过资料之后,对实现特定目标的时候(例如你打算做USB通讯、VGA显示、SDRAM读写时序、AD驱动、编解码实现等等)敲代码过程自己体会出的一些问题,来论坛发贴,揪出细节问题来和大家讨论了。

为了避免网友重复上传资料(没看到共享区),也避免让太多朋友重复下载资料,建议去论坛的那个资料共享区 逛逛,去那上传去那下载,希望在交流区 呈现出更多更好的问题贴子,让大家解决更多的疑惑……反正好像 那个板块 ,我之前是没有权限去的,现在可以了。
发表于 2009-12-16 12:57:51 | 显示全部楼层


今天继续查看了一下资料,看的是夏宇闻的334页的《verilog经典教程》中的第24页,大家可以去看看。下面也弄出来大家看看:
在“always”模块内,逻辑是按照指定的顺序执行的。“always”块中的语句称为“顺序语句” ...
ruiruio4 发表于 2009-12-16 10:00



下语文的书很差劲
发表于 2009-12-16 13:04:19 | 显示全部楼层
6# sirius.yuan

这样子的,always块并不总是时序电路的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

X

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

GMT+8, 2025-6-23 17:34 , Processed in 0.029501 second(s), 10 queries , Gzip On, MemCached On.

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