0

例如,我有一个这样的信号:
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

1 回答 1

1

有几种方法可以做到这一点。一种方法是构建一个 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

还有一些其他技巧(例如 0 填充 A 的高位以使其均匀整除,这使得循环更简单)但它们最终都会得到相同的结果,所以这应该足以让你开始。

于 2016-05-25T16:15:39.860 回答