生成格雷码

以下是Verilog实现格雷码的两种常见方法:

1. 二进制转格雷码(组合逻辑实现)

verilog 复制代码
module binary_to_gray #(
    parameter N = 4 // 默认4位位宽
)(
    input  [N-1:0] binary, // 二进制输入
    output [N-1:0] gray    // 格雷码输出
);
    assign gray = binary ^ (binary >> 1); // 转换公式
endmodule

原理

格雷码的最高位与二进制相同,其余各位为二进制对应位与其高一位的异或(Gi = Bi ^ Bi+1)。

2. 格雷码计数器(时序逻辑实现)

verilog 复制代码
module gray_counter #(
    parameter N = 4 // 默认4位位宽
)(
    input        clk,   // 时钟
    input        rst_n, // 异步低电平复位
    output reg [N-1:0] gray // 格雷码输出(寄存型)
);
    reg [N-1:0] binary; // 内部二进制计数器

    // 二进制计数器逻辑
    always @(posedge clk or negedge rst_n) begin
        if (!rst_n) 
            binary <= 0; // 复位时清零
        else 
            binary <= binary + 1; // 每个时钟周期加1
    end

    // 二进制转格雷码(组合逻辑)
    wire [N-1:0] next_gray = binary ^ (binary >> 1);

    // 寄存格雷码输出
    always @(posedge clk or negedge rst_n) begin
        if (!rst_n)
            gray <= 0;
        else
            gray <= next_gray;
    end

endmodule

原理

  • 内部维护一个二进制计数器,每个时钟周期递增。
  • 通过组合逻辑将二进制转换为格雷码。
  • 输出格雷码经过寄存器处理,确保时序稳定。

使用说明

  • 组合逻辑转换:直接连接二进制输入,立即得到格雷码输出。
  • 格雷码计数器:每个时钟上升沿输出下一个格雷码值,复位后从0开始。

示例波形(4位)

时钟周期 二进制 格雷码
0 0000 0000
1 0001 0001
2 0010 0011
3 0011 0010
4 0100 0110

相邻格雷码仅有一位不同,符合设计预期。

相关推荐
Eloudy15 小时前
FPGA (QSFP28 + CMAC US+ RoCEv2) 与 Ubuntu22 + Mellanox 网卡直连分析
fpga开发
szxinmai主板定制专家16 小时前
RK3568+FPGA高速并行采集|半导体探针测试设备多通道同步数据采集系统设计
人工智能·嵌入式硬件·计算机视觉·fpga开发
ARM|X86+FPGA工业主板厂家2 天前
RK3588+FPGA+EtherCAT异构架构解析|工业场景如何同时保住AI算力与微秒级运动实时性
人工智能·fpga开发·架构
zlinear数据采集卡2 天前
从“脏信号”到“纳伏级纯净”:硬核拆解DABL7606的多级抗混叠滤波与24位过采样算法
arm开发·科技·嵌入式硬件·fpga开发·开源
尤老师FPGA2 天前
HDMI数据的接收发送实验(二十)
fpga开发
千寻xun3 天前
三、实战篇-NVME SSD控制之FPGA实现(一)
fpga开发·nvme ssd·nvme协议
XMAIPC_Robot3 天前
软硬协同实时控制|RK3588业务调度+FPGA硬件时序,ethercat实现半导体设备微秒级响应(125us)
linux·arm开发·人工智能·fpga开发
upper20203 天前
从零开始设计riscv cpu记录之七
fpga开发·riscv·riscv设计·btb·分支预测
ARM|X86+FPGA工业主板厂家3 天前
AI视觉跟随运动控制实战|RK3588 NPU检测+FPGA EtherCAT多轴联动精准跟随方案,适用于半导体视觉对位等
人工智能·fpga开发·硬件工程·ethercat·实时系统
XMAIPC_Robot3 天前
RK3588+FPGA半导体设备量产踩坑大全|发热、时序漂移、推理抖动、成像干扰、EMC干扰方案
人工智能·嵌入式硬件·fpga开发·arm+fpga