spinal HDL - 03 - Spinal HDL数据类型 - 复合数据类型(二)

简介: spinal HDL - 03 - Spinal HDL数据类型 - 复合数据类型

UFix/SFix


UFix 和 SFix 类型对应于可用于定点算术的位向量。

声明


声明定点数的语法如下:

Unsigned Fixed-Point


image.png

Signed Fixed-Point


image.png

格式


所选格式遵循使用 Q 表示法定义定点数格式的常用方法。例如 Q8.2 将表示 8+2 位的定点数,其中 8 位用于自然部分,2 位用于小数部分。如果定点数是有符号的,则多使用一位作为符号。分辨率定义为可以用这个数字表示的 2 的最小幂。

为了使表示 2 的幂的数字更不容易出错,在spinal.corecalled 中有一个数字类型,ExpNumber用于定点类型构造函数。这种类型的便利包装器以exp函数的形式存在(在本页的代码示例中使用)。

示例

// Unsigned Fixed-Point
val UQ_8_2 = UFix(peak = 8 exp, resolution = -2 exp) // bit width = 8 - (-2) = 10 bits
val UQ_8_2 = UFix(8 exp, -2 exp)
val UQ_8_2 = UFix(peak = 8 exp, width = 10 bits)
val UQ_8_2 = UFix(8 exp, 10 bits)
// Signed Fixed-Point
val Q_8_2 = SFix(peak = 8 exp, resolution = -2 exp) // bit width = 8 - (-2) + 1 = 11 bits
val Q_8_2 = SFix(8 exp, -2 exp)
val Q_8_2 = SFix(peak = 8 exp, width = 11 bits)
val Q_8_2 = SFix(8 exp, 11 bits)

赋值操作


当没有比特丢失时,对定点值的赋值是有效的。任何位丢失都会导致错误。如果源定点值太大,该.truncated函数将允许您调整源数字的大小以匹配目标大小。

示例

val i16_m2 = SFix(16 exp, -2 exp)
val i16_0  = SFix(16 exp,  0 exp)
val i8_m2  = SFix( 8 exp, -2 exp)
val o16_m2 = SFix(16 exp, -2 exp)
val o16_m0 = SFix(16 exp,  0 exp)
val o14_m2 = SFix(14 exp, -2 exp)
o16_m2 := i16_m2            // OK
o16_m0 := i16_m2            // Not OK, Bit loss
o14_m2 := i16_m2            // Not OK, Bit loss
o16_m0 := i16_m2.truncated  // OK, as it is resized
o14_m2 := i16_m2.truncated  // OK, as it is resized

Scala常量


在分配给 UFix 或 SFix 信号时,Scala BigInt 或 Double 类型可用作常量。

val i4_m2 = SFix(4 exp, -2 exp)
i4_m2 := 1.25    // Will load 5 in i4_m2.raw
i4_m2 := 4       // Will load 16 in i4_m2.raw

原始值


可以使用该raw属性读取或写入定点数的整数表示。

val UQ_8_2 = UFix(8 exp, 10 bits)
UQ_8_2.raw := 4        // Assign the value corresponding to 1.0
UQ_8_2.raw := U(17)    // Assign the value corresponding to 4.25

运算操作


以下运算符可用于该UFix类型:

算术运算


image.png

Comparison


image.png

类型转换


image.png

其他


image.png

Reference


  1. spinal HDL官方文档
目录
相关文章
|
2月前
|
存储 C语言
【学习笔记】verilog HDL之二:数据类型与表达式
本文介绍了Verilog语言中的常量、变量和表达式。Verilog有四种基本值:0、1、x(未知)和z(高阻)。整型常量有十进制和基数两种格式,实数型常量包括浮点数,字符串常量由双引号括起的字符序列构成。变量分为线网型和寄存器型,线网型包括wire、tri等11种类型,寄存器型有reg、integer、time等,其中reg可声明存储器。表达式中的操作数包括常数、参数、线网等8种类型,操作符包括算术、关系、逻辑等9种类型。
|
9月前
|
异构计算
【数字电路】Y图 | 逻辑操作符 | 布尔函数 | Combinational systems
【数字电路】Y图 | 逻辑操作符 | 布尔函数 | Combinational systems
43 0
|
9月前
|
C语言 异构计算
【FPGA】Verilog 基础速览 | 数据类型 | HDL常数声明 | Timescale | 操作符 | 阻塞语句 | 非阻塞语句
【FPGA】Verilog 基础速览 | 数据类型 | HDL常数声明 | Timescale | 操作符 | 阻塞语句 | 非阻塞语句
38 0
|
3月前
|
存储 C语言 异构计算
|
3月前
|
C++
Verilog 函数和任务
Verilog 函数和任务
|
算法
如何将算法翻译成RTL(三):Verilog中的Signed本质及用法
如何将算法翻译成RTL(三):Verilog中的Signed本质及用法
188 0
|
算法 异构计算
Verilog HDL函数与任务的使用
⭐本专栏针对FPGA进行入门学习,从数电中常见的逻辑代数讲起,结合Verilog HDL语言学习与仿真,主要对组合逻辑电路与时序逻辑电路进行分析与设计,对状态机FSM进行剖析与建模。
102 0
Verilog HDL函数与任务的使用
|
算法 异构计算
Verilog HDL数据流建模与运算符
⭐本专栏针对FPGA进行入门学习,从数电中常见的逻辑代数讲起,结合Verilog HDL语言学习与仿真,主要对组合逻辑电路与时序逻辑电路进行分析与设计,对状态机FSM进行剖析与建模。
168 0
Verilog HDL数据流建模与运算符
|
自然语言处理 算法 异构计算
Verilog HDL基本语法规则
本专栏针对FPGA进行入门学习,从数电中常见的逻辑代数讲起,结合Verilog HDL语言学习与仿真,主要对组合逻辑电路与时序逻辑电路进行分析与设计,对状态机FSM进行剖析与建模。
214 0
Verilog HDL基本语法规则
|
Scala
spinal HDL - 05 - Spinal HDL - 函数和时钟域
spinal HDL - 05 - Spinal HDL - 函数和时钟域
254 0
spinal HDL - 05 - Spinal HDL - 函数和时钟域