7行
wire [3:0] Cnt /*synthesis keep*/;
多了/*synthesis keep*/这个synthesis attribute,指示Quartus II不要对Cnt做最佳化,保留此wire以供SignalTap II观察,注意必须写在分号前面,不能如下写在分号后面。
wire [3:0] Cnt;/*synthesis keep*/ //错
编译后,SignalTap II就能顺利的观察到Cnt的值!!重点是不需改top module的interface,只需对想观察的wire加上synthesis attribute即可。
Quartus II也支援Verilog 2001的語法
- module SignalTapII_wire_keep (
- input iCLK,
- input iRST_N,
- output [3:0] oCNT
- );
- // Verilog 2001
- (*keep*) wire [3:0] Cnt;
- reg [3:0] cnt;
- assign Cnt = cnt;
- assign oCNT = Cnt;
- always@(posedge iCLK, negedge iRST_N) begin
- if (!iRST_N)
- cnt <= 4'h0;
- else
- cnt <= cnt + 4'h1;
- end
- endmodule
8行
(*keep*) wire [3:0] Cnt;
这是Verilog 2001的语法,Quartus II 8.0也能看得懂。
结语
关于避免Quartus II优化reg,/*synthesis noprune*/与/*synthesis preserve*/还是有些差异,程序写到很大时,可能一时很难决定要用哪一个attribute,可以交替试试看,反正1/2的机会,总会对一个。会使用synthesis attribute之后,总算解掉长久以来,无法用SignalTap II观察reg与wire的老问题。
本文关键字:暂无联系方式电脑-单片机-自动控制,电子学习 - 基础知识 - 电脑-单片机-自动控制