【发布时间】:2013-02-06 09:34:05
【问题描述】:
我是verilog的业余爱好者。我正在尝试调用模块分隔符。但我在综合中遇到错误,例如“对向量 reg 'qtnt' 的引用不是合法的净左值”。我尝试使用电线作为输入,但是当我尝试为它们分配值时,收到一条错误消息。请帮忙
module euclid_mul(
input[9:0] p0,p1,q0,
input[19:0] tot,
input clk,
output reg [20:0] p2,
output reg out_en,o1,o2
);
reg[20:0] dvr,dvd,qtnt,rem;
reg[9:0] ph;
reg[20:0] mul,res;
reg enable,f1;
initial f1=0;
initial enable=0;
divider div2(dvd,dvr,enable,qtnt,rem,f1);
always @ (negedge clk)
begin
if(f1==0) begin
mul=q0*p1;
ph=p0;
res={11'b00000000000,ph[9:0]}-mul;
if(res[20])
begin
o1=1;
dvd=-res;
end
else
dvd=res;
o2=1;
dvr=tot;
enable=1;
end
end
always @(posedge f1)
begin
if(res[20])
begin
p2=tot-rem;
out_en=1;
end
else
begin
p2=rem;
out_en=1;
end
end
endmodule
【问题讨论】:
-
模块div2的第4个端口是输入还是输出。如果它是一个输入,你应该将一些东西连接到它。如果它是一个输出,它可以保持打开状态,但如果你真的不需要那个输出,你应该检查你的设计。
-
第 4 个端口是输出端口。我的问题是我用作 div2 实例化输入的值是 reg 值而不是净值。所以请告诉我如何将 reg 值分配给在 always 块中连线或如何使用 reg 值作为实例化模块的输入。
-
要让 sim 运行,断开所有与 div2 的连接,将输入绑定到 0,保留输出。然后开始添加您认为正确的内容,直到您看到语法错误。
标签: verilog