FPGA
文章平均质量分 52
仅供学习
sendmeasong_ying
这个作者很懒,什么都没留下…
展开
-
简易DDS信号发生器的设计与验证
相位累加器:N表示K值位宽。并且在输入相位累加器之前还进行了数据寄存,表示K值在变化的时候,不会影响相位累加器的工作。相位调制器:寄存器的作用一样的,防止P变化影响相位调制器的正常工作。波形数据表ROM会存储要显示的完整周期的信号。比如完整周期的正弦波信号,假如地址位宽是12位宽,数据位宽是8位宽,那么就表示有2^12=4096个地址,每个地址可以存储1B数据。对正弦波信号进行完整的存储就是沿着横轴进行等间隔采样4096次,每次 采集的信号幅值用1个字节来表示。最大值是255,最小值是0。原创 2024-04-27 23:09:56 · 966 阅读 · 0 评论 -
简易频率计的设计与验证
频率测量法缺点:时间T确定,但不能保证被测时钟信号在测量时间T内的时钟周期是整数倍。N出现误差那么 结果也会出现误差,而且被测信号的频率越小,T不变,N的个数就会变小,而误差是不变的。N越小误差对测量的结果影响是越大的。反之,被测信号的频率越大,T不变,N约大,那么正负1个时钟周期的影响较小。周期测量法直接测上升沿的一个时钟周期缺点:如果被测时钟信号的频率较低,测量时钟信号的上升沿是比较容易的,如果被测信号的频率很高,那么就需要用很高的计时器测量微小的时间差。所以周期测量法在高频时往往不能满足精度要求。原创 2024-04-23 17:34:54 · 589 阅读 · 0 评论 -
串口RS485
全双工:在同一时刻可以同时进行数据的接收和数据的发送,两者互不影响半双工:在同一时刻只能进行数据的接收或者数据的发送,两者不能同时进行差分信号幅值相同,相位相反,有更强的抗干扰能力。干扰对差分信号的影响都是相同的,所以差分信号的干扰一相减就没有了RS485的优点,采用差分信号有更强的抗干扰能力;原创 2024-04-14 23:26:36 · 578 阅读 · 0 评论 -
串口RS232
在同步通信中,双方使用频率一致的时钟,在传输的过程中,时钟伴随这数据一起传输。发送方和接收方使用的时钟都是由主机提供的。UART接收方并不知道数据什么时候会到达,所以双方收发都需要各自的时钟。所以不需要发送时钟,发送方发送的时间可以不均匀,接收方在数据的起始位和停止位之间实现数据的同步。因为数据收发都有独立的端口,所以可以实现全双工通信。RS232很多传感器芯片或CPU都带有串口功能,方便调试,只有两条数据线,节约IO接口。携带信息的传输单元叫码元。原创 2024-04-09 00:04:45 · 670 阅读 · 0 评论 -
VGA显示器字符显示
64*64=256。原创 2024-04-08 00:31:32 · 311 阅读 · 0 评论 -
VGA显示器驱动设计与验证
场同步信号的单位是像素点场同步信号的单位是一行@60的含义是每秒钟刷新60帧图像全0表示黑色。原创 2024-04-03 14:01:25 · 546 阅读 · 0 评论 -
RAM IP核
数据使能信号充当掩码的作用。1表示1字节就是8个位有效。原创 2024-03-29 00:05:18 · 217 阅读 · 0 评论 -
fifo ip核————读写时钟不同步
在单位时间内,写数据的总带宽一定要等于读数据的总带宽。否则一定会存在数据写满或者读空的现象。(波特率(bandrate),指的是串口通信的速率,也就是串口通信时每秒钟可以传输多少个二进制位。比如每秒钟可以传输9600个二进制(传输一个二进制位需要的时间是1/9600秒,也就是104us),波特率就是9600。在8位到16位的转换过程中,首先写入的数据会称为16位数据的低位。异步fifo ip核的输入数据和输出数据是位宽可以不同。8位宽,2^8=256,数据深度是256。读写的数据交替出现。原创 2024-03-22 17:30:22 · 465 阅读 · 0 评论 -
计数器————
为什么周期是500ns,因为定义的计数器是24,0-24是25个周期发生反转,一个周期是20ns,20*25=500ns。parameter写在模块下可以作为实例化中参数传递的一个接口。比如这样实例化两次可以让计数器实现两个不同的计数器功能。注意实例化的名称要写在端口列表的前面。仿真的话修改参数也可以缩短仿真时间。实际是按100的参数来进行计数的。改进的使用脉冲标志信号。原创 2024-03-22 10:26:54 · 105 阅读 · 0 评论 -
阻塞赋值与非阻塞赋值
可以看到中间变量In_reg延迟输入In一个时钟周期,然后输出out延迟in_reg一个时钟周期,延迟了输入信号两个时钟周期。为什么out延迟in_reg一个时钟周期,是因为用的是非阻塞赋值,当等号右边发生变化时,左边不会立刻变化而是等到下一个时钟周期再一起变化。可以看出输出out和中间寄存器in_reg确实 和输入in相差一拍,也就是一个时钟周期。而out和in_reg没有延迟一拍是因为使用的是阻塞赋值。当想对一个信号打两拍时,可以使用阻塞赋值。一个寄存器可以实现延迟一拍的效果。原创 2024-03-22 10:24:48 · 120 阅读 · 0 评论 -
时序逻辑的开始-寄存器
时序逻辑延迟了一个时钟周期,因为表达组合逻辑时,如果时钟和数据是对齐的,默认当前时钟沿采集到的数据是在该时钟上升沿同一时刻的值,如果是时序逻辑,如果时钟和数据是对齐的,默认当前时钟沿采集到的数据是在该时钟输入数据前一时刻的值。复位信号在此刻拉低,但输出信号并无影响,而是在下一个时钟上升沿受到了影响,到下一个位置复位信号拉高,输出无影响,而在下一个时钟上升沿变化。如图,这就是异步复位,不用等到时钟的上升沿才复位,而是只要复位信号低电平,就有效,输出就会清0。上面的led_out是同步,下面的是异步。原创 2024-03-22 10:20:35 · 285 阅读 · 0 评论 -
避免latch的产生
因此latch只有在组合逻辑中才会产生。latch可以在没有时钟的情况下进行数据的存储。在异步电路中替代寄存器的角色。在同步电路要避免latch产生。3-8译码器正确的RTL图。原创 2024-03-22 10:12:49 · 165 阅读 · 0 评论 -
层次化设计_全加器
【代码】层次化设计_全加器。原创 2024-03-22 10:08:57 · 201 阅读 · 0 评论 -
半加器___
【代码】半加器___原创 2024-03-22 10:05:12 · 132 阅读 · 0 评论 -
译码器___
理解一下:这里译码器就是输入二进制数,二进制数等于几,输出就那一位等于1。原创 2024-03-22 10:02:30 · 199 阅读 · 0 评论 -
多路选择器
实现功能,当选通信号为高电平时,也就是为1时,输出选择in_1,当为低电平时,输出为in_2。原创 2024-03-22 09:58:32 · 152 阅读 · 0 评论 -
RAM IP核
每一个ram都有独立的读写端口。一定要定义读写优先顺序。若要访问一个地址,一定要定义优先顺序。一片是36K总容量。写和读需要数据位宽。当配置为1位宽,就只能使用32k,2位宽就可使用32k。原创 2024-03-20 23:45:05 · 215 阅读 · 0 评论 -
时钟IP核
CMT也是含有PLL和MMCM能提供高质量的时钟,抖动延迟都比较小。cc是时钟专用引脚。全局时钟bufferG,局域时钟bufferR,bufferIO专门为io提供时钟资源,还有一个行时钟。原创 2024-03-19 23:23:25 · 114 阅读 · 0 评论 -
数码管的动态显示(四)
【代码】数码管的动态显示(四)原创 2024-03-18 23:36:31 · 271 阅读 · 0 评论 -
数码管的动态显示(三)
data_reg寄存,只寄存符号位和数据位不包含小数点位。动态数码管每个显示1ms,所以计数到5*10^4-1为了将sel和seg同步,把sel打了一拍。6位都使用到了可以这么计算,6位都显示的是数据。或者最高位显示的是小数点,低5位是数据,因为数码管是共阳数码管,低电平才能点亮。原创 2024-03-14 23:47:02 · 321 阅读 · 0 评论 -
数码管的动态显示(二)
这个十六进制是右边的dp为高位。数码管的动态显示,在第一个计数周期显示个位,在第二个周期显示十位,在第三个周期显示百位由于人眼的视觉和数码管的特性,感觉就是显示了234,每个数码管的显示需要从输入的数据里提取出个十百位,所以需要BCD码。8,原来输入的数据有多少位宽就要移位多少次。增加一个BCD转码模块。修改系统框图。原创 2024-03-13 23:05:02 · 764 阅读 · 0 评论 -
数码管的静态显示(二)
要按照上图的顺序传递位选和段选的数据。因为q0是最高位,共阳极数码管结构是dp....a,所以应该先传入低位a,而a在上图中的8段2进制编码中是seg[7],所以段选信号的顺序是seg[0],...seg[7]。因为输出信号是两个时钟,所以要进行分频,因为不能太高。因为是4分频,所以计数的最大值是3。(FPGA使用的晶振太高了, 74hc595 在50MHz的频率下没法正常工作, 所以选一个较为低一点的时钟频率作为触发)原创 2024-03-13 21:57:35 · 757 阅读 · 0 评论 -
数码管的动态显示(一)
把每一个数码管闪烁的时间设置为1ms,肉眼观察不到就会认为6个数码管在同时闪烁。实验目标:使用6位8段数码管实现数码管的动态显示,显示的内容就是0-999_999。当计数到最大值,让他归零,然后循环显示。每0.1秒加1。也就是说第一个0.1秒显示的是0,第2个0。1秒显示的是1。高电平定义小数点位有效。符号位也是高电平有效。因为没有用到小数点位和符号位,所以一直让其保持低电平。使能信号控制数码管的显示,当为高电平,数码管可以正常显示。原创 2024-03-04 22:06:07 · 371 阅读 · 0 评论 -
数码管静态显示(一)
计数0.5S,一个时钟周期20ns,因此要计数0.5s就是要从0计数到24999_999。级联两个芯片可以实现16位得串并转换MR是主复位端口,横线表示低电平有效。通常接到vcc,防止数据得清零。DS输入数据,SHCP输入时钟,在上升沿时刻,将输入的串行数据输入到移位寄存器中。Q7S溢出8位会输入到下一个595芯片中。内部得8位寄存器由STCP控制,是一个时钟,当STCP上升沿会将数据输入到寄存器当中,使能信号OE低电平有效时就将存储得数据输出出去。原创 2024-02-29 23:18:43 · 252 阅读 · 0 评论 -
无源蜂鸣器驱动实验
计划是,生成不同的7个频率控制蜂鸣器发声,每个音调发声0.5秒。50MHZ计数0.5秒,50MHZ一个周期20ns,要计数0.5秒 ,0.5/0.000_000_02s=25000_000个时钟周期。因为是从0开始计数,所以计数的最大值是0-2499_999。用一个计数器计数发音的7个0.5秒,当成是一个循环。1/262hz=0.0038167938931298s,约等于3816794 ns。因此3816794/20=190,839.7。约等于190840。原创 2024-02-28 23:26:19 · 307 阅读 · 0 评论 -
状态机2——————
【代码】状态机2——————原创 2024-02-27 23:16:08 · 145 阅读 · 0 评论 -
状态机-----
同步的意思就是状态的跳转都是在时钟的作用下跳转的,有限是指状态机中状态的个数是有限的。两种状态机的共同点都是状态的跳转只和输入有关,区别就是如果最后的输出只和当前状态有关而与输入无关,则是moore型状态机。如果最后的输出不仅和当前状态有关还和输入有关就称为mealy型状态机。状态机的每一个状态代表一个事件。我们需要做的就是执行该事件,然后跳转到下一事件。状态机特别适合描述那些事情发生有先后顺序或者是时序归类的事情。原创 2024-02-26 23:11:46 · 1197 阅读 · 0 评论 -
呼吸灯--FPGA
目录1.breath_led.v2.tb_breath_led.v呼吸灯就是从完全熄灭到完全点亮,再从完全点亮到完全熄灭。具体就是通过控制PWM的占空比控制亮灭程度。绘制PWM波的步骤就是,首先灯是在第一个时钟周期保持高电平熄灭状态,在第二个时钟周期保持1/10个时钟周期的低电平,其余都是高电平。在第3个时钟周期保持2/10的低电平,剩余都是高电平,依次绘制下去直到第11个时钟周期在一个周期内都是低电平点亮状态。然后下一个周期还是点亮状态,之后开始逐渐熄灭的波形图的绘制。首先1/原创 2024-01-31 00:00:17 · 1009 阅读 · 0 评论 -
点亮流水灯
50MHZ一个周期是20ns,0.5秒就是20ns=0.02um=0.00002ms=0.000_00002s。0.5/0.000_00002s=25_000_000个时钟周期,表示要从0计数到24_999_999LED灯是低电平点亮,前0.5秒点亮第一个LED灯,当检测到脉冲信号点亮第二个灯,然后依次点亮。以上的波形图是采用左移的方式来led_out的赋值的,但是实际会发生错误,因为左移右移都是在空位补零并不会出现如上图的led_out的输出情况,因此考虑增添一个信号。原创 2024-01-22 23:29:20 · 507 阅读 · 0 评论 -
FPGA之按键消抖
因为50MHZ的时钟,周期为20ns,要计满20ms,20ms=20000_000ns,则计数器要计数20000_000/20=1000_000个时钟周期,所以计数器的值是从0-999_999。19-49(前抖动),149-199赋值随机数模拟抖动(后抖动),0-19,199-249赋值为高电平模仿按键未被按下,其余时间赋值为0模仿按键按下。出现了一个问题,若稳定的时间足够长,在稳定期间就会出现多次清零,多个最大值,多个脉冲信号,这不是我们想要的结果。按键分为自锁式按键和机械按键,图左边为自锁式按键。原创 2024-01-09 23:29:50 · 502 阅读 · 0 评论 -
FPGA之分频器
看底下的频率一个周期8.33NHZ是50MHZ的6分频。现在修改时序图,因为FPGA的时钟信号都要连接到全局时钟网络,全局时钟网络的作用是尽可能使时钟信号到达每个寄存器的时间尽可能相同,减少时序问题的产生。而以上编写分频的时钟信号并没有连接到全局时钟网络,但是外部晶振通过管脚连接到FPGA的专用时钟引脚上,自然就连接到了全局时钟网络上。所以在系统时钟下工作的信号比产生的分频信号更容易在高速系统中保持稳定。可以用一个脉冲标志信号改善这个问题。原创 2023-11-29 23:23:53 · 421 阅读 · 1 评论