2014-10-29 20 views
0

我有點難住。如何調試Verilog代碼,其中仿真功能如預期的那樣工作,但實現沒有?

我有我的模擬(ISIM)測試過的一個相當大的Verilog模塊,並將其用作我想要的。現在我已經將它與現實生活中的其他設備結合使用,並且一些東西可以工作,而有些東西不會。

例如,

我可以發送使用指令A的值,並驗證使用命令B.,正確值被接收工作沒有問題。

但是,如果我用指示C發送的值,我無法驗證它是使用命令D.在模擬它工作正常接收,所以我覺得我真的不能從模擬更多的獲得任何。

我已經看過邏輯分析儀上的信號,並且控制器設備(不是我的設計)發送正確的消息。當我發出命令B時,我可以看到從我的設備返回的值是正確的(我知道SPI工作正常)。我不知道C或D是否正常工作。 D只返回0,所以也許C首先不起作用。沒有辦法通過Verilog,而且這個模塊被封裝爲Vivado的IP。

這裏有兩個截圖。首先是模擬(我發送5,然後是2,然後我希望它在下一次發送時返回4,它會發送;後面是零)。 enter image description here

以下是我在現實中得到(前兩個字節並不重要,5是從之前發送值遺漏): enter image description here

這裏是一個命令(B),在工作返回一個正確的值(它響應正在發送的0x01): enter image description here

有沒有人有任何建議來調試?我幾乎不知道如何着手。 我不能在模擬中真正重現此行爲。

+1

你是否合成了RTL來獲得一個門文件。你應該能夠模擬大門並獲得相同的結果。 RTL門限不匹配通常是由於不遵循RTL最佳實踐。你能否創建一個顯示問題的最小例子? – Morgan 2014-10-29 22:01:44

回答

3

由於您正在合成FPGA,因此您可以在如何調試合成的片上設計方面有更多的選擇。在您使用Vivado時,您可以使用ChipScope查看系統中的任何信號;使您可以像仿真一樣隨時查看該信號的波形(儘管受到更多限制)。通過將ChipScope IP包含在綜合中,您可以將波形數據發送回Vivaod軟件,該軟件將顯示所選信號的波形,以幫助您在系統運行時查看FPGA內部發生的情況。 (注意,如果你使用的是Altera的東西,你可以使用它們相當的SignalTap;它幾乎是一樣的東西)

有許多關於如何合併和運行ChipScope的教程,來自Xilinx網站的繼承人: http://www.xilinx.com/support/documentation/sw_manuals/xilinx2012_4/ug936-vivado-tutorial-programming-debugging.pdf 許多其他使用ISE,但步驟非常相似,因爲兩者通常都涉及到使用coregen工具(儘管我認爲您還可以通過合成流程添加ChipScope,因此有多種方法可以將它合併到您的設計中)。

在FPGA上,您可以訪問實際上是內部邏輯分析儀的內容。請注意,它會佔用FPGA上的一些LE,並可能佔用相當數量的Block RAM,具體取決於您想要取出信號的樣本數。

蒂姆的回答提供了一個很好的描述如何處理片上調試,如果你是純粹的ASIC設計;所以如果您想了解更多關於標準的非FPGA調試解決方案的信息,請參閱他的答案。

+0

謝謝!我一直在試圖讓ChipScope做任何事情,但事實證明這很困難(就像一個'困難'的孩子)。我不明白爲什麼,但它不讓我查看所有信號。例如,我只能查看控制寄存器的第5位和第7位。其次,與Xilinx SDK(ARM代碼)的集成是痛苦的。我目前正在通過在C++代碼中設置斷點來解決它,當然它不想。它似乎也沒有執行C++代碼,只是永遠坐在反彙編器的某個隨機點。 – Mewa 2014-10-30 23:26:21

+0

有趣;不幸的是,自從我用ChipScope做了任何事情並且沒有訪問我可能幫助你的FPGA之後,它已經有一段時間了。它是正確的工具,但與工作可能有點令人討厭。儘管祝你好運! – Unn 2014-10-31 00:04:40

2

在這種情況下,您可能想要考慮添加僅用於調試的附加邏輯。 ('調試設計')是用於思考這種邏輯的通用術語。

所以你有一個芯片接口(SPI),你不知道它是否工作正常。由於它看起來沒有工作,所以你不能相信通過這個接口的調試,因爲如果你得到一個奇怪的結果,你不能確定它的意思。

由於您正在使用FPGA,除SPI之外是否還有其他接口可以正常工作?也許7段顯示器,LED,JTAG,VGA等?

試着想想其他創造性的方式來從芯片中獲取不需要SPI接口的數據。

  • 如果有4個LED,A通過d,即可點亮每個LED對於每次接收到該類型的命令時間爲1秒?

  • 你能有一個7段顯示您的SPI接收器的狀態機的當前狀態,還是有它一定的指示錯誤代碼如果收到一些不知名的命令?

  • 你能VGA籠絡到監視器傳入SPI比特流的二進制序列?

一旦你可以開始縮小與數據什麼是真正的硬件裏面發生的事情,你可以縮小問題空間去檢查是否有可能出現的問題。

+3

自從他使用Vivado以來,一件很酷的事情是:他可以使用ChipScope模塊直接查看內部信號。 ChipScope是賽靈思的FPGA調試工具,它將充當邏輯分析儀,並將波形數據直接發送到Vivado軟件,讓他在芯片上進行調試,而無需實現可能有其自身缺陷的新界面。如果要使用ASIC,擁有JTAG或其他東西真的很理想,但對於FPGA的工作,ChipScope相當不錯。 (Altera主板上的SignalTap) – Unn 2014-10-29 23:03:51

+0

Tim,謝謝。我知道SPI接口是獨立工作的,它的內部工作顯然與模擬工作不一樣。我使用板上的8個LED顯示RX數據。我也檢查過C(write)命令的工作原理,但我認爲它不會在寄存器之間傳輸,這很奇怪。但是在任何情況下,命令D都會返回0,因爲所需的寄存器實際上是0.我將嘗試連接其他一些狀態信號。我有一個VGA接口,但我沒有實現字符打印界面。 – Mewa 2014-10-30 15:03:24

+0

@Unn,ChipScope是一個獨立的調試工具嗎?我現在只是使用USB電纜。去看看我能否在實驗室裏找到ChipScope。 – Mewa 2014-10-30 15:07:04

相關問題