0

好的,大家好。

我的问题如下:我有一个很长的 0 和 1 数组,我将它们作为 FPGA 的输入接收。我需要在某处记住该数组,但问题是直到用户在 PC 或 PLC(尚不确定)从哪里获得数组精确时,我才知道数组的大小0 和 1 的。

当用户决定时,他将发送数据。数组的前三个数字乘以 32 将得到我需要的 std_logic_vector 的大小,这样我就可以保存传入的脉冲。

这里出现的问题是我无法随时定义信号,但我必须在一开始就定义(当我仍然不知道确切的长度时)。

有人可以帮我吗?

在此先感谢,拉斯塔朋克

4

1 回答 1

1

不幸的是,在 FPGA 上没有办法定义可变长度的信号/缓冲区。因此,在您的情况下,您需要维护一个固定长度的缓冲区,该缓冲区可以容纳最大可能大小的外部数据。如果此类用户数据的大小可能超过您的 FPGA 内存大小,您可能需要一个外部 RAM。

您需要根据“数据脉冲”的格式定义数据结构。如果您的“数据脉冲”是并行的,这意味着每个位同时出现,则必须有一条数据总线将您的 FPGA 与数据接口连接起来。您需要定义一个与数据总线宽度相同的 std_logic_vector。实际数据的长度在物理上不能超过数据总线的长度,您只需忽略额外的位。(我想这不是你的情况)。

我假设您的数据来自多个时钟周期。那么你的数据输入必须由时钟驱动,并且还有一个固定长度的数据总线(比如宽度为 N)。你的数据类型不应该是std_logic_vector,而是一个数组,它的元素是一个长度为N的std_logic_vector,语法如下:

type input_type is array (max_len downto 0) of std_logic_vector (N-1 downto 0);
signal input_data: input_type;

其中 max_len 是串行数据的最大可能样本/字数。您还需要另一个变量 data_len 来记录用户输入的实际长度。

加载数据时,在每个时钟周期读取一个样本/字。在前三个周期加载 data_len,然后在其余周期中用递增的地址填充 input_data 一次,直到您的地址等于 data_len-1。

于 2013-08-20T18:56:57.970 回答