fpga
key_d
分享一些fpga的开发
展开
-
PLL锁相环
通过频率较低的片外晶振倍频得到频率较高的时钟信号。原创 2022-01-06 23:31:11 · 1933 阅读 · 1 评论 -
简易的串口收发ram
我们使用之前编写的异步信号串口以及双端口ram(ip核)搭建一个简单的存储器顶层模块如图所示,我们首先需要将数据写入ram对应的地址中,然后通过按键控制模块,逐位的将ram中存储的数据进行输出。这里还添加了按键消抖模块来模拟真实环境,以及最后上板的话可以消除亚稳态问题。在顶层中将各个模块例化,并且添加dram双端口,最后生成的电路图如1所示。最后仿真中可以看到,按键产生的随机抖动并未影响到数据的寄存。...原创 2022-01-05 23:44:27 · 412 阅读 · 0 评论 -
UART串口发送与接收模块
UART通信是最基础的,我们按照RS232的标准来编写相应模块,其中有起始位,结束位以及8位数据位。因为RS232是异步收发器,我们还需要对信号进行同步处理,否则会出现亚稳态的问题,影响仿真。首先产生分频时钟以及波特率计数器,只有当波特率时钟为1时,才会发送相应的数据位然后编写状态机逐步输出每一位数据,最后使用issp以及串口助手来验证发送功能,将程序写入fpga中后,在issp中编写相对应的数据都会在串口助手中显示出来。然后编写接收模块,接收模块我们每一个数据位将其划分为1原创 2022-01-05 23:37:43 · 813 阅读 · 0 评论 -
利用74HC595芯片实现数码管(8位8段)
首先利用状态机编写数码管的位选与段选,根据想要显示的数字控制不同数码管的亮灭,这里因为是共阴极数码管,所以我们在一定时间内控制电压的导通,人眼的视觉效应看就是常亮的,但其实是动态扫描这里用到查找表,这里数码管编写好并不能直接上板验证,因为板子上是集成的I/O口,所以我们需要将输入的串行信号转换成并行信号,利用时钟分屏并且计数,最后全编译没有问题利用issp输入自己想要的数字,最终显示在数码管上。...原创 2021-12-26 23:58:07 · 2170 阅读 · 0 评论 -
quartus报错
Error (12152): Can't elaborate user hierarchy "xxx"一开始以为这种错误是因为模块编写有问题,在网上进行相关查阅后,发现是同一个模块中用了两种时钟导致错误例如对数据进行寄存时reg [15:0]r_data;always@(posedge clk or negedge rst_n)if(sen)r_data<=data;elser_data<=r_data;在always块中定义了negedhe rst_n 同时也有 pos原创 2021-12-26 23:39:07 · 3602 阅读 · 0 评论 -
级联BCD计数器
BCD的作用之一就是使数码管显示,可以把十进制的数码管拆分,每一个进位代表4位宽的二进制代码,当计数达到一定量后进行跳转。首先写出每一个单独的bcd计数器的代码,我这里定义的cout为reg型数据,然后写出三个级联的,这里注意输出是12位宽的,查看电路图发现即为设计想要的然后编写tb文件进行仿真在HDLbits也有类似的题目,需要自己设计加法器,并且进行16次例化自己编写代码并且成功...原创 2021-11-13 18:22:54 · 628 阅读 · 0 评论 -
计数器控制led灯的亮灭
想让led灯不断闪烁,可以利用计数器操控,在计数器寄存器达到一定的数值后,改变led灯的电平,实现亮灭。在模块设计中先定义计数器的寄存器,其后再通过寄存器改变led的电平,当我们复位信号为0时,整个电路都处于初始状态,并不会有变化。下来编写激励文件,观察波形。最后分配管脚,上板子观察这里自己一开始将寄存器的目标值设定太小了,导致连板子的时候led灯一直处于亮的状态,还以为是管脚分配错误,最后将目标值改大,观察到了闪烁的现象。...原创 2021-11-05 17:30:49 · 2302 阅读 · 0 评论