FPGA学习
liuyuebuyu
这个作者很懒,什么都没留下…
展开
-
简易频率计 的设计与验证
设计一个基于等精度测量原理的简易频率计,对输入的未知时钟信号做频率测量,并将测量结果在数码管上显示。原创 2022-04-06 15:46:48 · 1195 阅读 · 0 评论 -
串口RS232
设计并实现基于 RS232 的串口收、发功能模块,并完成串口数据回环实验。原创 2022-04-05 11:15:45 · 1113 阅读 · 0 评论 -
VGA显示器字符显示
在VGA显示器中心位置显示金色四个汉字,字符外的背景颜色为黑色,每个汉字大小为56*56,字模点阵为64*64,VGA显示模式为640*480@60。原创 2022-04-04 16:50:22 · 780 阅读 · 0 评论 -
VGA显示器驱动设计与验证
这里利用verilog语言编写一个VGA显示驱动控制器,使用FPGA开发板驱动VGA显示器进行一个十种颜色等宽彩条的显示,VGA的显示模式为640x480@60,640表示在一个完整的行扫描周期中,有效显示图像每一行有640个像素点,480表示每一帧图像有480行,60表示在该显示模式下,VGA显示器每秒刷新60次,即每秒显示60帧图像。在该模式下,行扫描周期为800,场扫描周期为525,其时钟为25.175MHz。时钟频率=行x场x帧。原创 2022-04-01 16:39:27 · 1165 阅读 · 1 评论 -
FIFO IP 核的调用
FIFO(First in first out 即先入先出),是一种数据缓冲器,用来实现数据先入先出的读写方式。FIFO存储器主要是作为缓存,应用在同步时钟系统和异步时钟系统中,在很多的设计中都会使用;如:多比特数据做跨时钟域处理,前后带宽不同步等都用到了FIFO。FIFO 根据读写时钟是否相同,分为 SCFIFO(同步 FIFO)和 DCFIFO(异步 FIFO)。要完成FIFO的写操作需要三路信号:时钟,请求,数据写入信号。要完成FIFO的读操作需要三路信号:时钟信号,有效读请求信号。首先是同步FI原创 2022-03-31 11:21:25 · 1756 阅读 · 0 评论 -
RAM IP 核的调用
RAM是随机存取存储器,是一个易失性存储器,其工作时可以对任何一个指定的地址写入或读出数据,这是ROM所并不具备的功能,ALTERA推出单端口和双端口的RAM IP核。...原创 2022-03-30 17:32:58 · 417 阅读 · 0 评论 -
ROM IP 核的调用
ROM IP核的地址与数据是否对应,给它地址,能否读取到对应的数据。有两点目标,一是以0地址为开始地址,255地址为结束地址,按照该顺序对存储单元内部的数据进行读取,然后将读取的数据在数码管上进行显示。为了方便观察,将每个数据显示时间设为200ms,然后将每个数据与mif文件进行对比,若对比的地址和数据是对应的,则ROM IP 核可以进行正常的存储。二是验证随机读取的正确性,引入两个变量key1,key2,当按键key1按下时,对ROM写入一个随机但有效的地址A1,然后对A1进行有效的读取,然后将A1所对应原创 2022-03-29 16:06:12 · 856 阅读 · 0 评论 -
PLL-IP核的调用
IP即知识产权,随着设计规模的增大,复杂度提高,使用I核可以提高开发效率,减少设计和调试时间,加速开发进程,降低开发成本。PLL(Phase Locked Loop,即锁相环)是最常用的IP核之一,其性能强大,可以对输入到FPGA的时钟信号进行任意分频、倍频、相位调整、占空比调整,从而输出一个期望时钟。锁相环是一个反馈系统,输入到锁相环的时钟是一个参考时钟,然后参考时钟和比较时钟同时输入到鉴频鉴相器(用于比较频率或者相位), 将比较的值传入到环路滤波器,滤掉高频噪声,然后传入到压控振荡器,输入到压控振荡器的原创 2022-03-28 11:01:27 · 1091 阅读 · 0 评论 -
数码管动态显示——verilog
采用动态扫描的方式来实现六位八段数码管的动态显示,一是利用人眼的视觉暂留特性,二是利用数码管的余晖效应,显示内容为十进制的0到999999,每0.1s加1。输入信号只要时钟和复位信号,输出信号为串行数据ds,始能信号oe,移位寄存器时钟shcp,存储寄存器时钟stcp。数据产生模块输入有时钟和复位,输出是要产生的数据,位宽为20位,小数点point[5:0],符号位sign,始能信号seg_en。数码管动态显示模块输入有时钟,复位,以及数据产生模块输出的数据,以及小数点point[5:0],原创 2022-03-23 19:30:00 · 4873 阅读 · 0 评论 -
数码管静态显示
目标是实现000000到FFFFFF的静态显示,每个字符的显示时间是0.5s。数码管是一种半导体发光器件,其基本单元是发光二极管。这里用到六位八段数码管且为共阳极,即低电平被点亮,在十六进制格式中最高位对应小数点位,最低位为a位。 待显示内容 段码(二进制格式) 段码(十六进制格式) a b c d e f原创 2022-03-22 20:00:00 · 2233 阅读 · 0 评论 -
无源蜂鸣器驱动实验
蜂鸣器按其结构可分为电磁式蜂鸣器和压电式蜂鸣器两种类型;蜂鸣器按其是否带有信号源又分为有源蜂鸣器和无源蜂鸣器。 有源蜂鸣器的内部装有集成电路,不需要音频驱动电路,只需要接通直流电源就能直接发出声响;而无源蜂鸣器只有外加音频驱动信号才能发出声响。 无源蜂鸣器与有源蜂鸣器不同,因其内部不带震荡源,所以其无法像有源蜂鸣器那样直接用直流信号驱动,这里需要使用PWM方波才能驱动其发声。输入不同频率和占空比的PWM方波发出的声音是不同的,其中频率对音调有影响,占空比对音量大小有影响。 音调 .原创 2022-03-21 10:54:21 · 2743 阅读 · 0 评论 -
【无标题】
图像压缩算法可以分为无损压缩算法和有损压缩算法。读者可以参考[1],[2],[12]对这个主题进行全面的回顾。在这里,我们提到最相关的压缩方法,稍后将其用于与我们的方法进行比较。无损压缩可以在不丢失任何信息的情况下完全恢复图像。典型的无损压缩算法,例如FELICS[13]、LOCO-I[14]、[15]和CALIC[16],采用基于上下文的预测框架[17],该框架基于每个像素的上下文来预测每个像素,然后利用熵编码技术对预测误差进行编码。在我们的压缩算法中,我们使用了类似的框架来压缩子图像。主要区别在于,翻译 2022-03-16 21:18:42 · 160 阅读 · 0 评论 -
状态机——可乐机自动售卖机可找零的实现
可乐定价为2.5元/瓶,投币可投0.5元或者1元硬币,若投入不超过2.5元,则不出可乐,若投入3元则可以出一瓶可乐,还要找回0.5元。与之前相比,这里的输入变量有时钟复位,一元输入pi_money_one,0.5元输入pi_money_half,输出为可乐po_cola和找零po_money;输入只有两种情况,0.5元,1元;输出有三个:不出可乐/不找零,出可乐/找零,出可乐/找零状态有五个:0,0.5,1,1.5,2,2.5,3这里用00表示不投钱,01表示投入0.5元,10表示投入1元,还用原创 2022-03-16 21:12:28 · 1845 阅读 · 0 评论 -
状态机——简单自动售卖机的实现
状态机也称为同步有限状态机,分为more型状态机(最后的输出只与当前状态有关,而与输入无关)和mealy型状态机(最后的输出不仅与当前状态有关,还与输入有),适合用来表示事件发生有先后顺序的情况。这里以可乐机为背景,可乐售价为3元/瓶,一元一元投币,每投入到3元自动出一瓶可乐。这里设置的输入信号包括时钟sys_clk,复位sys_rst_n以及投币信号pi_money,输出为是否有可乐投出po_cola。首先绘制一个状态转移图,在状态转移图上可以清楚地表达出各状态的输入输出,跳转的条件和功能,一个完原创 2022-03-16 20:16:03 · 2727 阅读 · 0 评论 -
微位移:一种高效的硬件图像压缩算法
在本文中,我们提出了一种称为微移位的有损图像压缩算法。我们采用算法-硬件协同设计方法,产生一种硬件友好的低功耗压缩方法。在我们的方法中,图像首先被微移位,然后子量化值被进一步压缩。利用自然图像的空间相关性,提出了快速和MRF模型两种恢复位深度的方法。这两种方法都可以逐步解压缩图像。平均而言,我们的压缩算法可以将图像压缩到每像素1.25位,其质量在峰值信噪比(PSNR)和结构相似性(SSIM)方面都优于最先进的片上压缩算法。然后,我们提出了一种硬件结构,并在FPGA上实现了该算法。ASIC设计的结果进一步验证翻译 2022-03-15 21:18:32 · 511 阅读 · 0 评论 -
呼吸灯——verilog 实现
小灯在一段时间里面实现由完全熄灭到完全点亮,再由完全点亮到完全熄灭,整个过程就像呼吸一样。呼吸灯的呼吸效果分为两个过程,一是由完全熄灭到完全点亮,二是由完全点亮到完全熄灭。这里通过PWM的占空比来控制LED的亮灭程度。灯是定电平点亮,高电平熄灭,所以在第一个周期内,保持一个周期的高电平,即灯完全熄灭,第二个周期内保持9/10个周期高电平,1/10个周期的低电平,即灯点亮了一丢丢,第三个周期内保持8/10个周期高电平,2/10个周期的低电平,依次类推,第11个周期内保持低电平,即灯完全被点亮,完全点亮到完全熄原创 2022-03-15 21:06:00 · 1399 阅读 · 0 评论 -
verilog语言实现流水灯实验
目的是实现FPGA开发板上的四个LED灯依次点亮,每次只点亮一个,每个点亮时间是0.5s。输入有时钟和复位信号,一路输出连接到FPGA开发板上的四个LED灯。设置输出信号位宽四位宽,刚好一个位宽控制一个LED灯亮灭。需要设置一个中间变量计数器,初值为0,因为50MHz晶振,0.5秒计数为25000000,从0开始计数,所以计数器计数最大值为24_999_999,当计数器在复位信号无效或计数到最大值时,对计数器进行清零操作。再设置一个计数标致信号,在计数器计数到最大值时,拉高一个时钟周期的高电平,其他时刻保持原创 2022-03-15 19:44:59 · 2505 阅读 · 0 评论 -
触摸按键控制LED灯
这里采用电容式触摸按键,电容式触摸按键主要由按键IC部分和电容部分构成;按键IC用于将电容的变化转换为电信号;电容部分指的是由电容极板、地、隔离区等组成触摸按键的电容环境。电容式触摸按键主要是为了弥补电阻式触摸按键耐用性较差而产生的。这里通过实验工程,利用触摸按键控制FPGA开发版上LED灯的亮灭,LED灯初始处于熄灭状态,当按下触摸按键时,LED灯被点亮,再次按下触摸按键时,LED灯熄灭。输入信号有时钟信号,复位信号,以及按键触摸信号,一路输出信号到开发版上的led灯。触摸按键信号在未被按下时是处原创 2022-03-15 10:33:09 · 5769 阅读 · 0 评论 -
按键消抖模块
利用软件消除按键抖动的影响原创 2022-03-12 15:30:25 · 1327 阅读 · 0 评论 -
分频器——奇分频
设计实现奇分频,这里实现五分频。与偶分频一样,奇分频的输入信号只有时钟信号和复位信号,以及一路输出信号连接到开发板 的扩展IO口。有两种方法实现分频,一是分频,而是降频。首先采用分频的方法,五分频计数值应该计数到最大值4。输出信号先为低电平,当计数到2时,拉高,到4时拉低,此时采用的是上升沿采样,此时的占空比不是50%。采用下降沿时占空比也不是50%,所以进行改进。将上升沿采样得到的信号与下降沿采样得到的信号进行或运算,此时得到的输出信号满足占空比为50%的要求。编写代码:..原创 2022-03-12 14:03:51 · 684 阅读 · 0 评论 -
分频器——偶分频 verilog语言
分频器是数字系统设计中最常见的基本电路之一。所谓“分频”,就是把输入信号的频率变成成倍数地低于输入频率的输出信号。分频器分为偶数分频器和奇数分频器。分频器和计数器非常相似。 输入信号是时钟和复位信号,输出信号输出到FPGA开发板的扩展IO口,然后我们可以用示波器检测它的频率,以此来验证结果。 这里设计实现一个分频器实现系统时钟的六分频。定义一个计数器cnt,这里不需要计数器计数0到5六个数,只需要计数器计数0,1,2三个数就可以。在复位信号无效的情况下,每当计...原创 2022-03-11 17:00:32 · 576 阅读 · 0 评论 -
Verilog 语言 ——计数器
计数是一种最简单基本的运算,计数器就是实现这种运算的逻辑电路,计数器在数字系统中主要是对脉冲的个数进行计数,以实现测量、计数和控制的功能, 同时兼有分频功能。 计数器在数字系统中应用广泛,如电子计算机的控制器中对指令地址进行计数,以便顺序取出下一条指令,在运算器中作乘法、除法运算时记下加法、减法次数,又如在数字仪器中对脉冲的计数等等。 通过设计实现计数间隔为1s的计数器,通过使FPGA开发板上的LED灯在前0.5s处于点亮状态,后0.5s处于熄灭状态来验证。 输...原创 2022-03-10 16:59:05 · 3230 阅读 · 0 评论 -
阻塞赋值与非阻塞赋值
阻塞赋值的赋值号用“=”表示,对应的电路结构往往与触发沿没有关系,只与输入电平的变化有关系。它的操作可以认为是只有一个步骤的操作,即计算赋值号右边的语句并更新赋值号左边的语句,此时不允许有来自任何其他Verilog语句的干扰,直到现行的赋值完成,才允许下一条的赋值语句的执行。 串行块(begin-end)中,各条阻塞赋值语句将以它们在顺序块中的排列次序依次执行。 非阻塞赋值的赋值号用“<=”表示,对应的电路结构往往与触发沿有关系,只有在触发沿的时刻才能进行非阻塞赋值。它的...原创 2022-03-09 22:08:52 · 432 阅读 · 0 评论 -
时序逻辑——寄存器
组合逻辑存在竞争冒险,这将使得电路系统处在一个非常不稳定的状态。然而时序电路可以很好地避免这一缺点,从而很好地提高系统的稳定性。 寄存器具有存储功能,一般是由D触发器构成,由时钟脉冲控制,每个D触发器能够存储一位二进制码。 D触发器的工作原理:在一个脉冲信号(一般为晶振产生的时钟脉冲)上升沿或下降沿的作用下(一般使用上升沿),将信号从输入端D送到输出端Q,如果时钟脉冲的边沿信号未出现,即使输入信号改变,输出信号仍然保持原值,且寄存器拥有复位清零功能,其复位又分为同步...原创 2022-03-09 21:26:20 · 1018 阅读 · 0 评论 -
verilog语言实现全加器
全加器是两个半加器组合而成,定义两个加数为,,进位,和半加器一样,使用LED灯作为求和结果和进位信号。 相当于三个1bit的加数,先实现其中两个数的想加,输出和,再加第三个数。第一个半加器输入,信号,输出和信号。再将输出的信号和进位信号作为第二半加器的输入此时第二个半加器输出和信号,此时的就是最终的求和信号。最后将输出的两个进行或运算得到最终的。 任取一点,由仿真信号知当为1,0,1想加时,求和位为0,进位位为1,与仿真结果相吻合,反仿真验证通过...原创 2022-03-09 20:23:38 · 3417 阅读 · 0 评论 -
初学者——半加器
加法器是数字电路中经常用到的一种基本器件,主要用于两个数或者多个数的加和,加法器又分为半加器(half adder)和全加器(full adder)。 半加器电路是指对两个输入数据位相加,输出一个结果位和进位,没有进位输入的加法器电路。是实现两个一位二进制数的加法运算电路。 全加器可以由两个半加器组合而成,除了加数和被加数加和外还要加上上一级传进来的进位信号。 定义FPGA开发板上的按键key1,key2为两个加数,使用两个LED灯为输出,其中...原创 2022-03-09 19:37:10 · 2474 阅读 · 1 评论