首页 > 其他分享 >chisel常用函数备忘录

chisel常用函数备忘录

时间:2024-11-26 22:57:10浏览次数:4  
标签:输出 优先级 函数 val chisel reqs 备忘录 UInt io

编码器

PriorityEncoder

PriorityEncoder 是 Chisel 中一个用于优先编码的函数。它接受一个布尔向量,返回其优先级最高(即索引最小)的高位的索引值。其常见用法包括处理多路选择器、优先级调度等场景。

点击查看代码
import chisel3._
import chisel3.util._

class PriorityEncoderExample extends Module {
  val io = IO(new Bundle {
    val in  = Input(UInt(8.W))  // 8位输入
    val out = Output(UInt(3.W)) // 输出优先级编码的索引
  })

  io.out := PriorityEncoder(io.in)
}

  • 输入 io.in = "b00100100".U 时:
    • PriorityEncoder 返回值是 2(因为第 2 位的 1 是优先级最高的高位)。

PriorityEncoderOH

PriorityEncoderOH 是 Chisel 提供的一个优先编码器的变体,与 PriorityEncoder 类似,但输出的是 One-Hot 编码。这意味着输出的结果中只有一个位是 1,表示输入向量中优先级最高的高位,而其他位为 0。

点击查看代码
import chisel3._
import chisel3.util._

class PriorityEncoderOHExample extends Module {
  val io = IO(new Bundle {
    val in  = Input(UInt(8.W))  // 8 位输入
    val out = Output(UInt(8.W)) // 输出 One-Hot 编码
  })

  io.out := PriorityEncoderOH(io.in)
}

输入和输出示例如下:

  • 输入 io.in = "b00100100".U 时:
    • PriorityEncoderOH 返回 0b00000100.U(表示索引 2)。
  • 输入 io.in = "b00000000".U 时:
    • 返回 0b00000000.U(没有优先级高的位)。

仲裁器

Arbiter

Arbiter 是 Chisel 中一个用于仲裁多个请求(requests)的模块。它会根据指定的优先级(默认为固定优先级)选择一个请求,将其授予(grant),同时输出该请求对应的数据。Arbiter 的常见用途是资源共享场景,例如多个模块竞争一个总线或处理器的访问权。

Arbiter 的工作原理
输入仲裁:

  • 根据优先级选择一个有效请求(valid 为真)。
  • 默认优先级是固定的,从编号 0 开始,编号越小优先级越高。
    输出:
  • 输出被授予的请求数据到 io.out.bits。
  • 将授予的请求编号输出到 io.chosen。

示例代码:

点击查看代码
import chisel3._
import chisel3.util._

class ArbiterExample extends Module {
  val io = IO(new Bundle {
    val reqs = Input(Vec(4, DecoupledIO(UInt(8.W)))) // 4 个输入请求
    val grant = Output(DecoupledIO(UInt(8.W)))      // 输出授予的请求
    val chosen = Output(UInt(2.W))                 // 授予请求的索引
  })

  val arbiter = Module(new Arbiter(UInt(8.W), 4))  // 4 路仲裁器

  // 连接输入请求到 Arbiter
  arbiter.io.in <> io.reqs

  // 连接 Arbiter 输出
  io.grant <> arbiter.io.out
  io.chosen := arbiter.io.chosen
}

  • 如果输入请求为:
点击查看代码
reqs(0).valid = true,  reqs(0).bits = 42
reqs(1).valid = false
reqs(2).valid = true,  reqs(2).bits = 100
reqs(3).valid = true,  reqs(3).bits = 7

则:

  • 输出 grant.bits = 42(优先级最高的请求是第 0 路)。
  • 输出 chosen = 0。

标签:输出,优先级,函数,val,chisel,reqs,备忘录,UInt,io
From: https://www.cnblogs.com/smylog/p/18571130

相关文章

  • python进阶之函数
    python进阶之函数函数概念函数本质声明和调用函数参数位置参数默认参数关键字参数可变参数作用域`LEGB`函数返回值return常用的内置函数函数概念函数是一段可重复使用的代码块,它接受输入参数并返回一个结果。函数可以用于执行特定的任务、计算结果、修改数据等,使......
  • flink学习(8)——窗口函数
    增量聚合函数——指窗口每进入一条数据就计算一次例如:要计算数字之和,进去一个12计算结果为20,再进入一个7——结果为27 reduceaggregate(aggregateFunction)packagecom.bigdata.day04;publicclass_04_agg函数{publicstaticfinalTuple3[]ENGLISH=new......
  • re模块 函数模式详解
    re模块python爬虫过程中,实现页面元素解析的方法很多,正则解析只是其中之一,常见的还有BeautifulSoup和lxml,它们都支持网页HTML元素解析,re模块提供了强大的正则表达式功能re模块常用方法compile(pattern,flags=0):用于编译一个正则表达式字符串,生成一个re.pattern对象......
  • Python基础学习-11函数参数
    1、"值传递”和“引用传递”1)不可变的参数通过“值传递”。比如整数、字符串等2)可变的参数通过“引用参数”。比如列表、字典。3)避免可变参数的修改4)内存模型简介2、函数参数类型1)deffunc()#无参数函数2)deffunc(value1,value2)#有参数函数;位置参数3)deffunc(......
  • 1023: 1023 分段函数
    题目描述数学中经常使用分段函数来计算函数值,请编程实现。输入输入文件有多行,每行包括一个x,要求计算f(x)的值。输出当x<0时,f(x)=(x+1)*(x+1)+2x+1/x,当x>=0时,f(x)=x的平方根,保留两位小数,每行一个结果。样例输入 复制10-0.50样例输出 复制f(10.00)=3.16f(-0.50)=......
  • Mysql的聚合函数的详细使用方法
    Mysql的聚合函数的详细使用方法CREATETABLEsales(sale_idINTAUTO_INCREMENTPRIMARYKEY,sale_dateDATE,salespersonVARCHAR(50),productVARCHAR(50),amountDECIMAL(10,2));INSERTINTOsales(sale_date,salesperson,product,amount)......
  • Python那些事儿 - 函数的参数详解
    第十回巅峰对决前言这一回我们将对函数的参数进行详细的讲解。函数的参数分为形参和实参,形参又分为:位置参数、默认参数(缺省参数)、位置不定长参数、关键字不定长参数实参又分为:位置参数、关键字参数接下来让我们一起走进函数的参数吧!......
  • 对数组操作的相关js函数
    汇总一下js中,数组的相关函数(如有问题,请在评论区q我哦!感谢!)1.添加和删除数组元素//1.push在数组末尾添加一个或多个元素,并返回新的长度(改变原数组)letarray=[1,2,3];array.push(4);console.log(array);//输出[1,2,3,4]//2.pop移除数组末尾的一个元素,并返......
  • 【类的默认成员函数】构造函数&&析构函数【C++】
    【类的默认成员函数】构造函数&&析构函数【C++】任何一个类在我们不写的情况下,都会自动生成6个默认成员函数构造函数:初始化(不是开空间!)日常实操中最好自己写一个!!!!!!!!Date(){ _year=1; _month=1; _day=1;}特点(1)函数名和类名相同(2)无返回值(3)对象实例化时编译器自动调......
  • C++练级计划->《多态》虚函数表,菱形继承多态
    目录什么是多态?多态的条件虚函数:虚函数的重写:协变 析构函数的重写C++11final和overridefinal:override:总结:三重对比:重载重写重定义对比抽象类多态的原理虚函数表为什么只能是父类的指针或者引用来调用才能形成多态? 动态绑定和静态绑定单继承的虚函数表 ......