一種寄存器的驗證方法與流程
2023-06-28 13:57:11

本發明屬於電子的技術領域,特別涉及寄存器的驗證方法。
背景技術:
在驗證寄存器是否能正常配置時,需要從幾個方面驗證才能保證驗證的完備性。這幾個方面如下:1、寄存器默認值的驗證,即在DUT初始化後,讀取寄存器值,判斷讀取的值是否等於設計時所配置的初始值,不等則證明寄存器有錯;2、寄存器之間是否有粘連的驗證,即正常情況下對一個寄存器進行賦值,不會影響到其他寄存器值,但是當發生寄存器之間的粘連時,寄存器之間就不再有獨立性,對其中某個寄存器進行賦值操作,就會影響到其他寄存器的值;3、同一寄存器中比特位之間的粘連,即正常情況下對一個寄存器中某一位進行置位或清零操作,不會影響到其他比特位,但是當發生寄存器內部比特位之間的粘連時,比特位之間的獨立性就不存在了,對其中某個位進行置位或清零操作,就會影響到其他比特位的值。目前的方法有兩個:
第一種方法:
1.向寄存器中寫入……01010101格式的二進位數據;
2.從該寄存器中讀取數據,讀取的結果為……01010101格式的二進位數據;
3.向該寄存器中寫入……10101010格式的二進位數據;
4.從該寄存器中讀取數據,讀取的結果為……10101010格式的二進位數據;
5.向寄存器中寫入…..00000001格式的二進位數據;
6.從該寄存器中讀取數據,讀取的結果為…..00000001格式的二進位數據;
7.將…..00000001格式的二進位數據左移1位,然後寫入寄存器中;
8.從該寄存器中讀取數據,讀取結果為…..00000010格式的二進位數據;
9.重複7、8的左移操作直到二進位數中唯一地1被移到寄存器的最高位,每次左移後將得到的二進位數據寫入寄存器中,然後從該寄存器中讀出,讀取的數據與寫入的相同。
第一種方法的第1、2、3、4步用於驗證寄存器中相鄰比特位之間是否存在粘連;第5、6、7、8、9步用於驗證寄存器中不相鄰比特位之間是否存在粘連。
統計一下使用第一種方法時每個寄存器被讀寫的次數,假設寄存器的位寬為32,則1、2步中寄存器要被分別讀寫1次,3、4步中寄存器要被分別讀寫1次,5、6、7、8、9步中寄存器要被分別讀寫32次,因此整個過程寄存器要被分別讀寫34次。如果存在許多寄存器,那麼讀寫的操作就相當多了。因此通常使用方法1時會在驗證不相鄰比特位粘連時減少寄存器的驗證數量,只驗證隨機挑選的若干個寄存器,這樣做可以明顯減少讀寫操作。但是隨機挑選寄存器顯然是不完備的,因為這是把發現錯誤的可能性交給了運氣。
第二種方法:
1.向寄存器中寫入……..00000001格式的二進位數據;
2.從該寄存器中讀取數據,讀取的結果為…..00000001格式的二進位數據;
3.將…..00000001格式的二進位數據左移1位,然後寫入寄存器中;
4.從該寄存器中讀取數據,讀取結果為…..00000010格式的二進位數據;
5.重複3、4的左移操作直到二進位數中唯一地1被移到寄存器的最高位,每次左移後將得到的二進位數據寫入寄存器中,然後從該寄存器中讀出,讀取的數據與寫入的相同。
方法2與方法1的不同是它沒有了方法1中的1-4步,之所以這樣做是因為分析了方法1後發現方法1中5~9步操作本身就可以用來驗證相鄰比特位之間的粘連。
統計一下方法2中寄存器被讀寫的次數,假設寄存器的位寬為32,則1~5步中寄存器要被分別讀寫32次。如果存在許多寄存器,仍然是需要非常多的讀寫操作。如果也和方法1中一樣採用隨機挑選寄存器進行驗證的話,同樣會遇到驗證不完備的問題,而且有可能驗證效果會更差,因為相鄰比特之間粘連的改路要遠大於不相鄰比特之間的粘連,使用方法1至少還可以保證相鄰比特之間不會出現粘連,而方法2在相鄰比特之間是否粘連以及不相鄰比特之間是否粘連這兩個方面都不能保證。
專利申請201410440069.6公開了一種基於UVM驗證方法學的只讀寄存器驗證測試平臺,包括:一基於UVM驗證方法學的測試框架,其包括UVM測試序列,UVM序列發生器;一待測設計模塊,其為具有寄存器及寄存器讀寫總線接口的數字設計模塊;所述基於UVM驗證方法學的測試框架通過寄存器讀寫總線接口與待測設計模塊相連接;所述UVM測試序列能夠調用UVM序列發生器,所述UVM序列發生器通過寄存器讀寫總線接口驅動待測設計模塊;所述UVM測試序列通過VPI接口對待測設計模塊內部信號進行賦值改寫。本發明還公開了一種基於UVM驗證方法學的只讀寄存器驗證方法。本發明能有效提高驗證效率,增加驗證可信度。
然而是只讀寄存器驗證測試平臺及驗證方法,該方法是通過特定的VPI接口結合UVM序列發生器對寄存器進行驗證,仍然沒有解決上述問題。
技術實現要素:
為解決上述問題,本發明的目的在於提供一種寄存器的驗證方法,該方法既能驗證比特組之間沒有粘連,又能證明比特組內部的比特位之間沒有粘連,能夠有效地提高寄存器的驗證效率,縮短驗證周期。
為實現上述目的,本發明的技術方案如下。
一種寄存器的驗證方法,其特徵在於該方法首先將寄存器的比特位分成多組(2組或2組以上),每組構成一個比特群,然後設一個二進位數據,將二進位數據依次寫入比特群,然後讀寄存器的讀出值,如果讀出值不相同,則驗證組間沒有粘連;驗證組間沒有粘連後,使用多組(2組以上)二進位數據向所有分組分別寫入,然後讀寄存器的讀出值,如果讀出值不相同,則驗證組內沒有粘連。
寫入二進位數據時,每組比特群均比上一組比特群向左偏移一定的比特位,所述偏移一定的比特位,是按照每組的比特位寬度決定的,如果每組比特群包含有4個比特位,則偏移的比特位是四個,依次類推。
所述二進位數據是根據寄存器的寬度決定的,如果寄存器是32位的,則二進位數據也是32位的。
所述比特群,其所包含的比特位可以依據情況分為4個比特位、8個比特位、16個比特位,以此類推。
驗證組內沒有粘連,所使用的二進位數據的長度是由分組的比特群中比特位的長度決定的。
進一步,所述當每組的比特位是4個時,二進位數據為1010、0101、1100;8個比特位時,要確認組中比特位之間沒有粘連,使用四組二進位數:10101010、01010101、11001100、00001111;16個比特位,要確認組中比特位之間沒有粘連,使用五組二進位數:1010_1010_1010_1010、0101_0101_0101_0101、1100_1100_1100_1100、1111_0000_1111_0000、1111_1111_0000_0000。
本發明所實現的寄存器驗證方法既能驗證比特組之間沒有粘連,又能證明比特組內部的比特位之間沒有粘連,能夠有效地提高寄存器的驗證效率,縮短驗證周期。
附圖說明
圖1是本方面所實施方式一的寄存器寬度分布圖。
圖2是本發明所實施方式二的寄存器寬度分布圖。
圖3是本發明所實施方式三的寄存器寬度分布圖。
具體實施方式
為了使本發明的目的、技術方案及優點更加清楚明白,以下結合附圖及實施例,對本發明進行進一步詳細說明。應當理解,此處所描述的具體實施例僅僅用以解釋本發明,並不用於限定本發明。
如圖1所示,設寄存器的寬度為32比特,將比特位以4個位一組,分為8組。
設一個32位二進位數據a=0000_0000_0000_0000_0000_0000_0000_1111。
1.將a寫入寄存器,然後讀出得到讀出值b=0000_0000_0000_0000_0000_0000_0000_1111,這說明寄存器的第8分組的比特群與其餘分組的比特群之間沒有粘連。
2.將a左移4位得,a1=0000_0000_0000_0000_0000_0000_1111_0000,將a1寫入寄存器,然後讀寄存器得讀出值b1=0000_0000_0000_0000_0000_0000_1111_0000,這說明寄存器的第7分組的比特群與其餘分組之間沒有粘連。
3.繼續將a1左移4位得,a2=0000_0000_0000_0000_0000_1111_0000_0000,將a2寫入寄存器,然後讀寄存器得讀出值b2=0000_0000_0000_0000_0000_1111_0000_0000,這說明寄存器的第6分組的比特群與其餘分組之間沒有粘連。
4.繼續將a2左移4位得,a3=0000_0000_0000_0000_1111_0000_0000_0000,將a3寫入寄存器,然後讀寄存器得讀出值b3=0000_0000_0000_0000_1111_0000_0000_0000,這說明寄存器的第5分組的比特群與其餘分組之間沒有粘連。
5.繼續將a3左移4位得,a4=0000_0000_0000_1111_0000_0000_0000_0000,將a4寫入寄存器,然後讀寄存器得讀出值b4=0000_0000_0000_1111_0000_0000_0000_0000,這說明寄存器的第4分組的比特群與其餘分組之間沒有粘連。
6.繼續將a4左移4位得,a5=0000_0000_1111_0000_0000_0000_0000_0000,將a5寫入寄存器,然後讀寄存器得讀出值b5=0000_0000_1111_0000_0000_0000_0000_0000,這說明寄存器的第3分組的比特群與其餘分組之間沒有粘連。
7.繼續將a5左移4位得,a6=0000_1111_0000_0000_0000_0000_0000_0000,將a6寫入寄存器,然後讀寄存器得讀出值b6=0000_1111_0000_0000_0000_0000_0000_0000,這說明寄存器的第2分組的比特群與其餘分組之間沒有粘連。
8.繼續將a6左移4位得,a7=1111_0000_0000_0000_0000_0000_0000_0000,將a7寫入寄存器,然後讀寄存器得讀出值b7=1111_0000_0000_0000_0000_0000_0000_0000,這說明寄存器的第1分組的比特群與其餘分組之間沒有粘連。
上面證明各組比特群之間沒有粘連,還需要證明每組比特群內部的比特位之間沒有粘連。
每個組中有4個比特位,要確認組中比特位之間沒有粘連,需要驗證相鄰比特位之間沒有粘連以及相間比特位之間沒粘連。要證明這兩點可以使用三組二進位數:1010、0101、1100。因此在證明組間沒有粘連後,可以向所有分組分別寫入1010、0101、1100,既可以驗證組內沒有粘連,操作如下:
1.向寄存器中寫入二進位數據1010_1010_1010_1010_1010_1010_1010_1010,然後讀該寄存器得二進位數據1010_1010_1010_1010_1010_1010_1010_1010。
2.向寄存器中寫入二進位數據0101_0101_0101_0101_0101_0101_0101_0101,然後讀該寄存器得二進位數據0101_0101_0101_0101_0101_0101_0101_0101。
3.向寄存器中寫入二進位數據1100_1100_1100_1100_1100_1100_1100_1100,然後讀該寄存器得二進位數據1100_1100_1100_1100_1100_1100_1100_1100。
統計一下當寄存器的寬度為32比特時,以4個位一組,分成8組進行驗證時,所需對寄存器的讀寫次數n=8+3=11。和現有技術中的第一種方法、第二種方法相比有明顯的優勢,所需讀寫次數大大降低,第二種方法需要32次,而新方法只需11次,效率提升了3倍。
在驗證組間粘連時寄存器的讀寫次數與分組數有關。如果成倍的減少分組數,就可以成倍的減少寄存器的讀寫次數。
如圖2所示,繼續改進,本發明的實施方式二設寄存器的寬度為32比特,將比特位以8個為一組,分為4組。
設一個32位二進位數據a=00000000_00000000_00000000_11111111
1.將a寫入寄存器,然後讀出得到讀出值b=00000000_00000000_00000000_11111111,這說明寄存器的第4分組的比特群與其餘分組之間沒有粘連。
2.將a左移8位得,a1=00000000_00000000_11111111_00000000,將a寫入寄存器,然後讀出得到讀出值b1=00000000_00000000_11111111_00000000,這說明寄存器的第3分組的比特群與其餘分組之間沒有粘連。
3.將a1左移8位得,a2=00000000_11111111_00000000_00000000,將a寫入寄存器,然後讀出得到讀出值b2=00000000_11111111_00000000_00000000,這說明寄存器的第2分組的比特群與其餘分組之間沒有粘連。
4.將a2左移8位得,a3=11111111_00000000_00000000_00000000,將a寫入寄存器,然後讀出得到讀出值b3=11111111_00000000_00000000_00000000,這說明寄存器的第1分組的比特群與其餘分組之間沒有粘連。
上面證明比特組之間沒有粘連,還需要證明比特組內部的比特位之間沒有粘連。
每個組中有8個比特位,要確認組中比特位之間沒有粘連,需要驗證相鄰比特位之間沒有粘連以及相間比特位之間沒有粘連。要證明這兩點可以使用四組二進位數:10101010、01010101、11001100、00001111。
因此在證明組間沒有粘連後,可以向所有分組分別寫入10101010、01010101、11001100、00001111,即可驗證組內沒有粘連,操作如下:
1.向寄存器中寫入二進位數據10101010_10101010_10101010_10101010,然後讀該寄存器得二進位數據10101010_10101010_10101010_10101010;
2.向寄存器中寫入二進位數據01010101_01010101_01010101_01010101,然後讀該寄存器得二進位數據01010101_01010101_01010101_01010101;
3.向寄存器中寫入二進位數據11001100_11001100_11001100_11001100,然後讀該寄存器得二進位數據11001100_11001100_11001100_11001100。
4.向寄存器中寫入二進位數據00001111_00001111_00001111_00001111,然後讀該寄存器得二進位數據00001111_00001111_00001111_00001111。
統計一下當寄存器的寬度為32位,以8個比特為一組,分成4組進行驗證時,所需對寄存器的平均讀寫次數n=4+4=8。與4個為1組相比,8個為1組減少了3次讀寫操作。與第二種方法相比效率提升了4倍。
進一步改進,如圖3所示,本發明的實施方式三設寄存器的寬度為32比特,將比特位以16個為一組,分為2組。
設一個32位二進位數據a=0000000000000000_1111111111111111
1.將a寫入寄存器,然後讀出得到讀出值b=0000000000000000_1111111111111111,這說明寄存器的第2分組的比特群與第1分組之間沒有粘連。
2.第1組不需要驗證。
上面證明比特組之間沒有粘連,還需要證明比特組內部的比特位之間沒有粘連。
每個組中有16個比特位,要確認組中比特位之間沒有粘連,需要驗證相鄰比特位之間沒有粘連以及相間比特位之間沒有粘連。要證明這兩點可以使用五組二進位數:1010_1010_1010_1010、0101_0101_0101_0101、1100_1100_1100_1100、1111_0000_1111_0000、1111_1111_0000_0000。
因此在證明組間沒有粘連後,可以向所有分組分別寫入1010_1010_1010_1010、0101_0101_0101_0101、1100_1100_1100_1100、1111_0000_1111_0000、1111_1111_0000_0000,即可驗證組內沒有粘連,操作如下:
1.向寄存器中寫入二進位數據1010_1010_1010_1010_1010_1010_1010_1010,然後讀該寄存器得二進位數據1010_1010_1010_1010_1010_1010_1010_1010。
2.向寄存器中寫入二進位數據0101_0101_0101_0101_0101_0101_0101_0101,然後讀該寄存器得二進位數據0101_0101_0101_0101_0101_0101_0101_0101。
3.向寄存器中寫入二進位數據1100_1100_1100_1100_1100_1100_1100_1100,然後讀該寄存器得二進位數據1100_1100_1100_1100_1100_1100_1100_1100。
4.向寄存器中寫入二進位數據1111_0000_1111_0000_1111_0000_1111_0000,然後讀該寄存器得二進位數據1111_0000_1111_0000_1111_0000_1111_0000。
5.向寄存器中寫入二進位數據1111_1111_0000_0000_1111_1111_0000_0000,然後讀該寄存器得二進位數據1111_1111_0000_0000_1111_1111_0000_0000。
統計一下當寄存器的寬度為32位,以16個比特為一組,分成2組進行驗證時,所需對寄存器的平均讀寫次數n=1+5=6。與8個為1組相比,4個為1組減少了1次讀寫操作。與第二種方法相比效率提升了5倍。
以上所述僅為本發明的較佳實施例而已,並不用以限制本發明,凡在本發明的精神和原則之內所作的任何修改、等同替換和改進等,均應包含在本發明的保護範圍之內。