Я получаю следующую ошибку при компиляции в Quartus: Ошибка (10663): - PullRequest
0 голосов
/ 24 февраля 2020

Я программирую FPGA (новичок в verilog и Quartus). Однако я получаю следующие ошибки:

Ошибка (10663): Ошибка подключения к порту HDL Verilog на ALU_pv.v (7) : выходной или входной порт «alu_out» должен быть подключен к структурному net выражению
Ошибка (10663): ошибка подключения порта HDL Verilog в ALU_pv.v (7): выходной или входной порт «Cout» должен быть подключен к структурное net выражение

Это моя сущность высшего уровня:

module ALU_pv (input [3:0] aluin_a, OPCODE, input Cin, output reg [3:0] alu_out, output reg Cout, output OF);


wire[3:0] aluin_b; assign aluin_b = 4'b0011;

ALU alu1(aluin_a, aluin_b, OPCODE, Cin, alu_out, Cout, OF); //error is calling out here

endmodule

Я создаю экземпляр этого ALU:

// //ALU

module ALU (input [3:0] aluin_a, aluin_b, OPCODE, input Cin, output reg[3:0] alu_out, output reg Cout, output OF);

reg[3:0] Bin;
wire [3:0] Bn, S;
wire Co;

com2s C1(aluin_b, Bn);
FA4 FA1(aluin_a, Bin, Cin, S, Co, OF);

always @ (*) begin
  Bin= 4'b0000; alu_out= 4'b0000; Cout= 'b0;
  case (OPCODE)
    4'b1000 : begin                     //A+B
        Bin = aluin_b; alu_out = S; Cout = Co;
       end
                        // A+B+Cin : add with Cin
    4'b1001 : begin
    Bin = aluin_b; alu_out = S; Cout = Co;
    end


    4'b1010 : begin                 // Subtract b-a
    Bin = aluin_b; alu_out = S; Cout = Co;
    end

////Bitewise Functions////////////////////////////////////
                        // NAND
    4'b0000 : begin
    alu_out= ~(aluin_a & aluin_b);
    end


                        // NOR
    4'b0001 : begin
    alu_out= ~(aluin_a | aluin_b);
    end

                        // XOR
    4'b0010 : begin
    alu_out= aluin_a^aluin_b;
    end

                        // NOT
    4'b0100 : begin
    alu_out= ~aluin_a;
    end

                        // Rightshift
    4'b0101 : begin
    alu_out= aluin_a >> 1;
    end

    default : begin
    alu_out = 0; Cout = 0;
      end

  endcase
end
endmodule







//Ripple Adder
module FA4( input [3:0] aluin_a, aluin_b, input Cin, output [3:0] Sum, output Cout, OF);
wire Cout1, Cout2, Cout3;

 FA fa1 (aluin_a[0], aluin_b[0], Cin,   Sum[0], Cout1);
 FA fa2 (aluin_a[1], aluin_b[1], Cout1, Sum[1], Cout2);
 FA fa3 (aluin_a[2], aluin_b[2], Cout2, Sum[2], Cout3);
 FA fa4 (aluin_a[3], aluin_b[3], Cout3, Sum[3], Cout);
 xor X1 (OF, Cout3, Cout);
endmodule


//2's Comp
module com2s ( input[3:0] aluin_b, output [3:0] Bn);
 wire [3:0] Bn1;
 wire OF, Cout;
 assign Bn1=~aluin_b;
 FA4 fa1 (Bn1, 4'b0000,1'b1, Bn, Cout, OF);
endmodule


//Full Adder
module FA (input aluin_a,aluin_b,OPCODE, output Sum, Cout);
 wire Sum1, Cout1, Cout2;
 HA ha1 (aluin_a,aluin_b, Sum1, Cout1);
 HA ha2 (Sum1, OPCODE, Sum, Cout2);
 or O1(Cout, Cout1, Cout2);
endmodule



//Half Adder

module HA (input aluin_a,aluin_b, output Sum, Cout);
 assign Sum= aluin_a^aluin_b;
 assign Cout= aluin_a&aluin_b;
endmodule

Я предполагаю, что это ошибка порта, но я не уверен, где?

1 Ответ

2 голосов
/ 24 февраля 2020

В Verilog выходные порты модуля могут быть подключены только к wire, а не reg. Ваши ALU выходные порты управляются и подключаются к ALU_pv выходным портам, которые также объявлены как reg. Вам нужно изменить ALU_pv на output wire [3:0] alu_out.

Также см. http://go.mentor.com/wire-vs-reg

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...