不幸的是,在 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。