wire只可以在声明区、initial区被驱动,并且只能用wire a=1;或者assign a=c&b;为什么?
wire a=1;其实也翻译成一个functor了,也就是说,它等同于连续赋值。
assign自不必说,也是functor。
怎么理解这句话:wire线网不占仿真内存空间
wire都是functor构成的,nets里面的任何一个改变,会传递到下一级所有的节点进行结果刷新,触发各种事件,它本身不需要存储。
reg可以在声明区、initial区、always区被赋值,为什么?
reg a; reg必须被赋值,赋值之后就保持,这是它的核心特性。这个语句,a为x。
reg a=1; 这个被拆分为两步,首先有a,然后在一个线程给它赋值为1。
注意,reg不可以在声明区再次赋值,因为声明区只能用assign,而reg不能用assign赋值。
a=1; 在initial区和always区都可以阻塞赋值。
a<=1; 在initial区和always区都可以非阻塞赋值。这个跟前一个有啥区别,了解了分层事件队列就清楚了。