Отсутствующие имена сигналов в 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 вместо этого, что, похоже, работает. Я все еще должен проверить это на оборудовании.