精华内容
下载资源
问答
  • FPGA双向IO使用之三态门说明

    千次阅读 2020-05-09 14:16:36
    在FPGA设计中,双向IO(输入输出引脚)是一个比较麻烦的东西,但是信号线用作总线等双向数据传输时就要用到inout类型。 以下用液晶的的数据线用作双向IO示例: 说是双向IO端口,其实输入和输出不是同时进行的,需要...

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

    在FPGA设计中,双向IO(输入输出引脚)是一个比较麻烦的东西,但是信号线用作总线等双向数据传输时就要用到inout类型。

    以下用液晶的的数据线用作双向IO示例:

    在这里插入图片描述

    说是双向IO端口,其实输入和输出不是同时进行的,需要有一个控制信号out_en来控制端口什么时候为输出,什么时候为输入。

    那这里就需要引入一个三态门结构电路。

    三态门结构

    那么三态门的结构是怎样的呢?

    三态门电路的输出结构和普通门电路的输出结构有很大的不同,因为它在电路中增加了一个输出控制端EN。

    在这里插入图片描述

    由上图看出,在单相三态门中,当EN=1时,对原电路无影响,电路的输出符合原来电路的所有逻辑关系,即A可以输出到B。当EN= 0时,电路内部的所有输出与外部将处于一种关断状态。

    因此,当FPGA的信号线存在双向IO时,可以有两个三态门来控制,一个控制输出,一个控制输入,结构如下:

    在这里插入图片描述

    当ENout=1,ENin=0时,双向三态门的电路传输方向是A->B;
    当ENout=0,ENin=1时,双向三态门的电路传输方向是B->A;

    模型分析

    下面简单做个简易模型来说明双向IO如何分别实现作为输入端口和输出端口的功能,模块图如下:

    在这里插入图片描述

    模型引脚定义

    (1)输入口A定义:当双向端口dinout作为输出口时,我们将A端口输入数据传到模块中,让数据从dinout口出来。

    (2)输出端口B定义:当当双向端口dinout作为输入口时,我们将dinout端口输入数据传到模块中,让数据从B口出来。

    (3)EN控制信号定义:当EN=1时,开通三态门,将dinout作为输出口使用,当EN=0时,把三态门置为高阻态,这时dinout作为输入口用。

    代码展示

    在这里插入图片描述

    编译分析后查看RTL视角逻辑电路,符合原有模型设计。

    在这里插入图片描述

    总结说明

    (1)FPGA内部不允许传递双向IO信号,只有FPGA对外部才能定义为双向IO端口,即只有在顶层输出的信号才可以被赋值为高阻态。

    (2)在结构化建模的过程中,一个模块一个功能的建模,当涉及到内部模块的端口是双向IO端口时,然后根据一个双向IO对应一个输入,一个输出和一个使能控制,把模块中双向IO的输出用输出端口代替,双向IO的输入用输入端口代替,引出使能信号,并把对应assign中赋值的高阻态z根据实际情况给出0或1,来解决FPGA内部双向IO连接问题。

    展开全文
  • 单片机开发中经常用到电平转换,最简单的方法是外接ULN2801/4,无需电阻电容等,一块芯片全部搞定,不过有个缺点是输入输出分开设计。下面介绍一种双向电路,即能输出又能输入,一般双向电路只能传信号,这种电路...

    单片机开发中经常用到电平转换,最简单的方法是外接ULN2801/4,无需电阻电容等,一块芯片全部搞定,不过有个缺点是输入输出分开设计。下面介绍一种双向电路,即能输出又能输入,一般双向电路只能传信号,这种电路可以接继电器和电机等功率器件。

    工作原理搜双向电平转换电路,这里加一个Q2 PNP三级管,目的是增加输出电流到1A,可以接继电器和小功率电机。

    展开全文
  • socket.io 是基于 WebSocket 的 C-S 实时通信库,底层是 engine.io,这个库实现了跨平台的双向通信。 engine.io 使用了 WebSocket 和 XMLHttprequest(或JSONP) 封装了一套自己的 Socket 协议(暂时叫 EIO Socket)...

    介绍了原生websocket的使用,接着学习使用socket.io:

    socket.io 是基于 WebSocket 的 C-S 实时通信库,底层是 engine.io,这个库实现了跨平台的双向通信。
    engine.io 使用了 WebSocket 和 XMLHttprequest(或JSONP) 封装了一套自己的 Socket 协议(暂时叫 EIO Socket),在低版本浏览器里面使用长轮询替代 WebSocket。一个完整的 EIO Socket 包括多个 XHR 和 WebSocket 连接.

    常用api:

    socket.emit

    数据传输对象为当前socket对应的client,其他各个client socket互相不影响;

    socket.broadcast.emit

    数据传输对象为所有client,排除当前socket对应的client;

    io.sockets.emit

    数据传输对象为所有client,包括触发当前事件的client;


    使用:

    1.安装express,聊天室需要局域网的呀,局域网需要启动http服务呀,所以安装express;


    2.安装socket.io,cnpm i --save socket.io   装好后它分为前端、后端两部分,前端页面引入:<script src="/socket.io/socket.io.js"></script>(在文件中看不到,等连接服务的时候就会出现),会自动生成一个文件夹名字就叫socket.io,以及文件夹内生成socket.io.js文件


    3.创建mainjs文件,开始撸:

    直接贴出写好的代码了:

    mainjs:

    var express = require("express");
    var app = express();
    //因为socket.io依赖原生http服务,所以要引入原生http模块,并且调用它的Server()方法将app传入,这样原生的http就拥有了express的方法
    var http = require("http").Server(app);
    var socket = require("socket.io")(http);//传入http执行socket函数,这样socket就跟http具有同一个端口了
    http.listen(9999);
    
    app.use(express.static("./html"));//设置静态资源路径
    
    // 创建socket监听服务:
    socket.on("connection", function(ws){
    	ws.on("diyLogin", function(val){//定义一个完全自定义事件,用来获取前端发来的登录的用户名
    		var address = ws.handshake.address;
    		console.log(address);
    		var u =  checkUser(val);
    		if(u.err){
                ws.emit("exist", u);
            }else{
            	socket.sockets.emit("allLogin", u);//执行前端事件,发送范围为每一个在线的客户端
            }
    	});
    
    	ws.on("sendMsg", function(msgObj){
    		socket.sockets.emit("accept", msgObj);//把接收到的某个用户消息发送到所有客户端
    	})
    	
    })
    
    var arr = [];
    function checkUser(u){//检测用户名是否已存在
    	if(arr.length === 0){
    		arr.push(u);
    		return u;
    	};
    	for(var i = 0; i < arr.length; i++){
    		if(arr[i] === u){
    			return {
    				err: "用户名已存在",
    				users: arr
    			}
    		}
    	}
    	arr.push(u);
    	return u;
    }

    html:

    <!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<title>Document</title>
        <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
    	<style>
        i{
            font-style: normal;
        }
           .chatList{
           	  height: 200px;
           	  border: 1px dashed green;
           	  overflow-y: auto;
           }
           .myself{
           	  text-align: right;
           	  color: red;
           }
           i.lin{
            font-weight: bold;
            color: #ffcc01;
            font-size: 16px;
           }
           i.other{
            color: green;
           }
           p.me{
            text-align: right;
            color: orange;
           }
    	</style>
    </head>
    <body>
    	<div class="container">
    		<div class="loginBox">
    			  <input type="text" class="form-control" id="username">
    		      <button class="btn" id="sure">登录</button>
    		</div>
            <div class="chatBox hidden">
            	<div class="chatList">
            		
            	</div>
                <textarea class="form-control" id="msg" cols="30" rows="5"></textarea>
                <button class="btn" id="send">发送</button>
                <div class="alert alert-success hidden" role="alert"></div>
            </div>
    	</div>
    </body>
    <script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
    <script src="/socket.io/socket.io.js"></script>
    <script>
    	//链接socket
        var ws = io.connect("ws://localhost:9999");
        var user;
        $("#sure").click(function(){
            var name = $("#username").val();
            if(!name){
                alert("好歹起个名呀,eg:李易峰");
            }else{
                //通知后台有人登陆了,socket.io都是基于事件的,要做的操作都是触发自定义事件的方式
                ws.emit("diyLogin", name);//执行自定义事件传入用户名
                user = name;//把当前用户名称保存到全局变量
            }
       })
        //获取后端返回的用户是否存在的查询结果
        ws.on("exist", function(re){
            if(re.err){
                alert(re.err);
                console.log("已经登陆的用户:\n", re.users)
                return;
            }
        })
    
        //接收后端返回的全局的登录者的名字的事件
        ws.on("allLogin", function(name){
            var _alert = name === "赵治林" ? "欢迎 男爵 <i class='lin'>"+name+"</i> 骑着火麒麟来到了本直播间!" : "<i class='other'>"+name+" </i>进入直播间";
             $(".alert").html(_alert).removeClass("hidden").show();
             $(".loginBox").hide();//登陆后隐藏登录盒子
             $(".chatBox").removeClass("hidden");//显示出聊天界面
             setTimeout(function(){
                $(".alert").fadeOut(function(){
                    $(this).addClass("hidden");
                });
             }, 1500)
        })
        //发送聊天消息
        $("#send").click(function(){
            var msg = $("#msg").val();
            if(!msg){
                alert("空消息也要钱哦!");
            }else{
                ws.emit("sendMsg", {msg, user});//执行事件把内容和发送者发送给后台,让后台返回给所有客户端
                $("#msg").val("");
            }
        })
        //接收聊天消息
        ws.on("accept", function(o){
            var p = $(`<p>${o.user}: ${o.msg}</p>`)
            if(o.user === user){
                p.addClass("me");
            }
            $(".chatList").append(p).scrollTop($(".chatList")[0].scrollHeight);
        })
    </script>
    </html>
    个人理解:

    socket.io实现了一对多的B-S双向通信,是基于事件驱动的,相当于后台自定义一个事件,前端触发,前端自定义一个事件,后台触发,同时可以选择socket.io提供的方法指定数据发送的范围,比如发给哪一个客户端;





    展开全文
  • 最近在研究 node 的时候,设计到了 socket 实时对话机制,并对其产生了兴趣,经研究发现,其实就是在几个常用方法之间的互相调用,以下是我大致做的总结。 点击参考官方文档 点击查看git 认识: Socket.io 是将 ...

    最近在研究 node 的时候,设计到了 socket 实时对话机制,并对其产生了兴趣,经研究发现,其实就是在几个常用方法之间的互相调用,以下是我大致做的总结。

    点击参考官方文档
    点击查看git

    1. 认识:
      Socket.io 是将 Websocket 和 轮询 (Polling)机制以及其它的实时通信方式封装成了通用的接口,并且在服务器端实现了这些实时机制的响应代码。
    2. 使用Socket:
      安装:npm i socket.io --save
                 引入包:let socketPackage = require(“socket.io”);
                 实例一个对象:let io = socketPackage(server); //server是创建的服务器
      引入:使用socket的时候,需要生成一个实例对象,生成的该实例对象依赖原生node已经建立好的HTTPServer对象。

    常用API

    服务器端:

    • 监听连接
      io.on(“connection”,function(socket){});
      当客户端向服务器建立连接的时候,‘connection’ 事件将被激活。对应的回调函数就会执行,回调函数中的参数就是客户端与服务器端的连接对象。
    • 给客户端广播(或发送)消息
      io.socket.emit(“String”,data);
      服务器主动向客户端发送消息,消息的时间名为myEvnetLabel,消息的具体内容是data。
    • 给指定的客户端广播消息
      io.sockets.socket(socketid).emit(“String”,data);
    • 监听客户端消息
      socket.on(“myEvnetLabel”,function(data){});
      当客户端发送消息时,服务器端监听这个消息,并在回调中执行

    浏览器端:

    • 开启连接
      let url = ‘http://localhost:3000’;
      let socket = io.connect(url);
    • 监听服务器消息
      socket.on(‘myEvnetLabel’,function(data){});
      当服务器端消息到达时,回调函数会被执行。
    • 向服务器发送消息
      socket.emit(‘myEvnetLabel’,data);
      客户端主动向服务器端发送消息,具体内容为data。

    客户端socket.on()监听事件:

    connect:连接成功
    connecting:正在连接
    disconnect:断开连接
    connect_failed:连接失败
    error:错误发送,并无法被其他事件类型所处理
    message:同服务器端message事件
    anything:同服务器anything事件
    reconnect_failed:重连失败
    reconnect:成功重连
    reconnecting:正在重连
    /*
    	注意:第一次连接时,事件触发 的顺序为:connecting -> connect
    	      失去连接时:disconnect -> reconnecting (可能多次进行)-> connecting -> reconnect -> connect
    */
    
    展开全文
  • 最近在研究 node 的时候,设计到了 socket 实时对话机制,并对其产生了兴趣,经研究发现,其实就是在几个常用方法之间的互相调用,以下是我大致做的总结。 点击参考官方文档 点击查看git 下面我做的机器人聊天小案例...
  • ADuC845设计总结-通用IO端口

    千次阅读 2012-06-13 14:47:25
    P0、P2、P3口为双向端口,每个位具有一个端口锁存器,用做输入输出锁存。P2、P3具有内部上拉电阻,其中P0口为开漏极IO,无上拉电阻,需要外部硬件提供。向P0、P2、P3端口的一个引脚写1时,数据首先被载入端口引脚的...
  • 设计人员要求1-Wire主机IO采用漏极开路架构,工作在1.8V。而多数1-Wire从器件无法工作在1.8V。本应用笔记介绍了实现1.8V 1-Wire主机与5V 1-Wire从器件之间电平转换的参考设计(RD)。该参考设计用于驱动典型的1-Wire从...
  • 设计人员要求1-Wire主机IO采用漏极开路架构,工作在1.8V。而多数1-Wire从器件无法工作在1.8V。本应用笔记介绍了实现1.8V 1-Wire主机与5V 1-Wire从器件之间电平转换的参考设计(RD)。该参考设计用于驱动典型的1-Wire从...
  • 不用的IO处理意见

    2019-09-03 22:37:47
    1、一般单片机的设计,初始化会把所有IO口设置为输入状态,而且用户变更IO口状态时不对口进行操作输出的数据为FF,这个设计与当时为简化设计使用了很多准双向口有一定的关系,因为准双向口设置为FF就可以做输入使用...
  • Cav Time Limit: 3000MS   Memory Limit: Unknown...64bit IO Format: %lld & %llu Submit Status Description As an owner of a land with a cave you were delighted when yo
  • IO-Link将这些设备的传统接口功能从简单的NC /NO开关接口(标准IO或SIO模式)扩展到双向智能接口,能够通过编码切换以三种不同速度(COM1- 4.8kb / s,COM2-38.4kb /s或COM3-230.4kb / s)。除了数据引脚(C / Q)外,IO-...
  • 不用的IO处理方式

    2012-09-28 10:37:35
    1、一般单片机的设计,初始化会把所有IO口设置为输入状态,而且用户变更IO口状态时不对口进行操作输出的数据为FF,这个设计与当时为简化设计使用了很多准双向口有一定的关系,因为准双向口设置为FF就可以做输入使用...
  • 摘要:设计人员要求1-Wire主机IO采用漏极开路架构,工作在1.8V。而多数1-Wire从器件无法工作在1.8V。本应用笔记介绍了实现1.8V 1-Wire主机与5V 1-Wire从器件之间电平转换的参考设计(RD)。该参考设计用于驱动典型的1-...
  • java IO(二): java NIO

    2018-03-22 16:07:24
    java NIO用来解决传统IO的问题,NIO使用的就是多路复用IO设计模式,有几个关键的概念:(1)Buffer:Buffer称之为缓冲区,NIO中读写都依赖于缓冲区,其基本类为Buffer类。(2)Channel:顾名思义:“通道”,在NIO中,流...
  • 它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。 HTTP设计的时候,比如浏览器直接发出请求,服务器才能响应。如果浏览器...
  • 要求是:设计双向链表存储矩形的长跟宽,然后存下来面积,最后根据面积排序,要实现文件的IO #include&lt;iostream&gt; #include &lt;fstream&gt; using namespace std; class Node //组成双向...
  • IIC(Inter-Integrated Circuit)总线是一种由 PHILIPS 公司开发的两线式串行线,用于...照ST公司宁可自己设计IIC都不肯给飞利浦专利费,那我估计也价格也并不便宜,但是STM32设计的IIC非常不稳定,时常出现丢失信号的问
  • 芯片设计引言 光纤通道(FC)是一个高性能的双向点对点串行数据通道。光纤通道的标准是由T11标准委员会(美国国家信息技术标准化委员会下属的技术委员会)制定的,它是一个为适应日益增长的高性能信息传输要求而...
  • 它的ROM为8k*16、RAM为384 bytes,多有40个双向IO口。可控的PFD输出用于发声,或是红外线传输的载波信号。  HT46RU24的UART属于全双工异步通信,可由软件设定波特率,并具有自动检错功能,利用UART与其它系统做数据...
  • 1.先从简单的SDR模式开始做起,频率设置为120M,单端SCK,禁用SCKB 。...5.对FPGA端,CS,SCK是输入信号,DQS,D0-D8是双向IO信号,FPGA输出时方向为输出,FPGA输入时引脚方向为输入;RT芯片的 enableWriteMask设置.
  • 使用 socket 实现了服务端与多个客户端之间的双向通信 服务端 package exp; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; ...
  • 采用两个中断作为特殊车辆和通行时间控制位,采用P1口作为输入控制口即A道和B道的控制口,其为双向IO口同时作为交通灯的输出口,采用P0口作为LED的输出口,但P0口做输出口时需要接上拉电阻,其显示的是红绿黄灯的...
  • 它的ROM为8k*16、RAM为384 bytes,最多有40个双向IO口。可控的PFD输出用于发声,或是红外线传输的载波信号。  HT46RU24的UART属于全双工异步通信,可由软件设定波特率,并具有自动检错功能,利用UART与其它系统做...
  • 随着互联网的飞速发展,网页中实时通讯和消息推送的应用愈加广泛。传统上采用定时轮询或Comet 的方式实现实时通讯,但对服务器...本文使用Node.js 平台和Socket.IO 组件设计并实现了WebSocket 实时消息推送网页应用。
  • 不仅如此,它还具有可实现高与低电平之间的双向转换的电平转换功能;低 IO 级别,保留的数字引脚方便用户使用跳线帽选择 TX/RX 端口。 特性: 标准化形状设计 可以通过由 UartSBee 模块连接到 USB 进行配置 DIN和DOUT...
  • 关于内部日志系统的设计实现有意义的话,请移步文章:。可以认为frostmoure是监控部分的实现如果你现在使用弹性叠层(ELK)建立起了日志系统,却苦恼于没有一个配套日志监控系统,也许它能帮到你。 主要功能 Elastic...
  • JAVA面向对象程序设计 网络编程 软件技术专业教学资源库 技能训练一对一聊天 需求 实现一对一聊天功能 分析 基于UDP协议的socket编程 数据会被封装从数据包不需要IO流 可以多次交流 待解决问题 如何进行多次交流 ...
  • 实验一准双向IO口实验与十六位数据总线实验 准双向IO口实验 手动实验环境的建立与提示 实验箱数据通路图 进位控制与零标志 手动--搭接 手动--在线 存储器实验内容 存储器实验预习内容 实验三存储器实验手动在线听课...
  • 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。 建立网络通信连接需要一对socket,两个socket之间形成一个管道(通道),进行信息流的传输(联想IO流中文件和程序之间读写)...
  • https://www.nowcoder.com/acm/contest/122/C来源:牛客网时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld题目描述 一张地图上有有N个城市,他们可以通过双向道路...

空空如也

空空如也

1 2 3 4 5
收藏数 99
精华内容 39
关键字:

双向io设计