节省空间的数据总线实施

时间:2015-12-04 05:12:16

标签: vhdl cpu cpu-architecture

我用VHDL编写了一个微控制器,并且基本上为我的实际microcontroller部分提供了一个核心。我现在开始着手开始包含内存映射外设。我使用的是一个非常简单的总线,它由一个主设备(CPU)和多个从设备(外围设备/ RAM)组成。我的总线通过确认CPU->外设工作并确认外围CPU。 CPU还具有单独的输入和输出数据总线,以避免三态。

我选择了这种方法,因为我希望能够让外围设备停止CPU。通过以下方式实现总线事务:主设备将数据,地址和读/写位置于总线上,使得ack(c-> p)为高。一旦从设备成功接收到信息并且已将响应放回到数据(p-> c)总线上,则从设备将其ack(p-> c)设置为高。主设备注意到从设备已成功放置数据,获取数据以进行处理并释放确认(c-> p)。公交车现在再次处于空闲状态,准备进行进一步的交易。

显然,这是一个非常简单的总线协议,并不包括突发特征,可变字大小或其他更复杂的特征。我的问题是,可以使用哪些节省空间的方法将外围设备连接到主CPU?

到目前为止,我已经研究过3种不同的方法。我目前正在使用从主设备到所有外设的单输出数据总线,所有外设的数据输出都是,以及它们的确认(p- > c)输出。每个外设都包含一个小地址多路复用器,只有当地址在预定范围内时,才允许从器件响应。这减少了外设之间切换的逻辑,但显然会为地址多路复用器推断出许多逻辑/外设,这使我相信未来的可扩展性会受到影响。

我的另一种方法是从主设备连接一个大地址多路复用器,它解码地址并将数据和ack信号一起发送给每个从设备。然后将输出数据复用回主站。这看起来似乎是一种稍微有效的方法,尽管我似乎最终总是使用可笑的长数据向量并且需要跟踪它的一些苦差事。

我想到的第三种方法是将它按照时尚的方式排列。主地址发送到所有从设备,具有较小的多路复用器,其仅选择发送哪个ack信号。然后,主机输出的数据通过每个从机串行传输。每个从器件都包含一个多路复用器,它允许它让进入它的数据通过不受影响的OR,以允许从器件将自己的数据放在总线上。我觉得这对慢速系统最有效,因为在输入数据和从机数据之间只需要一个小的多路复用器/从机,以及一个解码地址并发出ack信号的小型多路复用器。我相信这里的问题是,有了很多外设,从主机输出到主机输入的传播延迟会非常大,因为它必须穿过每个从机!

有人能给我合适的推理方法吗?我使用Quartus来合成和路由Altera EP4CE10E22C8 FPGA,并且我正在寻找关于FPGA LUT的最小实现。我的系统使用16位地址和数据总线。我希望在理想的内存条件下(即没有等待状态)达到最低~50MHz,并且希望有大约12个从站,每个从站的可寻址空间在8到16位之间。

谢谢!

2 个答案:

答案 0 :(得分:2)

我建议您从ARM网站(http://www.arm.com/)下载AMBA规范,然后查看AXI4-lite总线或更旧的APB总线。在具有单个主机的大多数总线标准中,地址上没有多路复用器,只有驱动外围选择信号的地址解码器。由于来自从站的“响应有效”信号,只有来自从站的响应数据被多路复用到主站。如果在从站数量增加时进行管道传输并且无法再达到目标时钟频率,则可以进行扩展。硬件成本主要是由于读数据多路复用,即N位P对1多路复用器。

这几乎是你的第二选择。

第一个选项是第二个选项的变体,其中读数据多路复用器被或门替换。我不认为它会改变很多硬件成本:或者门没有多路复用器那么复杂,但是每个从器件现在必须将其读取数据总线归零,这增加了多个和门。一个好的观点是,可能会降低活动,从而降低功耗:主设备无法访问的从设备将使其读取数据总线保持较低。但是当您使用逻辑合成器合成所有这些并使用CAD工具进行布局和布线时,我几乎可以肯定您将获得与更经典的第二选项相同的结果(面积,功率,频率)。

您的第三个选项让我想起了菊花链或令牌环的原理。但是,当你想要避免三态时,我怀疑它会在硬件成本方面带来任何好处。如果你正确地管道它(每个从站对传入的主请求进行采样并处理它们或将它们传递给下一个),你可能会达到比传统总线更高的时钟频率,特别是对于大量的从设备,但平均来说,完整的事务将花费更多的时钟周期,你也不会改善性能。

对于非常小(但很慢)的互连网络,您还可以查看串行外设接口(SPI)协议。这就是它们的用途:用少量电线从一个主机驱动多个从机。

考虑到目标硬件(Altera Cyclone IV),目标时钟频率(50MHz)和其他规格,我首先尝试使用经典总线。地址解码器将根据16位地址总线的8个最高有效位为12个从器件中的每一个产生一个选择信号。成本可以忽略不计。除了这些单独的选择信号之外,所有从设备都将接收所有其他信号(地址总线,写数据总线,读使能,写使能)。主器件的16位读数据总线将是16位12:1多路复用器的输出,在12中选择一个从器件响应。这将占用互连的大部分资源。但它应该没问题,并且在没有问题的情况下以50 MHz运行......如果你避免主请求和缓解响应之间的组合路径。

答案 1 :(得分:2)

一个好的入门者是来自OpenCores.org的WISHBONE SoC Interconnect。经典的读写周期易于实现。除此之外,还指定了高吞吐量和更多的突发传输。 website还提供了许多WISHBONE兼容项目,提供各种I / O设备。

最后但并非最不重要的是,WISHBONE标准属于公共领域。