微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > 微电子学习交流 > veriog中的always@语法问题

veriog中的always@语法问题

时间:12-12 整理:3721RD 点击:

那就没问题了
不过tmp1 tmp2出现在敏感列表里的情形 除了这种仿真时的多处赋值还有其他应用场合吗?

我觉得没什么意义,multi-drive在design里是不允许的,在testbench里也不好控制。

你这个例子并不能证明你的结论,因为verilog不能在不同的过程块对同一变量赋值,这会产生亚稳态或竞争,你的tmp1和tmp2运行结果之所以有确定的值,是因为仿真器的顺序执行造成的,因为仿真器的算法和verilog并不一样,每一种仿真器核心算法都可能会不同,但verilog的所有进程是并发执行的,如果你想证明你的结论,可以尝试用force语句对tmp1 tmp2强制赋值。

那你举个multi-drive并且好控制的例子?
当然前提得是single drive不好描述

@flyelectron
抱歉,没看明白你想说什么,似乎和我所说的没啥关系……
1. 写design code时不能用multi-drive,不代表Verilog不支持multi-drive,编译时不报错代表这个结论是对的。
2. 亚稳态和multi-drive有关系?我不这么认为。
3. mutli-drive的确可能会导致竞争。
4. 我写的例子只是想了解@*的等效触发条件,跟你说的一通Verilog如何运行有什么关系?你在说什么我真没看明白。

2 仿真时同时在不同地方给同一个信号赋0和1,妥妥的一根红线出现在屏幕上

还是你那段代码的问题
initial块里的tmp1 和 tmp2 赋值根本没起作用,被后面的always块里的再次赋值覆盖了,这个是仿真器执行的问题,所以我才说你用 force 语句对tmp1 tmp2赋值,再看看。亚稳态与multi-drive是没有必然联系,但是不能说明没有一点关系,你能保证这个被multi-drive的信号所驱动的触发器就一定能满足setup和hold?

multi-drive都不能综合,根本谈不上setup-hold

额,你可能掉进“design code”的前提了,问题是我可从没说过这是段design code啊。再者:
1. Design code是不可能有initial block的
2. Design code是不可能有multi drive的

我没有试过这种情况综合会不会报错,因为从来都不会这样写

严格按照coding style写代码的话,这两个是一样的。没必要挑战语法的模糊地带,给自
己带来麻烦
1,一个always块只包含一个变量
2,if else匹配
3,case必须包含default

对寄存器,if-else完全匹配的话,clock-gating率堪忧
对组合逻辑,倒是应该这样避免latch

没在讨论dff,一直是组合

一般自称不用老油条,可以用老邦菜
哈哈

感觉设计上的很多精力,都是花在“很多时候”之外的“少许时候”的考虑上的,呵呵。

好吧,老菜邦呢?
其实,我这招写状态机最管用,可以省掉大量的代码量。假如你一上来就给nt_st = cr_st的话。

也是一样的。。。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top