gpt4 book ai didi

struct - 有没有办法在 Verilog 中定义类似 C 结构的东西

转载 作者:行者123 更新时间:2023-12-01 02:13:09 24 4
gpt4 key购买 nike

我有一个项目,用 Verilog(重要的是不是 SystemVerilog)编写的,由于设计的不同部分之间传递的信号数量,它变得有点难以管理。由于我有几个模块都需要相同的信号,因此我正在考虑尝试将它们合并到数量较少的命名对象中。问题是如何去做。

假设这是我人为的例子:

module mymodule(sig_a_in, sig_b_in, sig_c_in, sig_d_in, sig_e_in,
sig_a_out, sig_b_out, sig_c_out, sig_d_out, sig_e_out);

input wire sig_a_in, sig_b_in, sig_c_in;
input wire [5 : 0] sig_d_in;
input wire [31 : 0] sig_e_in;
output reg sig_a_out, sig_b_out, sig_c_out;
output reg [5 : 0] sig_d_out;
output reg [31 : 0] sig_e_out;
endmodule

在我看来,重要的是我可以按名称引用信号的可读性。但是,我不想将它们全部单独传递给每个模块。同样,我只在这个项目中使用 Verilog,所以 SystemVerilog 构造是不可能的。

我的第一个想法是我将它们组合成一个总线,然后使用定义的名称来引用各个电线。然而,这有点笨拙,尤其是当您将其他总线添加到混音中时。这在我设计的示例中非常简单,因为信号具有明显的隐含顺序,但在现实生活中却没有。
`define SIGNAL_BUS_WIDTH 41
`define A 0
`define B 1
`define C 2
`define D 3
`define E 9

module mymodule(signal_bus_in, signal_bus_out);

input wire [`SIGNAL_BUS_WIDTH-1 : 0] signal_bus_in;
output reg [`SIGNAL_BUS_WIDTH-1 : 0] signal_bus_out;

// reference a
signal_bus_in[`A]
// reference d? Not good when names don't have an obvious order
signal_bus_in[`E-1 : `D]
endmodule

最后,除了所有这些之外,工具链还必须能够区分模块正在使用结构中的哪些连线,并且只综合这些连线。并非所有模块都使用所有电线,所以我想避免有多余的未使用路径。我认为这些工具应该足够聪明才能做到这一点,即使在我上面的巴士示例中也是如此,但我并不完全确定。

有没有一种在 Verilog 中获得我想要的东西的好方法?

最佳答案

您总是可以通过使用宏来定义每个信号的范围而不是端点来进一步扩展您的想法:

`define WIDTH 41
`define sigA 0:0
`define sigB 1:1
`define sigC 2:2
`define sigD 8:3
`define sigE 40:9

module mymodule(signal_bus_in, signal_bus_out);

input wire [`WIDTH-1 : 0] signal_bus_in;
output reg [`WIDTH-1 : 0] signal_bus_out;

...
// signal a
signal_bus_in[`sigA];
// signal d
signal_bus_in[`sigD];
...

当然,这不像 SystemVerilog 打包结构那么容易(这就是它们存在的原因!),但它可以满足您的需求。此外,这也为您的线路添加了顺序,但我没有看到不会这样做的结构;甚至结构也会为您的信号添加顺序。但是,只要您使用宏,除了定义宏时,顺序并不重要。

任何好的合成工具都应该能够丢弃任何不驱动任何东西或不被任何东西驱动的端口或电线,所以除非你必须明确告诉它由于某种原因要忽略哪些线,否则你不应该担心它会合成额外的空间对于未使用的模块引脚。

关于struct - 有没有办法在 Verilog 中定义类似 C 结构的东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27511396/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com