标签: chisel

Chisel提供的优于传统硬件描述语言有哪些优势?

Chisel是Verilog和VHDL等经典硬件描述语言(HDL)的替代品.我在Verilog的经验及其在工业界和学术界的现有流行表明,它是一种发达的成熟语言.

使用Chisel一段时间的人可以分享您的经验并帮助解释Chisel对经典HDL的效用吗?

到目前为止,我作为本科IC设计专业学生的经历包括:

  • Verilog在工业中占据主导地位,并拥有广泛的仿真支持
  • Chisel不支持Verilog所做的所有构造,例如模拟元素
  • 凿子参数化为Verilog提供了相同的功能

chisel

13
推荐指数
1
解决办法
2263
查看次数

Chisel:如何实现高效的单热多路复用?

我有一个表,其中表的每一行包含状态(寄存器).有逻辑选择一个特定的行.只有一行接收"选定"信号.然后访问该选定行的状态.状态的一部分作为输出连接到模块的IO,或者IO的一部分用作输入以更新状态.

如果我用电路实现这个,我会使用传递门.所选信号将导通一组传输门,这将把行的寄存器连接到总线.然后总线将连接到IO捆绑包.这是快速,小面积和低能量.

在Chisel中有一种直接的实现方法.它将所选行编码为二进制数,然后将该数字应用于传统多路复用器的选择输入.不幸的是,对于具有20到50行的表以及数百位的状态,这种实现可能非常慢,并且在面积和能量上浪费.

这个问题有两个部分:1)有没有办法在Chisel中指定总线,这样你就有传输门或传统的三态驱动器都挂在总线上?

2)如果不这样做,Chisel中有一个快速,小面积,低能量的方式吗?

谢谢

bus mux chisel one-hot-encoding

11
推荐指数
1
解决办法
944
查看次数

是否有一个如何从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
查看次数

学习凿子 - 了解Rocket Chip代码的高级示例

Berkeley的RISC-V实现称为Rocket Chip,它是用一种名为Chisel的硬件语言编写的.Chisel是面向对象的,我们团队中的人员很难学会如何有效地修改Rocket Chip代码.

我们为Chisel创造了这个学习之旅,这很棒.它来自基础知识,包括Scala的相关部分,最后是一系列来自Sodor和Rocket Chip代码的高级示例,所有这些都是动手练习:

http://learningjourney.intensivate.com

我们已经向社区开放了贡献,但似乎应该有其他好的地方来解释Rocket Chip代码中使用的高级Chisel编码实践.有人有链接吗?

chisel riscv rocket-chip

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

如何找到 PLIC 上下文的数量?

我是一名软件开发人员,试图了解 RISC-V 平台级中断控制器 (PLIC) 的配置,该控制器位于 FPGA 中火箭芯片衍生的 SoC 中。如果我的术语有问题,请纠正我。

我正在尝试在热启动后以编程方式配置 PLIC,特别是清除中断挂起位。我读过RISC-V PLIC 规范,其中谈到最多 15872 个上下文。虽然我当然可以迭代所有上下文,每个上下文有 1024 个中断,但我希望更加经济。

在哪里可以找到上下文的实际数量?对于所有火箭芯片设计来说它都是恒定的吗?它是一个可调值吗?应该问 FPGA 同事什么问题?他们使用凿子,我认为这是某种设计语言或工具。

chisel rocket-chip riscv32

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

Chisel和Lava与CLaSH有什么区别?

我一直在研究Chisel以及各种Lavas(堪萨斯,Chalmers和Xilinx口味)和CLaSH的来源.我试图了解Chisel与其他产品的主要卖点是什么.我发现的主要是快速模拟.

我想知道深入研究的人是否可以指出其他优点,缺点和权衡取舍.

(对不起,如果讨论问题太多了.我试着向凿子用户发帖,但显然你需要被接受为会员才能这样做.)

lava clash chisel

7
推荐指数
1
解决办法
1053
查看次数

如何在 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
查看次数

如何做模块矢量?

我想实例化一维元素数组,元素扩展模块.我该怎么做?如果我说出我最好的猜测,那就是:

val elements = Vec( 64, new element )
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息:

[error] /Users/mykland/work/chisel/array.scala:20: overloaded method value apply with alternatives:
[error]   [T <: Chisel.Data](n: Int, gen: => T)Chisel.Vec[T] <and>
[error]   [T <: Chisel.Data](elt0: T, elts: T*)Chisel.Vec[T] <and>
[error]   [T <: Chisel.Data](gen: => T, n: Int)Chisel.Vec[T]
[error]  cannot be applied to (Int, ascenium.element)
[error]     val elements    = Vec( 64, new element )
[error]                       ^
Run Code Online (Sandbox Code Playgroud)

提前感谢您提供的任何帮助.

chisel

6
推荐指数
1
解决办法
892
查看次数

将 Chisel 转换为 Vhdl 和 SystemC?

我有一些关于凿子转换的问题。我知道这是理论上的,但如果有人提出他的意见会很好。

1)想问为什么Chisel不注重VHDL/SystemVerilog的转换。虽然 Verilog 和 VHDL 是相同的,但在一些国家,尤其是欧洲,更喜欢 VHDL。2) 同样,C++模型用于仿真模型。为什么不是 SystemC 用于此目的?

我正在阅读一些笔记,发现 FIRRTL 是转换 CHISEL-->FIRRTL--> Verilog 和 CHISEL ---> FIRRTL--> C++ 模型的中间人。

使用(低)FIRRTL 规范转换 VHDL 和 SystemC 模型是个好主意吗?

vhdl systemc chisel

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

为什么 sbt 会因“预期的 ';'”而失败?

当我从学习之旅项目运行示例凿子设计时,我看到如下错误:

    $ ./run-examples.sh SimpleALU
    ...
    [info] Set current project to chisel-tutorial (in build file:/home/fchen/work/learning-journey/)
    [error] Expected ';'
    [error] test:run-main examples.Launcher SimpleALU
    [error]                                          ^
Run Code Online (Sandbox Code Playgroud)

有谁知道可能出了什么问题?

sbt chisel

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

标签 统计

chisel ×10

rocket-chip ×2

sbt ×2

verilog ×2

bus ×1

clash ×1

cocotb ×1

hdl ×1

lava ×1

mux ×1

one-hot-encoding ×1

riscv ×1

riscv32 ×1

scala ×1

systemc ×1

vhdl ×1

yosys ×1