1,如何保持信號不被綜合
對這種情況的處理是增加約束,共有2種情況:
a, 需要保留的信號類型是 wire
在定義的時候在後面增加/* synthesis keep */。
例如:wire wire_name/*synthesis keep */;
b,需要保留的信號類型是 reg
跟reg相關的synthesis attribute,共有兩種,分別是/*synthesis noprune*/和/*synthesis preserve*/,兩者的差別如下:
/*synthesis noprune*/ 避免 Quartus II 優化掉沒output的reg。
/*synthesis preserve*/避免 Quartus II 將reg優化爲常數,或者合併重複的reg。
定義的時候在後面增加相關的約束語句。
例如:reg r_name/*synthesis noprune*/; 或者 reg r_name/*synthesis preserve */;
將/*synthesis noprune*/等synthesis attribute 語句放在module後面,這樣整個module的所有reg將不被優化,
從而不用再一一寄存器指定。
注意:以上所提到的使用語言爲verilog。synthesis attribute必須寫在結束分號前面, 寫在分號後面只相當於註釋:
正確:reg r_name/* synthesis preserve */;
錯誤:reg r_name;/* synthesis preserve */
2,如何快速找到想要抓取的信號
選擇 filter 爲 Signal Tap : pre-synthesis 。對於模塊間的信號,Named 填入模塊的端口名,注意不要填模塊間的網絡名,
對於模塊內部的信號, 可以直接搜索,如果找不到, 可以參考1增加相應約束。