【SpinalHDL】2.数据类型SpinalEnum

2024-02-07 05:44

本文主要是介绍【SpinalHDL】2.数据类型SpinalEnum,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2.1枚举类型(SpinalEnum <-> localparam/define)

使用起来比较简单,只需要定义一个对象即可。

import spinal.core._  object Enum extends SpinalEnum(defaultEncoding = binarySequential) {  val encoding = SpinalEnumEncoding("dynamicEncoding", _ * 2 + 1)  defaultEncoding = encoding  val a, b, c = newElement  
}  
class DemoEnum extends Component {  val enum = Reg(Enum) init Enum.a  
}  object DemoEnum extends App {  
//  SpinalVerilog(new DemoEnum)  SpinalConfig(enumPrefixEnable = false,enumGlobalEnable = true).withoutEnumString().generateVerilog(new DemoEnum)  
}

其中object Enum对象实现的基本的SpinalEnum类的定义,注意其中的编码方式,为自定义的编码方式。
类Demo Enum初始化一个寄存器enum,并将其初始化为a。

`timescale 1ns/1ps  
`define a 3'b001  
`define b 3'b011  
`define c 3'b101  module DemoEnum (  input               clk,  input               reset  
);  wire       [2:0]    enum_2;  assign enum_2 = `a;  endmodule

最后转化后的结果是如上图所示。
重点生成Verilog时,SpinalConfig的使用,其中enumPrefixEnable = false不生成变量前的前缀,enumGlobalEnable = true将enum默认生成的是define宏,withoutEnumString()则不生成仿真时的string描述,对比下就知道了,下面默认的生成结果。

  
`timescale 1ns/1ps  module DemoEnum (  input               clk,  input               reset  
);  localparam Enum_1_a = 3'd1;  localparam Enum_1_b = 3'd3;  localparam Enum_1_c = 3'd5;  wire       [2:0]    enum_2;  `ifndef SYNTHESIS  reg [7:0] enum_2_string;  `endif  `ifndef SYNTHESIS  always @(*) begin  case(enum_2)  Enum_1_a : enum_2_string = "a";  Enum_1_b : enum_2_string = "b";  Enum_1_c : enum_2_string = "c";  default : enum_2_string = "?";  endcase  end  `endif  assign enum_2 = Enum_1_a;  endmodule

这篇关于【SpinalHDL】2.数据类型SpinalEnum的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/686681

相关文章

python多种数据类型输出为Excel文件

《python多种数据类型输出为Excel文件》本文主要介绍了将Python中的列表、元组、字典和集合等数据类型输出到Excel文件中,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一.列表List二.字典dict三.集合set四.元组tuplepython中的列表、元组、字典

Rust 数据类型详解

《Rust数据类型详解》本文介绍了Rust编程语言中的标量类型和复合类型,标量类型包括整数、浮点数、布尔和字符,而复合类型则包括元组和数组,标量类型用于表示单个值,具有不同的表示和范围,本文介绍的非... 目录一、标量类型(Scalar Types)1. 整数类型(Integer Types)1.1 整数字

C 语言的基本数据类型

C 语言的基本数据类型 注:本文面向 C 语言初学者,如果你是熟手,那就不用看了。 有人问我,char、short、int、long、float、double 等这些关键字到底是什么意思,如果说他们是数据类型的话,那么为啥有这么多数据类型呢? 如果写了一句: int a; 那么执行的时候在内存中会有什么变化呢? 橡皮泥大家都玩过吧,一般你买橡皮泥的时候,店家会赠送一些模板。 上

C语言程序设计(数据类型、运算符与表达式)

一、C的数据类型 C语言提供的数据类型: 二、常量和变量 2.1常量和符号常量 在程序运行过程中,其值不能被改变的量称为常量。 常量区分为不同的类型: 程序中用#define(预处理器指令)命令行定义变量将代表常量,用一个标识符代表一个常量,称为符合常量。 2.2变量 变量代表内存中具有特定属性的一个存储单元,用来存放数据,在程序运行期间,这些值是可以 改变的。 变

Redis地理数据类型GEO

通常要计算两个地理位置的距离不是很方便,这里可以直接通过Redis提供的GEO操作来完成地理位置相关的计算 1)添加地理位置 语法:geoadd key longitude latitude member [longitude latitude member] ...字段说明:key:存放地理位置的集合名称longitude:地理坐标的经度latitude:地理坐标的纬度member:表示这

【JavaScript】基本数据类型与引用数据类型区别(及为什么String、Boolean、Number基本数据类型会有属性和方法?)

基本数据类型   JavaScript基本数据类型包括:undefined、null、number、boolean、string。基本数据类型是按值访问的,就是说我们可以操作保存在变量中的实际的值。 1)基本数据类型的值是不可变的 任何方法都无法改变一个基本类型的值,比如一个字符串: var name = "change";name.substr();//hangconsole.log

【MySQL】MySQL常用的数据类型——表的操作

前言: 🌟🌟本期讲解关于MySQL常用数据类型,表的简单使用,希望能帮到屏幕前的你。 🌈上期博客在这里:http://t.csdnimg.cn/wwaqe 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客   目录 前言: 📚️1.MySQL常用的数据类型 1.1数值类型 1.2字符串类型 1.3日期类型  📚️2.表的简单操作 2.1创建

c语言(三种语言对比、数据类型及输出、变量存储、内存分配)

数据类型: 变量的输出: c语言不能直接打印数字,字符,只能将他们转化成字符串打印, printf("%d\n", num); %d 是整数占位符,将来由逗号右边的变量的值占据这个位置。(%i和%d是一样的) %f 是浮点数占位符,默认输出小数点后6位,若只想输出小数点后两位:%.2f %c 是字符型数据占位符。

SpinalHDL之数据类型(一)

本文作为SpinalHDL学习笔记第五十四篇,介绍SpinalHDL的Bool数据类型。 SpinalHDL技术交流QQ群: Note: 1.本群是个人技术交流群,不是什么官方答疑群; 2.提问是你的权利,但回答不是别人的义务; 3.可以潜水,不能灌水; 4.请文明交流,做这行的都算高层次人才,希望你有对应的高素质; 5.不强制改名,但希望统一格式:姓名(昵称也行)-公司/学校-

MySQL数据类型和Schema优化(二)

MySQL数据类型和Schema优化 MySQL合适的数据类型日期和时间类型(datetime、timesamp)整数类型实数类型(float\double\decimal)字符串类型(Varchar、Char) Schema设计缓存表和汇总表 MySQL 良好的逻辑设计与物理设计是高性能的基石,应该根据具体业务需求的查询语句来设计schema,这往往需要权衡各种因素。 比如