FIFO控制信号和路由逻辑的位提取

时间:2012-06-12 13:07:19

标签: vhdl fpga

我目前正在用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位中取出FIFO,以便用于XY路由块的路由决策。

所以我的问题是我无法理解如何控制FIFO的write / read_enable和fifo_full / empty,以及如何提取6位以便将它们发送到路由块。

提前谢谢。

P.S。如果有任何不清楚的地方,请让我提供进一步的细节。

__ _ __ _ __ _ __ _ ___ 回答 __ _ __ _ __ < EM> _ __ _ __ _ ____

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

基本上我要处理32字节的数据包。所以我必须找到一种方法将数据包分成flits然后当flits进入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。

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

如果没有,请告诉我!

关于

1 个答案:

答案 0 :(得分:2)

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

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