---
# System prepended metadata

title: '[n:0]?還是[0:n]?'

---

# [n:0]?還是[0:n]?

[TOC]

## 前言
由於很多同學都有宣告上的問題，到底是[n:0]?還是[0:n]?以下為大家說明他們的差異。

## 測試
這邊做了一個小測試。我宣告兩個input分別是in_a、in_b，兩者分別使用[1:0]與[0:1]，然後看看讓out在sel=0的時候選in_a[1]；在sel=1的時候選in_b[1]，比較兩者差別：
```verilog=
module Sig(in_a, in_b, out, sel);
	input [1:0]in_a;
	input [0:1]in_b;
	input sel;
	output out;
	
	assign out = (sel == 1'b1)? in_b[1] : in_a[1];
endmodule
```
以下是test bench：
```verilog=
module tb;
	reg [1:0]in_a;
	reg [1:0]in_b;
	reg sel;
	wire out;
	
	Sig sig_000(.in_a(in_a), .in_b(in_b), .out(out), .sel(sel));
	
	initial begin
	in_a = 2'b01;
	in_b = 2'b01;
	sel = 1'b0;
	#5
	sel = 1'b1;
	#5
	$finish;
	end
endmodule
```
以下是波形圖：
| ![](https://i.imgur.com/qoMQEkY.png) |
| -------- |

## 懶人包結論

結論如下圖：(in[0]、in[1]所拿到的值會不同)
| ![](https://i.imgur.com/OVkpaqj.png) | ![](https://i.imgur.com/31K3XHQ.png)|
| -------- | -------- |

在助教最終測試的時候會按照我們spec的方式給值，宣告[n:0]跟[0:n]如上所示，出來的結果不同，所以盡量按照spec。
# [HOMEPAGE](https://hackmd.io/s/HJdaLPTQV)