刚写了一段 Verilog代码,辛辛苦苦花了很长时间综合,在debug的过程中,却找不到需要debug的信号了,查看网表发现没有?
这种情况是因为我们的某些中间信号被优化掉了。
被优化掉的原因有可能是你这个信号确实对后面的输出没用,我写的这个项目由于还在中间过程,功能还没有完善,所以不想把大量的中间信号作为输出,所以被优化掉了,以至于在debug过程中找不到这些信号。
如何解决这个问题呢?
很简单,最常用的就是在变量定义的时候添加语句:
(* keep = "true" *)
例如:
(* keep = "true" *) reg [15 : 0] dataout_ii1; (* keep = "true" *) reg [15 : 0] dataout_ii2; (* keep = "true" *) reg [15 : 0] dataout_ii3; (* keep = "true" *) reg [15 : 0] dataout_ii4; (* keep = "true" *) reg [15 : 0] dataout_ii5; (* keep = "true" *) reg [15 : 0] dataout_ii6; (* keep = "true" *) reg [15 : 0] dataout_ii7; (* keep = "true" *) reg [15 : 0] dataout_ii8; (* keep = "true" *) reg [15 : 0] dataout_ii9; (* keep = "true" *) reg [15 : 0] dataout_ii10; (* keep = "true" *) reg [15 : 0] dataout_ii11; (* keep = "true" *) reg [15 : 0] dataout_ii12; (* keep = "true" *) reg [15 : 0] dataout_ii13; (* keep = "true" *) reg [15 : 0] dataout_ii14; (* keep = "true" *) reg [15 : 0] dataout_ii15; (* keep = "true" *) reg [15 : 0] dataout_ii16;
这样即可,从网表中可以找到这些变量了。
当然还有其他办法,例如:
1、 信号前面将keep hierarchy选择yes ,或者选择soft(在综合时保持层次),这样有利于你从模块中找到你想抓取的信号和信号名不被更改。
(* keep_hierarchy = "yes" *)module fre( a, b, c, d);
or
(* keep_hierarchy = "yes" *)fre fre_inst( a, b, c, d);
2、 信号前面使用(* DONT_TOUCH= “{TRUE|FALSE}” *),可以防止信号在综合,以及布局布线的时候被优化掉。
(* dont_touch = "true" *) wire a;
不在话下。
版权声明:本文为CSDN博主「Reborn Lee」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Reborn_Lee/article/details/99550802