1

我目前正在用 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。

我希望你能明白我在说什么!

如果没有,请告诉我!

带着敬意

4

1 回答 1

2
  • 控制一个输入FIFO:使用那个输入FIFO的满信号和对应的输出FIFO的空信号来产生写使能信号(条件:当输入FIFO未满且输出FIFO非空时写入,即新数据可用并且可以写)
  • 控制输出 FIFO:使用相应输入 FIFO 的读使能信号作为写使能(如果数据被读取,则必须从输出 FIFO 中删除,以避免被输入 FIFO 多次读取)

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

于 2012-06-12T14:57:13.200 回答