我再夏宇闻老师书中 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 @, 所以第一个@ 就不在执行了? 顺序到第二个@ 执行? 谢谢各位啦~
此帖出自
小平头技术问答
单独用@(posedge clk) 表示一个延迟行为,即当时钟正跳变沿到来后执行以下语句,如果没有来就等着。该语句不能综合成电路,只表示电路的行为。
而符合标准的always块,如:
always @(posedge clk)
begin
if (rst)
..............
else
case
...........
............
endcase
end
则表示时序逻辑,如果编写符合可综合风格,是可以综合成具体电路的。所以不只是表示行为的语句,还可以转换成时序逻辑。
一周热门 更多>