Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何有效利用VHDL模块?_Vhdl_Fpga_Hdl - Fatal编程技术网

如何有效利用VHDL模块?

如何有效利用VHDL模块?,vhdl,fpga,hdl,Vhdl,Fpga,Hdl,这里有几个问题,请耐心听我说,感谢您抽出时间阅读…… 我最近编写了一个SPI主机,并对其进行了充分的模拟,以确保其按预期工作。 从这里开始,我想在另一种设计中使用它,在这种设计中,我已经设置了一个7段显示组件,用于获取从SPI总线上的ADC接收到的值,但是我想我已经把自己弄糊涂了 我需要向SPI主机发送一个带有其他参数的脉冲以启动传输,并等待一个繁忙信号被取消断言,然后才能发送任何其他内容我不确定如何在新设计中实现SPI主机。 我会在设计中使用它作为一个组件吗?有更好的办法吗 如果它必须是一个组

这里有几个问题,请耐心听我说,感谢您抽出时间阅读……

我最近编写了一个SPI主机,并对其进行了充分的模拟,以确保其按预期工作。 从这里开始,我想在另一种设计中使用它,在这种设计中,我已经设置了一个7段显示组件,用于获取从SPI总线上的ADC接收到的值,但是我想我已经把自己弄糊涂了

我需要向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;

您的实体看起来很合理,尽管更好的名称或对CPOL、CPHA的评论会很有用

部分答覆:

1) 您可以在设计中将其作为组件使用,但如前所述,直接实体实例化更简单,更不冗长

2) 不,您不能直接从层次结构的深层次输出,即使您可以,这也是一个糟糕的想法

你熟悉C++、艾达或java编程的“设计模式”吗?如果是这样,请将顶层设计视为“立面”模式

这是外部世界需要了解的关于您的设计的唯一信息。它通常被写成结构化的HDL,实例化其他实体,在子单元之间进行互连,并连接到外部端口

有很多方法可以减少这些互连带来的痛苦,尤其是跨多个层次的互连,但最终必须将SPI信号分解到顶层设计中的各个引脚,以便它们可以连接到PCB上的正确导线

3) 是否可以设置一个函数,只说“通过SPI发送此数据,然后返回接收到的数据”。。。不是功能,不是


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

将SPI主机的实体声明(而不是体系结构)添加到post中可能会有所帮助。