发信人: nel (莱恩), 信区: FPGATech
标 题: [合集] always @ (*) begin
发信站: 水木社区 (Thu Sep 13 11:07:34 2012), 站内

☆─────────────────────────────────────☆
kkforyou (kk) 于 (Thu Aug 23 18:16:12 2012) 提到:

看到有人写的如下代码:
always @ (*) begin
case(ADDR[ 1: 0])
2\'b00 : begin
RDATA = RDATA_u0;
end
2\'b01 : begin
RDATA = RDATA_u1;
end
2\'b10 : begin
RDATA = RDATA_u2;
end
default : begin
RDATA = 0;
end
endcase
end
很奇怪always的敏感参数为‘*’,这样写有什么好处呢?
这用assign 语句可以写出来吧?


☆─────────────────────────────────────☆
roc2007 (roc) 于 (Thu Aug 23 18:20:26 2012) 提到:

个人习惯而已,有人觉得这样写好看可读性强~
*表示任何信号变化都进入always中


☆─────────────────────────────────────☆
msp430 (FPGA) 于 (Thu Aug 23 18:24:12 2012) 提到:

我也比较好奇,这种写法完全等价于 always@(完备的敏感信号)吗?
会不会存在 如果使用*,其他非敏感信号变化 导致 always 块里面错误的动作 这种情况呢?

【 在 roc2007 (roc) 的大作中提到: 】
: 个人习惯而已,有人觉得这样写好看可读性强~
: *表示任何信号变化都进入always中



☆─────────────────────────────────────☆
i8086 (颈椎疼@胃疼@便血@飞蚊症) 于 (Thu Aug 23 18:27:13 2012) 提到:

就是纯组合逻辑

等效于 assign ,,,,,,,,,,,,,,,



【 在 msp430 (FPGA) 的大作中提到: 】
: 我也比较好奇,这种写法完全等价于 always@(完备的敏感信号)吗?
: 会不会存在 如果使用*,其他非敏感信号变化 导致 always 块里面错误的动作 这种情况呢?




☆─────────────────────────────────────☆
roc2007 (roc) 于 (Thu Aug 23 18:27:55 2012) 提到:

放心吧,完全等价,我看到很多ip都是这么写的。
*就是把always块里面的判断信号全部放到()中了
【 在 msp430 的大作中提到: 】
: 我也比较好奇,这种写法完全等价于 always@(完备的敏感信号)吗?
: 会不会存在 如果使用*,其他非敏感信号变化 导致 always 块里面错误的动作 这种情况呢?
:



☆─────────────────────────────────────☆
Rand00m9 (心若在 梦就在) 于 (Thu Aug 23 18:28:52 2012) 提到:

是完备的
自己手写的话可能会漏,导致推断出锁存器啊之类的


☆─────────────────────────────────────☆
kkforyou (kk) 于 (Thu Aug 23 18:37:43 2012) 提到:

只对always块的判断信号敏感?不是always块的信号呢?还是整个代码中全部信号?
【 在 roc2007 的大作中提到: 】
: 放心吧,完全等价,我看到很多ip都是这么写的。
: *就是把always块里面的判断信号全部放到()中了



☆─────────────────────────────────────☆
nel (莱恩) 于 (Thu Aug 23 18:46:39 2012) 提到:

verilog-2005的标准,放心使用


【 在 kkforyou (kk) 的大作中提到: 】
: 看到有人写的如下代码:
: always @ (*) begin
: case(ADDR[ 1: 0])
: ...................



☆─────────────────────────────────────☆
nel (莱恩) 于 (Thu Aug 23 18:47:21 2012) 提到:

漏写敏感列表不会推断出latch,但是会导致仿真跟综合结果不一致。


【 在 Rand00m9 (心若在 梦就在) 的大作中提到: 】
: 是完备的
: 自己手写的话可能会漏,导致推断出锁存器啊之类的




☆─────────────────────────────────────☆
roc2007 (roc) 于 (Thu Aug 23 18:53:17 2012) 提到:

只对always块的判断信号敏感。。。
【 在 kkforyou 的大作中提到: 】
: 只对always块的判断信号敏感?不是always块的信号呢?还是整个代码中全部信号?



☆─────────────────────────────────────☆
Rand00m9 (心若在 梦就在) 于 (Thu Aug 23 19:15:19 2012) 提到:

always @ ( a ) begin
c = b ? a : (~a);
end
这样呢?在b变化时 c是保持的
【 在 nel 的大作中提到: 】
: 漏写敏感列表不会推断出latch,但是会导致仿真跟综合结果不一致。
:
:


☆─────────────────────────────────────☆
Rand00m9 (心若在 梦就在) 于 (Thu Aug 23 19:21:54 2012) 提到:

手头没工具 哪位大侠测试下吧。。
【 在 Rand00m9 的大作中提到: 】
: always @ ( a ) begin
: c = b ? a : (~a);
: end
: ...................


☆─────────────────────────────────────☆
msp430 (FPGA) 于 (Thu Aug 23 19:21:59 2012) 提到:

恩,那确实 直接写 * 就好了,没必要写上全部敏感信号。
【 在 roc2007 (roc) 的大作中提到: 】
: 放心吧,完全等价,我看到很多ip都是这么写的。
: *就是把always块里面的判断信号全部放到()中了



☆─────────────────────────────────────☆
i8086 (颈椎疼@胃疼@便血@飞蚊症) 于 (Thu Aug 23 19:25:04 2012) 提到:

放心,综合工具都会推断出纯组合逻辑的,不会出锁存器的


【 在 Rand00m9 (心若在 梦就在) 的大作中提到: 】
: always @ ( a ) begin
: c = b ? a : (~a);
: end
: ...................



