小编Fab*_*enM的帖子

是否有一个如何从Chisel3模块生成verilog的简单示例?

我正在寻找一个简单的howto来转换Verilog中的简单Chisel3模块.

我在凿子的官方网页上给出了Gcd源代码.

  import chisel3._

  class GCD extends Module {
    val io = IO(new Bundle {
      val a  = Input(UInt(32.W))
      val b  = Input(UInt(32.W))
      val e  = Input(Bool())
      val z  = Output(UInt(32.W))
      val v  = Output(Bool())
    })
    val x = Reg(UInt(32.W))
    val y = Reg(UInt(32.W))
    when (x > y) {
      x := x -% y
    }.otherwise {
      y := y -% x
    }
    when (io.e) {
      x := io.a
      y := io.b
    }
    io.z := x
    io.v := y === 0.U …
Run Code Online (Sandbox Code Playgroud)

scala verilog sbt chisel

8
推荐指数
1
解决办法
2155
查看次数

如何在 Chisel 生成的模块中注入 Verilog 代码?

为了测试我的 Chisel 设计,我将Icaruscocotb一起使用。但是,如果在 verilog 模块代码中没有明确询问 Icarus 不会生成 VCD 跟踪,如下所示:

`ifdef COCOTB_SIM
initial begin
  $dumpfile ("my_module_name.vcd");
  $dumpvars (0, my_module_name);
  #1;
end
`endif
Run Code Online (Sandbox Code Playgroud)

为了在每次生成 chisel 模块时添加此内容,我编写了一个名为cocotbify.py 的Python 小脚本,在生成的模块下“注入”此代码。

同样,要添加一些 systemVerilog assert()/assume() 以使用yosys-smtbmc进行正式检查,我必须在生成的每个 verilog 模块下“注入”代码。我还破解了一个名为smtbmcify.py的小 python 脚本来注入我的断言/假设代码。

我意识到这是一个 hack,但我找不到直接在 Chisel 模块下执行此操作的好方法。我知道有BlackBox,但我不想实例化子模块,并且函数 setInline 创建第二个 verilog 文件(我想直接在模块中写入)。

我在 Chisel scala 代码中看到了一种名为ChiselAnnotation的类型,但我不确定这是要使用的东西,我现在不知道如何使用。

verilog hdl chisel yosys cocotb

7
推荐指数
0
解决办法
216
查看次数

关于凿子的语法:Vec&Wire

我正在学习Chisel3.

我对这些代码有一些疑问.

val myVec = Wire(Vec(5, SInt(width = 23)))  // Vector of 5 23-bit signed integers.
Run Code Online (Sandbox Code Playgroud)

我想如果我声明一个向量,我需要写"Wire",但是当我看到这些代码时我错了.

class BigBundle extends Bundle {


 val myVec = Vec(5, SInt(width = 23))  // Vector of 5 23-bit signed integers.

 val flag  = Bool()
 // Previously defined bundle.

 val f     = new MyFloat

}
Run Code Online (Sandbox Code Playgroud)

它突然冲到我的脸上,所以我想知道我什么时候使用"电线"?

提前致谢.

chisel

5
推荐指数
2
解决办法
831
查看次数

有没有办法在 Rust 中拥有可变大小的 int 和无符号整数类型?

在 Rust 中,标准整数类型的大小为8、16、32、64、128 位。但是是否可以操作具有非标准大小的整数类型,例如u24, i7, ... ?

这些非标准尺寸对于 FPGA 算法仿真很有用。

math integer fpga rust

5
推荐指数
1
解决办法
165
查看次数

如何在Chisel中初始化Bundle的Reg?

我为我的特定数据声明了一个捆绑包:

class RValue (val cSize: Int = 16) extends Bundle {
  val rvalue = Output(UInt(cSize.W))
  val er     = Output(UInt((cSize/2).W))
  val part   = Output(Bool()) /* set if value is partial */
}
Run Code Online (Sandbox Code Playgroud)

我想将它用作我的模块中的寄存器:

  val valueReg = Reg(new RValue(cSize))
//...
  valueReg.rvalue := 0.U
  valueReg.er := 0.U
Run Code Online (Sandbox Code Playgroud)

效果很好。但我想在 Register 声明中使用 RegInit() 对其进行初始化。是否可以 ?

  val valueReg = RegInit(new RValue(cSize), ?? ) ??
Run Code Online (Sandbox Code Playgroud)

chisel

4
推荐指数
1
解决办法
2496
查看次数

如何在凿子中获取 UInt() 的大小?

也许这很容易,但我不能简单地找到如何在 Chisel 中获取 UInt() 值的位大小?

我知道如何通过声明设置大小:

val a = UInt(INPUT, 16)
Run Code Online (Sandbox Code Playgroud)

但是要获得“a”大小,是否有类似的属性:

val size = a.?
Run Code Online (Sandbox Code Playgroud)

或者 :

val size = width(a)
Run Code Online (Sandbox Code Playgroud)

hdl chisel

3
推荐指数
1
解决办法
909
查看次数

如何知道 cocotb testbench 中使用的是哪个模拟器?

为了测试我的 Verilog 设计,我使用了两个不同的模拟器:IcarusVerilator。这是工作,但它们之间存在一些差异。

例如,我无法使用 verilator 读取模块参数,但 Icarus 可以工作。

有没有办法知道 python testfile 中正在使用哪个模拟器?

我想写这样的东西:

        if SIM == 'icarus':
            self.PULSE_PER_NS = int(dut.PULSE_PER_NS)
            self.DEBOUNCE_PER_NS = int(dut.DEBOUNCE_PER_NS)
        else:
            self.PULSE_PER_NS = 4096 
            self.DEBOUNCE_PER_NS = 16777216
Run Code Online (Sandbox Code Playgroud)

能够管理两个模拟器并比较它们。

python verilog icarus verilator cocotb

3
推荐指数
1
解决办法
109
查看次数

在 CHISEL 中查找列表

我是 Scala 的新手,我一直在尝试了解 RISC-V 架构。我遇到了这段代码,我一直盯着它看几个小时,无法理解。

val csignals =                                                                                                   
  ListLookup(io.dat.inst,                                                                                       
                         List(N, BR_N  , OP1_X  ,  OP2_X  , ALU_X   , WB_X   , REN_0, MEN_0, M_X  , MT_X,  CSR.N),
           Array(       /* val  |  BR  |  op1   |   op2     |  ALU    |  wb  | rf   | mem  | mem  | mask |  csr  */
                        /* inst | type |   sel  |    sel    |   fcn   |  sel | wen  |  en  |  wr  | type |  cmd  */
              LW      -> List(Y, BR_N  , OP1_RS1, OP2_IMI …
Run Code Online (Sandbox Code Playgroud)

scala chisel riscv

2
推荐指数
1
解决办法
449
查看次数

使用AXI4Lite读取和写入的最小时钟周期数是多少

我想知道在AXI4Lite总线上进行简单访问的最小时钟周期是多少.

我认为这是4,但我不确定.

arm hdl bus xilinx amba

2
推荐指数
1
解决办法
76
查看次数

是否可以使用scala-sbt在开发模式下发布Local?

我正在写一个图书馆包,我不想在其他(本地)项目中使用它。我是否需要重新启动命令:

$ sbt publishLocal
Run Code Online (Sandbox Code Playgroud)

每次进行修改还是有可能使其自动化?

我正在将这个Chisel模板项目用于build.sbt。

scala sbt chisel

2
推荐指数
1
解决办法
46
查看次数

冲突教程示例中“纯”关键字的目的是什么?

在Clash官网,有如下例子:

>>> sampleN @System 4 (register 0 (pure (8 :: Signed 8)))
Run Code Online (Sandbox Code Playgroud)

我知道什么是纯函数,但为什么这里有这个关键字?如果我删除它,我会收到一个错误:

Clash.Prelude> sampleN @System 4 (register 0 (8 :: Signed 8))

<interactive>:2:32: error:
    * Couldn't match expected type `Signal System a'
                  with actual type `Signed 8'
    * In the second argument of `register', namely `(8 :: Signed 8)'
      In the third argument of `sampleN', namely
        `(register 0 (8 :: Signed 8))'
      In the expression: sampleN @System 4 (register 0 (8 :: Signed 8))
    * Relevant bindings include it …
Run Code Online (Sandbox Code Playgroud)

haskell hdl clash

0
推荐指数
1
解决办法
140
查看次数

标签 统计

chisel ×7

hdl ×4

scala ×3

verilog ×3

cocotb ×2

sbt ×2

amba ×1

arm ×1

bus ×1

clash ×1

fpga ×1

haskell ×1

icarus ×1

integer ×1

math ×1

python ×1

riscv ×1

rust ×1

verilator ×1

xilinx ×1

yosys ×1