【 FPGA 】总线实现形式之选择器

举报
李锐博恩 发表于 2021/07/15 06:28:36 2021/07/15
【摘要】 用选择器的思想来实现总线: 总线从宏观上看是“多写多读”的,但是从微观上来看是“一写多读”,因为系统中的各个部件只能分时使用总线,而无法同时使用。也就是在某一固定时刻,总线是“一写多读”的,只不过通过一写控制电路,我们貌似可以在不同时刻为总线分配不同的驱动源,以达到宏观上的“多写多读”。 下面用FPGA来简单地实现总线: 利用多路选择器的选通特性,可以实现总线的功能,这...

用选择器的思想来实现总线:

总线从宏观上看是“多写多读”的,但是从微观上来看是“一写多读”,因为系统中的各个部件只能分时使用总线,而无法同时使用。也就是在某一固定时刻,总线是“一写多读”的,只不过通过一写控制电路,我们貌似可以在不同时刻为总线分配不同的驱动源,以达到宏观上的“多写多读”。

下面用FPGA来简单地实现总线:

利用多路选择器的选通特性,可以实现总线的功能,这也是FPGA芯片内部设计总线时最常用的方法,因为FPGA芯片内部有些非常丰富的MUX资源。

原理就是通过MUX的选通特性,通过改变选通信号的值来改变写入总线数据的来源。

下面给出示意代码(Verilog HDL):

功能代码主要分为三个部分:

1、选择器控制信号产生部分,采用抢占式优先级译码器(【 FPGA 】抢占式优先级译码器电路)的思路,根据四个外围器件的请求信号产生多路选择器的选择控制信号。

2、写总线部分,即将选通通道的数据写到总线上。

3、读总线部分,各个外围器件根据自己的情况将总线数据读入器件内部进行运算和处理。


  
  1. `timescale 1ns / 1ps
  2. //
  3. // Company:
  4. // Engineer:
  5. //
  6. // Create Date: 15:49:08 11/05/2018
  7. // Design Name:
  8. // Module Name: Bus
  9. // Project Name:
  10. // Target Devices:
  11. // Tool versions:
  12. // Description:
  13. //
  14. // Dependencies:
  15. //
  16. // Revision:
  17. // Revision 0.01 - File Created
  18. // Additional Comments:
  19. //
  20. //
  21. module Bus(
  22. input request0,
  23. input request1,
  24. input request2,
  25. input request3,
  26. input [7:0] device0Out,
  27. input [7:0] device1Out,
  28. input [7:0] device2Out,
  29. input [7:0] device3Out,
  30. output [7:0] device0In,
  31. output [7:0] device1In,
  32. output [7:0] device2In,
  33. output [7:0] device3In
  34. );
  35. reg [1:0] sel;
  36. reg [7:0] bus;
  37. //generate sel
  38. always@(request0,request1,request2,request3)
  39. begin
  40. //Priority decoder
  41. case({request0,request1,request2,request3})
  42. 4'b0001: sel = 2'b11;
  43. 4'b0010 - 4'b0011: sel = 2'b10;
  44. 4'b0100 - 4'b0111: sel = 2'b01;
  45. default: sel = 2'b00;
  46. endcase
  47. end
  48. //write bus
  49. always@(sel,device0Out,device1Out,device2Out,device3Out)
  50. begin
  51. case(sel)
  52. 2'b00: bus = device0Out;
  53. 2'b01: bus = device1Out;
  54. 2'b10: bus = device2Out;
  55. 2'b11: bus = device3Out;
  56. default: bus = device0Out;
  57. endcase
  58. end
  59. //read bus
  60. assign device0In = bus;
  61. assign device1In = bus;
  62. assign device2In = bus;
  63. assign device3In = bus;
  64. endmodule

给出RTL Schematic:

通过这个图,可以看出实现这个电路的原理。

下面给出Technology Schematic:

看看FPGA内容是通过什么来实现这个电路的呢?

电路图太大了,只能给出部分:

可见,FPGA内部实现具体的电路要实现大量的lUT,由于使用的FPGA型号是Virtex 7系列的某一款,所以内部的LUT是6输入的LUT。

考虑到实际情况,FPGA内部会使用大量的输入、输出缓冲器。

功能仿真就不写了,简单认识下就OK了,不想深究。

 

 

文章来源: reborn.blog.csdn.net,作者:李锐博恩,版权归原作者所有,如需转载,请联系作者。

原文链接:reborn.blog.csdn.net/article/details/83751253

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。