2014-01-12 3 views
-2

Где ошибка в моем коде?Ошибка синтаксиса при непрерывном назначении

module mikroislemci(data1,data2,opcode,data_out,flag); 
input [7:0] data1; 
input [7:0] data2; 
input [3:0] opcode; 
output [7:0] data_out; 
output [4:0] flag; 
wire [8:0] tmp; 
wire [7:0] tmp1; 
if(opcode==4'b0000) 
begin 
    if (data1==data2) 
     begin 
     assign flag[0]=1; 
     end 
    else 
     begin 
     assign tmp = data1+data2; 
     assign data_out=tmp [7:0]; 
      assign flag[2]=tmp [8]; 
     end 
end 
else if (opcode==4'b0001) 
    begin 
    if (data1==data2) 
     begin 
     assign flag[0]=1; 
     end 
    if(data1>data2) 
     begin 
      assign data_out=data1-data2; 
     end 
    else 
     begin 
       assign data_out=data2-data1; 
     assign flag[1]=1; 
     end 

    end 
else if (opcode==4'b0010) 
    begin 
    assign data_out[0]=data1[0] and data2[0]; 
    assign data_out[1]=data1[1] and data2[1]; 
    assign data_out[2]=data1[2] and data2[2]; 
    assign data_out[3]=data1[3] and data2[3]; 
    assign data_out[4]=data1[4] and data2[4]; 
    assign data_out[5]=data1[5] and data2[5]; 
    assign data_out[6]=data1[6] and data2[6]; 
    assign data_out[7]=data1[7] and data2[7]; 

    end 
else if (opcode==4'b0011) 
    begin 
    assign data_out[0]=data1[0] or data2[0]; 
    assign data_out[1]=data1[1] or data2[1]; 
    assign data_out[2]=data1[2] or data2[2]; 
    assign data_out[3]=data1[3] or data2[3]; 
    assign data_out[4]=data1[4] or data2[4]; 
    assign data_out[5]=data1[5] or data2[5]; 
    assign data_out[6]=data1[6] or data2[6]; 
    assign data_out[7]=data1[7] or data2[7]; 

    end 
else if (opcode==4'b0100) 
    begin 
    assign data_out[0]=data1[0] xor data2[0]; 
    assign data_out[1]=data1[1] xor data2[1]; 
    assign data_out[2]=data1[2] xor data2[2]; 
    assign data_out[3]=data1[3] xor data2[3]; 
    assign data_out[4]=data1[4] xor data2[4]; 
    assign data_out[5]=data1[5] xor data2[5]; 
    assign data_out[6]=data1[6] xor data2[6]; 
    assign data_out[7]=data1[7] xor data2[7]; 

    end 
else if (opcode==4'b0101) 
    begin 
    assign data_out[0]= not(data1[0]); 
    assign data_out[1]= not(data1[1]); 
    assign data_out[2]= not(data1[2]); 
    assign data_out[3]= not(data1[3]); 
    assign data_out[4]= not(data1[4]); 
    assign data_out[5]= not(data1[5]); 
    assign data_out[6]= not(data1[6]); 
    assign data_out[7]= not(data1[7]); 

    end 
else if (opcode==4'b0110) 
    begin 
    if(data1==data2) 
     begin 
       assign flag[0]=1; 
     end 
    else if(data1<data2) 
     begin 
     assign flag[4]=0; 
     end 
    else if(data1>data2) 
     begin 
     assign flag[4]=1; 
     end 

    end 
else if (opcode==4'b0111) 
    begin 
    assign data_out=data1<<data2; 
    end 
else if (opcode==4'b1000) 
    begin 
    assign data_out=data1>>data2; 
    end 

else 
    display("you entered wrong opcode try again"); 

endmodule 
+1

... Что такое вывод? – Charlie

+0

data_out - это выход .if выход будет 9 бит на сумматоре или будет минус на вспомогательном флаге, может использоваться как cary или sign. Вот работа ı am tring, чтобы сделать http://web.cs.hacettepe.edu.tr/~onderefe/bbm231/2013-2014%20Guz%20Proje.pdf –

ответ

0

Verilog if заявление должно идти внутри процесса либо initial или always

output reg [4:0] flag; 

always @* begin 
    if(opcode==4'b0000) begin 
    if (data1==data2) begin 
     flag[0]=1; 
    end 
    //.. 

Не используйте назначение внутри этих процессов, и не использовать reg или logic типов. Вышеприведенная комбинаторная логика.

Подразумевать последовательные (шлепанцы) использует:

always @(posedge clk) begin 
    flag[0] <= 1'b1; 
end 

Снова используйте reg или logic типов и неблокируемые назначения <=.

+0

Большое вам спасибо ı сделал это наконец –

+0

@ user220910 Отлично , Verilog не так уж плохо, как только вы начнете использовать его. [LRM (Справочное руководство по языку) доступно бесплатно] (http://standards.ieee.org/getieee/1800/download/1800-2012.pdf), а не лучший способ узнать, но полезно для справки. – Morgan

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