2012-12-23 24 views
2

有一个在这里的一些问题,如此忍受我,感谢百忙之中阅读本文时...如何有效地利用VHDL模块?

我最近写了SPI主,并完全模拟它,以确保它可以作为预期。 在这里,我想在另一个设计,其中我已经有建立起来,可以从SPI总线上的ADC收到的值7段显示器组件使用它,但我想我已经在我迷茫的东西这点。

我需要发送一个带有其他参数的脉冲到SPI主控器以启动传输,并且在我可以发送任何其他消息之前等待忙音信号被解除断言。 我真的不知道如何以最佳方式向新的设计中实现SPI主机。

我会在设计中使用它作为组件吗?有没有更好的办法?

如果它必须是一个组件,有什么办法可以设置它直接从该组件输出到引脚,而不是必须映射到顶层设计中的新输入/输出?

例如,我有SCLK,MOSI,MISO和CS; 我能不能直接输出它们,而不必通过顶层进行映射?好像它会简化顶层,使其不那么笨重。

另外,是否可以设置一个函数来说“通过SPI发送数据,然后返回接收的内容”?

我还是很了解如何将这些东西放在一起,所以帮助/示例将不胜感激。这似乎是所有可用的基于东西喜欢用两个半加器,逻辑门等,只有当他们是那么简单的帮助到一个点的例子/教程。

编辑:我SPI的实体主

entity SPI_master is 

    generic(data_width: integer := 8; 
      clock_select: integer := 0); 

    port(SCLK: out std_logic; 
     MOSI: out std_logic; 
     MISO: in std_logic; 
     CS: out std_logic; 

     Mclk_in: in std_logic; 
     RST: in std_logic; 
     CPOL: in std_logic; 
     CPHA: in integer; 
     send_packet: in std_logic; 
     busy: out std_logic; 

     Tx_data: in std_logic_vector(data_width-1 downto 0); 
     Rx_data: out std_logic_vector(data_width-1 downto 0)); 

end SPI_master; 
+0

将您的SPI主机的实体声明(而不是体系结构)添加到帖子可能会有帮助。 –

+0

好点。添加。 – Kureigu

回答

1

你的实体看起来合理,但更好的名称或评论CPOL,CPHA将是有益的!

部分答案:

1)你可以用它在你的设计作为一个组成部分,但正如前面提到的,直接的实体实例更简单,更简洁。

2)不,你不能直接从深层次输出结果,即使你能做到这将是一个可怕的主意!

你熟悉的C++,Ada的或Java编程 “设计模式”?如果是这样,请将您的顶级设计视为“立面”模式。

这是外部世界需要了解你的设计的嘛。它通常会写成结构HDL,实例化其他实体,并在子单元和连接到外部端口之间建立互连。

有许多方法可以减少这些互连的痛苦,特别是在多层次的层次结构中,但最终必须将SPI信号分解到顶层设计中的各个引脚,以便它们可以连接到正确的导线在PCB上!

3)是否有可能建立一个函数来说“通过SPI发送这个数据,然后返回接收的内容”......不是函数,不是。

但是当然你可以引入一个硬件包装来为你的设计的其余部分提供一个复杂任务的简单视图。例如,(假设“send_packet”被声明为在SPI上写入一个字节,并且“busy”变高,直到写入完成),您可以创建一个采用字节数组和“开始”信号作为输入的实体。它的体系结构包含一个进程来计算字节数,然后依次输出到SPI并在“忙”时等待,并在完成时发送给它的“调用者”。