分隔器映射到典型硬件的优雅程度要低得多。以 Lattice ICE40 FPGA 为例。
让我们比较两种情况:这个 8x8 位到 16 位乘法器:
module multiply (clk, a, b, result);
input clk;
input [7:0]a;
input [7:0]b;
output [15:0]result;
always @(posedge clk)
result = a * b;
endmodule // multiply
这个除法器将 8 位和 8 位操作数减少为 8 位结果:
module divide(clk, a, b, result);
input clk;
input [7:0] a;
input [7:0] b;
output [7:0] result;
always @(posedge clk)
result = a / b;
endmodule // divide
(是的,我知道,时钟不做任何事情)
将乘法器映射到 ICE40 FPGA 时生成的原理图概览可在此处找到,除法器可 在此处找到。
Yosys 的综合统计数据为:
乘
- 电线数量:155
- 线位数:214
- 公共线数:4
- 公线位数:33
- 记忆数:0
- 内存位数:0
- 进程数:0
- 细胞数量:191
- SB_CARRY 10
- SB_DFF 16
- SB_LUT4 165
划分
- 电线数量:145
- 线位数:320
- 公共线数:4
- 公线位数:25
- 记忆数:0
- 内存位数:0
- 进程数:0
- 细胞数量:219
- SB_CARRY 85
- SB_DFF 8
- SB_LUT4 126
值得注意的是,为全宽乘法器和最大除法器生成的 verilog 的大小并不是那么极端。但是,如果您查看下面的图片,您会注意到乘数的深度可能为 15,而分隔符看起来更像是 50 左右;关键路径(即运行期间可能出现的最长路径)是速度的定义!
无论如何,您将无法阅读此内容以获得视觉印象。我认为复杂性的差异是可以发现的。这些是单周期乘法器/除法器!
乘
在 ICE40 上相乘(警告:~100 Mpixel 图像)

划分
(在 ICE40 上划分)(警告:~100 Mpixel 图像)
