# fpga-base **Repository Path**: sumght/fpga-base ## Basic Information - **Project Name**: fpga-base - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-02 - **Last Updated**: 2026-07-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # FPGA-Base 一个常用的Verilog模块工具包,适用于Vivado,专注于**控制**、**通信**和**流程**相关的功能模块。可在没有外网的环境下快速搭建FPGA设计。 ## 模块分类 ### 1. 通信接口 (`modules/communication/`) - **uart** - 通用异步收发器,支持可配置波特率 - **spi_master** - SPI主机控制器,支持多种模式 - **i2c_master** - I2C主机控制器 - **gpio_lite** - 轻量级GPIO接口 ### 2. 控制算法 (`modules/control/`) - **pid_controller** - PID控制器(位置式/增量式,含抗积分饱和) - **ldrdc** - 线性自抗扰控制器(LESO + LSEF) - **pwm_gen** - 多路PWM发生器 - **encoder** - 正交编码器接口(四倍频) - **dc_motor_drv** - 直流电机H桥驱动控制器 ### 3. 状态机与流程控制 (`modules/state_machine/`) - **generic_fsm** - 通用参数化状态机框架 - **cmd_parser** - 串口命令解析器 - **task_scheduler** - 简单任务调度器 ### 4. 数据处理 (`modules/data_proc/`) - **crc32** - CRC32校验计算器 - **counter** - 可配置计数器(支持向上/向下) ### 5. 滤波器 (`modules/filter/`) - **moving_avg** - 滑动平均滤波器 ### 6. 通用模块 (`modules/common/`) - **clkdiv** - 时钟分频器(支持奇偶分频) - **clkmux** - 时钟选择器 - **reset_gen** - 异步复位同步释放生成器 - **cdc_fifo** - 跨时钟域同步器和异步FIFO ## 快速开始 ### 添加模块到项目 1. 复制所需模块文件夹到你的项目中 2. 在Vivado中添加源文件 3. 参考示例代码进行例化 ### 示例:使用PID控制器 ```verilog pid_controller #( .DATA_WIDTH(16), .INT_WIDTH(8), .CLK_FREQ(50_000_000), // 50MHz .SAMPLE_TIME(0.001) // 1ms采样周期 ) u_pid ( .clk(clk), .rst(rst_n), .enable(1'b1), .setpoint(setpoint), .feedback(feedback), .error_out(error), .output(out), .done(done) ); ``` ### 示例:使用UART ```verilog uart #( .BAUD_RATE(115200), .CLK_FREQ(50_000_000) ) u_uart ( .clk(clk), .rst_n(rst_n), .rx(rx_pin), .tx(tx_pin), .data_out(rx_data), .rx_valid(rx_valid), .data_in(tx_data), .tx_valid(tx_valid), .tx_done(tx_done) ); ``` ### 示例:使用PWM发生器 ```verilog pwm_gen #( .PWM_WIDTH(16), .CLK_DIV(500), .NUM_CHANNELS(4) ) u_pwm ( .clk(clk), .rst_n(rst_n), .en(1'b1), .update(update_sig), .duty_req({4{8'd128}}), // 50%占空比 .pwm_out(pwm_pins), .busy(busy_flag) ); ``` ## 目录结构 ``` fpga-base/ ├── modules/ # 模块源码 │ ├── communication/ # 通信接口模块 │ ├── control/ # 控制算法模块 │ ├── state_machine/ # 状态机与流程控制 │ ├── data_proc/ # 数据处理模块 │ ├── filter/ # 滤波器模块 │ └── common/ # 通用模块 ├── tb/ # Testbench测试文件 ├── docs/ # 模块使用说明文档 └── README.md ``` ## 模块清单 | 模块名称 | 分类 | 说明 | 文档 | |----------|------|------|------| | pid_controller | control | PID控制器(位置式/增量式) | [docs](docs/pid_controller.md) | | ldrdc | control | 线性自抗扰控制器 | [docs](docs/ldrdc.md) | | pwm_gen | control | 多路PWM发生器 | [docs](docs/pwm_gen.md) | | encoder | control | 正交编码器接口 | [docs](docs/encoder.md) | | dc_motor_drv | control | 直流电机H桥驱动 | [docs](docs/dc_motor_drv.md) | | uart | communication | 通用异步收发器 | [docs](docs/uart.md) | | spi_master | communication | SPI主机控制器 | [docs](docs/spi_master.md) | | i2c_master | communication | I2C主机控制器 | [docs](docs/i2c_master.md) | | gpio_lite | communication | 轻量级GPIO接口 | [docs](docs/gpio_lite.md) | | generic_fsm | state_machine | 通用参数化状态机 | [docs](docs/generic_fsm.md) | | cmd_parser | state_machine | 串口命令解析器 | [docs](docs/cmd_parser.md) | | task_scheduler | state_machine | 任务调度器 | [docs](docs/task_scheduler.md) | | crc32 | data_proc | CRC32校验计算器 | [docs](docs/crc32.md) | | counter | data_proc | 可配置计数器 | [docs](docs/counter.md) | | moving_avg | filter | 滑动平均滤波器 | [docs](docs/moving_avg.md) | | clkdiv | common | 时钟分频器 | [docs](docs/clkdiv.md) | | clkmux | common | 时钟选择器 | [docs](docs/clkmux.md) | | reset_gen | common | 复位生成器 | [docs](docs/reset_gen.md) | | cdc_fifo | common | 跨时钟域FIFO | [docs](docs/cdc_fifo.md) | ## 仿真测试 每个模块都配有Testbench,位于`tb/`目录下: ```bash # 使用Icarus Verilog仿真 iverilog -g2012 -o tb/tb_pid_controller tb/tb_pid_controller.v modules/control/pid_controller.v vvp tb/tb_pid_controller ``` ## 注意事项 - 所有模块默认使用正极边沿触发的时钟和低电平有效的异步复位 - 模块适用于Vivado综合,不依赖外部IP核 - 部分模块需要根据实际时钟频率和性能要求调整参数 - `cdc_fifo` 模块中的异步FIFO使用简化实现,完整应用建议使用Vivado IP核 ## 许可证 MIT License