fpga

基于FPGA的UART串口通信实验(VHDL语言实现)

限于喜欢 提交于 2019-11-29 06:54:01
一、前言: 最近在做UART串口通信的相关实验时,在网上查了很多资料,发现网上的大部分文章只注重理论,不注重代码,很多代码有错误不说,而且难以理解。故在完成此实验后,起了写一篇博客的心思,以供有想做相关实验且基础比较薄弱的朋友参阅。 二、实验要求: (1)实现和 PC 双向通信 (2)可通过 FPGA 的键盘扫描,在开发板上设置控制参数,输入发送内容 (3)通信波特率可调 (4)LCD 液晶屏实现菜单、接收到的数据显示 注:关于UART串口通信实验的相关理论网上很多,而且都很详细,我在这里都不赘余了,我的重点是代码及其分析。本次使用到的FPGA开发板为: Cyclone Ⅱ EP2C5Q208C8 核心的MAGIC3200_EP2C5 开发板。 三、引脚分配: 四、代码及其分析: 注:此处代码有两个文件,一个是主文件,另外一个是按键消抖文件。 先上按键消抖文件,此处代码比较好理解。 ------------------------------------------------按键消抖文件--------------------------------------------------------- library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC

[原创]FPGA 实现任意时钟分频

橙三吉。 提交于 2019-11-29 04:56:19
有时在基本模块的设计中常常会使用到时钟分频,时钟的偶分频相对奇分频来说比较简单易于理解,但是奇分频的理念想透彻后也是十分简单的,本文就针对奇分频做一个记录并列出了 modelsim 的仿真结果。 奇分频 其实现很简单,主要为使用两个计数模块分别计数,得到两个波形进行基本与或操作完成。一个 5 分频的参考代码部分如下。 module div_freq( iCLK, iRST_n, oCLK ); input wire iCLK; input wire iRST_n; output oCLK; parameter N = 4'd5; reg clk_p; reg [3:0] cnt_p; always @ (posedge iCLK or negedge iRST_n) begin if (!iRST_n) cnt_p <= 4'd0; else if (cnt_p == N - 1) cnt_p <= 4'd0; else cnt_p <= cnt_p + 1'b1; end always @ (posedge iCLK or negedge iRST_n) begin if (!iRST_n) clk_p <= 1'b0; else if (cnt_p == (N - 1) / 2) clk_p <= ~clk_p; else if (cnt_p == N - 1) clk_p <

Approximate e^x

橙三吉。 提交于 2019-11-28 21:35:27
问题 I'd like to approximate the e x function. Is it possible to do so using multiple splines type based approach? i.e between x 1 and x 2 , then y 1 = a 1 x + b 1 , between x 2 and x 3 , then y 2 = a 2 x + b 2 etc This is for dedicated fpga hardware and not a general purpose CPU. As such I need to create the function myself. Accuracy is much less of a concern. Furthermore I can't really afford more than one multiplication circuit and/or multiple shifts/adders. Also I want something much smaller

How can the linux kernel be forced to enumerate the PCI-e bus?

风流意气都作罢 提交于 2019-11-28 17:31:45
问题 Linux kernel 2.6 I've got an fpga that is loaded over GPIO connected to a development board running linux. The fpga will transmit and receive data over the pci-express bus. However, this is enumerated at boot and as such, no link is discovered (because the fpga is not loaded at boot). How can I force re-enumeration of the pci-e bus in linux? Is there a simple command or will I have to make kernel changes? I need the capability to hotplug pcie devices. 回答1: I wonder what platform you are on: A

FPGA面试题

♀尐吖头ヾ 提交于 2019-11-28 08:37:55
FPGA面试题——网上资料整理 2019-08-23 21:22:30 1:什么是同步逻辑和异步逻辑?(汉王) 同步逻辑是时钟之间有固定的因果关系。 异步逻辑是各时钟之间没有固定的因果关系。 〔补充〕: 同步时序逻辑电路的特点:各触发器的时钟端全部连接在一起,并接在系统时钟端,只有当时钟脉冲到来时,电路的状态才能改变。改变后的状态将一直保持到下一个时钟脉冲的到来,此时无论外部输入 x 有无变化,状态表中的每个状态都是稳定的。 异步时序逻辑电路的特点:电路中除可以使用带时钟的触发器外,还可以使用不带时钟的触发器和延迟元件作为存储元件,电路中没有统一的时钟,电路状态的改变由外部输入的变化直接引起。 2:同步电路和异步电路的区别: 同步电路:存储电路中所有触发器的时钟输入端都接同一个时钟脉冲源,因而所有触发器的状态的变化都与所加的时钟脉冲信号同步。 异步电路:电路没有统一的时钟,有些触发器的时钟输入端与时钟脉冲源相连,这有这些触发器的状态变化与时钟脉冲同步,而其他的触发器的状态变化不与时钟脉冲同步。 3:时序设计的实质: 电路设计的难点在时序设计,时序设计的实质就是满足每一个触发器的建立/保持时间的要求。 4:建立时间与保持时间的概念? 建立时间:触发器在时钟上升沿到来之前,其数据输入端的数据必须保持不变的时间。 保持时间:触发器在时钟上升沿到来之后,其数据输入端的数据必须保持不变的时间

FPGA引入外部时钟

