如何在verilog或systemverilog中简化下面的编程代码

如何在verilog或systemverilog中简化下面的编程代码,verilog,system-verilog,Verilog,System Verilog,我有以下代码需要简化。但这对我来说有点困难。这里有人能提供一些帮助吗 u0,u1,。。。由功能决定。 与a0、a1的编号相同 如果功能是2或4,则很容易按照现在的样子处理。但若特性是一个非常大的数字,我们必须在这里编写更多的代码行。所以我想把这些代码改成deperl来简化 assign result_u0_a0 = start_u0_a0 & (start_u0_a1) | (id_u0_a1 == id_u0_a0)

我有以下代码需要简化。但这对我来说有点困难。这里有人能提供一些帮助吗

u0,u1,。。。由功能决定。 与a0、a1的编号相同

如果功能是2或4,则很容易按照现在的样子处理。但若特性是一个非常大的数字,我们必须在这里编写更多的代码行。所以我想把这些代码改成deperl来简化

assign result_u0_a0 = start_u0_a0 
                    & (start_u0_a1) | (id_u0_a1 == id_u0_a0)
                    & (start_u1_a0) | (id_u1_a0 == id_u0_a0)
                    & (start_u1_a1) | (id_u1_a1 == id_u0_a0);
assign result_u0_a1 = start_u0_a1
                    & (start_u0_a0) | (id_u0_a0 == id_u0_a1)
                    & (start_u1_a0) | (id_u1_a0 == id_u0_a1)
                    & (start_u1_a1) | (id_u1_a1 == id_u0_a1);
assign result_u1_a0 = start_u1_a0 
                    & (start_u0_a0) | (id_u0_a0 == id_u1_a0)
                    & (start_u0_a1) | (id_u0_a1 == id_u1_a0)
                    & (start_u1_a1) | (id_u1_a1 == id_u1_a0);
assign result_u1_a1 = start_u1_a1
                    & (start_u0_a0) | (id_u0_a0 == id_u1_a1)
                    & (start_u0_a1) | (id_u0_a1 == id_u1_a1)
                    & (start_u1_a0) | (id_u1_a0 == id_u1_a1);

您只需编写一个perl或python代码来生成所需的输出。
在Verilog或Systemverilog中,您可以编写宏。但他们不支持。这意味着您不能编写同时适用于2和4的宏。

它甚至可以编译吗?我不明白这个代码应该如何工作。至少您需要提供所有变量的声明。您应该从表达式中删除所有赋值,这至少会使代码不可读。我同意这个问题需要一些工作。我对格式没有问题。对于C/C++程序员来说,这可能很奇怪,但在Verilog中,这种代码结构非常常见。我不知道代码是否被复制好了(start_u0_a1|(id_u0_a1==id_u0_a0))?在这种情况下,它是一个单一的
=
使其成为赋值,实际上是对连续赋值操作的rhs中相同变量的多个赋值。我甚至不知道它在verilog中是否合法。我知道这适用于always块中的寄存器。你说的“将这些代码更改为deprel”是什么意思