马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 snowman3852 于 2013-7-18 11:29 编辑
假设在read_test模块中设置计数器 signal test_cnt: std_logic_vector(8 downto 0):=(others=>'0'); 要保留该计数器不被综合掉,需要如下方法 1.给该模块增加一个输出端口,例如 err_flag_s : out std_logic (注意:调用read_test模块的上层模块在声明read_test模块时,可以不声明该输出端口err_flag_s,也就是上层模块可以认为没有这个端口。) 2.按照如下方法将test_cnt赋值给err_flag_s err_flag_s <= '1' when (test_cnt = 100) else '0'; 有其它需要保留的信号也这样赋值给err_flag_s err_flag_s <= '1' when (test_cnt = 100 or xxx = 0) else '0'; 3.这样就能保证所要看的信号不被综合掉了。而且上层模块可以不关心这个情况。
该方法已经上板验证过。
我从网上看到的attribute syn_keep 和 attribute preserve 方法,我试过了可是不行,不知道大家行不行。
有人说需要把信号加到顶层,设置为虚拟pin。我觉得麻烦,我要是从底层模块需要加一个信号保留,那还要影响几级模块啊。所以我试了试以上方法,是成功的。verilog应该也行吧,但是我没试。 |