空扰寡人 提交于 2019-11-28 05:07:14
参考文章链接:https://www.mianbaoban.cn/blog/452191-407048.html 在有些项目设计中,为了方便,将外部时钟信号不加处理直接引入FPGA芯片使用,有时候会导致意想不到的BUG发生,而且这种BUG是不可重复的。 将外部时钟直接连接到FPGA芯片的普通I/O管脚,而非专用时钟输入管脚,将会导致下面问题: 1.由于该时钟信号是通过各种长短布线资源,甚至经过LUT连接才能到达其驱动的各个寄存器,因此该时钟信号从进入FPGA管脚,到传递到各个寄存器的时钟输入端,其时间是很难保持相同的,距离的远近直接决定了该时钟信号的传输延迟(时钟延迟)。而这个传输延迟的差值,可能达到几纳秒甚至十几纳秒。这个差值,将直接影响数据的建立和保持时间,造成时序无法收敛,从而导致设计失败。 2.使用非全局布线资源,时钟信号在布线的过程中更容易受到周围信号的干扰。导致时钟质量变差。什么意思呢?打个比方,一只小鸟和一只兔子共同穿越一个满是灰尘的工地。工地上到处都是灰尘。小鸟从空中飞过,不直接与灰尘接触,因此基本不会沾到灰尘,因为它有自己独立的路线和空间。而兔子因为不会飞,因此只能跑着从工地中穿过,那么,不可避免的,兔子的脚上会沾上灰尘。导致当兔子穿过这个工地的时候,早已由小白兔变成了小灰兔。时钟信号也是如此,全局时钟资源有专门的时钟路径,在自己的空间走线

TX2 PCIE SDI

若如初见. 提交于 2019-11-28 04:58:51
PCIE是用FPGA写的 在TX2上可以把PCIE当作一个从设备(不用管FPGA),给它分配一段物理地址 SDI信号是串行的,PCIE会把SDI数据转为RGB,每次收完一帧数据后PCIE置接收完成位,TX2检测该标志位再去读数据 FPGA接收停止位的值:帧频*60*分钟数,PCIE每转一帧进行计数,超过帧数停止发送 来源: https://www.cnblogs.com/yangxingsha/p/11392597.html

教您使用FPGA来画铅笔画

a 夏天 提交于 2019-11-28 03:46:58
教您使用FPGA来画铅笔画 1 概要 灰度级(8bit 0到255 )代表从黑到白,中间的介于黑白之间。对比度比较明显的灰度级分布比较均匀,二值图像是灰度图像的特例。 本节没有多大的知识难度,主要在于灰度的阈值调节来形成二值灰度图像,经过此节我们也可以使用FPGA阈值调节来绘出油笔画或者钢笔画。 本节主要以示例图像为主供大家欣赏。 2 FPGA实现 图1 实现铅笔画FPGA模块框图 图1中,我们输入的是彩色图像(RGB格式),经过串口传图进入FPGA,通过Ycbcr模块后变成Ycbcr格式图像,其中“Y”表示明亮度(Luminance或Luma),也就是灰阶值。 最后进行阈值比较后输出二值图像(Binary image)或者更多值图像。 FPGA源码: //------------------------------------------------ // THRESHOLD //------------------------------------------------ parameter THRESHOLD = 8 'd 100 ; //------------------------------------------------ //Gray image threshold processing //----------------------------------

C-to-hardware compiler (HLL synthesis) [closed]

≡放荡痞女 提交于 2019-11-28 03:29:25
I try to make an survey/history of all C-to-hardware compilers. For all that dont know them: they take C code then translate it into some hardware description language (like VHDL or Verilog), which then can be used to generate hardware (usually it gets mapped to an FPGA - but I am not limited to that, ASIC as target would be fine too). I already have quite collected some (+ info about them). So my question is: Do you know any other compilers (and if so have any references, pointers, information about them)? My list so far: AutoESL Bach-C (Sharp) C2H (Altera) C2R (Cebatech) C2Verilog

基于FPGA/CPLD设计与实现UART

ⅰ亾dé卋堺 提交于 2019-11-28 02:38:10
http://hi.baidu.com/hieda/blog/item/750eac88fcf5d790a5c2727e.html - 基于FPGA/CPLD设计与实现UART -- 摘 要:UART是广泛使用的串行数据通讯电路。本设计包含UART发送器、接收器和波特率发生器。设计应用EDA技术,基于FPGA/CPLD器件设计与实现UART。 关键词:FPGA/CPLD;UART;VHDL UART(即Universal Asynchronous Receiver Transmitter 通用异步收发器)是广泛使用的串行数据传输协议。UART允许在串行链路上进行全双工的通信。 --- 串行外设用到RS232-C异步串行接口,一般采用专用的集成电路即UART实现。如8250、8251、NS16450等芯片都是常见的UART器件,这类芯片已经相当复杂,有的含有许多辅助的模块(如FIFO),有时我们不需要使用完整的UART的功能和这些辅助功能。或者设计上用到了FPGA/CPLD器件,那么我们就可以将所需要的UART功能集成到FPGA内部。使用VHDL将UART的核心功能集成,从而使整个设计更加紧凑、稳定且可靠。本文应用EDA技术,基于FPGA/CPLD器件设计与实现UART。 一 UART简介 1 UART结构 --- UART主要有由数据总线接口、控制逻辑、波特率发生器