【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

相关推荐

  1. SpinalHDL2.数据类型SpinalEnum

    2024-02-11 11:20:01       62 阅读
  2. Python 数据类型 (2)

    2024-02-11 11:20:01       50 阅读
  3. 【MySQL】数据类型2

    2024-02-11 11:20:01       38 阅读
  4. Python系列(2)—— 数据类型

    2024-02-11 11:20:01       44 阅读
  5. 2.3 Verilog 数据类型

    2024-02-11 11:20:01       60 阅读
  6. 【Rust练习】2.数值类型

    2024-02-11 11:20:01       29 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-11 11:20:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-11 11:20:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-11 11:20:01       82 阅读
  4. Python语言-面向对象

    2024-02-11 11:20:01       91 阅读

热门阅读

  1. C++入门

    C++入门

    2024-02-11 11:20:01      38 阅读
  2. 前端修炼手册(uniapp的api篇)

    2024-02-11 11:20:01       48 阅读
  3. WebSocketServer+redis实时更新页面数据

    2024-02-11 11:20:01       50 阅读
  4. 龙芯+RT-Thread+LVGL实战笔记(34)——密码锁初步

    2024-02-11 11:20:01       50 阅读
  5. 题目 1059: 二级C语言-等差数列—c语言

    2024-02-11 11:20:01       55 阅读