☆─────────────────────────────────────☆
i8086 (颈椎疼@胃疼@便血@飞蚊症) 于 (Thu Aug 23 19:25:30 2012) 提到:

仿真的时候,速度有诧异


【 在 msp430 (FPGA) 的大作中提到: 】
: 恩,那确实 直接写 * 就好了,没必要写上全部敏感信号。




☆─────────────────────────────────────☆
kkforyou (kk) 于 (Thu Aug 23 20:39:49 2012) 提到:

什么意思呢?能详细说一下吗?谢谢
【 在 i8086 的大作中提到: 】
: 仿真的时候,速度有诧异
:
:



☆─────────────────────────────────────☆
lunarorbit (PIPE) 于 (Thu Aug 23 21:46:47 2012) 提到:

报告前辈,俺以前是用具体变量做敏感列表的,后来学会用*号,感觉生活质量挺好。
您说的速度差异是指用了*会导致仿真速度慢吧,因为仿真器会在内部的时间片(是叫做delta cycle么)里面把所有的信号都查一遍么?

但是后来有个工具出了个啥问题,具体的实在想不起来了,不是俺故弄玄虚。

然后现在俺又是用具体的变量做敏感列表了。然后盯着编译器的警告,说谁不在敏感列表里就把它加上就是了。

【 在 i8086 (颈椎疼@胃疼@便血@飞蚊症) 的大作中提到: 】
: 仿真的时候,速度有诧异



☆─────────────────────────────────────☆
nel (莱恩) 于 (Thu Aug 23 21:58:15 2012) 提到:

always @ (*)如果不支持,可能是tool太旧


【 在 lunarorbit (PIPE) 的大作中提到: 】
: 报告前辈,俺以前是用具体变量做敏感列表的,后来学会用*号,感觉生活质量挺好。
: 您说的速度差异是指用了*会导致仿真速度慢吧,因为仿真器会在内部的时间片(是叫做delta cycle么)里面把所有的信号都查一遍么?
: 但是后来有个工具出了个啥问题,具体的实在想不起来了,不是俺故弄玄虚。
: ...................



☆─────────────────────────────────────☆
houshaohua (tearsinheaven) 于 (Thu Aug 23 22:08:08 2012) 提到:

敏感变量怎么写,RTL仿真是有影响的吧。
但是最终的结果是电路,想想电路是啥样的,应该和敏感列表无关吧


☆─────────────────────────────────────☆
lunarorbit (PIPE) 于 (Fri Aug 24 09:33:20 2012) 提到:

不是不支持,好像是啥东西不对劲,俺现在拼命想回忆起来,奈何就是没印象了。
否则俺也不会放弃这么有生活质量的代码风格啊
【 在 nel (莱恩) 的大作中提到: 】
: always @ (*)如果不支持,可能是tool太旧



☆─────────────────────────────────────☆
kkforyou (kk) 于 (Fri Aug 24 09:59:55 2012) 提到:

盼望详情!

【 在 lunarorbit 的大作中提到: 】
: 不是不支持,好像是啥东西不对劲,俺现在拼命想回忆起来,奈何就是没印象了。
: 否则俺也不会放弃这么有生活质量的代码风格啊



☆─────────────────────────────────────☆
i8086 (颈椎疼@胃疼@便血@飞蚊症) 于 (Fri Aug 24 10:12:05 2012) 提到:

貌似最有生活质量的代码风格是 always@*


【 在 lunarorbit (PIPE) 的大作中提到: 】
: 不是不支持,好像是啥东西不对劲,俺现在拼命想回忆起来,奈何就是没印象了。
: 否则俺也不会放弃这么有生活质量的代码风格啊




☆─────────────────────────────────────☆
LeuSe (还是太冲动啊) 于 (Fri Aug 24 10:46:04 2012) 提到:

不可能
【 在 i8086 (颈椎疼@胃疼@便血@飞蚊症) 的大作中提到: 】
: 仿真的时候,速度有诧异




☆─────────────────────────────────────☆
spadger (imdx) 于 (Sat Aug 25 13:31:47 2012) 提到:

verilog-2001
【 在 nel (莱恩) 的大作中提到: 】
: verilog-2005的标准,放心使用




☆─────────────────────────────────────☆
nel (莱恩) 于 (Sat Aug 25 19:54:11 2012) 提到:

IEEE把verilog修订到2005版本,所以我后来都说2005了,嗯


【 在 spadger (imdx) 的大作中提到: 】
: verilog-2001




☆─────────────────────────────────────☆
houshaohua (tearsinheaven) 于 (Sat Aug 25 22:31:58 2012) 提到:

最新的是2009,一统verilog HDL和system verilog。

【 在 nel 的大作中提到: 】
: IEEE把verilog修订到2005版本,所以我后来都说2005了,嗯
:
:



☆─────────────────────────────────────☆
Sidney (悉尼) 于 (Sat Aug 25 22:36:40 2012) 提到:

有一个,xilinx 的xst对v5系列芯片,对于数组在敏感列表里不支持
【 在 kkforyou (kk) 的大作中提到: 】
盼望详情!

【 在 lunarorbit 的大作中提到: 】
: 不是不支持,好像是啥东西不对劲,俺现在拼命想回忆起来,奈何就是没印象了。
: 否则俺也不会放弃这么有生活质量的代码风格啊



☆─────────────────────────────────────☆
arma9 (扣扣) 于 (Mon Aug 27 17:49:53 2012) 提到:

这样写很方便啊。


☆─────────────────────────────────────☆
yakingme (alone all the way) 于 (Fri Aug 31 17:24:07 2012) 提到:

这个也遇到过 synplify就可以
【 在 Sidney 的大作中提到: 】
: 有一个,xilinx 的xst对v5系列芯片,对于数组在敏感列表里不支持
: 盼望详情!
:
: ...................