【发布时间】:2017-07-06 18:44:08
【问题描述】:
我有以下代码用于 2 位乘法器:
module Multiplier (a0, a1, b0, b1, c[3:0]);
output [3:0]c;
input a0, a1, b0, b1;
wire a0b1, a1b0, ha0c, a1b1;
and (c[0], a0, b0);
and (a0b1, a0, b1);
and (a1b0, a1, b0);
HalfAdder ha0 (a1b0, a0b1, c[1], ha0c);
and (a1b1, a1, b1);
HalfAdder ha1 (ha0c, a1b1, c[2], c[3]);
endmodule
我希望能够将其扩展到 2 位以上(32 位)。不过,我的代码结构对此提出了挑战。首先,我必须为模块提供 68 个参数。此外,我必须手动创建 64 根电线(电线 a0b1、a1b0、ha0c、a1b1 的重复)。最后,我需要手动写出一堆逻辑门和 HalfAdder 模块来连接所有逻辑。因此,我想知道是否有一种方法可以重构我的代码,以便能够实例化一个 n(传递的参数)大小的二进制乘数。
【问题讨论】:
-
在您的模型中使用结构门有什么意义?您可以使用普通的verilog,只需使用语言的力量就可以节省大量的人工。
-
常规verilog是什么意思?喜欢使用“assign”和“&”而不是手动编写门?
-
generate/for循环的组合可能会有所帮助,但我更愿意编写脚本(例如在 Perl 或 TCL 中)。 -
是的,我的意思是使用赋值、运算符、always 块、循环、'if' 语句、函数、数组、结构......并且没有门。
-
门级演示在某些探索和综合过程以及一些香料模拟中是有意义的。以我的经验,所有这些都是由 RTL 中的其他一些工具生成的或从原理图中抽象出来的。人们手工制作它们的情况很少见。也许在低级库单元中。人们有时会使用某些类别的门,例如驱动公共汽车的三态缓冲器。所以,一般来说,你应该避免使用它们。