自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(11)
  • 收藏
  • 关注

原创 FPGA实现AM调制

我们先将M转换成有符号数,因为mod_signed是一个14位的有符号数范围在[-8192,8192],也就是Q14.0,那么和M相乘就是一个Q15.15的数了,最后再 通过右移 15 位,就能正确把 Q1.15 × 整数 的小数部分剥离,实现精确的定点乘法缩放。(加上了符号位的M是17位但是这一位是我们加上的,理论上应该是14+17=31位,为了计算我们加上的这一位也可以随意截断掉,辅助用就好几数学运算+1-1的用法)。在AI的辅助下终于差不多搞定了。首先我先明确AM调制的数学表达。

2025-07-24 12:59:54 241

原创 基于FPGA的数字示波器的设计(p3--时基模块)

有关写计数器与写控制,主要负责将波形写入RAM中,并且判断是否写满,发送RAM已满的标志位。首先我们来认识时基模块中的状态机部分,这部分负责四个状态的来回转换。有关触发写入模块,接收波形,输出当前状态,主要处理状态的转换,表示当前状态。

2025-05-23 16:34:00 218

原创 基于FPGA的数字示波器的设计(p2-触发模块)

总体的输入位波形,通过延迟采集上一拍的波形和目前的波形进行比较来判断上升沿下降,再通过这个设置触发模式。通过不同条件来调节输出模式,输出都是0或1,也就是是否触发。然后O_DOUT还是输出采集的波形。再到真正的逻辑模块--处理触发逻辑与模式选择。然后是这个代码中的管线。

2025-05-23 16:23:11 463

原创 基于FPGA的示波器触发(p1-激励模块)

实际上输出正弦波时,输出的就是波形表里的东西,而输出三角波时,输出的就是地址。这是按照自由触发方式采集的波形,即隔一段固定的时间采集一次波形,由于采集频率与信号频率的关系的原因呢导致每次采集的波形都大不相同,这并不是我么想要看到的。这压根采集出来的波形就是稳定的了。之后的事情,实际能容就是让work_en_W这个使能置1,能够使得后续的地址自增正常运行。下面的代码依旧带有处理归零的能力,以及掌管了使能为1后地址自增的逻辑。先从最直观的操作开始看,下面的代码时处理时钟触发与RESET归零的。

2025-05-23 16:18:40 467

原创 在FPGA上实现DDS

若要提高频率,那么我们只要加大PhazeINC的值即可,但是如果我们想让频率减少怎么办,直觉上来看使得Phaze_INC = 0.5即可,但是verilog不支持这样的语法,因此我们就要引入定点数的概念来提高采样点的分辨率了。目前挣扎在有关波形表的选择上(因为是是写入四分之一个波形的数据,所以又两个镜像算法,有可能又出问题),之前傻傻的拿线性+1的表,应该要用公式来模拟正弦函数上的点才对。这样所产生的方波的频率应该。在完成简单的波形的生成之后,我们需要对产生的波形进行操作,使其频率按我们想要的方式变化。

2025-05-10 16:01:39 1721

原创 定点数与浮点数

再正数范围内,数据位和我们所理解的原码相同,但是来到负数的范围的时候,情况就完全不一样了,实际上负数的数据位可以有很方便的计算法则。(注意,使用二补码进行的四则运算的结果也都是二补码),然后二补码得到其真值,若为整数就是读数据位就行了,对于负数的结果,如果不去背表的话,那么其真实值应该是其数据位减1再取反。值得注意的是, 2补码格式还有一个优良的累加溢出性质: 当多个2补码数据相加时, 如果加法的中间结果溢出, 但是如果理论上的最终结果是不溢出的, 则2补码数的加法结果也不会溢出。

2025-05-07 14:35:30 1329

原创 关于STM32与FPGA的通信(SPI通信方式)(3-实现MCU与FPGA的互相通信)

最为重要的模块就是充当MOSI与MISO的处理转化输入输出的模块,我们暂且简称其为SPI_BUS模块,这个模块的一个作用是处理MCU输入的32位数据,将其转化为地址和数据两部分数据发送给各个模块。接下来有关MCU如何从FPGA中读取数据,首先我们要知道MCU读取的FPGA输出的数据是串出的,所以我们首先需要一个读取串出数据的函数,这个函数中我们使用了一个向FPGA写入翻个数据的函数。其中两次传输数据对RAM的写入对应了FPGA中的W_O_WE[5]和W_O_WE[6],这是一个不断对RAM进行写入的过程。

2025-04-18 18:57:21 1921

原创 关于STM32与FPGA的通信(SPI通信方式)(2-实现MCU对FPGA的写入-写入地址)

单片机新增函数,用于写入数据(使能信号,数据帧),第一个函数用于测试写入RAM(目前并未再FPGA中完全模块化相应实例,待下一步完成)这段代码接收输入数据,输入使能,输入地址,然后输出数据,输出数据标志位,输出一个TESTOUT。,这是两个内部信号,等会要传给地址译码器的。那现在我们知道了,这个模块负责输出的是标志位和MCU发送过来的数据。MCU部分较简略,FPGA是改动的大头,现在只是中间过程,后续第三步完成整个通信的时序。顶层模块的代码,连连看代码,当然可以直接用原理图连,更加直观,但不易传播。

2025-04-13 19:39:53 396

原创 关于STM32与FPGA的通信(SPI通信方式)(1-实现MCU对FPGA的写入)

和我们在主函数中发送的32位数据一样,并且能够很明显看出传输线电平在按照时序变化,由于速度很快,所以我们看不出数据一位位变化的过程,一看就是以及传输好了的。为了实现将FPGA作为信源,将波形传入MCU进行分析的目的,我们需要打通两者之间的壁障,使得二者能够互相通信。然后就是最关键的发送时序函数了,目前是第一步实现MCU向FPGA发送4个字节,在主函数中只需要在while中不断调用该函数即可。SPI通信的设置再MCU中式十分简单的,毕竟只是标准库进行一些配置。除此配置之外还需要写一些函数便于进行时序的编写。

2025-04-13 14:00:37 356

原创 verilog

= 是非阻塞赋值,所有更新在这个时钟周期结束时才会同时生效,因此 d2R 在该周期中始终保留了 d1R 的旧值,逻辑功能不会出错。在 Verilog 中,当一个输出端口在模块内部被赋值时(例如在 always 块中),需要将其声明为 reg 类型。建立时间就是数据能否在时钟值更新到达之前传递到锁存器当中,并且通过反馈电路维持自生的稳定的时间这些时间加起来不能够大于时钟到来的时间。所以,这样做并不是声明两个不同的 Out 信号,而是为了在保持接口定义的同时,满足内部赋值的语法要求。有关建立时间与保持时间。

2025-03-30 20:04:59 184

原创 回忆ysyx项目时的代码重新学习verilog

由于很久没接触,所以只记得部分有关nvboard的vsrc内容,其余有关makefile与testbench的内容基本忘了个干净,不过无伤大雅,这次回头的目的是重学verilog,搬到平台上以便在win下学fpga。直接般最后一个扫描键码的代码了,其涉及内容较多比较综合。首先是top顶层设计。

2025-03-23 16:35:42 160

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除