我目前正在用 VHDL 构建一个片上网络路由器,以便在 FPGA 上实现一个 64 核 2-D MESH 网络。每个核心都有自己的路由器,每个路由器有 5 个端口(北、南、西、东,与处理单元通信的本地端口)每个端口都有一个输入FIFO和一个OUTPUT FIFO。因此输入 FIFO 与下一个目的路由器的 outpuf fifo 通信,该端口的输出 fifo 与源路由器的输入 fifo 通信。
我的问题是我没有使用有限状态机来控制 FIFOS write/read_eneable 和 FIFO_FULL FIFO_EMPTY 信号,我不知道必须在哪里使用这些信号才能使路由器工作。
我的 FIFO 由 xilinx CORE Generator 生成,它是一个具有以下信号的同步 FIFO:输入:时钟、数据输入、read_enable、write_enable。输出:Data_out、fifo_full、fifo_empty、数据包的前 6 位。最后一个输出用于从FIFO中取出数据包的前6位,以便用于XY路由块的路由决策。
所以我的问题是我无法理解如何控制 FIFO 的 write/read_enable 和 fifo_full/empty,以及如何提取 6 位以便将它们发送到路由块。
先感谢您。
Ps 如果有什么不清楚的地方,请让我提供进一步的细节。
__ _ __ _ __ _ __ _ ___回答__ _ __ _ __ _ __ _ __ _ ____
您好,西蒙!我非常感谢您花时间回答您的问题。
基本上我要处理 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 轴路由,因此飞行物将离开东端口并移动,直到它们到达路由器 02,然后它们将成为 Y 轴的路由器以前往路由器 22。
我希望你能明白我在说什么!
如果没有,请告诉我!
带着敬意