Abstract
Quartus II內的SignalTap II是debug Verilog很好的工具,不過似乎有時無法顯示reg的值,我發現一個小技巧可解決這個問題。

Introduction
使用環境:Quartus II 7.2 SP1 + DE2(Cyclone II EP2C35F627C6)

本文是我較早期的方法,並不是很理想,建議參考(原創) 如何使用SignalTap II觀察reg與wire值? (SOC) (Verilog) (Quartus II) (SignalTap II)

在Altera提供的SignalTap II的tutorial中,大都強調trigger的使用,並且觀察的都是wire,可是在實務上,常需要觀察的是reg,如以下一個很簡單的計數器

Verilog

1 module SignalTapII_register(
2   CLOCK_50,
3   RESET_n
4 );
5 
6 input CLOCK_50;
7 input RESET_n;
8 
9 reg [31:0] counter;
10 
11 always@(posedge CLOCK_50 or negedge RESET_n) begin
12   if (!RESET_n)
13     counter <= {32{1'b0}};
14   else
15     counter <= counter + 1;
16 end
17 
18 endmodule


現在想用SignalTap II觀察counter這個reg的值。

但很不幸的,在SignalTap II竟然看不到reg counter。

 (原創) 如何使用SignalTap II觀察reg值? (IC Design) (Quartus II) (SignalTap II) (Verilog)

若選擇Design Entry(all names),是可以找到reg counter。

(原創) 如何使用SignalTap II觀察reg值? (IC Design) (Quartus II) (SignalTap II) (Verilog)

嘗試將counter加進去後,用Quartus II重新編譯,並執行SignalTap II,卻發現counter值都是0,顯然不合理。

(原創) 如何使用SignalTap II觀察reg值? (IC Design) (Quartus II) (SignalTap II) (Verilog)

Solution
我發現了一個方法,可以在SignalTap II顯示reg值,若有人有更好的方法,歡迎告訴我。我們試著將Verilog改成如下所示

Verilog

1 /* 
2  (C) OOMusou 2008 http://oomusou.cnblogs.com
3  
4  Filename    : SignalTapII_register.v
5  Compiler    : Quartus II 7.2 SP1
6  Description : Demo how to debug reg in SignalTap II
7  Release     : 03/15/2008 1.0
8 */
9 
10 module SignalTapII_register(
11   CLOCK_50,
12   RESET_n,
13   oCounter
14 );
15 
16 input CLOCK_50;
17 input RESET_n;
18 output [31:0] oCounter;
19 
20 reg [31:0] counter;
21 assign oCounter = counter;
22 
23 always@(posedge CLOCK_50 or negedge RESET_n) begin
24   if (!RESET_n)
25     counter <= {32{1'b0}};
26   else
27     counter <= counter + 1;
28 end
29 
30 endmodule


和之前的程式的差異,在於我多了一個output oCounter,然後在21行將reg counter assign給oCounter,利用Quartus II重新編譯後,再用SingnalTap II觀察,發現多了reg counter。

(原創) 如何使用SignalTap II觀察reg值? (IC Design) (Quartus II) (SignalTap II) (Verilog)

將reg counter加入後,使用Quartus II重新編譯,並執行SignalTap II觀察之,就可觀察到reg counter的訊號。

(原創) 如何使用SignalTap II觀察reg值? (IC Design) (Quartus II) (SignalTap II) (Verilog)

完整程式碼下載
SignalTapII_register.7z

Conclusion
工具真的很重要,SignalTap II讓我們可以觀察wire和reg的訊號,這對debug非常重要,由於我也剛剛接觸SignalTap II而已,或許這並不是最正規的方法,但卻能真的看出reg訊號,若有更好的方法,歡迎指正,謝謝。

See Also
(原創) 如何使用SignalTap II觀察reg與wire值? (SOC) (Verilog) (Quartus II) (SignalTap II)

相关文章: