fpga

[HDMI]FPGA上实现HDMI(1)

≡放荡痞女 提交于 2020-02-05 00:56:28
HDMI是一个数字视频接口,通过FPGA可以很快的实现驱动。下面可以看到HDMI是怎么工作的. connector 标准的HDMI连接器称为"A型",有19个引脚,其中8个引脚是需要注意的,组成了四个差分对TMDS(Transition Min imized Differential Signaling)[过度调制差分信号]。 TMDS data2+ and data2- TMDS data1+ and data1- TMDS data0+ and data0- TMDS clock+ and clock- 我们链接HDMI和FPGA很简单,只要使用其中的4对差分信号就可以了。 video signal 现在需要插入一个640x480 RGB 24bpp(一个像素需要的bit数) @ 60Hz。所以一帧数据需要307200像素,而且每个像素需要24bit(RGB各8bit),在60Hz中HDMI链路中有用信号信号的速率是0.44Gbps。同时在视频信号中存在“off-area”区域,在所有的HDMI驱动控制中是非常有用的。640x480格式的实际上需要800x525格式。 TMDS signals FPGA的TMDS驱动有4对不同的差分对。TMDS时钟是像素时钟 ,所以这里使用的是25MHz。其他3个差分对转化输出是红、绿、蓝信号。 但是事实上每一bit都会更复杂,HDMI要求使用

【工程源码】基于FPGA的多通DDS道信号发生器设计与实现

本小妞迷上赌 提交于 2020-02-04 04:28:14
按键描述: 功能按键(S0):正常情况下按一下,进入ACM9767模块的CH1通道波形选择, 按第二下,进入ACM9767模块的CH2通道波形选择,按第三 下,进入波形频率设置模式,按第四下,恢复正常模式 按键加(S1) :正常模式无作用;波形选择模式下,顺序切换波形,频率 设置模式下,顺序切换频率(增加) 按键减(S2) :正常模式无作用;波形选择模式下,倒序切换波形,频率 设置模式下,倒序切换频率(降低) 有三种波形可以供选择(正弦波,方波,三角波),默认CH1是正弦波,CH2是 方波,频率都是1kHz. 频率的切换有8个固定的频率分别为:1kHz, 10kHz, 50kHz, 100kHz, 500kHz,1MHz,5MHz,10MHz. 当在频率设置模式下,按键加(S1)到最大频率(10MHz),继续按此按键 频率会回到最小频率(1kHz);按键减(S2),功能以此类推, 例如我想设置通道1(CH1)为10k的方波:先按一次功能按键(S0),进入 ACM9767模块的CH1通道波形选择模式(默认CH1是正弦波) ,此时按一次按键加(S1),就会切换到方波,此时再按一 次功能按键(S0),会进入ACM9767模块的CH2通道波形选择 模式,但是我们是想设置频率,所以需要再按一次功能按 键(S0),进入波形频率设置模式(默认频率是1kHz),此 时按一次按键加(S1)

Visual studio 14.0 LNK2001 (unresolved external symbol ) with OpenCL

一笑奈何 提交于 2020-02-02 16:29:02
问题 I am new to OpenCL. When I tried the examples from the website of Altera, I got several LNK2001 errors as follows Severity Code Description Project File Line Error LNK2001 unresolved external symbol __imp_sprintf hello_world C:\Users\S_KW\OpenCL\hello_world\alteracl.lib(acl_hal_mmd.obj) 1 Error LNK2001 unresolved external symbol __imp___iob_func hello_world C:\Users\S_KW\OpenCL\hello_world\alteracl.lib(acl_hal_mmd.obj) 1 Error LNK2001 unresolved external symbol __imp_fprintf hello_world C:

Visual studio 14.0 LNK2001 (unresolved external symbol ) with OpenCL

