先进先出控制信号和路由逻辑的位提取



我目前正在VHDL中构建一个片上网络路由器,以便在FPGA上实现64核2-D MESH网络。每个核心都有自己的路由器,每个路由器有5个端口(北,南,西,东,本地端口,用于与处理单元通信)每个端口都有一个输入FIFO和一个输出FIFO。因此,输入 FIFO 与下一个目标路由器的输出 fifo 通信,此端口的输出 fifo 与源路由器的输入 fifo 通信。

我的问题是我没有使用有限状态机来控制FIFOS写入/read_eneable和FIFO_FULL FIFO_EMPTY信号,我不知道必须在哪里使用这些信号才能使路由器工作。

我的 FIFO 由 xilinx CORE 发生器生成,它是一个具有以下信号的同步 FIFO:输入:时钟、数据输入、read_enable、write_enable。输出:Data_out、fifo_full、fifo_empty、数据包的前6位。最后一个输出用于从FIFO中取出数据包的前6位,以便XY路由块用于路由决策。

所以我的问题是我不明白如何控制 FIFO 的写/read_enable和fifo_full/空,以及如何提取 6 位以将它们发送到路由块。

提前谢谢你。

附言如果有什么不清楚的地方,请让我提供进一步的细节。

_____

回答

你好西蒙!!我非常感谢花时间给您答案。

基本上,我将有32字节的数据包进行处理。因此,我必须找到一种方法将数据包划分为flit,然后当flit进入FIFO时,前6位将用于路由。这样我就可以模拟随机流量。

举个例子让你了解。16 核网状网络具有以下坐标:30 31 32 33 20 21 22 23 10 11 12 13 00 01 02 03

因此,想象一下,这些 2 位数字中的每一个都代表一个路由器。在这种情况下,我们需要 4 位而不是 6 位。因此,当 4 位进入 XY 路由块时。前 2 位与坐标的第一个位进行比较,后 2 位与坐标的第二个位进行比较。

因此,如果我们想从路由器 00 转到路由器 22,则进入路由器 00 的数据必须面向该路由器的正确输出。因此,如果目的地是 22,那么我们首先进行 X 轴路由,因此 flit 将离开东端口并移动直到它们到达路由器 02,然后它们将被路由器路由到 Y 轴以前往路由器 22。

我希望你能理解我在说什么!

如果没有,请告诉我!

关于

    控制输入FIFO:使用该输入FIFO的完整信号和相应输出FIFO的空信号
  • 生成写使能信号(条件:当输入FIFO未满且输出FIFO不为空时写入,即新数据可用并且可以写入)
  • 控制输出FIFO:使用相应输入FIFO的读使能信号作为写使能(如果读取了数据,则必须将其从输出FIFO中删除,以避免被输入FIFO多次读取)

我不明白你用你提到的 6 位在做什么。这是输入FIFO的地址,输出FIFO的数据项应该写入到哪里吗?如果您澄清,我可以更新我的回复。

最新更新