FPGA线上课程平台|最全栈的FPGA学习平台|FPGA工程师认证培训
登录
首页-技术文章/快讯-技术分享-正文

FPGA大赛中Verilog代码风格对综合结果的影响

二牛学FPGA二牛学FPGA
技术分享
2天前
0
0
7

Quick Start

  • 步骤1:准备环境。安装Vivado 2020.1及以上版本(或Quartus Prime 20.1),确保已安装对应器件库(如Xilinx Artix-7或Intel Cyclone V)。
  • 步骤2:创建工程。新建RTL工程,目标器件设为XC7A35TICSG324-1L(Artix-7)或5CEBA4F23C7N(Cyclone V)。
  • 步骤3:编写一个简单的计数器模块(8位)作为基线。使用两种风格:风格A(always @(posedge clk) + 非阻塞赋值)和风格B(组合逻辑+锁存器模拟)。
  • 步骤4:对两种风格分别运行综合(Synthesis),并查看综合后的RTL网表(Schematic)。
  • 步骤5:运行实现(Implementation),查看资源利用率(LUT、FF、DSP)和时序报告(WNS、TNS)。
  • 步骤6:对比结果。风格A应使用1个FF和少量LUT,Fmax > 500 MHz;风格B可能使用多个LUT和锁存器,Fmax < 200 MHz。
  • 步骤7:验证。在仿真中测试功能一致性(两种风格应输出相同计数序列)。
  • 步骤8:记录日志。导出综合报告和实现报告,保存为CSV或文本,用于后续分析。

前置条件与环境

项目推荐值说明替代方案
器件/板卡Xilinx Artix-7 XC7A35T大赛常用低成本器件,资源适中Intel Cyclone V / Lattice ECP5
EDA版本Vivado 2020.1稳定且兼容大赛环境Vivado 2018.3 / Quartus Prime 20.1
仿真器Vivado Simulator内建,无需额外安装ModelSim / Questa / Verilator
时钟/复位50 MHz 单端时钟,同步高有效复位大赛典型配置100 MHz / 异步复位
接口依赖无外部接口仅内部逻辑验证UART / SPI 用于调试
约束文件XDC(Vivado)或SDC(Quartus)必须包含时钟周期约束自动推导(不推荐)
操作系统Windows 10 64-bit兼容主流EDAUbuntu 18.04 / CentOS 7

目标与验收标准

完成本实验后,应能明确区分“良好”与“不良”Verilog代码风格对综合结果的影响。验收标准如下:

  • 功能点:两种风格的计数器在仿真中输出相同序列(0–255循环)。
  • 性能指标:风格A的Fmax ≥ 500 MHz(Artix-7 -1速度等级);风格B的Fmax ≤ 200 MHz或综合失败。
  • 资源利用率:风格A使用1个FF和2–3个LUT;风格B使用4–6个LUT和1个锁存器(或更多)。
  • 关键波形:风格A的时钟到输出延迟(Tco) 5 ns或存在毛刺。
  • 日志验收:综合报告无严重警告(如“inferred latch”),实现报告无时序违例。

实施步骤

阶段1:工程结构与代码编写

创建两个独立RTL文件:counter_good.v 和 counter_bad.v。工程结构如下:

project/
├── rtl/
│   ├── counter_good.v
│   └── counter_bad.v
├── constr/
│   └── top.xdc
└── sim/
    └── tb_counter.v

风格A(良好):使用同步复位和always块。

// counter_good.v
module counter_good (
    input wire clk,
    input wire rst_n,
    output reg [7:0] cnt
);
    always @(posedge clk or negedge rst_n) begin
        if (!rst_n)
            cnt &lt;= 8'd0;
        else
            cnt &lt;= cnt + 1'b1;
    end
endmodule

风格B(不良):使用组合逻辑和锁存器模拟。

// counter_bad.v
module counter_bad (
    input wire clk,
    input wire rst_n,
    output wire [7:0] cnt
);
    reg [7:0] cnt_next;
    always @(*) begin
        if (!rst_n)
            cnt_next = 8'd0;
        else
            cnt_next = cnt + 1'b1;  // 注意:cnt是wire,这里会产生锁存器
    end
    assign cnt = cnt_next;
endmodule

常见坑与排查

坑1:风格B中cnt被声明为wire,但always块内引用了cnt(wire类型),综合工具会推断出锁存器(latch)来保持状态。检查点:查看综合日志中是否有“inferred latch”警告。
坑2:风格A中遗漏复位信号敏感列表(如只写posedge clk),会导致综合推断出异步复位但无复位逻辑。修复:始终在敏感列表中加入所有异步信号。
标签:
本文原创,作者:二牛学FPGA,其版权均为FPGA线上课程平台|最全栈的FPGA学习平台|FPGA工程师认证培训所有。
如需转载,请注明出处:https://z.shaonianxue.cn/37020.html
二牛学FPGA

二牛学FPGA

初级工程师
这家伙真懒,几个字都不愿写!
71517.68W3.94W3.67W
分享:
成电国芯FPGA赛事课即将上线
FPGA大赛中Verilog代码风格对综合结果的影响:从RTL到网表的可复现指南
FPGA大赛中Verilog代码风格对综合结果的影响:从RTL到网表的可复现指南上一篇
基于FPGA快速原型验证加速AI算法大赛方案的设计与实现指南下一篇
基于FPGA快速原型验证加速AI算法大赛方案的设计与实现指南
相关文章
总数:740
FPGA入门经典书籍:VERILOG HDL数字设计与综合 第2版 本科教学版

FPGA入门经典书籍:VERILOG HDL数字设计与综合 第2版 本科教学版

资源介绍本文提供了一本经典的FPGA入门书籍资源:《VERILO…
技术分享
1年前
0
0
354
0
2026年FPGA在数据中心RDMA加速中的RoCE协议实现与优化

2026年FPGA在数据中心RDMA加速中的RoCE协议实现与优化

随着数据中心对低延迟、高吞吐网络需求的激增,基于融合以太网的RDMA(R…
技术分享
13天前
0
0
62
0
Verilog中状态机设计常见错误与调试技巧

Verilog中状态机设计常见错误与调试技巧

QuickStart步骤一:准备一个三段式状态机模板(状态寄存器、次态…
技术分享
4小时前
0
0
1
0
评论表单游客 您好,欢迎参与讨论。
加载中…
评论列表
总数:0
FPGA线上课程平台|最全栈的FPGA学习平台|FPGA工程师认证培训
没有相关内容