2013-04-16 67 views
0

我正在尋找一個總線邏輯或。Verilog:大總線或合成

工作代碼:

parameter Width = 8; 
wire my_bus [Width-1:0]; 
wire bus_or = (my_bus[0] || my_bus[1] || ... || my_bus[Width-1]) 

這工作正常,但完全不適合大總線(即64位)

我所看到的:(從here

wire bus_or = |my_bus; 

然而這只是抱怨錯誤:一元運算符'|'的非法操作數和非法右側的連續分配。

有趣的語法:

wire bus_or = |{my_bus[0], my_bus[1], ..., my_bus[Width-1]} 

做工精細,雖然串聯創建一個總線,與原來未拆分的對象是下手......

我們正在使用生成塊總線以可擴展的參數化代碼爲目標創建各種信號,線路,寄存器等。如果總線OR的語法如此容易出錯,這似乎是一種恥辱。

我喜歡的是像bus那樣簡單的東西bus_or = | my_bus;

對不起。 非常簡單的答案!當總線被聲明爲矢量BUT NOT

wire bus_or = |my_bus;符號正常工作時,其陣列:見here

回答

5

您並未定義N位總線,而是1位總線的集合。

你真的想:

parameter Width = 8; 
wire [Width-1:0] my_bus ; 

這應該允許以下工作。

wire bus_or = |my_bus; 

注意:將常量設爲大寫字母是一種很好的做法。寬度而不是寬度。也可以添加一些語義,W_DATA或W_CONTROL等。

0

Morgan已經正確回覆了,您必須定義總線爲打包陣列格式才能在整個總線上執行操作。

data_type [width-1:0] bus。 在內存中它將被存儲爲
| x | bus_width-1 | ..... | bus_1 | bus_0 |

解壓縮後的陣列被用於執行位操作 DATA_TYPE總線[寬度-1:0]在 存儲器是將被存儲爲
| X | X | bus_0 |
| x | x | bus_1 |
| x | x | bus_1 |



| x | x | bus_width-1 |