Отсутствующие имена сигналов в Lattice Diamond

У меня есть проект Lattice Diamond для мультиплексора SPI, который имеет следующее определение модуля:

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

Когда я захожу в представление электронной таблицы, чтобы назначить мои выводы, не все они отображаются в раскрывающемся списке "Имя сигнала". Например, это выглядит так:

Вы увидите, что miso[0] находится там как входной порт, но все остальные 13 битов miso - нет. Кроме того, bmck, bssel и bmosi отсутствуют. Они еще не были назначены ни на какие другие контакты, поэтому кто-нибудь может объяснить, почему их там нет?

1 ответ

Решение

Спасибо Qiu за то, что меня направили в правильном направлении. Я должен был догадаться, что список имен сигналов генерируется после компиляции кода Verilog, поэтому, если вывод / ввод не используется, вам не нужно будет привязывать его к выводу.

Используя compileonline.com, я смог быстро перебрать свои логические утверждения Verilog и выяснить, откуда возникла проблема. Для мисо, я смог заставить их появиться, изменив мой always блок, чтобы выглядеть так:

always @(posedge clk) begin
    out = (in[13:0] & (14'b1 << a)) > 0;
end

Идея здесь очень проста - из всех входов MISO, поступающих в ПЛИС, мы хотим посмотреть только на вход, поступающий от устройства SPI, которое выбрано в данный момент (идентифицируется по адресу a). Нам просто нужно установить out к значению бита, обозначенного a, После маскировки значение будет 0 или!0, поэтому мы просто пишем это out,

Я хотел использовать оператор сокращения, но онлайн-компилятор, похоже, не работал с этой нотацией, поэтому я просто сравнил с 0 вместо этого, что, похоже, работает. Я все еще должен проверить это на оборудовании.

Другие вопросы по тегам