Если sig_in = 0000, 0001, 0010, ..., 1111
sig_out = {sig_in[3], sig_in[3], sig_in[3: 2]};
Если я правильно понял, sig_out[3] будет sig_in[3], sig_out[2] также будет sig_in[3], и я не уверен, что делает sig_in[3: 2]. Может ли кто-нибудь помочь?
В правой части присваивания у вас есть оператор concatination
{...}
;
Он объединяет биты из своих аргументов в один битовый поток.
поэтому, если sign_in[3:0]
равно 0101, результатом в вашем примере будет:
sign_in[3:0] = 4'b0101
bit 3 ----^
bit 0 -------^
{
1'b0, // sign_in[3]
1'b0, // sigh_in[3]
2'b01 // sign_in[3:2] -- extracts 2 bits - bit 3 (0) an d bit 2 (1)
}
Итак, sign_out[3:0] будет выглядеть следующим образом
==> 4'b0001;
sign_in[3] --^
sign_in[3] ---^
sign_in[3:2] ----^^