2017-02-14 2 views
-1
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 Ссылки на скалярный провод «р» не является юридической регла или переменным именующее линии 37 Illegal левой стороны неблокируемом назначения линии 39 Ссылка на скалярный провод «bp» не является юридическим регистром или переменной lvalue , строка 39 Незаконная левая сторона неблокирующего назначенияОшибки при проверке синтаксиса

Помощь с помощью Pls.

+1

Этот код демонстрирует отсутствие понимания основных концепций Verilog. Прежде чем пытаться исправить свой код, изучите различия и обычаи 'wire' vs' reg' vs 'integer', а также' assign' vs 'initial' vs' always' и блокировки присвоений ('=') vs non- блокировка присвоений ('<=') – Greg

ответ

0

Левая сторона назначения в всегда и начальных блоках должна быть регистром. pv и bp - это провода вместо регистров.

Вы не можете поместить переменную в левую сторону назначения и всегда блокировать одновременно. Потому что всегда нужны регистры и назначают необходимые провода.

Я вижу очевидные семантические ошибки в вашем коде. Вам нужно изучить основы Verilog. Вы ставите присваивание, что означает, что вы ожидаете непрерывного назначения, но начальный блок выполняется только один раз в начале моделирования. Кстати, выход по проводам по умолчанию. вы можете объявить его как выход [31: 0] p;

+0

, если я назначаю регистры pv и bp. Я получаю следующее сообщение об ошибке vERROR: HDLCompilers: 246 - строка «mult.v» 30 Ссылка на скалярную рег 'pv' не является юридической сетью lvalue ОШИБКА: HDLCompilers: 53 - линия «mult.v» 30 Незаконная левая рука сторона непрерывного назначения Следовательно, я поставил его как reg, Что мне делать? –

+0

Ваш код генерирует следующие ошибки: –

+0

ОШИБКА: HDLCompilers: 247 - строка "mult.v" 31 Ссылка на скалярный провод 'pv' не является юридическим регистром или переменной lvalue ОШИБКА: HDLCompilers: 44 - строка "mult.v" 31 Недопустимая левая сторона блокирующего назначения ОШИБКА: HDLCompilers: 247 - строка «mult.v» 36 Ссылка на скалярный провод «pv» не является юридическим регистром или переменной lvalue ОШИБКА: HDLCompilers: 106 - строка «mult.v» 36 Недопустимая левая сторона неблокирующего назначения ОШИБКА: HDLCompilers: 247 - строка «mult.v» 38 Ссылка на скалярный провод «bp» не является юридическим регистром или переменной lvalue ОШИБКА: HDLCompilers: 106 - строка «mult.v» 38 Незаконная левая сторона неблокирования назначает –

Смежные вопросы