---
# System prepended metadata

title: BRAM 詳細設定
tags: [CAIDLAB]

---

# BRAM generator 詳細設定

## 2. BRAM Feature
### 2.1 Mode
1. BRAM controller : 只有用bram controller 不使用Custom ip
3. standalone : 反之
![image](https://hackmd.io/_uploads/H1dpERRHp.png =500x)

### 2.2 Type
1. single port RAM ： 單口可讀可寫RAM

2. True Dual-port RAM：雙口可讀可寫RAM

4. single port ROM ：可讀不可寫ROM

5. dual-port ROM：可讀不可寫ROM

![image](https://hackmd.io/_uploads/BJetNCAH6.png =500x)

### 2.3 Signals description
|signal name | Direction | Description |
| -------- | -------- | -------- |
| Signal Name | Direction | Description |
|clka|Input|clk to port A|
|rsta|Input|rst to port A|
|addra|Input|對port A的addr|
|dina|Input|對port A寫入的data|
|douta|Output|對port A讀出的data|
|ena|Input|對port A讀寫rst時需要此訊號|
|wena|Input|對port A寫使能訊號|
|regcea|Input|port A的可選後級輸出暫存器信號|

### 2.4 Selectable operating Mode per port
1. Write First
2. Read First
3. No change 

#### 2.4.1 Write First
* 寫入優先於讀
![image](https://hackmd.io/_uploads/BJRqPC0Ba.png)
#### 2.4.2 Read First
* 讀優先於寫入
![image](https://hackmd.io/_uploads/BkufYRCST.png)
#### 2.4.3 No change
* wea拉起時讀出的值保持不變
![image](https://hackmd.io/_uploads/rkN8YRCBp.png)

### 2.5 Collision
* 多Port 寫入的問題
:::warning
1. 兩個 Port 的異步時鐘，一個 port 正在往一個位址寫數據，另一個 port 在指定時間內，必須不能夠去讀寫這個地方;
2. 兩個 Port 同步時鐘的情況下，兩個 Port 同時企圖寫同一個 memory 的情況下;
3. 使用 Byte-Writes 的時候，正好同時寫到了同一個地方的情況下;
:::
![image](https://hackmd.io/_uploads/rkG72RAH6.png =500x)

## reference :
1. https://blog.csdn.net/zhoutaopower/article/details/105257499