always块内case外语句的执行
问题描述
下列代码中,信号n_state和pack_cnt_inc,在case中default中设有默认值,如果case语句中满足表达式中的条件,则n_state和pack_cnt_inc按条件下的数值赋值,如何case语句中条件不满足,则按case条件外n_state和pack_int_inc来赋值。
always @(*) begin
n_state = state;
din_axis_tready = dout_axis_tready;
n_dout_axis_tvalid = 0;
n_dout_axis_tdata = dout_axis_tdata;
n_dout_axis_tlast = 0;
pack_cnt_inc = 0;
data_vld_cnt_inc = 0;
case (state)
HEADER: begin
if (din_axis_tvalid) begin
n_state = DATA;
n_dout_axis_tvalid = 1;
n_dout_axis_tdata[7:0] = {2'b0, eol, sof, ch_id};
n_dout_axis_tdata[31:8] = 24'hCAFEAB;
n_dout_axis_tdata[DOUT_SZ-1:32] = {din_axis_tdata[DIN_SZ-1:0], {(DOUT_SZ-DIN_SZ-32){1'b0}}};
end
end
DATA: begin
if (din_axis_tvalid & sof) begin
n_dout_axis_tvalid = 1;
n_dout_axis_tdata[7:0] = {2'b0, eol, sof, ch_id};
n_dout_axis_tdata[31:8] = 24'hCAFEAB;
n_dout_axis_tdata[DOUT_SZ-1:32] = {din_axis_tdata[DIN_SZ-1:0], {(DOUT_SZ-DIN_SZ-32){1'b0}}};
end
else if (din_axis_tvalid) begin
n_dout_axis_tdata = dout_axis_tdata>>DIN_SZ | {din_axis_tdata, {(DOUT_SZ-DIN_SZ){1'b0}}};
data_vld_cnt_inc = 1;
if (pack_cnt != (PACK_CYCLE-1) && eof)begin
n_state = PAD;
pack_cnt_inc = 1;
n_dout_axis_tvalid = 1;
end
else if(data_vld_cnt == (D_VLD_CNT-1)) begin
n_dout_axis_tvalid = 1;
pack_cnt_inc = 1;
if(pack_cnt == (PACK_CYCLE-1)) begin
n_state = HEADER;
n_dout_axis_tlast = 1;
end
end
end
end
PAD: begin
pack_cnt_inc = 1;
n_dout_axis_tvalid = 1;
n_dout_axis_tdata = {(DOUT_SZ){1'b0}};
din_axis_tready = 0;
if (pack_cnt == (PACK_CYCLE-1)) begin
n_state = HEADER;
n_dout_axis_tlast = 1;
end
end
default: begin
n_state = HEADER;
pack_cnt_inc = 1;
end
endcase
end