目录

前言

设计一

设计二(回环)

设计二(回环)测试


前言

前面讲到了波特率的产生,发射器以及接收器:

RS232 波特率时钟产生方法?

RS-232 Transmitter

RS-232 Receiver

如何把这些模块链接起来,实现一些功能呢?

这篇博文就是干这个事情的。

参考链接:https://www.fpga4fun.com/SerialInterface5.html

原文提供的思路已经很不错了。

我之前也写过一篇有发射器和接收器构成的一个RS232回环实验:

UART的回环实例


设计一

好了进入正题:

这种设计允许从PC控制一些FPGA引脚(通过PC的串行端口)。

它在FPGA上创建8个输出(名为“GPout”的端口)。 GPout由FPGA接收的任何字符更新。
FPGA上还有8个输入(名为“GPin”的端口)。 每次FPGA接收到字符时都会发送GPin。
GP输出可用于从PC远程控制任何东西,可能是LED或咖啡机......

给出Verilog描述:

module serialGPIO(input clk,input RxD,output TxD,output reg [7:0] GPout,  // general purpose outputsinput [7:0] GPin  // general purpose inputs
);wire RxD_data_ready;wire TxD_busy;wire [7:0] RxD_data;
asy_receiver RX(.clk(clk), .RxD(RxD), .RxD_data_ready(RxD_data_ready), .RxD_data(RxD_data));
always @(posedge clk) if(RxD_data_ready) GPout <= RxD_data;asy_transmitter TX(.clk(clk), .TxD(TxD), .TxD_start(RxD_data_ready), .TxD_data(GPin), .TxD_busy(TxD_busy));endmodule

调用的模块代码就不在粘贴一遍了,去其他博文里面找。

这里给出RTL原理图,以便看出原理,以及这些模块是如何连接的:

从这幅原理图可以看出RX与TX之间的连接关系,RX接收外部的串行输入,当接收完毕后,RXD_data_ready有效,作为后面同步寄存器的使能,延迟一拍后,通过GPout输出。

同时TX模块接收一个8位数据GPin,开始发送信号也为RxD_data_ready,也就是说,当RX模块接收完数据后,Tx就开始发送GPin。


设计二(回环)

如果将RxD_data直接作为TX的输入,则形成一个RS232回环:

module serialGPIO(input clk,input RxD,output TxD//    output reg [7:0] GPout,  // general purpose outputs
//    input [7:0] GPin  // general purpose inputs
);wire RxD_data_ready;wire TxD_busy;wire [7:0] RxD_data;
asy_receiver RX(.clk(clk), .RxD(RxD), .RxD_data_ready(RxD_data_ready), .RxD_data(RxD_data));
//always @(posedge clk) if(RxD_data_ready) GPout <= RxD_data;asy_transmitter TX(.clk(clk), .TxD(TxD), .TxD_start(RxD_data_ready), .TxD_data(RxD_data), .TxD_busy(TxD_busy));endmodule

RTL原理图为:


话说链接是连接了,但是能不能正常工作呢?

第一步,写个测试代码验证一下呗。

设计二(回环)测试

测试代码很简单,直接用之前的 RS232 Receiver

