Verilogで説明されている基本的な8ビットALUがあります。デザインを実装しようとしていますが、エラーメッセージが表示されます。
エラー:NgdBuild:809-出力パッドネット「商<1>」に不正な負荷があります:タイプLUT6のブロックMmux_opcode[2]_GND_1_o_wide_mux_8_OUT81のピンI3
デザインは、次の演算、加算、減算、乗算、除算、AND、OR、XOR、およびXNORを実行します。興味深いのは、ザイリンクスXSTは、被除数を2倍(基本的に右にシフト)で除算しない限り、分周器を合成できないという事実です。そのため、これを処理するために、ザイリンクスコアジェネレーターによって生成されたCOREIPコンポーネントを使用しました。単一のクロックを受け取り(クロックイネーブルまたは同期クリアなしで、約20クロックサイクル後に正しい商と剰余を出力します。コア自体は、Core Generatorプログラムの数学関数の下にあります。とにかく、私のコードは次のとおりです。
`timescale 1ns / 1ps
module ALU8(A,B,opcode,clk,OUT);
// I/O
// We have two 16-bit inputs
input [7:0] A,B;
// The opcode determines our next operation
input [2:0] opcode;
// The processor clock
input clk;
// A 32-bit output
output [15:0] OUT;
// The inputs are wires
wire [7:0] A,B;
wire [2:0] opcode;
// The output is a register
reg [15:0] OUT;
// The quotient and remainder for tyhe divider
wire [7:0] quotient,remainder;
// Declare an internal dividing unit
Divider8 divider(.rfd(), .clk(clk), .dividend(A), .quotient(quotient), .divisor(B), .fractional(remainder));
// Define operation codes, there's only 9 so far
parameter ADD = 3'b000;
parameter SUB = 3'b001;
parameter MUL = 3'b010;
parameter DIV = 3'b011;
parameter AND = 3'b100;
parameter OR = 3'b101;
parameter XOR = 3'b110;
parameter XNOR = 3'b111;
// On the rising-edge of the clock
always @(posedge clk)
begin
// The output is determined by the operation
// Think of it as a MUX
// A MUX8 will be added in later
case(opcode)
ADD: OUT <= A + B;
SUB: OUT <= A - B;
MUL: OUT <= A * B;
DIV: OUT <= {quotient,remainder};
AND: OUT <= A & B;
OR: OUT <= A | B;
XOR: OUT <= A ^ B;
XNOR: OUT <= A ~^ B;
default: OUT <= 16'b0000000000000000;
endcase
end
endmodule
明らかに私のコードはひどく、私のコメントはおそらく間違っていますが、私はVerilogの初心者にすぎません。ただし、このコードを大幅に改善し、練習用の操作を追加する予定です。モジュール自体は正常に合成およびシミュレーションできますが、FPGAに実装できません。コード、またはXilinx ISE(いつものようにバグでいっぱいです)、またはおそらくプロジェクト設定に問題があるかどうか誰かが知っていますか?
編集:回答によって提供されたアドバイスを反映するために、コードにいくつかの変更を加えました。