verilog 中的总线表示法

Hem*_*ava 3 verilog system-verilog

我一直以为总线符号是这样注释的:

input bus[MSB:LSB]
Run Code Online (Sandbox Code Playgroud)

其中 MSB >= LSB。

但最近,我被告知这也是可能的:

wire LSB >= MSB.
Run Code Online (Sandbox Code Playgroud)

这是真的吗?

如果是这样,那么合成器工具如何获取总线大小等?他们是否认为哪个指数大就是MSB?

Ser*_*rge 5

是的,位编号的两个方向都可以在声明中使用。但是,在进行位选择时必须使用相同的顺序。例如

wire [0:15] bus;
reg  [15:0] data;
assign bus [3:6] = data[3:0];
Run Code Online (Sandbox Code Playgroud)

在大多数情况下,业界使用第二种表示法(msb > lsb),出于一致性原因,鼓励使用第二种表示法。然而,在某些情况下,做相反的事情是很方便的。