0

バスの論理 OR を実行しようとしています。

作業コード:

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

これは正常に動作しますが、大きなバス (つまり 64 ビット) にはまったく適していません。

私は見ました:(ここから)

wire bus_or = |my_bus;

ただし、これは次のエラーで不平を言います: 単項演算子 '|' の不正なオペランド および連続代入の不正な右辺。

興味深いことに構文:

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

バスを作成する連結にもかかわらず、元の分割されていないオブジェクトが最初のバスであるにもかかわらず、正常に動作します...

生成ブロックを使用して、拡張可能なパラメーター化されたコードを目的として、さまざまな信号、ワイヤ、レジスターなどを作成しています。バス OR の構文が非常にエラーを起こしやすいとしたら、それは残念なことです。

私が気に入っているのは、wire bus_or = |my_bus; のような単純なものです。

ごめん。非常に簡単な答え!!!

wire bus_or = |my_bus;バスがベクトルとして宣言されている場合、表記法は正常に機能しますが、配列の場合はそうではありません: here を参照してください

4

2 に答える 2

0

モーガンは正しく答えました。バス全体で操作を実行するには、バスをパック配列形式で定義する必要があります。

data_type [幅-1:0] バス。メモリには
|x|bus_width-1|.....|bus_1|bus_0|として格納されます。

アンパックされた配列は、メモリ内のビット単位の操作を実行するために使用されます data_type bus [width-1:0] は
|x|x|bus_0|として格納されます。
|x|x|バス_1|
|x|x|バス_1|
.
.
.
|x|x|バス幅-1|

于 2016-10-07T16:07:30.917 に答える