- 博客(38)
- 收藏
- 关注
原创 使用verilog 实现cordic 算法 ---- 向量模式
分享个人写的 coridic 向量模式的RTL:cordic 算法向量模式主要作用是求出向量的模值以及 arctan (x/y) 值;首先从仿真图去了解cordic 算法向量模式的 作用,不同数据测试;后续拓展:将旋转模式和向量模式在同一个module封装使用起来。
2025-02-11 18:20:52
629
原创 使用verilog 实现 cordic 算法 ----- 旋转模式
● 了解cordic 算法原理,公式,模式,伸缩因子,旋转方向等,推荐以下链接视频了解 cordic 算法。在verilog 需要用 ram 存储的值:列举了13次迭代的tan值和对应角度;● 在FPGA中用 verilog 实现,注意使用有符号变量以及小数点定点化处理。● 用matlab 或者 c 实现一遍算法。b. 以第一象限为例子:0 ~ 90°。
2025-02-11 12:22:17
981
原创 xilinx FPGA 进行 FFT
1.首先使用 matlab 生成 信号的 dat 文件(此dat文件包含信号的采样信息数据)作为DDS 信号。这一界面展示了 数据位置,以及config 信号是指示 傅里叶正变化还是 反变化,1是正变化。c. 仿真观察 数据数据 以及 对比 matlab FFT 后的数据。b. 输入数据的格式 浮点数或者截取、不截取的定点数。a. 给 FFT IP 配置信号为1,设置为正变化。这里输入数据,因为输入的是实数,虚数位宽为0。a. 输入数据的数据类型 定点或者浮点数。下图是傅里叶开始变化的开始信号。
2025-02-07 20:00:38
483
原创 xilinx FPGA 平台实现数字信号 -- 低通滤波
b. 设置好,可以看到下图在50k左边几乎是没有衰减的,右边频率经过 -40db的衰减。3. 需要注意 fir IP 会对输入信号增益放大到一定倍数,所以最后IP核出来的数据需要缩小相应倍数。c. 送入 fir IP 数据都是 整数,没有小数,所以需要设置 下图参数为定点数,小数设置为0。1.发现相位和data_all信号有偏差,相位是随机的,没有办法调整;3.配置 fir IP 核,加载 matlab 产生的 滤波系数。1.matlab 产生的 data_all 信号的 dat文件。
2025-01-15 19:22:54
1400
原创 xilinx平台使用多个 FIFO 拼接
Xilinx FIFO IP 输入 的最大位宽 是 1024 bit ,当需要缓存的数据是 1280bit 又或者是 1536等。有一个办法就是拆数据,将1280拆成 256倍速(其它位宽也行,32bit等是8的倍数);将所有 子 FIFO IP的 empty 信号 与起来;将所有 子FIFO IP的 full 信号 或 起来;使用如下rtl 代码处理即可;
2025-01-11 15:47:16
261
原创 Xilinx 平台 drp 动态调节 mmcm
d. vco 频率越高,分频系数越高,相位越精细,如果是 10分频那么VCO输出一周期就是便宜360/10 = 36°。d. edge 将high time 再扩展半个vco 周期 ,可以用来奇数分频 变成 50%占空比。e. high time 和 low time的 和 是 分频值。a. high time 是VCO 高电平 持续周期。b. low time 是 VCO 低电平持续周期。c. no count 是 VCO时钟周期的计数。怎么控制 输出频率?a. 先生成高频 的 VCO。
2024-12-24 16:03:50
404
原创 xilinx IDDR和ODDR原语回环实验-opposite edge 模式
【代码】IODDR原语回环实验-opposite edge 模式。
2024-12-11 17:42:36
296
原创 VHDL 注意点总结
vhdl tb 写法,在仿真中 ,process 是不断进行运行,所以需要挂起,使用一个sim_stop 信号巧妙解决时钟不断运行问题。port 输出 不能被使用,除非作为 buffer 模式,或者使用 另一个变量 作为使用。仿真是可以 混合 语言 去实现,也就是可以用 verilog 写 tb 仿真 vhdl。一个 bit 二进制 用 单引号 ,多个 bit 使用 双引号。使用 状态机的时候 可以自定义 编码格式,一般自动。vhdl 需要加载库 ,使用 库中的函数。下图 同步复位 和 异步 复位。
2024-12-10 15:17:05
310
原创 Xilinx IOserdes 原语使用 ---- 回环实验
bitslip 必须在clkdiv 的一个周期下作用,等待两个周期后采样的Q4到Q1数据才有效,serdes 的复位至少需要两个时钟周期。首先需要调节 bitslip 对齐,可以自己自定义序列接收检测,方可传输数据。下面RTL 代码,仅供参考,参考手册 :xilinx UG471。Xilinx IOserdes 原语使用 ---- 回环实验。
2024-12-10 14:30:08
541
原创 AXI4控制MIG遍历 1GB的 DDR3
连续 读写 MIG 时候,中途 bvalid 不拉高。暂未查到问题,可能是过程中硬件出现问题,DDR传输出现错误。下面代码直接上板测试,遍历整个DDR空间,仅供参考。遍历DDR3 test,内存大小1GB。
2024-12-09 23:54:38
302
原创 Xilinx IDDR和 ODDR原语使用和仿真
/ 本测试内容 是 50MHZ 的 8bit (1~126) 数据进入 IDDR – ODDR 输出。IDDR 和 ODDR 时钟 200MHZ。// IODDR 回环 ,使用 SAME_EDGE 模式,注意的是 从 ODDR输出 时钟需要偏移90度,不然数据 上下沿采样错误。// 数据从 IDDR 输出时,最好将 数据和 frame 有效信号 同步在偏移90度的时钟下。后续研究 OPPOSITE_EDGE 模式。数据输入 的时候,ODDR 输出延时一拍。IDDR 数据输出延时一拍。
2024-12-09 18:01:21
480
原创 FPGA 遍历读 LMK04803 寄存器
4.注意的是写寄存器是 32bit (data[31:5] + addr[4:0]),读出来数据是 27bit[26:0]2.遍历LMK04803所有寄存器,将读到的每个寄存器的值显示在VIO上。3.遍历指的是 从 R0 开始读,R0读完接着读 R1,一直到R31 结束。1.使用 VIO 输出信号控制什么时候开始读LMK04803寄存器。开始读取,从R0 开始读,接着 R1 …结束读取,32个寄存器全部读取完毕。通过 ILA 抓取的波形。
2024-12-05 18:03:41
291
原创 verilog 注意事项:同一个always 多个 if else
/ 当多个独立的 if else 控制一个变量时,只执行顺序最后的条件,其它条件工具忽略,而且在多个独立 if else 之间可以插入打拍语句,并行执行。// 不同多个独立 if else 之间 存在 case 语句时候,同样它们都是并行执行。// 多个独立的 if else 在always 里面,当变量值不一样时,是并行执行的。// 独立嵌套的 if else 也是 并行运行。
2024-11-15 17:32:21
981
原创 c语言之共用体和枚举
共用体共用体类型,使几个不同类型的变量共享同一段类型的结构。就是共用体里面所描述的类型都是共享一个地址空间,并且同一个时刻只能用一个类型的值。union 共用体名{ int i; //成员列表 char ch; float f;}a,b,c; //变量列表union data{ int i; //成员列表 char ch; float f;}; //变量列表union data a,b,c; union //无名共用体{ int i;
2021-07-18 17:01:20
260
原创 74HC595芯片
芯片 74HC595该芯片的作用是移位寄存器,通过移位的方式,节省 FPGA 的管脚。原理移位寄存器芯片的作用就是将data端传进来的串行数据转化为并行输出。上图是模拟移位寄存器的结构。data数据端传进来的1001经过四个周期一级一级的传送后,每个触发器的Q端都有输出。所以四个周期后,D3,D2,D1,D0,都有数据输出,那么有个疑问,如果经过第三个周期呢,可以发现,D0的值是不确定的,也就是说,输出端不稳定,所以就需要加上开关,当每个触发器的Q端有值输出时,就可以打开开关,稳定的输出D3,D
2021-07-16 10:15:56
1530
原创 SPI协议_FLASH
SPI协议SPI(Serial Peripheral Interface,串行外围设备接口) 通讯协议,是 Motorola 公司提出的一种同步串行接口技术,是一种高速、全双工、同步通信总线,在芯片中只占用四根管脚用来控制及数据传输,广泛用于 EEPROM、 Flash、 ADC(数模转换器)、 DSP(数字信号处理器)以及数字信号解码器上,是常用的也是较为重要的通讯协议之一。SPI 通讯协议的优点是支持全双工通信,通讯方式较为简单,且相对数据传输速率较快;缺点是没有指定的流控制,没有应答机制确认数据是否
2021-06-22 15:14:02
1269
原创 DDS信号发生器
DDS 信号发生器 DDS 是直接数字式频率合成器( Direct Digital Synthesizer)的英文缩写,是一项关键的数字化技术。与传统的频率合成器相比, DDS 具有低成本、低功耗、高分辨率和快速转换时间等优点,广泛使用在电信与电子仪器领域,是实现设备全数字化的一个关键技术。作为设计人员,我们习惯称它为信号发生器,一般用它产生正弦、锯齿、方波等不同波形或不同频率的信号波形,在电子设计和测试中得到广泛应用。基本结构了解dds,下面的dds基本的结构需要了解清楚。DDS,无非就
2021-06-22 12:08:26
4144
2
原创 I2C协议_EEPROM
I2C**I2C 通讯协议(Inter-Integrated Circuit**)是由 Philips 公司开发的一种简单、双向二线制同步串行总线, 只需要两根线即可在连接于总线上的器件之间传送信息。I2C 通讯协议和通信接口在很多工程中有广泛的应用,如数据采集领域的串行 AD, 图像处理领域的摄像头配置,工业控制领域的 X 射线管配置等等。除此之外,由于 I2C 协议占用引脚特别少, 硬件实现简单, 可扩展型强, 现在被广泛地使用在系统内多个集成电路(IC)间的通讯。I2C总线可以进行
2021-06-18 21:17:23
736
原创 fir低通滤波器
fir 有限冲激响应( Finite Impulse Response, FIR)滤波器,又被称为非递归线性滤波器,是数字信号处理系统中最基本的元件。 FIR 滤波器的脉冲响应由有限个采样值构成,长度(抽头数)为 N、阶数为 N−1 的 FIR 系统的转移函数、差分方程和单位冲激响应分别如下列三式所示。 无限冲激响应( Infinite Impulse Response, IIR)滤波器,又被称为递归线性滤波器。顾名思义, FIR 和 IIR 是相对的,相比于 IIR, FIR 具备线性相位
2021-06-17 16:07:05
8931
原创 DDS与DA
信号发生器 信号发生器是一种能提供各种频率、输出电平的电信号的设备,又称信号源或振荡器。其在各种电信系统的振幅、频率、传输特性等电参数以及元器件的特性与参数的测量中得到了广泛的应用。直接数字式频率合成器( Direct Digital Synthesizer,DDS)是一项关键的数字化技术,其将先进的数字处理理论与方法引入频率合成技术,通过数/模转换器将一系列数字量形式的信号转换成模拟量形式的信号。DA9709芯片***DA9709芯片***是双通道,位宽 8bit 的芯片,速率高达 1
2021-06-16 22:14:07
2443
1
原创 简单操作matlab之图像
Image1.打开matlab就先把路径给切换好 准备的图片放在路径下,后面就可以随意用matlab来调取2.建立.m文件 建立脚本就可以任意输入命令,回车不运行。3.输入命令下面是我自己编的命令处理图像:以下命令主要是提取图片的rgb分量。图片是由三基色组成,RGB(红,绿,蓝)查看图片的信息:clc;clear;pic_rgb = imread('zz.jpg');从当前路径读取图片信息pic_r = pic_rgb;//赋值pic_g = pic_rgb;pi
2021-06-14 17:39:40
4114
原创 异步fifo
FIFOFIFO是英文First In First Out 的缩写,是一种先进先出的数据缓存器,它与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序的读出数据,其数据地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址。FIFO是非常重要的数字器件,用途非常多,像跨时钟域的处理,多比特的异步信号的处理。FIFO的IP核有同步的还有异步的,这取决于写数据和读数据采用的时钟。下面简单仿真一下异步FIFO的功能:异步FI
2021-06-14 15:41:23
254
原创 用状态机设计uart——顶层模块
顶层模块module uart_state( input wire sys_clk, input wire sys_rst_n, input wire rx, output wire tx);wire rx_data;wire data_value;wire [7:0] rcv_data;uart_rcv uart_rcv_inst1( . sys_clk (sys_clk), . sys_rst_n (sys_rst.
2021-05-20 15:46:42
755
1
原创 用状态机设计uart——发送模块
发送模块状态图:发送模块代码module uart_txd( input wire sys_clk , input wire sys_rst_n , input wire value_d , input [7:0] data_rx , output reg txd_data);parameter IDLE = 4'b0001 , START = 4'b0010 , ..
2021-05-20 15:29:47
915
1
原创 用状态机设计uart——接收模块
uart设计由于是自己通过不断仿真测试,进行对代码的修改,设计肯定不是完美的,请大家指出我的问题!!!也可以在评论区评论,指出问题!!!或者有疑问的提出来!!!本设计采用三段式状态机分析与综合后的状态图:接收模块代码:module uart_rcv( input wire sys_clk , input wire sys_rst_n , input wire rx_data , ou.
2021-05-19 21:38:14
1320
原创 Uart2
FPGA设计思路那rs232举例来说,它采用的是全双工,有两条数据线,rx和tx,每次只能传输1bit,用FPGA设计一个具有uart功能其实不难,只要了解它的功能是什么。uart功能就是:接收数据时。将串行数据转换成并行数据;在发送数据时,将并行的数据再转换成串行数据。我们只要在FPGA内部实现这个功能描述就可以了。一般只要两个模块就能解决,发送模块和接收模块。这两个模块分别诠释了uart的功能。野火的波形图教学非常好,明白了时序是怎样的,那么代码就游刃有余了,大家可以根据下图的.
2021-05-13 21:38:01
1265
原创 UART1
串口Uart,它是异步串行,一类协议,并不是一种协议(串口总称)Uart类型的接口有许多,像常见的rs232,rs422,rs485等,各自有自己的电平标准。为何说是异步的呢?Uart通常用来PC和外围设备就进行通行,但是使用的都是各自的时钟,不像SPI和I2C主机和从机使用相同的时钟来控制数据的传输。我们来讲讲rs232这种串行接口,有9个引脚,其中两个引脚是核心,RX和TX,处于2和3引脚,所以使用的数据线就这两条,位宽1bit,就是说在创数时只能一位一位的传。缺点就是传输距离短,速率低。
2021-05-12 23:26:47
1527
原创 FPGA之状态机
状态机1.状态机定义状态机的本质就是对具有逻辑顺序和时序规律的事件的一种描述方法,它有三个要素:状态、输入、输出:状态也叫做状态变量(比如可以用电机的不同转速作为状态),输出指在某一个状态的特定输出,输入指状态机中进入每个状态的条件。有限状态机(Finite State Machine, FSM),根据状态机的输出是否与输入有关,可分为Moore型状态机和Mealy型状态机。Moore型状态机输出仅仅与现态有关,Mealy型状态机不仅与现态有关,也与输入有关,所以会受到输入的干...
2021-05-02 22:34:25
1746
原创 大彻大悟之C语言数组_Part1
数组赋值在c语言中,常用的是一维数组和二维数组;数组其实就是存储一系列的数字或者,字符;首先讲一讲初始化,在赋值的过程中要注意什么。下面是我列举的例子:一维数组的赋值:int arr[5] = {1,2,3,4,5};//定义5个整型元素int arr[] = {1,2,3,4,5};//定义5个整型元素int arr[5] = {1,2,3};//定义的5个元素为1,2,3,0,0;char arr[5] = {'a','b','c'};//定义的5个元素为a,b,c,0,
2021-04-28 22:27:03
120
原创 “人生苦短,我用python”之小笔记
人生苦短,我用Python!学过C语言,相信python就很容易上手,主要是因为其表达方式简单,不繁琐。我来总结一下,python最最最基础的知识:No.1 变量变量就是用来存储那些数据的并可以任意更改的,像整型(int)、字符串(str)、浮点型(float)等。eg1:my_name= '小兔崽子';age = 30;注意点:变量名字;赋值符号;变量的名字:规定数字、字母、下划线来命名,但不能是数字开头,最好也不要用下划线开头!、赋值符号:=eg2:mengx..
2021-04-27 23:03:09
135
原创 与FPGA中亚稳态的‘量子纠缠’
亚稳态说实话,这玩意我也是琢磨许久,不搞懂心里难受!!!这也让我觉得匪夷所思的地方!!!这玩意不搞懂,我是睡不着觉的!!!!为啥会出现亚稳态?组合逻辑有吗?组合逻辑是靠电平触发,每次会有确定的电平值0或1,但组合逻辑会有个竞争冒险现象,这个现象与亚稳态一样是个小祸害,阻碍整个系统变得优秀!!!(我这说的委婉,可能会导致系统奔溃)那么在时序逻辑中呢?这涉及到很重要的数字器件,那就是触发器,它具有记忆功能还可以储存一位二进制数据。为什么提到触发器呢,因为它是导火索,所有亚稳态都与它有着千丝.
2021-04-25 23:25:44
286
原创 与C语言函数的邂逅
**Function**C语言中经常会提及到就是函数,有一大堆的库函数,以及程序员自己所编写的函数。这里推荐一个网站 www.cplusplus.com,这个网站可以用来学习C语言中所涉及到不同类型的函数。全英文文档,正好可以锻炼你们的英文。。。。。。函数需要什么?怎么定义的?怎么用?一般函数是由 如下三大要素构成:1. 函数的返回类型2. 函数名字3. 函数的参数其格式为:函数的返回类型 函数名字 (函数的参数)函数的返回类型具体看函数所实现的功能有关,需要返回的是什么类型,常用的
2021-04-23 23:47:25
241
4
原创 C语言之趣味小程序——电脑关机
电脑关机怎么使用C语言编写的代码让电脑关机呢?大家估计有人玩过,也挺有意思的。。。。我们知道在windows系统有一个命令窗口,可以输入命令操作的窗口,也叫dos窗口,如下图,快捷键windows+R,打开运行窗口,输入cmd,进入dos界面:输入命令 shutdown -s -t -60 表示电脑在60秒后关机。再输入命令 shutdown -a 表示取消关机的操作。分别对应下图操作与结果:...
2021-04-22 23:12:55
402
原创 Verilog之呼吸灯
呼吸灯我今天分享一个呼吸灯的代码,挺有意思的!呼吸灯字意就像人的呼吸一样的变化的灯,什么变化呢?指的是灯的暗慢慢变亮,再由亮慢慢变暗重复变化。生活中常见的呼吸灯也就是手机上来消息时那个灯一闪一闪的变化。我是怎么设计的这个呼吸灯的呢?其中涉及到了脉宽调制的手段,利用占空比的变化来改变灯的暗慢慢到亮的状态!具体请见如下代码:大家测试的时候需要用到FPGA的开发板,利用Altera或者Xilinx的开发环境将程序下载到FPGA芯片即可!程序哪有疑问可以找我哦,我会帮你解答的哦。m
2021-04-19 22:10:58
589
原创 浅谈自己对Verilog中阻塞赋值与非阻塞赋值
Verilog之阻塞赋值阻塞赋值与非阻塞赋值是Verilog语法中的赋值语句,理解起来并不难!换个思维,我们不能用以前编写C语言或者其他高级计算机语言的思维来理解Verilog中的代码。亲们,想想吧,Verilog是硬件描述语言,不是程序哦!写出来的语句我们可以称之为代码,而不是程序,思维要转变过来哟????像用来编写控制单片机的C语言程序是顺序执行的,因为利用的是CPU取指,译码,执行等一条条命令控制完成,这典型的按顺序去完成任务。而FPGA不一样,用Verilog语言编写好可以生成电路,电路啥概
2021-04-18 23:11:31
452
3
原创 凑C语言的热闹_指针1
C语言的指针类型关于指针,想当初开始学的时候感觉非常难,现在回顾一下看了某站视频,我来总结一下。搞懂指针首先需要理解电脑上的内存的概念。现在的电脑有32位或者64位的处理器,什么意思呢?就是代表PC有32根或者64根的地址线,一旦上电每根线上可以代表正电或者负电,也就是所谓的逻辑1或者逻辑0。我们想想,拿32位的平台举例,32根地址线可以表达多少种地址,我们可以把地址想象成一个房间,那房间肯定需要有编号,那么32位有多少地址编号呢?哈哈,我为了打字图方便,不用二进制表示,用16进制代表地址编号,从0
2021-04-17 22:33:33
197
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人