Lattice Diamond中缺少信号名称

时间:2014-11-19 18:23:12

标签: verilog fpga lattice-diamond

我有一个用于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

当我进入电子表格视图分配我的引脚时,并非所有引脚都显示在信号名称下拉列表中。例如,它看起来像这样:

enter image description here

你会看到miso [0]在那里作为输入端口,但所有其他13个miso位都没有。此外,缺少bmck,bssel和bmosi。它们还没有被分配到任何其他引脚,所以任何人都可以解释为什么它们不会在那里?

1 个答案:

答案 0 :(得分:0)

感谢Qiu让我朝着正确的方向前进。我应该猜测在编译Verilog代码后会生成信号名称列表,因此如果没有使用输出/输入,则无需将其映射到引脚。

使用compileonline.com,我能够快速迭代我的Verilog逻辑语句并找出问题的来源。对于味噌,我可以通过将always块更改为以下内容来显示它们:

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

这里的想法非常简单 - 在进入FPGA的所有MISO输入中,我们只想查看当前选择的SPI设备(由地址a标识)。我们只需要将out设置为a标识的位的值。屏蔽后,该值将为0或!0,因此我们只需将其写入out

我想使用简化运算符,但是在线编译器似乎没有使用这种表示法,所以我只是比较为0,这似乎有效。我仍然需要在硬件上测试它。