//格雷码地址产生
integer I;
always @( RADDR ) begin
BNEXT_R[A] = RADDR[A]; //最左边的一位数保持不变
for( I = A - 1; I >= 0; I = I - 1 ) //将格雷码转换为普通二进制
BNEXT_R[I] = RADDR[I] ^ BNEXT_R[I + 1]; //将格雷码其左边第二个起解码后的值按位异或,即相同为0,不同为1
BNEXT_R = BNEXT_R + 1'b1; //普通二进制码自增一
GNEXT_R = ( BNEXT_R >> 1 ) ^ BNEXT_R; //BNEXT_R右移一位,与自身异或,得到下一个输出的格雷码
end
其中RADDR是定义的输出地址,寄存器A为地址的长度,寄存器BNEXT_R用于存储解码后二进制码,寄存器GNEXT_R 用于存储运算得到的下一个格雷码。
FPGA Verilog HDL格雷码的产生
最新推荐文章于 2023-12-07 14:08:02 发布