zoukankan      html  css  js  c++  java
  • 如何在SV中使用枚举enum语法

    前言
    enum可用于一系列常量的定义。典型是用于状态机的状态建模,使得code更为清晰。

    流程
    本次需要一个top层模块描述状态机和定义文件即可。
    (1)definition.sv内容为:使用one_hot编码。
    `ifndef DFFS_DONE
        `define DFFS_DONE
        package p_demo;
            localparam p_width = 4;
            typedef enum logic [3:0{ //one_hot coder
                e_adc_idel     = 4'b0001,
                e_adc_cache    = 4'b0010,
                e_adc_transfer = 4'b0100,
                e_adc_work     = 4'b1000
            } e_adc_state;

        endpackage 
        import p_demo::*;
    `endif
    (2)demo_sv.sv内容为:随便写个状态机试试。
    `include "definitions.sv"
    module demo_sv (
        input  logic i_clk,
        output logic o_b        
    );
    e_adc_state es_state = e_adc_idel; //enum类型变量定义

    logic [p_width-1:0] l_cnt = '0;
    always_ff @(posedge i_clk)
    begin
        l_cnt <= l_cnt + 'd1;
    end
    always_ff @(posedge i_clk) //状态机跳转逻辑
    begin
        if (l_cnt == 'd0)
            es_state <= e_adc_idel;
        else 
        begin
            case (es_state)
            e_adc_idel: begin 
                if (l_cnt == 'd4
                    es_state <= e_adc_cache;
            end 
            e_adc_cache: begin
                if (l_cnt == 'd15)
                    es_state <= e_adc_work;
            end
            e_adc_transfer: begin
                if (l_cnt == 'd9)
                    es_state <= e_adc_cache;
            end
            e_adc_work: begin
                if (l_cnt == 'd29)
                    es_state <= e_adc_transfer;
            end
            default: es_state <= e_adc_idel;
            endcase 
        end
    end
    assign o_b = (es_state == e_adc_transfer) ? 1'b1 : 1'b0;

    endmodule:demo_sv
    (3)使用vivado2018.3综合看看。

    注意:匿名枚举是不可综合的。
    以上。
  • 相关阅读:
    13.线性回归
    12.scikit-learn中的Scaler
    11.数据归一化
    oracle之二表的几种类型
    oracle之二表和表空间的关系
    oracle之二数据字典表和动态性能视图
    oracle之二检查点
    oracle之二管理undo
    oracle之二归档日志
    oracle之二日志挖掘log miner
  • 原文地址:https://www.cnblogs.com/kingstacker/p/13495558.html
Copyright © 2011-2022 走看看