GrayCode for state machine

How & Why use Gray Code

A gray counter is a binary counter where only one bit changes at a time.

Gray code is mostly used to send values across clock domains (this way it has an uncertainty of only 1).

The easiest way to create a Gray counter is to first make a binary counter, and then convert the value to Gray.

=======================================================================

VS2013, Simulation

-------------------------------------------

#include <stdio.h>
#include <string>

template<int BITS>
std::string GetBits(unsigned int val){
    std::string str;
    for(int i = BITS-1; i >= 0; i --){
        char c = ‘0‘;
        if(val & (1 << i)) c = ‘1‘;
        str.push_back(c);
    }
    return str;
}

template<int BITS>
unsigned int GetGrayCode(){
    unsigned long mask = (1<<BITS)-1;
    static unsigned int next = 0;
    unsigned int nRtn = 0;
    nRtn = (next >> 1) ^ (next);
    next++;
    if(next > mask) next = 0;
    return nRtn;
}

void TestGrayCode(){
    //Generate 4Bit Gray Code
    const int BITS = 4;
    printf("%6s : %s \n", "Index", "GrayCode");
    printf("---------------------------------\n");
    for(int i = 0; i < 16; i++){
        std::string str = GetBits<BITS>( GetGrayCode<BITS>() );
        printf("%06d :   %s \n", i, str.c_str());
    }
    printf("---------------------------------\n");
}

void main(){
    TestGrayCode();
}

----------------------------------------------------

4Bit GrayCode Result :

/////////////////////////////////////////////////////////////////////////////////////

-------------------------------Verilog-----------------------------------

module GenerateGrayCode(CLK, RST_N, gray_code);

parameter BITS_COUNT = 4;

input CLK, RST_N;
output [BITS_COUNT-1:0] gray_code;

reg [BITS_COUNT-1:0]cnt = 1‘b0;

always @(posedge CLK or negedge RST_N)
begin
    if (!RST_N) cnt <= 0;
    else
    begin
        cnt <= cnt + 1‘b1;
    end
end

assign gray_code = (cnt >> 1‘b1) ^ cnt;

endmodule

时间: 2024-10-03 13:27:32

GrayCode for state machine的相关文章

Finite State Machine

Contents [hide] 1 Description 2 Components 3 C# - FSMSystem.cs 4 Example Description This is a Deterministic Finite State Machine framework based on chapter 3.1 of Game Programming Gems 1 by Eric Dybsend. Therea are two classes and two enums. Include

Finite State Machine 是什么?

状态机(Finite State Machine):状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动       作.完成特定操作的控制中心. 类别: ~ 若输出只和状态有关而与输入无关,则称为Moore状态机 ~ 输出不仅和状态有关而且和输入有关系,则称为Mealy状态机 关于状态机的一个极度确切的描述是它是一个有向图形,由一组节点和一组相应的转移函数组成.状态机通过响应一系列事件而"运行".每个事件都在属于"当前&qu

Java Secret: Using an enum to build a State machine(Java秘术:用枚举构建一个状态机)

近期在读Hadoop#Yarn部分的源代码.读到状态机那一部分的时候,感到enmu的使用方法实在是太灵活了,在给并发编程网翻译一篇文章的时候,正好碰到一篇这种文章.就赶紧翻译下来,涨涨姿势. 原文链接:http://www.javacodegeeks.com/2011/07/java-secret-using-enum-to-build-state.html 作者:Peter Lawrey    译者:陈振阳 综述 Java中的enum比其它的语言中的都强大,这产生了非常多令人吃惊的使用方法.

Finite State Machine 有限状态机

? ?????首先这是一篇FSM翻译,关于Finite State Machine 的架构赏析,如果项目对ai需求不是非常强,可以在此基础上扩展,keyle也是在学习中欢迎交流,后面两篇计划是在写一篇Behavior?Tree(行为树),最后一篇实现基于Lua的AI的热更新?QQ群交流:137728654 ? ? Finite State Machine Contents 1?Description 2?Components 3?C# - FSMSystem.cs 4?Example Descr

unity5, animator state machine, 无条件transition实现播放动画序列

今天遇到这样一个需求,我有一个名为happy的animation clip和一个名为speak的animation clip.想实现当主角胜利后播放动序列: happy->speak->happy->speak->... 这样无限循环. 走了一些弯路后发现直接在animator state machine里就可以搞定,如下图: transition{idle->happy}上condition设为triggerWin,由于idle到happy的transition不能太拖沓,

MITK中State machine和configuration详解和调用顺序

(学习笔记,错误难免,请指正:私人劳动,转载请注明出处) 下面以MITK自带的mitkPointSetDataInteractor.h.mitkPointSetDataInteractor.cpp.PointSet.xml.PointSetConfig.xml为例,解释MITK中的交互原理,以及State machine和configuration的调用顺序. PointSet.xml: <statemachine> <state name="start" start

Mina State machine状态机讲解

原文地址:Mina State machine(Apache Mina User guide Chapter14 State machine) 如果您使用的是Mina与复杂网络开发应用程序交互,你可能在某些时候发现自己达到的美好状态模式尝试解决一些复杂性.然而,在你这样做之前你可能想检查mina-statemachine试图解决一些状态模式的不足之处. 1.1.1. 一个简单的例子 让我们演示mina-statemachine如何以一个简单的例子工作.下图显示了一个典型的录音机一个状态机.椭圆形

(三)Unity5.0新特性------State Machine Behaviours

出处:http://blog.csdn.net/u010019717 author:孙广东      时间:2015.3.31 (State machine behaviours)状态机的行为在Animator Controller的脚本中是可以附加到动画状态或子状态机.每当你进入一种状态,就可以对其添加各种各样的状态依赖例如播放声音等行为,他们甚至可以独立于动画animation.而用于(logic state machines )逻辑状态机.要添加(State machine behavio

无线设备状态机(The Radio State Machine)

1.无线设备状态机(The Radio State Machine) 典型的3G网络下的的网络无线设备包括下列三种耗能状态: 1. Full power : 当一个网络连接处于激活状态时,允许设备以最快的速率传输数据. 2. Low power : 一种中间状态,使用Full power状态下50%的能量损耗. 3. Standby : (备用) 没有网络处于活跃状态时候的能量消耗状态. 三种状态意见的状态切换图如下: 设备如果处于Full Power状态时耗电量最大,如果这个状态下网络传输静止