tag 标签: vhdl语言

相关博文
  • 热度 12
    2013-8-17 12:18
    1053 次阅读|
    0 个评论
    1 引 言 UART 即通用异步收发器,他广泛使用串行数据传输协议。UART 功能包括微处理器接口、用于数据传输的缓冲器(Buffer)、帧产生、奇偶校验、并串转换,用于数据接收的缓冲器、帧产生、奇偶校验、串并转换等。UART的特点是一个字符接一个字符传输,并且传送一个字符总是以起始位开始,以停止位结束,字符之间没有固定的时间间隔要求。每一个字符的前面都有一位起始位(低电平,逻辑值0) , 字符本身由5~ 8 位数据位组成,接着字符后面是一位校验位,最后是停止位(1 位,或1 位半,或2位) , 停止位后面是不定长度的空闲位。停止位和空闲位都规定高电平(逻辑值1) , 这样可以保证起始位开始处有一个下降沿。在一般的使用中往往不需要使用完整的UART功能,比如对于多串口的设备或需要加密通讯的场合使用UART 就不是最合适的。如果设计上用到FPGA /CPLD器件,那么就可以将所需要的UART 功能集成到FPGA内部,从而使整个设计更加紧凑、稳定、可靠。分析UART的结构,UART 主要由数据总线接口、控制逻辑和状态接口、波特率发生器、发送和接收等部分组成。在本设计中,固定数据帧格式为: 开始位(1 b 低电平)、8 位数据位、偶校验、停止位(1 b 高电平) , 波特率可调。 2 波特率发生模块 设计的UART 的接收和发送按照相同的波特率进行,波特率可以通过接口模块的总线接口进行设置。 UART 收发的每一个数据宽度都是波特率发生器输出的时钟周期的16 倍,即假定当前按照9 600 b/s 进行收发,那么波特率发生器的输出时钟频率应该为9 600×16 Hz. 假定提供的外部时钟为116MHz, 可以很简单地通过总线写入不同的数值到波特率发生器保持寄存器,然后用计数器的方式生成所需要的各种波特率,即分频器。计算公式为: 1 600 000/(16×所期望的波特率) - 1, 如果希望输出10 000 Hz 的波特率,可以得出从总线写入的数值为1 600 000/(16×10 000) - 1= 9 (09H)。 3 发送模块 根据UART 协议的描述,发送逻辑流程如图1 所示。 发送数据由接口模块控制,接口模块给出w rn 信号,发送器根据此信号将并行数据锁存,并通过发送保持寄存器和发送移位寄存器发送并行数据。由计数器no_ bs_sent 控制状态的转移,即数据的发送,计数值为1 时,数据从发送保持寄存器传送到发送移位寄存器,计数值为2时,发送开始位(1 b 低电平) , 计数值为3~ 10, 发送8 位数据,计数器为11, 发送校验位,计数值为12, 发送1 位停止位,计数器随后清零。发送时钟是根据数据传输的波特率产生的,16 倍于波特率发生器产生的时钟。 图1 发送逻辑的流程 发送模块信号: rst (输入) : 复位端口, 低电平有效; w rn (输入) : 写控制信号; din (输入) : 并行数据输入信号; clk16x (输入) : 外部时钟信号; tbre (输出) : 发送保持寄存器空信号, 高电平有效; t sre (输出) : 发送移位寄存器空信号, 高电平有效; sdo (输出) : 串行数据输出信号。 用VHDL 语言编写代码,使用Xinlinx 的ISE511 进行逻辑综合,运用Modelsim 7.2 做时序仿真,其结果如图2所示。 图2 发送模块时序仿真波形图 4 接收模块 根据UART 的协议描述,可以画出如图3 所示的接收逻辑流程图。接收逻辑首先通过检测输入数据的下降沿来检查起始位,然后产生接收时钟,利用接收时钟来采样串行输入数据,在缓冲器中作移位操作,同时产生校验位,在第9 位处比较校验位是否正确,在第10 位处比较停止位是否为高,在校验位错误或停止位错误的情况下产生错误指示信号。接收时钟是根据数据传输的波特率产生的,16 倍于波特率发生器产生的时钟。 接收模块信号: rst (输入) : 复位信号; clk16x (输入) : 输入时钟; rdn (输入) : 读锁存信号; rxd (输入) : 串行数据输入信号; dout (输出) : 并行数据输出总线; fram ing_ erro r (输出) : 帧错误信号; parity_ erro r (输出) : 校验错误信号; data_ ready (输出) : 数据接收完毕信号。 图3 接收逻辑的流程 《电子设计技术》网站版权所有,谢绝转载 运用Modelsim 712 对接收模块做了时序仿真,其结果如图4 所示。接收时钟与发送时钟相同,接收到一帧串行数据,由接收模块转换为并行输出,并且检验校验位和停止位,产生fram ing_ erro r 和parity_ erro r 信号输出。 图4 接收模块时序仿真波形图 5 接口控制模块 接口控制模块连接控制发送、接收、波特率发生模块,并与外部并行总线相连接,从外部(CPU 或单片机) 接收控制信号(nrst, nw rn, nbdn, nrdn) , 来控制UART 的发送、接收以及内部时钟的生成。在nw rn 有效并且内部信号tbre= ′0′(发送缓冲寄存器空) 时,将数据总线输入的并行数据发送给发送模块数据线din (7: 0) , 执行发送数据功能。在nrdn 有效并且内部信号data_ ready, parity_erro r, fram ing_ erro r 有效时,允许从接收模块读入接收到的数据。波特率发生器和发送模块的并行数据输入端口共用一个数据总线。 6 总体电路综合及仿真 UART 总体电路如图5 所示,分别由上述4 个模块组成。其时序仿真如图6 所示。 图5 UART 总体电路图 图6 UART 总体时序仿真波形图 观察图6, 可以看到串行输出端口sdo 发送一帧数据为"00101011001", 第一位为起始位,8 位数据位,校验位为"0"(偶校验) , 1 位停止位,空闲状态位为高电平。并行输出端口ndout 输出为"00101010", 输入数据帧格式正确,校验位正确。 7 结 语 用FPGA 器件实现了UART 异步收发器的核心功能,可以实现对数据的接收和发送,并可以在接收数据时对其校验位、停止位进行判断,在发送数据时可以形成完整的一帧数据格式。其接收和发送数据的时钟有内部波特率发生器产生,根据预置的分频系数,对外部时钟进行分频,产生需要的接收或发送时钟。将该UART 电路作为一功能块嵌入到一个FPGA 实现的数据采集与处理系统中,成功地实现了和远端的PC 机进行异步串行通信。实验证明该UART 电路简单,工作稳定、可靠,可运用于低端的异步通信。 《电子设计技术》网站版权所有,谢绝转载
  • 热度 27
    2012-3-23 23:14
    2665 次阅读|
    11 个评论
     此 系列献给想学习FPGA的友们,同时也是个人学习知识的回忆与总结。         FPGA,不知道它干嘛的,官方的解释是 FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路 (ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。说了那么多,都是写专有名词,也不好理解,就先不去管它吧。       VHDL,它是什么,编程序的,怎么编写,看例子吧,解释下。 --文件名:test.vhd. --功能:将外部输入的CLK的信号频率进行分频。 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity test is     Port (clk:in std_logic;     bclk:out std_logic); end test; architecture Behavioral of test is begin process(clk) variable cnt:integer; begin  if rising_edge(clk) then      if cnt=2 then cnt:=0; bclk=not bclk;             --设置分频系数   else cnt:=cnt+1; end if;   end if; end process;   end Behavioral;              这就是VHDL语言编写的程序,每次写的时候基本结构需要有这2部分哦。          开始的是库文件申明,每次写代码的时候都加上去,当然你有牛X的能力也可以自己写库文件哦。 接着entity test is      这是实体名申明,然后申明端口port();,表明你这个代码有那几个端口,每个端口的输入的还是输出,或者是其他。在这里 有个文件叫test 它有一个clk 输入口,一个blck输出口。然后怎么对信号进行作用呢,看看下面是不是有个process()的程序。这里面就是对clk'信号进行作用的。process()里面有clk,它是敏感的东西,这个家伙一直再偷偷看着clk这个信号,   if rising_edge(clk) then  当它是上升沿的时候(上升沿就是由低电平到高电平,咱们伟大的数字电路有说这个事情),我们有个变量variable 叫做 cnt ,它就会加1,  if cnt=2 then cnt:=0; bclk='1'; 加之前还得检查下这个变量是不是到2了,到2了就自动变为0,输出信号blck就变相反的电平,否则就是cnt加1 。       几几几几几几几几几几几几几几几,假设现在有这个一高一低的clk输入信号,process()监测到clk的变化了,按照上面说的程序意思,开始第一个上升沿的时候假设blck是0,cnt是由0----》1,第二个clk上升沿来了,cnt到2后马上变0,bclk输出信号就变1了,程序就一直在干这个事情,它不会累的,除非它坏了。     说了这些,这个程序能干嘛,我也不知道,但它是认识vhdl,FPGA的开始,慢慢来吧。现在就知道VHDL语言有几大模块,开始要那3个库文件,它支持后面程序的运作。接着就是写程序的输入输出口有几个,程序取名字叫什么,然后就写代码对信号进行操作,利用这个输入产生输出的效果。    假如有led那种小灯呢,怎么让它亮,产生漂亮的闪烁,接下忆FPGA课--2来一起回忆下吧。      
相关资源
  • 所需E币: 4
    时间: 2019-12-25 21:01
    大小: 188.95KB
    上传者: 238112554_qq
    本文详细介绍应用VHDL语言进行MCS-51兼容单片机ip内核开发的过程,包括指令的分解、模块的划分以及功能的实现等。其中,重点讲述控制/译码模块的实现。……
  • 所需E币: 4
    时间: 2019-12-25 17:31
    大小: 209.03KB
    上传者: givh79_163.com
    简易通用型PCI接口的VHDL-CPLD设计……
  • 所需E币: 3
    时间: 2019-12-25 17:29
    大小: 292.51KB
    上传者: 2iot
    介绍了一种基于现场可编程门阵列(FPGA)的数字式心率计。该仪器采用FPGA和VHDL语言实现时钟分频、波形变换、心率测量、告警控制及数码转换等功能,能够实时测量瞬时心率和平均心率,并能提供心率异常告警信息。该仪器使用元器件数量少、工作稳定可靠、显示直观,测量范围为20~200跳/分钟,测量误差小于1%。……
  • 所需E币: 4
    时间: 2019-12-25 17:29
    大小: 132.11KB
    上传者: wsu_w_hotmail.com
    介绍了一种基于FPGA可编程技术实现的用于无线通信实验系统的全数字锁相环路。详细叙述了其工作原理、工作性能、电路实现和仿真结果……
  • 所需E币: 5
    时间: 2019-12-25 15:19
    大小: 216.5KB
    上传者: givh79_163.com
    FPGA可以通过串行接口进行配置.本文对传统的配置方法进行了研究,并从更新配置文件的方法入手,提出了利用处理机通过网络更新的方法,给出了一个用CPLD和Flash对FPGA进行配置的应用实例.……
  • 所需E币: 5
    时间: 2020-1-4 11:48
    大小: 3.71MB
    上传者: quw431979_163.com
    VHDL语言入门教程3VHDL语言VHDL:VHSICHardwareDescriptionLanguage.3.1VHDL语言基础3.2VHDL基本结构3.3VHDL语句3.4状态机在VHDL中的实现3.5常用电路VHDL程序3.6VHDL仿真3.7VHDL综合HDL----HardwareDescriptionLanguage一种用于描述数字电路的功能或行为的语言。目的是提为电路设计效率,缩短设计周期,减小设计成本,可在芯片制造前进行有效的仿真和错误检测。优点:HDL设计的电路能获得非常抽象级的描述。如基于RTL(RegisterTransferLevel)描述的IC,可用于不同的工艺。HDL设计的电路,在设计的前期,就可以完成电路的功能级的验证。HDL设计的电路类似于计算机编程。常用的HDL语言:VHDL、VerilogHDLVHDL概述:VHDLVHSICHardwarterDescriptionLanguageVHSICVeryHighspeedintegratedcircuitVHDL是美国国防部在20世纪80年代初为实现其高速集成电路硬件VHSIC计划提出的描述语言;IEEE从1986年开始致力于VHDL标准化工作,融合了其它ASIC芯片制造商开发的硬件描述语言的优点,于93年形成了标准版本(IEEE.std_1164)。1995年,我国国家技术监督局推荐VHDL做为电子设计自动化硬件描述语言的国家标准。VHD……
  • 所需E币: 5
    时间: 2020-1-4 12:45
    大小: 424.18KB
    上传者: 2iot
    基于FPGA的全数字锁相环路的设计……
  • 所需E币: 4
    时间: 2020-1-4 23:16
    大小: 141.82KB
    上传者: wsu_w_hotmail.com
    用VHDL语言在CPLD/FPGA上实现浮点运算……
  • 所需E币: 3
    时间: 2020-1-4 23:16
    大小: 19.27KB
    上传者: quw431979_163.com
    用VHDL语言实现ALU的算术运算单元……
  • 所需E币: 4
    时间: 2020-1-4 23:16
    大小: 165.75KB
    上传者: 978461154_qq
    硬件出租车记数器完整的VHDL语言设计……
  • 所需E币: 5
    时间: 2020-1-4 23:24
    大小: 147.65KB
    上传者: 微风DS
    基于VHDL语言的浮点乘法器的硬件实现……
  • 所需E币: 5
    时间: 2020-1-4 23:31
    大小: 148KB
    上传者: 二不过三
    VHDL语言学习总结……
  • 所需E币: 3
    时间: 2020-1-4 23:31
    大小: 32.06KB
    上传者: 二不过三
    VHDL语言的课件……
  • 所需E币: 1
    时间: 2019-7-29 16:29
    大小: 1.2MB
    VHDL语言详解主讲:张晓磊内容提要VHLD概述;VHLD的一些基本概念;VHDL的数据对象,数据类型及类型转换,运算符等;VHDL的顺序描述语句;VHDL的并行描述语句;VHDL的子程序结构;VHDL库、程序包和配置;VHDL的预定义属性;VHDL的重载;VHDL结构体的描述方式。