I have a signal like this for example:
wire [18:0] A;

I need to XOR it with itself with multiple XOR gates that have up to 4 inputs. So this signal would be broken down like this:

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] 

How do I XOR a signal with itself like this? Also, what is the best way to do this?

0

1 Answer

There are a couple of ways of doing this. One way could be to build a 4-input XOR module, and then instantiate multiple copies.

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 

Another way would be to use a for-loop. This won't work with all the cases, since you don't have an evenly-divisible number of wires.

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 

There are some other tricks (like 0-padding the upper-bits of A to make it evenly divisible, which makes the loops simpler) but they'll all end up with the same result, so this should be enough to get you started.

0

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy