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;当总线声明为载体但不表示法正常工作时,它的一个数组:看这里.
您没有定义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等.