分享

二进制格雷码与自然二进制码的互换.(Verilog)

 zhangquanling 2012-03-11
格雷码: 任意两个相邻的代码之间, 只有一位二进制数不同的BCD码. 常用在大于24个状态的状态机设计中.

 

一. 自然二进制码转换为二进制格雷码

原理: 若二进制码表示为: B[N-1]B[N-2]...B[2]B[1]B[0];

相应地, 则二进制格雷码表示为: G[N-1]G[N-2]...G[2]G[1]G[0].

其中最高位保留: G[N-1] = B[N-1];

其他各位: G[i] = B[i+1] xor B[i]. (i = 0, 1, 2, ..., n-2)

 

Binary_to_Gray.v / Verilog



module Binary_to_Gray (
  input       [N-1:0] B,
  output reg  [N-1:0] G
);
 
parameter N = N_bit_Binary; // 设置自然二进制码的位宽

 

integer i;

 

always @ (B)
begin
  G[N-1] = B[N-1];
  for (i=0; i<N-1; i="i"+1)
    G[i] = B[i+1] ^ B[i];
end

 

endmodule





 

仿真波形


图1. N="3"


点击看大图

图2. N="4"

 

二. 二进制格雷码转换为自然二进制码


原理: 若二进制格雷码表示为: G[N-1]G[N-2]...G[2]G[1]G[0];

相应地, 则二进制码表示为: B[N-1]B[N-2]...B[2]B[1]B[0].

其中最高位保留: B[N-1] = G[N-1];

其他各位: B[i-1] = G[i-1] xor B[i]. (i = 1, 2, ..., n-1)

 

Gray_to_Binary.v / Verilog





module Gray_to_Binary (
  input       [N-1:0] G,
  output reg  [N-1:0] B
);

 

parameter N = B_bit_Gray; // 设置二进制格雷码的位宽

 

integer i;

 

always @ (G)
begin
  B[N-1] = G[N-1];
  for (i=1; i<=N-1; i="i"+1)
    B[i-1] = G[i-1] ^ B[i];
end
 
endmodule



 

仿真波形


图3. N="3"

 

点击看大图

图4. N="4"

 

三. 故障分析

在转换时, 出现很多毛刺, 不知怎样消除. 希望有高人指点.

 

四. 其他

本文可作为Verilog的for循环的学习实例.

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多