Hi
I am looking for a way to write the following case statement below.
aaa is 32-bit and presumably one-shot but has a default all zeros
unique statement should report warning if any 2-bits are high at the same time.
The code below doesn’t give me the result I need.
always @ (*)
unique case (1'b1) inside
aaa[14:30]: begin
CMP1A = some value;
CMP1B = some value;
end
aaa[5:6],aaa[9]: begin
CMP1A = some value;
CMP1B = some value;
end
aaa[3]: begin
CMP1A = some value;
CMP1B = some value;
end
aaa[4],aaa[8]: begin
CMP1A = some value;
CMP1B = some value;
end
default: begin
CMP1A = some value;
CMP1B = some value;
end
endcase
In reply to sonofthesand:
You cannot use unique case here unless are willing to make a seperate case item for each bit. Also, aaa[5:6] needs to be broken out as aaa[5],aaa[6].
If you want to know when more than 1 bit of aaa is set, use an assertion.
always_comb begin
assert final ($onehot0(aaa));
case (1'b1)
Thank you for your suggestion.
I have also come to realise that unique doesn’t work even if I were to separate the bits in a case item like below which makes this feature limited.
always_comb begin
unique case (1’b1) inside
aaa[5],aaa[6]: begin
CMP1A = some value;
CMP1B = some value;
end
If you want use unique case, you would have to write it as
always_comb begin
unique case (1'b1)
aaa[5]: begin
CMP1A = some value;
CMP1B = some value;
end
aaa[6]: begin
CMP1A = some value;
CMP1B = some value;
end
In reply to sonofthesand:
If you want use unique case, you would have to write it as
always_comb begin
unique case (1'b1)
aaa[5]: begin
CMP1A = some value;
CMP1B = some value;
end
aaa[6]: begin
CMP1A = some value;
CMP1B = some value;
end