赞
踩
Verilog中分阻塞赋值和非阻塞赋值两种,组合逻辑多用阻塞赋值,此时使用begin···end语句,将一条执行完再执行下一句,即顺序执行。
而时序逻辑多是并行执行,多用非阻塞赋值,begin···end语句的作用只是相当于函数的花括号,将一段语句划分成块,但是在块里语句依然是并行执行的,在一个模块完成时会同时执行,所以在非阻塞赋值中begin···end语句并非顺序执行的。
问题:q[p]的值是在什么时候赋给q[p+1]的?是一个时钟下降沿for全部执行完,还是一个clk下降沿执行一条for语句?
- always@(negedge clk)
- begin
- for(p=1;p<6;p++)
- q[p+1]<=q[p];
- end
组合逻辑用阻塞赋值,时序逻辑用非阻塞赋值,同一个模块中不要既用阻塞又用非阻塞。。。。verilog是硬件,是电路,所以调试的时候不能设置断点,所有模块都是并行。非阻塞赋值只在整个语句结束后才改变等式左端的值!所以不管for循环几次,用非阻塞赋值,只进行一次
原则1:时序电路建模时,用非阻塞赋
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。