#1有什么用
always@(posedge clk)begin
if(!rst_n)
a<=#1 1'b0;
else if(conditon1)
a<=#1 1'b1;
else if(conditon2)
a <=#1 1'b0;
end
其中这个#1 具体意义是什么,除了仿真时的意义,是否是可以综合的。在FPGA或者ASIC中,是否需要这样写,意义大吗?有好处吗?
仿真时候用的,#1不可综合
个人习惯而已
可以不加延时
1楼正解,在仿真的时候用来查看哪条路径比较长,这样写完设计之后就能在不综合之前大致了解每条路径的延迟情况
不是特别理解
也即是综合之前都要把 #1 去掉的啦?
另外了解那条路径延时长怎么理解?都是寄存器啊,综合布线路径长短的影响一般不是在组合逻辑上啊。
也觉得困惑。知道是用来仿真的。但是怎么实现你说的查看哪条路径的长短呢?谢谢指教!
这个#1一般应该是给仿真工具用的,仿真工具里面有一个最小单位时间deta。一般来当CLOCK的上升沿到来的时候刚好采到前一个周期的数据(因为有实际器件有延时嘛), 但如果不加#1, 有时仿真工具就会搞错,会采到当前周期这个数据(看上去就像组合逻辑一样),当然这样的机率比较小,但试想一个大工程如果遇到了这个问题找起来还是很花时间的。
#1,其实是为了看波形的时候让信号的翻转和时钟的边沿隔开,便于debug。
综合的时候,会忽略掉的。
综合时候是被自动忽略的,如果还有#2 #3出现,就是在写RTL时为了估测后端的情况凭经验加上的时间延迟。但如果都是#1,就如楼下所说,是为了debug时数据改变时刻与clock边沿错开,比较容易观察。
代表延时信息
1:可以做到么?
2:就算可以做到,有意义么?
仿真的时候便于看波形,综合的时候应该可以自动忽略掉
我还是觉得不做延时,看波形比较方便一点。做延时的话,波形里面的毛刺太多,看着太乱。
毛刺?时序逻辑前仿会有毛刺?
#1 is just for simulator to simulate delay 1 unit time.
it's easy for designer to make sure the latching data.
logic synthesizer will ignore #1 syntax.
the real latency is depend on path delay.
