Беззнаковое выражение, используемое со знакомым выражением в присваивании - PullRequest
1 голос
/ 04 августа 2020

У меня есть следующий код в verilog:

reg [5:0] a;
reg [5:0] shift_amt;
reg [63:0] mysig;

assign shift_amt = (a + 1) & 6'h3f;
assign mysig = 1 << shift_amt;

Когда я запускаю Spyglass, я получаю следующую ошибку:

Беззнаковое выражение 'mysig' используется со знакомым выражением '( 1 << shift_amt) 'в назначении. </strong>

У меня ничего не помечено как signed или unsigned , и я пробовал несколько способов переписать этот оператор , и даже завернутый попробовал $ unsigned (1 << shift_amt) </strong>, но по какой-то причине мой результат для mysig стал 0 для тестового примера, который я использовал where a = 39 .

1 Ответ

2 голосов
/ 04 августа 2020

Число c литерал 1 неявно является 32-битным значением со знаком. По привычке вы должны писать это как

assign mysig = 64'b1 << shift_amt;
...