首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Verilog :大型总线或综合

Verilog :大型总线或综合
EN

Stack Overflow用户
提问于 2013-04-16 22:38:02
回答 2查看 1.4K关注 0票数 0

我想做一个公交车的逻辑OR。

工作代码:

代码语言:javascript
复制
parameter Width = 8;
wire my_bus [Width-1:0];
wire bus_or = (my_bus[0] || my_bus[1] || ... || my_bus[Width-1])

这可以很好地工作,但完全不适合大型总线(即64位)

我已经看到:(来自here)

代码语言:javascript
复制
wire bus_or = |my_bus;

然而,这只是抱怨错误:一元运算符'|‘的非法操作数和连续赋值的非法右侧。

有趣的是它的语法:

代码语言:javascript
复制
wire bus_or = |{my_bus[0], my_bus[1], ..., my_bus[Width-1]} 

工作得很好,尽管串联创建了一条总线,最初的未分割对象是一条总线...

我们使用generate块来创建各种信号、连接、寄存器等,目的是实现可扩展的参数化代码。如果总线OR的语法如此容易出错,这似乎是一种遗憾。

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

抱歉的。答案非常简单!

当总线被声明为向量时,wire bus_or = |my_bus;表示法工作得很好,但当总线声明为数组时,就不行了:参见here

EN

回答 2

Stack Overflow用户

发布于 2013-04-16 23:24:32

您定义的不是N位总线,而是1位总线的集合。

你真的想要:

代码语言:javascript
复制
parameter Width = 8;
wire [Width-1:0] my_bus ;

这样就可以让下面的代码正常工作。

代码语言:javascript
复制
wire bus_or = |my_bus;

注:将常量设为大写是一种很好的做法。宽度而不是宽度。也可以给它添加一些语义,如W_DATA或W_CONTROL等。

票数 5
EN

Stack Overflow用户

发布于 2016-10-08 00:07:31

Morgan的回答是正确的,您必须以压缩数组格式定义您的总线,以便在整个总线上执行操作。

data_type宽度-1:0总线。在内存中,它将存储为

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16039943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档