注册哦 登录
PLC论坛-全力打造可编程控制器专业技术论坛 返回首页

loveplc的个人空间 http://bbs.plcjs.com/?17 [收藏] [复制] [分享] [RSS]

日志

为什么要使用格雷码

已有 1400 次阅读2011-3-17 03:02 |个人分类:电子电路|系统分类:技术


格雷码有两个作用:

一是消除多个比特同时变化带来的潜在竞争与冒险.

二是降低功耗(翻转次数减少)。在状态机中通常为了简单起见表示现态与次态的状态参数并不使用格雷码而是二进制码,因为一个状态的变化可能是发散的而非单向的,就是说不同的条件对应不同的次态,这个时候用格雷码对状态进行编码达不到一次只变化一位的目的,除非在特殊情况下,即状态机的变化是单向的,总是由S0到S1,再到S2,等等,这个时候用格雷码就能达到原来的目的。

CPLD程序如下

module gray_cntr (
      clk
    , reset_
    , inc             // 输入pulse,每一个pulse,counter + 1
    , gray
    );
input           clk;
input           reset_;
input           inc;
output [3:0]        gray;
reg    [3:0]        gray;   // gray counter
reg         polarity;  // polarity of gray counter bits
always @( posedge clk or negedge reset_ ) begin
    if ( !reset_ ) begin
    polarity <=  1'b0;
    gray     <=  0;
    end else if ( inc ) begin // allows clock gating
    polarity <=  !polarity;
        gray     <=  { gray[3]^(polarity&~gray[1]&~gray[0]),
                         gray[2]^(polarity&gray[1]&~gray[0]),
                         gray[1]^(polarity&gray[0]),
                         gray[0]^(~polarity) };
    end
end
endmodule


路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册哦