https://mp.weixin.qq.com/s/KqyklKrPLtPm38sftMYlHA
1. 使用Maven獲取庫
其中Chisel Iotesters是用來進行驗證的庫,可以看到各個版本及其發布日期:
隨便打開一個版本:
可以看到該版本的基本信息,點擊jar可以直接下載庫的jar包。下面是使用各種構建工具如Maven/Gradle/SBT/Ivy等引入該庫的方法。可以復制SBT的引入方法到build.sbt中,即可以下載這個庫。
下方是該庫所依賴的庫的信息:
其中有chisel3和firrtl,可以看到比我們使用的chisel3 3.1.2新,需要找一個老一點的版本。
回溯發現chisel-iotesters 1.2.3剛好匹配,復制如下行到build.sbt:
libraryDependencies += "edu.berkeley.cs" %% "chisel-iotesters" % "1.2.3"
如下:
然后Intellij IDEA提示Import Changes,選擇之后開始下載這個庫:
點擊箭頭所示的按鈕,可以看到同步的文字信息:
同步完成即可。
2. 創建FullAdderTester.scala
創建文件,並從chisel-tutorial項目中拷貝代碼,如下:
直接在該文件中使用main函數驗證:
看一下這一個Driver()函數簽名:
這個函數有兩個參數列表,即apply(args_a)(args_b)。
第一個參數列表包含用來創建一個待測試的模塊的函數,即:dutGen: () => T,這個函數不接收參數,返回一個T類型的返回值,T <: MultiIOModule表明類型T是MultiIOModule的子類型,所以返回值是一個模塊。
第二個參數列表包含一個產生測試器的函數:testerGen: T => PeekPokeTester[T], 即接收一個模塊作為參數,返回一個Tester。這里我們返回class FullAdderTest(c: FullAdder) extends PeekPokeTester(c).
再來看我們的實現:
在對Driver()函數的調用中,提供了兩個參數列表:Driver()()。第一個參數列表提供了一個函數參數,返回FullAdder模塊實例,其余的參數都是用默認值。第二個參數列表提供了一個函數參數,返回FullAdderTester。
3. 直接執行驗證
直接點擊三角運行符號,運行main函數:
可以看到測試成功了,在9個時鍾周期里,總共執行了8個測試,都成功了。
符合Tester的寫法,2個expect循環了4次,總共8個測試。
4. sbt shell執行驗證
compile:
因為測試代碼放在test而不是main目錄下,所以執行test:run命令:
也可以使用test:runMain FullAdderTester命令:
5. 附錄
略