我正在开发VHDL项目,其中包括多重矩阵。我希望能够使用UART将数据从PC加载到FPGA上的数组中。我只是在VHDL中迈出了我的第一步,我不确定我是否采取了正确的态度。
我想声明一个整数信号数组,然后实现UART从PC接收数据并将其加载到这些信号中。但是,我不能使用for循环,因为它将被合成以并行加载数据(这是不可能的,因为值将使用串行端口一个接一个地从PC传入。)并且因为矩阵可能是各种大小的,为了逐个分配信号,我需要编写大量特定代码(对我来说这似乎是一种不好的做法。)
是否可以通过UART使用信号数组并将数据加载到这些信号?如果我的方法完全错误,我怎么能实现呢?
答案 0 :(得分:3)
您想要的是可行的,但您可能需要设计一种硬件监视器,作为UART和存储(整数信号数组)之间的中间件。该硬件监视器将解释来自UART的命令并在存储中执行读/写操作。它将具有一个与存储器的接口,另一个与UART接口。您必须定义一种协议,其中包含命令的语法和每个命令的操作序列。
示例:监视器等待来自UART的命令。第一个接收的字符表示它是read(0)还是write(1)。接下来的四个字符是目标地址,最低有效字节是第一个。如果该命令是读操作,则监视器读取存储器中指定地址的数据,并将其一次一个字节地发送到UART,最低有效字节优先。如果该命令是写入,则该地址后面跟着要在存储中写入指定地址的数据,首先是最低有效字节,并且监视器会等待直到收到数据并将其写入存储。
可选地,监视器可以在每个命令结束时发送退出状态字节以指示潜在错误(协议错误,未映射的地址,只读区域中的写入尝试......)
当然,根据应用程序的特性,您可能会定义一个完全不同的协议,更简单或更复杂,但原则是相同的。
所有这些通常都是在软件中实现的,并且运行在具有UART作为外设的CPU和存储空间中的存储器上。但是如果你没有CPU ......
警告:这非常复杂。 UART本身非常复杂。如果你是VHDL初学者,不确定你应该从这开始。
答案 1 :(得分:2)
你的方法并非完全错误,但你有一种以软件为导向的表达方式,这表明你错过了基本原理。具有强大软件背景的人倾向于考虑编程语言而不是他们想要实现的实际FPGA特定结构。如果想要成功地设计FPGA,重要的是要忘掉它。
根据我刚才写的内容,您应该考虑要在哪种类型的FPGA结构中存储数据。速度,资源和功率要求决定了这一选择。存储数据的一种合适方式可以是Block RAM或LUTRAM的单个或数组。这两种结构都可以通过在硬件描述语言中使用数组类型的信号来推断,这就是为什么我说你并不完全偏离轨道。查阅综合工具的手册,找到如何推断这些结构的模板。另一种方法是使用供应商IP块或直接实例化原语,但在我看来这两种方法都很笨拙。
要考虑的重要参数是您需要存储的字总数,字的大小以及每个时钟周期的读/写操作数。对于每个周期更高的读取次数,必须使用一系列存储器,因为大多数FPGA存储器每个周期仅支持两次读取。