Verilog:大型总线或合成

0 verilog

我正在寻找一个公共汽车的逻辑或.

工作代码:

parameter Width = 8;
wire my_bus [Width-1:0];
wire bus_or = (my_bus[0] || my_bus[1] || ... || my_bus[Width-1])
Run Code Online (Sandbox Code Playgroud)

工作正常,但完全不适合大型公共汽车(即64位)

我看过:(从这里)

wire bus_or = |my_bus;
Run Code Online (Sandbox Code Playgroud)

然而,这只是抱怨错误:一元运算符'|'的非法操作数 和非法的右手边连续分配.

有趣的是语法:

wire bus_or = |{my_bus[0], my_bus[1], ..., my_bus[Width-1]} 
Run Code Online (Sandbox Code Playgroud)

工作正常,尽管连接创建一个总线,原始的未拆分对象是一个开始的公共汽车......

我们使用生成块来创建各种信号,线路,寄存器等,以实现可扩展的参数化代码.如果总线OR的语法容易出错,那似乎很遗憾.

我喜欢的东西就像wire bus_or = | my_bus一样简单;

抱歉.很简单的答案!!!

wire bus_or = |my_bus;当总线声明为载体但不表示法正常工作时,它的一个数组:看这里.

Mor*_*gan 5

您没有定义N位总线,而是定义1位总线的集合.

你真的想要:

parameter Width = 8;
wire [Width-1:0] my_bus ;
Run Code Online (Sandbox Code Playgroud)

这应该允许以下工作.

wire bus_or = |my_bus;
Run Code Online (Sandbox Code Playgroud)

注意:将常量设为大写是一种好习惯.WIDTH而不是Width.也可以为它添加一些语义,W_DATA或W_CONTROL等.