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

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

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

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

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

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

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

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

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

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

`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date:    15:49:08 11/05/2018
// Design Name:
// Module Name:    Bus
// Project Name:
// Target Devices:
// Tool versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//
module Bus(input request0,input request1,input request2,input request3,input [7:0] device0Out,input [7:0] device1Out,input [7:0] device2Out,input [7:0] device3Out,output [7:0] device0In,output [7:0] device1In,output [7:0] device2In,output [7:0] device3In);reg [1:0] sel;reg [7:0] bus;//generate selalways@(request0,request1,request2,request3)begin//Priority decodercase({request0,request1,request2,request3})4'b0001: sel = 2'b11;4'b0010 - 4'b0011: sel = 2'b10;4'b0100 - 4'b0111: sel = 2'b01;default: sel = 2'b00;endcaseend//write busalways@(sel,device0Out,device1Out,device2Out,device3Out)begincase(sel)2'b00: bus = device0Out;2'b01: bus = device1Out;2'b10: bus = device2Out;2'b11: bus = device3Out;default: bus = device0Out;endcaseend//read busassign device0In = bus;assign device1In = bus;assign device2In = bus;assign device3In = bus;endmodule

给出RTL Schematic:

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

下面给出Technology Schematic:

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

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

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

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

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

【 FPGA 】总线实现形式之选择器相关推荐

  1. FPGA总线实现形式

    文章目录 用选择器实现总线 用三态门实现总线 用选择器实现总线 用选择器的思想来实现总线:总线从宏观上看是"多写多读"的,但是从微观上来看是"一写多读",因为系 ...

  2. 【 FPGA 】总线实现形式之三态门

    上篇博文讲了三态门:https://blog.csdn.net/Reborn_Lee/article/details/83753290 姊妹篇:[ FPGA ]总线实现形式之选择器 三态门的高阻特性, ...

  3. LIN总线uart形式实现lin通信

    LIN是Local Interconnect Network的缩写,是基于UART/SCI(Universal Asynchronous Receiver-Transmitter/Serial Com ...

  4. FPGA之道(45)正确的变量访问思路

    文章目录 前言 正确的变量访问思路 变量访问思路概述 访问思路简述 写变量注意事项 读变量注意事项 赋值冲突 两个以上并行语句赋值冲突 两个以上串行语句赋值冲突 组合并行语句内串行语句的赋值冲突 时序 ...

  5. 【 FPGA 】抢占式优先级译码器电路

    今天看用选择器实现总线设计的程序中([ FPGA ]总线实现形式之选择器),选择器控制信号部分用到了抢占式优先级译码器,这里单独把这个抢先式优先级译码器抽出来讲讲看: 高位优先,下面是Verilog ...

  6. 【乌拉喵.教程】IIC总线介绍及FPGA编程

    最近将多年来收集到的教学视频.国内外图书.源码等整理整合拿出来,涉及arm.Linux.python.信号完整性.FPFA.DSP.算法.stm32.单片机.制图.电子模块.kali.出版社图书等.资 ...

  7. FPGA学习笔记【FPGA原理与结构】

    注意:本篇内容根据<FPGA原理和结构>([日]天野英晴 著 赵谦 译)一书整理,作者也是初学者,有错漏请见谅 基础知识 FPGA即现场可编程门阵列(Field Programmable ...

  8. 片上总线Wishbone 学习—— 转载请注明出处:http://blog.csdn.net/ce123

    片上总线Wishbone 学习(零)前言 声明:版权所有,欢迎转载! 转载请注明出处:http://blog.csdn.net/ce123 为了更加升入的理解片上系统,比如S3C2440等,今天开始学 ...

  9. 紫光同创国产FPGA学习之Fabric Inserter

    这一篇文章也是从紫光同创那边拷贝过来的.这个是在线逻辑分析仪调试,和xilinx的也差不多,所以,基本看过就能用了.具体有什么新的功能添加.我就不知道了.我看看,如果有特别的就在用另外的文章写了. 一 ...

最新文章

  1. 监控 Linux 性能的 18 个命令行工具
  2. 利用OpenCV的threshold函数实现双阈值法二值化操作的源码
  3. 设置Golang的GOPATH
  4. python模型训练效果没有优化_LSTM模型训练效果好,但测试结果较差,不能看出拟合过度...
  5. 微软自带输入法如何关闭桌面右下角「拼」图标
  6. [css] css中class和id选择器有什么区别?
  7. LeetCode872. Leaf-Similar Trees
  8. ASP.NET MVC实践系列1-UrlRouting
  9. 《Spring》(十一) ---- 基于注解的依赖注入
  10. 2.1 CMMI2级——7个PA简述
  11. 029——VUE中键盘语义修饰符
  12. 【Matlab取整函数】
  13. t470键盘拆解_做工保持良好水准 ThinkPad T470笔记本拆机解析
  14. 开发与测试的相爱相杀
  15. 交换机组播风暴_交换机广播风暴控制知识
  16. java 中定义整形变量_智慧职教: 在Java语言中,一条语句可以定义多个变量。例如int a; b;就定义了两个整型变量a 和b。...
  17. 为什么用IP查询网查询的自己的外网IP和用tracert命令查询的自己的出口IP不一致?
  18. android stuio修改代码参考线和智能换行
  19. layui富文本编辑器上传图片
  20. 8c SQL手册 六

热门文章

  1. python3爬取数据存入mysql_Python如何爬取51cto数据并存入MySQL
  2. sql server修改索引名称_【索引潜规则】覆盖索引、ICP、MRR详解
  3. docker 外部连接_使用外部网络连接Docker容器
  4. 码crc校验_CRC计算
  5. 基于555时基集成芯片压控振荡器
  6. 我家车模初长成 - K车模养成要点
  7. 2021年春季学期-信号与系统-第六次作业参考答案-第五小题
  8. 2021年春季学期-信号与系统-第六次作业参考答案-第四小题
  9. 时雨月五| AI机器学习实战の电磁导航智能车中神经网络应用的问题与思考
  10. 一位老司机谈谈掏心窝子的话