chisel

1. scala

1.1. yield

2. chisel

2.1. chisel位操作

2.1.1. 位拼接

2.1.1.1. 从Input中取某些位

val sel = Input(UInt(2.W))
val m = VecInit(Seq.fill(3)(Module(new Mux2).io))

m(2).sel := io.sel(1)

2.1.1.2. ref [1]

val a_address = Cat((mask zip (in.haddr >> log2Ceil(beatBytes)).asBools).filter(_._1).map(_._2).reverse)

in.r.bits.id := Cat(out.r.bits.echo(AXI4ExtraId), out.r.bits.id)

Cat(in.ar.bits.id, UInt(0, width=1))
Cat(in.ar.bits.id, r_count(in.ar.bits.id)(logFlight-1,0), UInt(0, width=1))

2.1.1.3. io.out(i):=Cat(1.U,2.U)

2.1.2. chisel中的位

从右往左数的,表示为 x n − 1 ⋯ x 1 x 0 x_{n-1}\cdots x_1x_0 xn1x1x0

io.out(i):=io.data(i)(2,0),表示2到0一共3比特

2.2. when 语句

when(io.data(i)(0)===0.B){

2.3. 减法

加减法可以防溢出

2.4. Vec

对于Vec类型输出,测试代码中peek只能到该向量,而不能写为c.io
val x=peek(c.io.u)

3. firrtl

3.1. firrtl在基于chisel的项目开发中的意义

3.1.1. 后端实现和eco的问题

  • 通常前端和后端使用网表作为中间沟通语言
  • 前端设计基本定型后后端flow就会跑起来,从floor plan和时钟方案都会希望网表保持基本不动
  • 当后端flow基本确定之后,前端的任何修改都会以eco的形式存在,即直接修改网表,保证后端flow的可用性

3.2. node

3.3. tail

node _T = add(io.value1, io.value2) @[Adder.scala 14:25]
node _T_1 = tail(_T, 1) @[Adder.scala 14:25]

4. 参考文献

[1] rocket-chip

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值