`timescale 1ns / 1psmodule serialGPIO_tb( );reg clk;reg RxD;//wire RxD_data_ready;//wire [7 : 0] RxD_data;  // data received, valid only (for one clock cycle) when RxD_data_ready is assertedwire TxD;parameter DATA0 = 10'b1101001010; //从低位开始发送
//  parameter DATA1 = 10'b1010011010;reg [9:0] data_in;integer i;initial beginclk = 0;forever #20 clk = ~clk;endinitial begindata_in = DATA0;for(i = 0; i < 9; i = i + 1) begin#8700 RxD = data_in[i]; end#26100for(i = 0; i < 9; i = i + 1) begin#8700   RxD = data_in[i];end//#10000 $stop;endserialGPIO u_serialGPIO(.clk(clk),.RxD(RxD),.TxD(TxD)    );endmodule

仿真效果很满意:

RxD_data_ready有效时,接收完毕,于此同时TxD_start有效,开始发送数据。


最后设计一的仿真自己做吧。

如何使用RS-232发射器和接收器?相关推荐

  1. RF发射器和接收器电路

    原文地址:https://circuitdigest.com/electronic-circuits/rf-transmitter-and-receiver-circuit-diagram RF发射器 ...

  2. APM 学习 13 --- ArduPilot 遥控器 RC 发射器和接收器

    英文原文地址: https://ardupilot.org/copter/docs/common-pixhawk-and-px4-compatible-rc-transmitter-and-recei ...

  3. 红外线发射器与接收器模块使用教学

    硬件介绍 (上图为红外线接受模块,下图为红外线发射模块) 红外线接受模块和红外线发射模块均与led外设相同,有三根引脚,其硬件连接方式也大致相同.红外线接受模块只用于空调红外线的解码,而在实品的运用中 ...

  4. STM32红外遥控实验(发射器和接收器)

    这个实验是学院的开放实验,2个小时写完了代码,使用STM32控制器,特此记录一下,比较水,有需要的朋友可以参考一下,想要代码请加入群.欢迎加入QQ群:681976114,点击这里加群 文章来源地址:h ...

  5. 杰理之AC695_3.0.4_SDK做发射器连接接收器无声问题解决方法【篇】

    在bt_emitter.c文件添加此行代码即可:u8a2dp_wait_remote_discovecr=0;

  6. linux红外驱动程序,基于Linux操作系统和红外发射器实现系统模块的设计

    引 言 随着嵌入式系统及集成电路技术的飞速发展,针对移动手持终端的专用芯片获得了长足发展.芯片的RAM和ROM的容量越大,在上面跑操作系统也越来越容易.Linux是当今流行的操作系统之一.由于其内核健 ...

  7. 每个工程师都应该知道的 5 个射频发射器测量指标(自NI官网翻译)

    概述 射频发射器是现代通信的重要组成部分.射频发射器由核心射频组件设计和组装而成,具有多种不同的形式和应用.我们经常想到无线通信中的射频发射器,但这个概念同样适用于有线应用,如有线电视.蜂窝电话.雷达 ...

  8. tl494组成的超声波发射电路_最简单无线发射电路图大全(超声波发射/射频收发电路/调频发射器) - 全文...

    最简单无线发射电路图(一):555构成的超声波发射电路 从555的3脚输出的40kHz的振荡脉冲驱动T-40-16工作,使之发射出40kHz的超声波信号.电路工作电压为9V,工作电流为40-45mA, ...

  9. 基于simulink使用混合波束成形对射频毫米波发射器进行建模(附源码)

    一.前言 本例说明了一种使用66元件混合波束成形天线对32 GHz QPSK射频发射和接收系统进行系统级建模和仿真的方法.该系统包括射频缺陷.发射阵列辐射效应.窄带接收阵列和基带接收器,可校正系统损伤 ...

最新文章

  1. 如何用eclipse操作MySQL数据库进行增删改查?
  2. android 投影仪,不要购买投影仪, 安卓手机投屏很简单, 每个手机都可以
  3. python matplotlib绘图 axes和pyplot用法的区别是什么?子图subplot
  4. 前端可视化编程:liveReload安装,sublime 3
  5. 磁盘配额 挂载 和yum源的配置
  6. android 中空饼图控件,android饼状图内是空心的怎么做
  7. python作业代码没有缩进严重吗_Python代码需要缩进吗
  8. matlab 中 diff 函数 cumsum 函数 logical 函数 tabulate 函数 使用方法
  9. “中国十大名校”之争!
  10. 选择易优cms建站的十大理由
  11. SQLmap简单的使用——新手教程解析
  12. stack.peek
  13. HP3777打印机一行清晰一行不清晰
  14. Pycharm导入同级目录模块解决办法汇总
  15. 数据结构、数据、数据元素、数据项的区别
  16. 解锁工具Unlocker试用
  17. Genymotion - 强大好用高性能的 Android 模拟器 (在电脑流畅运行APK安卓软件游戏的利器)
  18. MFC打印及打印预览
  19. 大学计算机第七版读书笔记(第一章)
  20. python识别发票二维码_Python 实现二维码生成和识别

热门文章

  1. 使用Vim+Ctags+Cscope阅读源代码
  2. Hibernate 连接池的三种配置方式
  3. 腐蚀单机怎么进_华强北淘来的iPhone6S,进水后严重腐蚀,小伙飞线拯救又赚到了!...
  4. java 的继承_关于java中的继承
  5. franze kafka 游戏_The Franz Kafka Videogame
  6. java数组缓冲,java – 字节数组缓冲图像转换速度慢
  7. 炫界 (587) -(牛一邓丽君音)_50音起源 for mac(日语五十音学习软件)
  8. python资本市场财务数据分析_Python对股票财务数据进行可视化分析
  9. 计算机文化基础4作业,计算机文化基础试题4
  10. php无法加载dll插件,php无法加载动态库怎么办