wolfson 发表于 2011-5-9 20:26:08

关于always语句

见如下例句:
always @(posedge clk or posedge clr) ;

问题: always语句敏感触发沿列表里面 是否可以有两个 Posedge 触发沿,即上述语句是否合法。

至芯兴洪 发表于 2011-5-9 20:38:46

如果你的clr是复位信号,如rst的话,就是合法的
如果是指其他时钟信号的话那样的写法应该是错的,我没见过那样的写法

wolfson 发表于 2011-5-9 20:44:37

网上下了一些例子,很多都是这么写的。目前比较疑惑。

至芯兴洪 发表于 2011-5-9 21:02:07

那个信号一般都是复位信号了,如果是时钟信号的话不太肯能,我建议哈!你不必看网上的代码了,见看看夏老师书上怎么写的就行了;
在always模块里面,就只有一个时钟信号clk和一个复位信号reset。或者就只有一个时钟信号

wolfson 发表于 2011-5-9 22:05:30

1、在以下语句:
always@( posedge clk)
    begin
       .....
      end
块语句 begin 和end 之间是否可以:描述一个组合逻辑或者一个时序逻辑,或者两者的皆有?
2、 以下语句:
always@(a or b)
    begin
         ...
      end
因为a,b是电平触发, 那么块语句begin和end之间,只能描述组合逻辑 ?

至芯兴洪 发表于 2011-5-9 22:22:56

第一个:只能描述时序逻辑。
带有posedge negedge关键字的时事件表达式表示沿触发的时序逻辑,没有posedge negedge关键字的表示组合逻辑或电平敏感的锁存器
第二个:只能是组合逻辑了

wolfson 发表于 2011-5-9 22:25:21

那always语句什么时候可以在语句块begin 和end之间,同时描述组合逻辑和时序逻辑。

至芯兴洪 发表于 2011-5-9 22:32:48

那是不能同时的
组合逻辑可用always (a or b)的形式或使用assign语句
时序逻辑用沿触发,不能使用混乱
平时注意代码书写规范,阻塞非阻塞的正确使用

luckymiaojw 发表于 2011-5-9 22:35:00

具体看你要干什么了,这么写是没有问题的,verilog不会规定这么写就不行,但是一般情况下一个always模块里面最好不要有两个时钟信号来触发,这样逻辑很不好控制。一般情况下在FPGA代码里,做异步复位会这么写,但是做同步复位就会只有一个触发信号

zjj81515 发表于 2011-6-20 14:11:00

没见过这么写的
页: [1] 2
查看完整版本: 关于always语句