2017-09-19 35 views
3

我是一個鑿子的新手。我將在未來幾天將其用於我的項目中,並試圖熟悉圖書館。Chisel3:如何同時獲得verilog,cpp和vcd文件

Chisel-tutorials一起工作後,我對鑿子的工作方式有了更好的瞭解。在教程中,提供的所有東西都以一種方式組織起來,以使初學者更容易(我想這就是教程的目的!)。

現在,我想轉到下一部分,在那裏我想開發自己的小型項目,並深入探討鑿子如何使用鑿子說簡單的Mux4.scala文件如何使用鑿子(生成verilog,cpp,vcd)。 (我正在從here獲取正確版本的Mux4模塊代碼和測試儀)。 我剛添加以下行以Mux4.scala

object Mux4Driver extends App { 
    chisel3.Driver.execute(args,() => new Mux4(32)) 
} 

末直接將Verilog代碼。

我已將scala文件放在src/main/scala/中,測試人員放在src/test/scala/中。

這是我遇到麻煩的地方。正如jkoenig指出的,我可以使用根目錄中的命令sbt "run-main Mux4Driver"來運行我的代碼。在這樣做,我得到三個文件,Mux4.fir,Mux4.v,Mux4.anno

  1. 但我怎樣才能得到它,我得到使用

    TESTER_BACKENDS=verilator ./run-examples.sh GCD

,當我實現我自己的模塊的各種文件(下圖)。(我知道我可以通過verilog文件通過verilator來獲取cpp文件,但有沒有什麼光滑的方式來獲得所有的文件一次像教程[應該有辦法,但我無法弄清楚]) enter image description here

(我正在爲我的項目使用chisel-template)。

  1. 據我所知,編寫模塊之後,好像需要知道sbt才能成功運行代碼並生成所需的文件。我想了解如何使用sbt來組織我的項目,比如在鑿子教程中,並使用單個命令(如./run-examples.sh mymodule)運行它們。

我已經完成了上述問題的研究,但無法獲得清晰度。如果你能爲像我這樣的新用戶編寫幾個步驟來處理你自己的項目,我將不勝感激。

編輯

在嘗試在答覆中提到下面的命令,我得到了以下錯誤:

enter image description here

而且在嘗試--help我的選擇是從你有什麼不同建議。在匹配我的--help輸出與輸出here我發現我沒有測試儀選項在我的輸出中。

enter image description here

這是一些問題與鑿子(使用Chisel3)或版本SBT我使用?

回答

2

這是針對對問題的更改進行修改的。

chisel-template repo是如何組織您的進一步開發工作的合理例子。但基於你的問題,我建議你使用兩種不同的方法調用你的單元測試。

class GCDTester extends ChiselFlatSpec { 
    "GCD" should "calculate proper greatest common denominator" in { 
    iotesters.Driver.execute(Array(),() => new GCD) { 
     c => new GCDUnitTester(c) 
    } should be (true) 
    } 
} 

object GCDMain extends App { 
    iotesters.Driver.execute(args,() => new GCD) { 
    c => new GCDUnitTester(c) 
    } 
} 

一個重要從你的問題你的代碼不同的是,上面提到的驅動程序是chisel3.iotesters.Driver而不是chisel3.Driver。 可以使用命令行參數有兩種,例如:

sbt 'runMain examples.GCDMain --help' 
: --help從第二個例子中添加的參數,像

iotesters.Driver.execute(Array("--help"),() => new GCD) { 

和運行測試,或運行主要

無論哪種方式,您都會看到大量的可用選項。 你有興趣

-tbn, --backend-name <firrtl|verilator|vcs> 
          backend to use with tester, default is firrtl 

,也許

-fiwv, --fint-write-vcd writes vcd execution log, filename will be base on top 

您可以添加任何的這些論點,在加入--help以同樣的方式你。因此,要verilator

iotesters.Driver.execute(Array("--backend-name", "verilator"),() => new GCD) { 

運行和運行測試,或從第二個例子運行主要

sbt 'runMain examples.GCDMain --backend-name verilator' 

的chisel.Driver只支持的iotesters.Driver的選項的子集不包括verilator。

獲取所需的所有文件需要在電路上運行需要某種測試設備的模擬。 iotesters.Driver.execute將調用您的測試工具,它將創建您感興趣的文件(當與--backend-name verilator一起運行時)。 chisel.Driver.execute只描述電路,它不運行模擬。

注意:儘管-fint-write-vcd僅用於在使用解釋器時獲取VCD輸出文件,但我相信默認情況下使用verilator後端輸出vcd。

+0

oooh,我已經看到過這些命令行選項,但在這裏不能涉及到它們。我會嘗試一下。關於如何組織像鑿子教程(使用像run-example.sh這樣的項目)的任何意見,或者不清楚我在問什麼(我也這麼認爲)? –

+0

我不認爲有一個答案。大多數情況下,單模塊測試通常從測試工具運行。隨着您開始將模塊組合成更復雜的電路,大多數人開始創建管理其特定流程的腳本。這很大程度上取決於您的目標環境。 –

+0

我在運行上述命令後編輯了這個問題(不能在註釋中包含輸出,如果這不是這種方式的話)。請看一看 –