我的未来我决定 提交于 2020-02-02 16:27:57
问题 I am new to OpenCL. When I tried the examples from the website of Altera, I got several LNK2001 errors as follows Severity Code Description Project File Line Error LNK2001 unresolved external symbol __imp_sprintf hello_world C:\Users\S_KW\OpenCL\hello_world\alteracl.lib(acl_hal_mmd.obj) 1 Error LNK2001 unresolved external symbol __imp___iob_func hello_world C:\Users\S_KW\OpenCL\hello_world\alteracl.lib(acl_hal_mmd.obj) 1 Error LNK2001 unresolved external symbol __imp_fprintf hello_world C:

WiKON纸上电路

余生颓废 提交于 2020-02-01 03:04:49
凭借嵌入在印刷电子领域的技能,WiKON不断突破材料和工艺领域的极限。我们能够提供引人入胜的新技术并开拓以前未开发的应用领域。 结合使用丝网印刷和平版印刷油墨,可以为基于纸质基材的“一次性”和一次性应用提供极具成本效益的电路和传感器解决方案。 “纸上线路” 是可批量生产且高度可定制的,具有较低的工具成本和可生物降解的性能, 是在各种应用中实现真正可具实施性的令人兴奋的解决方案。 联系我们 kh_hsiah@126.com,讨论您的下一个产品如何从“纸上电路”技术中受益。 来源: CSDN 作者: Embeded_FPGA 链接: https://blog.csdn.net/Embeded_FPGA/article/details/103592912

FPGA计数器学习

喜你入骨 提交于 2020-01-31 14:54:15
FPGA计数器学习 通过led每500ms翻转一次,来显示我们的代码执行情况。 对系统时钟进行计数来实现。我们设置系统时钟为50MHz,对应的周期为20ns。 让计数器记满500ms,则需要计数次数为500 000 000/20=25 000 000 可以看出25 000 000需要25位 首先创建工程文档 然后新建counter.v文件 module counter ( Clk50M , Rst_n , led ) ; // _n表示低电平有效 input Clk50M ; // 系统时钟 50M input Rst_n ; // 全局复位,低电平复位 output reg led ; reg [ 24 : 0 ] cnt ; // 用always块设计一下时序逻辑 // 控制计数 always@ ( posedge Clk50M or negedge Rst_n ) // 时序逻辑里比较常见的写法,将时钟上升沿作为敏感信号或者复位信号的下降沿作为敏感信号,只要其中发生变化,就执行always里面的内容 if ( Rst_n == 1 'b0 ) // 开发板子上按键默认情况下是高电平,当按键被按下之后,就变成了低电平,所以开发板的复位状态是为 0 的时候。 cnt <= 25 'd0 ; else if ( cnt == 25 'd24_999_999 ) // 由于记数是从

1 FPGA时序约束理论篇之建立保持时间

旧时模样 提交于 2020-01-30 05:14:48
周期约束理论   首先来看什么是时序约束,泛泛来说,就是我们告诉软件(Vivado、ISE等)从哪个pin输入信号,输入信号要延迟多长时间,时钟周期是多少,让软件PAR(Place and Route)后的电路能够满足我们的要求。因此如果我们不加时序约束,软件是无法得知我们的时钟周期是多少,PAR后的结果是不会提示时序警告的。   周期约束就是告诉软件我们的时钟周期是多少,让它PAR后要保证在这样的时钟周期内时序不违规。大多数的约束都是周期约束,因为时序约束约的最多是时钟。   在讲具体的时序约束前,我们先介绍两个概念,在下面的讲解中,会多次用到: 发起端/发起寄存器/发起时钟/发起沿:指的是产生数据的源端 接收端/接收寄存器/捕获时钟/捕获沿:指的是接收数据的目的端 建立/保持时间   讲时序约束,这两个概念要首先介绍,因为我们做时序约束其实就是为了满足建立/保持时间。对于DFF的输入而言, 在clk上升沿到来之前,数据提前一个最小时间量“预先准备好”,这个最小时间量就是建立时间; 在clk上升沿来之后,数据必须保持一个最小时间量“不能变化”,这个最小时间量就是保持时间。 建立和保持时间是由器件特性决定了,当我们决定了使用哪个FPGA,就意味着建立和保持时间也就确定了。Xilinx FPGA的setup time基本都在0.04ns的量级,hold time基本在0.2ns的量级

