请教 @ 的用法

2019-03-25 10:10发布

我再夏宇闻老师书中 IIC一节时,描述SDA数据线上的数据存入寄存器,数据在SCL的高电平有效(就是高电平的时候SDA上要稳定,在SCL低电平的时候,SDA上的数据可以改变),大概代码如下:

output [7:0] shift;                    //  寄存器
  begin
      @ (posedge scl )    shift[7] = sda;
      @ (posedge scl )    shift[6] = sda;
      @ (posedge scl )    shift[5] = sda;
      @ (posedge scl )    shift[4] = sda;
      @ (posedge scl )    shift[3] = sda;
      @ (posedge scl )    shift[2] = sda;
      @ (posedge scl )    shift[1] = sda;
      @ (posedge scl )    shift[0] = sda;
       .......

    end

我想问下 单独的@出现时 和always @ 连用 会有什么差别?  

我知道在begin...end 里代码是顺序执行的,  这样理解有没有错:  单独使用 @ 时,比如第一个@,后面敏感列表中变化时,执行相应功能。然后敏感列表再次变化,但因为不是 always @, 所以第一个@ 就不在执行了? 顺序到第二个@ 执行?  谢谢各位啦~ 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
3条回答
夏宇闻
2019-03-25 15:48
< /

原帖由 forlsy 于 2011-8-12 11:27 发表 我再夏宇闻老师书中 IIC一节时,描述SDA数据线上的数据存入寄存器,数据在SCL的高电平有效(就是高电平的时候SDA上要稳定,在SCL低电平的时候,SDA上的数据可以改变),大概代码如下: output [7:0] shift; ...

 

单独用@(posedge clk) 表示一个延迟行为,即当时钟正跳变沿到来后执行以下语句,如果没有来就等着。该语句不能综合成电路,只表示电路的行为。

 

而符合标准的always块,如:

 

always @(posedge clk)

    begin

         if (rst)

          ..............

       else

          case

           ...........

           ............

         endcase

    end

 

则表示时序逻辑,如果编写符合可综合风格,是可以综合成具体电路的。所以不只是表示行为的语句,还可以转换成时序逻辑。

一周热门 更多>