错误代码:Add_sub.v(32):LHS在程序性连续赋值中可能不是一个网:有限公司
错误代码:Add_sub.v(34):LHS在程序性连续赋值中可能不是一个网:有限公司
我想写一个Verilog文件来实现一个带en选择的全加器-减法器(en == 0是加法器,en == 1是减法器)。我在全加器模块FA上遇到了困难,我试图写一个if语句来实现这一点。但是我遇到了上面的错误。下面是我的代码:
module Add_sub(x,y,co,u,en);
input [3:0]x, y;
input en;
output [3:0]u;
output co;
wire [3:0]a;
wire [3:1]c;
xnor(a[0],x[0],en);
xnor(a[1],x[1],en);
xnor(a[2],x[2],en);
xnor(a[3],x[3],en);
reg co;
FA M0(y[0],a[0],en,u[0],c[1]);
FA M1(y[1],a[1],c[1],u[1],c[2]);
FA M2(y[2],a[2],c[2],u[2],c[3]);
FA M3(y[3],a[3],c[3],u[3],c[3]);
endmodule
module FA(x,y,cin,u,co,en);
input x, y, cin, en;
output u, co;
assign u = x ^ y ^ cin;
always@(en, x, y, cin) begin
if (en == 0)
assign co = (x & y) | (x & cin) | (y & cin);
if (en == 1)
assign co = (!x & y) | (!x & cin) | (y & cin);
end
endmodule
有人能帮我吗?或者请提供我一些其他的方法,完全加减法器。
1条答案
按热度按时间wkftcu5l1#
不要在always块中使用assign,并使变量在as always块中赋值,这样就可以修复FA模块。
设计存在其他问题,FA模块有6个端口,FA示例有5个连接。
这个设计使用位置匹配来匹配示例名称和端口名称,但是第一个示例的位置是错误的。en信号在示例中位于列表的中间,而end信号在模块中位于列表的末尾。正因为如此,命名关联比位置关联更好。