6 FPGA时序约束理论篇之xdc约束优先级

亡梦爱人 提交于 2020-01-30 04:10:51
xdc约束优先级   在xdc文件中,按约束的先后顺序依次被执行,因此,针对同一个时钟的不同约束,只有最后一条约束生效。   虽然执行顺序是从前到后,但优先级却不同;就像四则运算一样,±x÷都是按照从左到右的顺序执行,但x÷的优先级比±要高。 时序例外的优先级从高到低为: Clock Groups (set_clock_groups) False Path (set_false_path) Maximum Delay Path (set_max_delay) and Minimum Delay Path (set_min_delay) Multicycle Paths (set_multicycle_path) set_bus_skew 约束并不影响上述优先级且不与上述约束冲突。原因在于set_bus_skew并不是某条路径上的约束,而是路径与路径之间的约束。   对于同样的约束,定义的越精细,优先级越高。各对象的约束优先级从高到低为: ports->pins->cells clocks。   路径声明的优先级从高到低为: -from -through -to -from -to -from -through -from -through -to -to -through 优先考虑对象,再考虑路径。   Example1: set_max_delay 12 -from [get

7 FPGA时序约束实战篇之梳理时钟树

不羁岁月 提交于 2020-01-30 03:24:33
行万里路–时序约束实战篇   我们以Vivado自带的 wave_gen 工程为例,该工程的各个模块功能较为明确,如下图所示。为了引入异步时钟域,我们在此程序上由增加了另一个时钟– clkin2 ,该时钟产生脉冲信号 pulse , samp_gen 中在 pulse 为高时才产生信号。 下面我们来一步一步进行时序约束。 1. 梳理时钟树   我们首先要做的就是梳理时钟树,就是工程中用到了哪些时钟,各个时钟之间的关系又是什么样的,如果自己都没有把时钟关系理清楚,不要指望综合工具会把所有问题暴露出来。   在我们这个工程中,有两个主时钟,四个衍生时钟,如下图所示。   确定了主时钟和衍生时钟后,再看各个时钟是否有交互,即clka产生的数据是否在clkb的时钟域中被使用。   这个工程比较简单,只有两组时钟之间有交互,即: clk_rx 与 clk_tx clk_samp 与 clk2 其中, clk_rx 和 clk_tx 都是从同一个MMCM输出的,两个频率虽然不同,但他们却是同步的时钟,因此他们都是从同一个时钟分频得到(可以在Clock Wizard的Port Renaming中看到VCO Freq的大小),因此它们之间需要用 set_false_path 来约束;而 clk_samp 和 clk2 是两个异步时钟,需要用 asynchronous 来约束。 完成以上两步

8 FPGA时序约束实战篇之主时钟约束

北城余情 提交于 2020-01-30 01:02:33
约束主时钟   在这一节开讲之前,我们先把 wave_gen 工程的 wave_gen_timing.xdc 中的内容都删掉,即先看下在没有任何时序约束的情况下会综合出什么结果? 对工程综合并Implementation后,Open Implemented Design,会看到下图所示内容。   可以看到,时序并未收敛。可能到这里有的同学就会有疑问,我们都已经把时序约束的内容都删了,按我们第一讲中提到的“因此如果我们不加时序约束,软件是无法得知我们的时钟周期是多少,PAR后的结果是不会提示时序警告的”,这是因为在该工程中,用了一个MMCM,并在里面设置了输入信号频率,因此这个时钟软件会自动加上约束。   接下来,我们在tcl命令行中输入 report_clock_networks -name main ,显示如下:   可以看出,Vivado会自动设别出两个主时钟,其中clk_pin_p是200MHz,这个是直接输入到了MMCM中,因此会自动约束;另一个输入时钟clk_in2没有约束,需要我们手动进行约束。 或者可以使用 check_timing -override_defaults no_clock 指令,这个指令我们之前的内容讲过,这里不再重复讲了。   在tcl中输入 create_clock -name clk2 -period 25 [get_ports clk_in2]