Verilog实现二进制与格雷码的转换

1,格雷码

格雷码的特点是从一个数变为相邻的一个数时,只有一个数据发生跳变,所以,就可以避免二进制编码计数器组合电路中出现的亚稳态。比较常用于FIFO,RAM地址寻址计数器中。

        由于格雷码是一种变权码,每一位没有固定的大小,很难进行比较大小和算数运算

2,二进制转换成格雷码

二进制的最高位作为格雷码的最高位,次高位的格雷码是二进制的最高位与次高位异或得到,其他位类似。

二进制转格雷码

  Verilog实现  

module  bin2gray

#(
    parameter data_width = 'd4

)
(
    input [data_width - 1:0] bin ,
    output[data_width - 1 :0] gray ,            

);

assign gray = bin^(bin>>1);

endmodule 

3,格雷码转换成二进制

格雷码的最高位作为二进制的最高位,二进制的次高位是二进制的高位和格雷码的次高位相异或得到,其他位以此类推。

格雷码转成二进制

 Verilog 代码实现

module gray2bin

#(
    parameter data_width = `d4
)
(
    input [data_width - 1 :0 ]  gray,
    output [data_width - 1 :0 ] bin 
    
    
);

assign bin[data_width - 1 ] = gray[data_width - 1] ; //最高位相同

genvar i ;
generate
        for(i=0 ; i<=data_width - 2;i=i+1)
            begin:gray
                assign bin[i] = bin[i+1] ^ gray[i];
end
endgenerate

endmodule

4,测试略

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值