Verilog 中的 XOR 信号

XOR signal in verilog

我有这样的信号,例如:
wire [18:0] A;

我需要使用最多具有 4 个输入的多个 XOR 门对其自身进行 XOR。所以这个信号会像这样分解:

XOR the first 4 bits [3:0] 
XOR the next 4 bits [7:4] 
XOR the next 4 bits [11:8] 
XOR the next 4 bits [15:12] 
XOR the remaining 3 bits together [18:16]

如何像这样将信号与自身异或?另外,最好的方法是什么?

有几种方法可以做到这一点。一种方法是构建一个 4 输入 XOR 模块,然后实例化多个副本。

module myXOR4 ( input a, input b, input c, input d, output f);
    assign f = a ^ b ^ c ^ d; // ^ is the XOR operator
endmodule
// ...

myXOR4 xor1 (A[0],A[1],A[2],A[3],out[0]);
myXOR4 xor2 (A[4],A[5],A[6],A[7],out[1]);
// etc

另一种方法是使用 for 循环。这不适用于所有情况,因为您没有可均匀分割的电线数量。

reg [4:0] out;
integer i;
always@(*) begin
    for (i=0; i<4; i=i+1) 
        out[i]=A[4*i] ^ A[4*i+1] ^ A[4*i+2] ^ A[4*i+3];
    out[4] = A[18] ^ A[17] ^ A[16];
end

还有一些其他技巧(比如对 A 的高位进行 0 填充以使其可被均匀分割,这使得循环更简单)但它们最终都会得到相同的结果,所以这应该足够了让你开始。