我是靠谱客的博主 自由小蚂蚁,最近开发中收集的这篇文章主要介绍verilog中简单的one-hot 状态机转换one-hot 编码verilog中写法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

简单的one-hot 状态机转换

  • one-hot 编码
  • verilog中写法

one-hot 编码

0001 0010 0100 1000
如上例每次只有1个bit位置high其余low的状态叫one-hot,相反只有1个bit low 其余bit high 叫 one-cold。

verilog中写法

一般状态机转换中我们会先

paremeter A = 0001, B = 0010, C = 0100, D = 1000;

像这样预设值,这里介绍一种新的方法,

在这里插入图片描述
如上图的变化,如果state想变到 A状态的话有2种方式,一是从A in=0,二是 C in=0。所以等式可以写成A: next_state[0] = state[0]&(~in) | state[2]&(~in)。 这种形式相较于传统的状态机转换要简单很多,这种形式叫做“drive equation by inspection”。

module top_module(
    input in,
    input [3:0] state,
    output [3:0] next_state,
    output out); //
 
    parameter A=0, B=1, C=2, D=3;
 
    // State transition logic: Derive an equation for each state flip-flop.
    assign next_state[A] = state[A] & ~in | state[C] & ~in;
    assign next_state[B] = state[A] & in | state[B] & in | state[D] & in;
    assign next_state[C] = state[B] & ~in | state[D] & ~in;
    assign next_state[D] = state[C] & in;
 
    // Output logic: 
    assign out = state[D];
 
endmodul

因为one hot 只有1位是高电位,利于判断具有速度快的优势,但是会消耗更多寄存器资源,相应减少组合逻辑资源。就相当于已经译码过的3-8译码器。

对于Gary 格雷码来说 每次只变动一个bit的值,是最节省功耗的方法。

所以在选择采用那种状态机的时候,如果状态比较少就采用one-hot,而如果状态较多就采用格雷码来节省功耗。

最后

以上就是自由小蚂蚁为你收集整理的verilog中简单的one-hot 状态机转换one-hot 编码verilog中写法的全部内容,希望文章能够帮你解决verilog中简单的one-hot 状态机转换one-hot 编码verilog中写法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部