如何用Verilog实现多个信号的逻辑运算?
时间:10-02
整理:3721RD
点击:
我想实现多个wire类型的信号的与运算,但是信号的个数很多,我的写法是:
assign pt=g0[0]&g0[1]&g0[2]&g0[3]&g0[4]&g0[5]&g0[6]&g0[7]&g0[8]&g0[9]&g0[10]&g0[11]&g0[12]&g0[13]&g0[14]&g0[15]&g0[16]&g0[17]&g0[18]&g0[19]&g0[20]&g0[21]&g0[22]&g0[23]&g0[24]&g0[25]&g0[26]&g0[27]&g0[28]&g0[29]&g0[30]&g0[31];
但是按照上面的写法不仅复杂,而且容易写错或漏写某个信号,请教高手给出一个简单的写法,就是类似generate的方法,用一个生成语句直接生成?
位与
Verilog有专门的运算符。
位与不行啊,因为位与是寄存器变量才可啊,线网变量的位与编译不通过。
急盼高手指教
好像用always语句可以实现
如果是 g0[31:16] & g0[15:0]
再來 g0[15:8] & g0[7:0]
再來 g0[7:4] & g0[3:0] ..
還是有更好方式 ?
assign pt = &g0[31:0];
assign pt = &g0[31:0]; 当g0是线网类型时,编译不通过
线网不行,你就再声明一组寄存器变量不就行了
我问你,这些要相与的信号从哪里来的?不可能在这之前没有寄存器吧?
用那些个寄存器位与下不就行了。
是这样的, 我用并行前缀计算实现一个模加法器,g0是进位生成信号,是由输入的两个操作数相与得到的,因此声明成线网类型,我只是觉得这样实现麻烦,而且以前也碰到过这种情况,一直没有一个简单的写法,所以请教下高手,能否有更好的解决办法?
呵,写法不是主要.
assign pt=&g0; 就可以了
位与语法
