You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Verilog中除法运算符(/)的综合实现及门级结构查询

关于Verilog非2的幂除法综合与门级电路查看的问题

问题描述

之前我对非2的幂常数对应的除法运算符/能否被综合存在疑问,用Synopsys Design Vision尝试后发现可以综合,但不清楚如何查看最终综合后的设计功能与结构,也不确定实现是否可行。我的核心问题:

  1. 能否查看逻辑综合后的门级电路以了解/除法的实现方式?
  2. 若无法查看,能否说明非2的幂常数除法的可能实现逻辑?

背景

我正在实现一个求解sin和cos泰勒级数前3项的模块,代码示例如下:

reg [31:0] x, x_2, x_3, x_4, x_5;
reg signed [31:0] term1, term2, term3, term4, term5;
...
term1 = 1 << 16; // Q16.16 format
term2 = x_2 / 2; // x terms also already converted to Q16.16
term3 = x_4 / 24;
cos_sum = term1 - term2 + term3;

sin的实现流程类似,仅项和除法常数不同,代码已通过-45至45度输入的测试用例。

解答

1. 查看综合后的门级电路(Synopsys Design Vision)

完全可以查看,有两种常用方式:

  • 导出门级网表后查看:在Design Vision的命令行中执行以下命令,将综合后的门级设计导出为Verilog文件:
    write -format verilog -hierarchy -output gate_level_netlist.v
    
    导出后可以用任意支持Verilog的EDA工具打开网表,查看具体的门级结构和连接关系。
  • 在Design Vision GUI中直接查看:
    1. 完成综合后,点击顶部菜单的Window -> Schematic打开原理图查看器;
    2. 或者在命令行输入gui::show_schematic,直接加载当前设计的门级原理图,你可以逐层展开模块,找到除法运算对应的逻辑单元。

2. 非2的幂常数除法的实现逻辑

对于常数除数(比如你代码中的24),综合器不会生成传统的迭代除法器(资源占用高、延迟大的结构),而是会做极致优化,通常用定点乘法+移位+加法的组合实现,核心思路是把除法转换成乘以除数的倒数:

  • 比如除以24,先计算1/24的定点近似值(对应你的Q16.16格式,1/24≈0.041666,乘以2^16即65536后得到约2730);
  • 综合器会将x_4 / 24优化为(x_4 * 2730) >> 16,同时还会进一步拆分优化(比如24=8×3,先右移3位实现除以8,再对结果做除以3的近似乘法),以此减少资源消耗、提升运算速度。
  • 而对于2的幂除数(比如你的/2),综合器会直接转换成右移1位的操作,这是最节省资源的实现方式。

内容的提问来源于stack exchange,提问作者Sammy Watt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 21:35:01