上篇博文讲了三态门:https://blog.csdn.net/Reborn_Lee/article/details/83753290

姊妹篇:【 FPGA 】总线实现形式之选择器

三态门的高阻特性,实际上就是为这里利用这个特性做准备的。

两种总线的实现方式类似,也就是二者的硬件描述都是分为三个部分:

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

2、写总线部分,即将四个三态门的输出连接到总线上。

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



下面讲讲三态门的东西:

利用三态门的高阻特性,可以实现总线的功能。由于三态门资源大多存在于FPGA芯片的接口资源中而非FPGA内部,因此一般当总线位于FPGA芯片外部时,常采用这种方式。

再讲讲代码中的赋值冲突问题:

下面的代码是错误的,存在赋值冲突:

assign c = (sel[0] == 1'b1) ? a:1'b0;
assign c = (sel[1] == 1'b1) ? b:1'b1;

这个例子代码,两条赋值语句肯定都是一直有效的,因此必然产生赋值冲突,从而导致出错。

下面的代码就是对的:

assign c = (sel[0] == 1'b1) ? a:1'bz;
assign c = (sel[1] == 1'b1) ? b:1'bz;

这个代码的写法和上面的唯一区别就是高组态的使用,为什么使用了高阻态,代码就是正确的了呢?

这是因为高阻态实际上就是电路中的断路,通过合理切换到高阻态,可以让上述有高阻态的例子中的两条赋值语句不会在同一时刻生效,因此不会产生赋值冲突。


下面直接给出一个简单的三态门式总线的FPGA实现方式。功能代码分为三个部分,上面也已经说了:

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

2、写总线部分,即将四个三态门的输出连接到总线上。

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

`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date:    20:05:53 11/05/2018
// Design Name:
// Module Name:    Bus_Three
// Project Name:
// Target Devices:
// Tool versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//
module Bus_Three(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 [3:0] en;wire [7:0] bus;//generate selalways@(request0,request1,request2,request3)begincase({request0,request1,request2,request3})4'b0000: en = 4'b0000;4'b0001: en = 4'b1000;     // the most high bit of en is available when request3 is high4'b0010-4'b0011: en = 4'b0100;  // the second bit of en is available when request2 is high 4'b0100-4'b0111: en = 4'b0010;  // the first bit of en is available when request1 is high default: en = 4'b0001;  // the zero bit of en is available when request0 is high endcaseend//write busassign bus = (en[0] == 1'b1) ? device0Out:8'hzz;assign bus = (en[1] == 1'b1) ? device1Out:8'hzz;assign bus = (en[2] == 1'b1) ? device2Out:8'hzz;assign bus = (en[3] == 1'b1) ? device3Out:8'hzz;//read bus assign device0In = bus;assign device1In = bus;assign device2In = bus;assign device3In = bus;endmodule

RTL Schematic:

Technology Schematic:

随便给出局部图,因为总图太大,放不下,缩小了又看不清楚:

废话不必多说,Technology Schematic给出了FPGA内部是如何实现这个电路的,不用想,是查找表和一些输入输出缓冲器。

【 FPGA 】总线实现形式之三态门相关推荐

  1. FPGA总线实现形式

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

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

    用选择器的思想来实现总线: 总线从宏观上看是"多写多读"的,但是从微观上来看是"一写多读",因为系统中的各个部件只能分时使用总线,而无法同时使用.也就是在某一固 ...

  3. FPGA双向IO使用之三态门说明

    在FPGA设计中,双向IO(输入输出引脚)是一个比较麻烦的东西,但是信号线用作总线等双向数据传输时就要用到inout类型. 以下用液晶的的数据线用作双向IO示例: 说是双向IO端口,其实输入和输出不是 ...

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

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

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

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

  6. 高阻态是0还是1_FPGA/ASIC笔试面试题集锦(1)知识点高频复现练习题

    写在前面 正文内容 简述ASIC设计流程,并列举出各部分用到的工具? 简述FPGA的开发流程? 名词解释 数制转换 什么是竞争和冒险?如何消除? 2分频描述 简述建立时间和保持时间,画图表示? 简述触 ...

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

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

  8. FPGA基础知识极简教程(8)详解三态缓冲器

    博文目录 写在前面 正文 全双工与半双工 FPGA和ASIC中的三态缓冲器 如何在VHDL和Verilog中推断出三态缓冲区 参考资料 交个朋友 写在前面 下面用举例子的方式引出三态门,内容过长,大家 ...

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

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

最新文章

  1. add svn 多个文件_深圳信狮SVN技术文档
  2. 使用jquery.qrcode生成二维码(转)
  3. JavaScript模块化不算漫长的发展史
  4. pytorch命令式和符号式混合编程
  5. Systemd入门教程:命令篇
  6. mysql in/no in/like
  7. ue4 设置intellisence_UE4的配置界面写入
  8. java地图源码_Java集合源码分析(四)HashMap
  9. jbpm视频教程全集下载【21讲完整】
  10. JAVA与C#的区别
  11. Android 触摸事件转换为鼠标事件
  12. NOIP2016普及组T1(买铅笔)题解
  13. C语言编制排班系统流程图,智能排班系统流程图怎样绘制
  14. rabbit的安装配置过程
  15. Your IP address is spelled incorrectly问题排查
  16. 四级恋练有词课程 (10课时-朱伟)导学
  17. 9个你需要知道的PHP函数和功能
  18. 滑动相关的原理以及用滤波器实现滑动相关(匹配滤波器捕获DMF)
  19. jenkins之插件下载方法
  20. 风清清,雨霖霖,青剑低啸吟,月色如银

热门文章

  1. SharePoint 2010 技巧系列: 控制Ribbon菜单权限(SiteActions的例子)
  2. 介绍一个好用的抓取dump的工具-ProcDump
  3. 白话讲山寨SOA,少一些迷惑、多一些理解,你的程序架构SOA了吗?
  4. 波涛汹涌的黄金甲,一碗中药引发的血案!
  5. html照片4张 9张布局,css实现朋友圈照片排列布局
  6. 承德计算机专业去哪考试,2021河北省考承德都在哪个学校考试?
  7. 浏览是不是计算机网络功能,什么是因特网——计算机网络是怎么为你服务的?...
  8. cv python 找不同_python – 在Gridline for GridSearchCV中替换不同的模型
  9. 关于组织参加2021年全国大学生 智能汽车竞赛东北赛区比赛的报名通知
  10. 电抗电路的串并联的转换