Я пытаюсь использовать "?" не волнует спецификатор в моем заявлении case. Я также пробовал использовать 6'b0001xx и 6'b0001zz. Я смущен, поскольку я сослался на прототипирование ПЛИС Понг Чу на примерах Verilog, и, похоже, он делает это точно так же. Когда я запускаю симуляцию, когда «состояние» равно 0, а «in» равно 4 (3'b100), оператор case переходит в значение по умолчанию вместо ожидаемого первого случая (6'b0001 ??). Если кто-нибудь сможет объяснить или указать мне правильное направление, я буду очень признателен.
always @(*)
begin
case({state, in})
//state0, start is high >> loadA = 1 (s1)
6'b0001??: {nstate, nout} = {3'b001, {1'b0, 1'b1, 1'b0, pass}};
//state1, start is high >> loadD = 1 (s2)
6'b0011??: {nstate, nout} = {3'b010, {1'b0, 1'b0, 1'b1, pass}};
//state2, start is high >> we = 1 (s3)
6'b0101??: {nstate, nout} = {3'b011, {1'b1, 1'b0, 1'b0, pass}};
//state3, done is high >> loadA = 1 (s4), done is low >> loadA = 1 (s1)
6'b01111?: {nstate, nout} = {3'b100, {1'b0, 1'b1, 1'b0, pass}};
6'b0111??: {nstate, nout} = {3'b001, {1'b0, 1'b1, 1'b0, pass}};
//state4, start is high >> loadD = 1 (s5)
6'b1001??: {nstate, nout} = {3'b101, {1'b0, 1'b0, 1'b1, pass}};
//state5, start is high >> (s6)
6'b1011??: nstate = 3'b110;
//state6, done is low >> loadA = 1 (s4), done is high >> (s7)
6'b1101??: {nstate, nout} = {3'b100, {1'b0, 1'b1, 1'b0, pass}};
6'b11011?: nstate = 3'b111;
//state7, finish is low >> increment pass, loadA = 1 (s1), finsih is high >> pass = 0 loadA = 1 (s1)
6'b1111??: {nstate, nout} = {3'b001, {1'b0, 1'b0, 1'b0, (pass+1)}};
6'b1111?1: {nstate, nout} = {3'b001, {1'b0, 1'b0, 1'b0, 3'b0}};
default:
{nstate, nout} = {3'b0, 6'b0};
endcase