好的,大家好。
我的问题如下: 我有一个非常长的0和1的数组,我作为FPGA的输入接收到它。我需要在某个地方记住那个数组,但问题是我不知道数组的大小,直到用户在PC上精确它的最后一刻,或PLC(不确定)我从哪里获得数组0和1的。
当用户决定时,他将发送数据。数组的前三个数字乘以32将给出我需要的std_logic_vector的大小,这样我就可以保存传入的脉冲。
由此产生的问题是我无法随时定义信号,但我必须在开始时(当我仍然不知道确切的长度时)。
有人能帮助我吗?
提前致谢, Rastapunk
答案 0 :(得分: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。