检查语法时出错

时间:2017-02-14 06:09:41

标签: verilog xilinx xilinx-ise

module mult(a, b, p);     
input [16:0] a;     
input [16:0] b;     
output p;    
wire [31:0] p;   
reg i;       
wire pv;     
wire bp; 
assign pv = 32'b0; 
assign bp = {16'b0,b} ; 
initial begin 
for (i = 0; i < 32 ; i = i + 1)     
    begin       
    if (a[i] == 1'b1)           
    begin               
       pv <= pv + bp;           
    end                 
    bp <= bp << 1 ;     
    end 
end 
assign p = pv;   
endmodule

编译代码时出现以下错误, 第37行参考标量线'pv'不是合法的注册或变量左值 第37行非阻塞分配的非法左侧 第39行对标量线'bp'的引用不是合法的注册或变量左值 第39行非阻塞分配的非法左侧

请帮助。

1 个答案:

答案 0 :(得分:0)

始终和初始块中赋值的左侧必须是寄存器。 pv和bp是导线而不是寄存器。

你不能把一个变量放在assign的左边,并且总是同时阻塞。因为总是需要寄存器并分配需求线。

我在代码中看到了明显的语义错误。你需要学习Verilog的基础知识。你把assign表示你期望连续赋值,但初始块只在模拟开始时执行一次。 顺便说一下输出是默认的。你可以将它声明为输出[31:0] p;