次のモジュール定義を持つ SPI マルチプレクサ用の Lattice Diamond プロジェクトがあります。
module spimux
(
input bmck,
input bssel,
input bmosi,
output bmiso,
input[3:0] a,
output[13:0] mck,
output[13:0] ssel,
output[13:0] mosi,
input[13:0] miso,
output reg[7:0] LED
);
OutputMux bmiso_mux (
.clk(osc_clk),
.out(bmiso),
.a(a),
.in(miso)
);
// the idea here is that on each rising clock edge, the module will take
// the 4-bit address a and then set *one* of the 14 bits in "in". One
// problem I see is that I don't prevent an invalid address of 0b1111 or
// 0b1110 from getting used.
module OutputMux
(
input clk,
output reg out,
input[3:0] a,
input[13:0] in
);
reg mask;
always @(posedge clk) begin
// I tried this and it didn't help my situation
//out <= (in & (14'b1 << a));
// so I tried to assign to a temp variable and then do the bitmasking.. no change.
mask = 14'b1 << a;
out <= (in[13:0] & mask);
end
endmodule
endmodule
ピンを割り当てるためにスプレッドシート ビューに移動すると、すべてのピンが Signal Name ドロップリストに表示されません。たとえば、次のようになります。
miso[0] が入力ポートとしてそこにあることがわかりますが、他の 13 の miso ビットはすべてそうではありません。さらに、bmck、bssel、および bmosi がありません。それらはまだ他のピンに割り当てられていないので、なぜそこにないのか誰か説明できますか?