- 博客(80)
- 资源 (2)
- 收藏
- 关注
原创 Processor System Reset IP 核 v5.0(vivado)
第二个参数是输入外部复位的有效周期数(并不是前面的复位外宽,其功能是,输入复位有效周期数达到之后,才会产生输出的复位信号)。ps:上述输入信号分别是:系统最慢时钟、外部复位、辅助复位、MDM复位(由外部复位参数配置复位时钟数和有效电平)、DCM lock信号。这个IP的作用,我的理解是,比普通按键复位更加高效灵活,可以配置多个复位输出,可以配置复位周期。配置参数也就是IP配置界面,其中上面两类是对输入信号的参数配置,后面两类是输出信号的参数配置。第二类,是对输入的辅助复位的配置,同上。
2025-03-28 15:20:59
374
原创 VScode 画时序图(FPGA)
(但我用的很简单,只是简单的时序,可以对照这段代码,然后自己试一下,生成下面的图,就知道每段话是什么意思了)3、写好js文件之后,保存之后,按快捷键ctrl+K,再按ctrl+D,就会得到输出的图片,4、可以按鼠标右键,输出图片。
2025-03-28 14:37:31
1930
原创 verilog把长位宽数据剪切成短位宽,把短位宽数据拼接成长位宽
例如:将16bit的数据,分成4bit一组,且最先取出最高四位,然后从左至右。考虑使用移位,每次移四次,每次取最高四位,但是这样会消耗多余的资源。而把短位宽拼接成长位宽也是一样,调换一下位置就可以了。因为直接使用i进行坐标选择时会报出错误。将一段长数据分配给几个短数据;
2024-10-16 18:14:34
344
原创 定点数和浮点数的详细介绍(一)定义、范围、位宽
定点数包括定点小数(纯小数)、定点整数(纯整数)、整数和小数位数固定的实数。小数点默认在符号位后面,首位为符号位,其他为数值位(在用二进制代表小数时,例如0xFF,就表示0.5+0.25+0.125+0.0625+0.03125........)例如,用一位符号位、三位小数位,表示以下数据:(小数点省略就是B)原码十进制正小数十进制负小数原码补码0.000001.0001.0000.0010.125-0.1251.0011.1110.0100.25-0.25。
2024-10-09 19:07:54
1570
原创 xilinx vivado PULLMODE 设置思路
命名为IO_LXXY_#IO_XX_#的引脚,有固定的特定用途,多为底层特定功能的直接实现,如差分对信号、关键控制信号等,不能随意变更。命名为IO_LXXY_ZZZ_# 、IO_XX_ZZZ_#的引脚,同时有多个特定功能(ZZZ部分表示特定的功能),未被使用时可以用作普通I/O引脚。
2024-09-12 17:02:23
1467
原创 verilog当中使用预定义参数的注意事项
如果要根据预定义的参数进行分类定义另一个参数的时候,不能直接用这种或方式对预定义参数进行判断。也就是说对于预定义的参数,如果是根据这个来进行判断,则需要用`ifdef来进行操作;如果是直接用这个参数的值进行计算,则`DIN_SIGNED直接使用。(但要特别注意,如果是将预定义的参数进行拼接时,要特别注意位宽,因为预定义的参数位宽是未知的,可以在预定义的时候就指定位宽,或者重新定义一个参数,规定他的位宽)// 1 正确`else`endif//2 错误//1//错误//true//2。
2024-09-12 10:22:36
310
原创 verilog报错:Illegal concatenation of an unsized constant. and 输入输出位宽不匹配
就正确了,就是要保障拼接时需要复制多少位时,需要确保{(CUT_INT_BITS){`DIN_SIGNED}}这个里面的两个量都是正确的值。错误一:Illegal concatenation of an unsized constant.还有就是有的时候信号的位宽会根据输入进行调整:(也就是输入输出位宽不匹配时,位宽由参数导入)
2024-09-09 16:37:54
570
原创 verilog当中仿真的时候赋值用=还是<=
【总结:<=是所有数据同时变化,而=是顺序执行。如果是左边数据的赋值都是不关联的,那么就可以用<=,使所有赋值同时有效。如果有a和b都需要赋值,且b的值跟a有关的同时还需要一起变化,那么可以用=】一般情况下可以用<=,因为如果信号需要寄存打一拍,如果给的激励刚好打在要寄存那一拍的时钟上,可能从仿真波形看不出来打拍。那么数据就会在上升沿之后错过一点点有效,最后的结果也会是在下一个上升沿发生变化。3.用时钟下降沿去赋值,会在下一个时钟上升沿来的时候变化,相当于打半拍。2.直接用“<=”进行赋值,有寄存一拍。
2024-08-16 17:31:19
369
原创 verilog实现matlab的floor、ceil、round等小数处理
可以自己定义一个data_in,例如位宽是WIDTH_IN,那么你可以把它当成一个浮点数,当需要对小数进行截位时,就可以设一个parameter CUT_BITS,只需要判断data_in[CUT_BITS-1]是不是1,如果是1,相当于对该位四舍五入时,这里是0.5,那么就把data_in[WIDTH_IN-1:CUT_BITS]+1,就得到了小数截掉之后的数据;"ceil(x+0.5)":该函数是将 x 减去 0.5 后再向上取整,即返回不小于 x+0.5 的最小整数值。这种方法常用于实现四舍五入。
2024-08-13 15:52:43
1614
原创 VSCODE在每行代码后面,注释中加入当前时间
在修改代码时,需要体现修改的内容,可以在修改的代码后面添加实时时间的注释。2.安装好了之后,可以看到提示了快捷键内容。
2024-08-09 11:40:28
614
原创 在ccs当中如何使用动态分配二维数组,以及注意点
其实如果一定要使用指针的话,是必须要事先给他分配内存的,也就是为什么必须要使用动态分配了,所以这是避免不了的。然后我根据网上的建议,在cmd文件中对.heap进行字节分配,还是没有解决。3.可以对他进行设置,但是我还是没懂这个值应该怎样计算,好像大部分人都说是自己一点点去试出来的,所以就是动态分配要慎用叭,就是在对二维指针数组定义的时候,如果没有那个预警的话,程序就会忽略这个问题,并不会报错,可能就会导致一直去找其他错,所以当确定程序没错时,可以试着降低指针宽度,调试这个heap的值,直到达到要求。
2024-03-05 11:02:33
706
1
原创 origin制作折线图(一张图里面四个坐标图)
5.先按照需求将不同的线层放在一起,我这里一共有8列,就有8个图层,然后四个坐标轴也包含在前四个图层,我每个坐标轴里面要放两列数据,所以直接在右侧拖住线到前四个图层就可以,然后将后四个图层取消显示。10.如果不想像下图一样,其中某一种颜色被覆盖,可以在右侧的同一个线层当中,拖拉被覆盖颜色的那一条线到下层,就不会被覆盖了。4.设置想要的分图数量 间距:(水平间隙为一行的两个图之间的距离,垂直间隙为一列的两个图之间的间隙,根据自己需求进行调整)
2023-08-08 11:49:59
7055
原创 cannot read system data from XML file
但是不知道是哪里的问题,咨询了普中客服说,可能是文件位置不正常,但我认为之前很长一段时间都是可以正常下载程序的,应该不是文件位置的位置,况且以前的经验是,如果位置有问题,在编译的时候就会提醒找不到头文件。然后第二种方法是,关闭开发板电源,断开下载器和开发板以及电脑的连接,然后打开开发板,看指示灯是否闪烁,然后将下载器插到开发板上,最后下载器连接电脑,这个做法我记得刚开始有一个工程是可以正常下载了,但是几次之后还是不行,这个问题苦恼了很久。(可以正常下载的工程叫做工程1,不能正常下载的工程叫做工程2)
2023-05-23 10:37:38
2334
1
原创 CCS新建工程教程
接下来我们在 User 工程目录下新建一个 main.c 源文件,选择 User 目 录右键点击选择 New->Sourc File,填写源文件名,这里我们要新建的是 main.c, 所以填写 mian.c,点击 Finish。④:前面我们在打开 CCS 软件的时候已经设置了工程项目的默认空间,所以 “Location”默认就是我们设置的路径,如果不是请设置前面说的工作路径。②:DSP 的开发过程中,仿真器的使用必不可少,所以这里需要选择仿真器 的类型,我们仿真器是 版本,所以要选择该类型。
2023-05-23 09:48:10
5861
2
原创 Unconstrained Logical Port: 21 out of 109 logical ports have no user assigned specific location cons
在网上看到了很多方法,大部分都是说需要重新设置一些文件,或者说是xdc文件的注释不能和代码写在同一行,但是这些我都试了还是不行,我就根据他的建议加了一句 set_property SEVERITY {Warning} [get_drc_checks UCIO-1],然后就可以了。
2023-05-22 09:43:56
804
1
原创 DSP与FPGA通过XINTF并行通信的实验过程
可能是因为FPGA当中的输出IO不是很稳定,听了老师建议,在VIVADO当中将输出IO配置成上拉模式,但这个只能是默认配置一个50欧姆的上拉电阻,结果还是不理想。DSP和FPGA都是用的开发板,用的普通的杜邦线连接(16bit),然后在VIVADO当中用ila观察信号,在DSP当中用仿真器观察变量数值,对于XINTF的读写,其实是先要定义一段zone当中的地址,然后定义某一个信号在该地址,当对该变量进行赋值时,就会产生写时序,当把该变量赋值给另一个变量或者用DMA进行搬运时,就会自动产生读时序。
2023-04-13 10:15:43
3008
6
原创 CCS通过dat文件导入数据计算出结果再导出数据
然后导入dat文件,就是按照上面头文件的要求产生的文件(这个步骤可以用matlab产生,也可以自己制作,新建一个txt文件,然后将文件后缀改为.dat即可,然后将需要导入的数据,在excel当中放到一列,然后复制粘贴到该dat文件下,然后在第一行写入头文件即可)其次就是怎么确保在程序当中使用的变量是用的这些数据:是将首地址放到一个指针里面,然后再把它的值赋给变量,程序执行之后,可以在variables当中查看是否成功;需要导入的数据准备好之后,就可以在CCS当中进行仿真了,该种情况适用于。
2023-04-13 10:14:12
5225
3
原创 xilinx FPGA DDR3 IP核(VHDL&VIVADO)(用户接口)
那么就是将数据先写进fifo0(只要fifo0没有满就可以一直写),然后将fifo0的数据读进ddr3(改fifo使用FWFT模式,也就是rd_en和fifo_dout同时有效,将rd_en和ddr3的写使能信号连接),然后将ddr3的数据读出并写入到fifo1(在fifo1没满之前一直写,将ddr3的读出数据和读出数据有效信号和fifo1的写数据和写使能分别连接),后面就可以根据读出数据时序,在fifo1没空的时候读数据(这里就是只要fifo1没空就一直读)时钟合并一个共用的 200MH 输入。
2023-04-12 15:19:39
982
原创 xilinx FPGA FIFO IP核的使用(VHDL&ISE)
当FIFO不为空时,读取操作将会成功。这个实现使用块RAM或分布式RAM用于内存,用于写和读指针的计数器,二进制代码和灰度代码之间的转换用于跨时钟域的同步,以及用于计算状态标志的逻辑。测试结论就是,用fifo读写可以避免用rom,因为数据还没有写入时,一直读出上一次的数据,用fifo就可以在vaild为高时去读取,这样读出的数就是依次写入的数据。在标准的fifo模式下,当没有读使能时,dout是不会有输出的,但是如果使用模式,我测试了,在没有读写使能的前提下,任然会输出第一个读数,并且会早于读使能。
2023-04-12 15:16:07
1931
原创 VHDL经验贴(长期更新)
当然,之前还有一个问题是,状态机状态过多,我上次一共有10个状态,很容易卡进一个状态里出不来,然后把。没对上,但因为也定义了,就没有报错,代码要检查仔细啊,家人们!,可以用ila去看一看,前提是ila时钟要比状态机时钟快。找了很久原因,结果是。
2023-04-12 15:15:45
309
原创 xilinx FPGA RAM IP核的使用(VHDL&ISE)
2.配置ip核:注:简单双端口RAM提供A、B两个接口,如图3-4所示。通过端口A允许对内存进行写访问,通过端口B允许对内存进行读访问。注意:对于Virtex系列架构,读访问是通过端口A,写访问是通过端口B。然后点击next和finish完成ip核配置。
2023-04-12 15:11:32
747
原创 测量正弦电压之VFC模块(电压转频率,proteus仿真)
要求:对一个连续电压信号进行测量,该信号为正弦电压信号,频率是100KHZ,峰峰值为2V。 思路1:选择一些器件根据AD转换原理去搭建一个系统,进 行测量。思路2:将电压转化成频率,再进行测量。电压频率转换器VFC(Voltage Frequency Converter)是一种实现模数转换功能的器件,将模拟电压量变换为脉冲信号,该输出脉冲信号的频率与输入电压的大小成正比。用的lm331基本VFC转换电路:VFC电路——调基准频率:根据公式ƒOUT = (VIN / 2.09 V.
2023-04-12 15:08:25
1804
2
原创 VIVADO小技巧
1.initial语句在仿真开始时对各变量进行赋值,这个初始化过程不需要任何仿真时间,且一个模块可以有多个initial语句块2.宏定义 'define 标识符(宏名)字符串(宏内容)eg:'define signal string 模块里面的string 就会被换为signal ,(可以用于替换大部分变量名)...
2023-04-12 15:03:12
612
原创 DSP28335使用时的经验总结 主要是使用大维度的二维数组的一些问题
还有就是cmd文件是可以自己修改的,因为是初学,以为是配置文件。首先是数组的使用,可以用指针,也可以直接数组,其实在内存当中的二维数组就是一维的,它是先存一行,再存其他行,在连续地址当中的存储顺序就是:a[0][0]、a[0][1]、a[0][2]....a[1][0]、a[1][1]、a[1][2].............'关于指针跟上面等效表示数组就是:(*((Uint16 *)a+(N*i)+j)),其中N是数组的列数大小,即一行有多少个数据,然后i是行号,j是列。这里可以给个实例,在函数里面。
2023-03-28 15:04:42
1561
原创 CCS v6 导入工程调试仿真烧写程序教程
器 USB 口连接到电脑上→点击 CCS6 的 Connect 键;这是推荐的上电顺序,当。连接好→将配置的 USB 线或电源适配器给开发板供电并将电源开关按下→仿真。点击CCS图标,选择要放置的workplace。选择load按钮,选中工程生成的.out文件。然后点击烧写按钮:点击这个“甲壳虫”的标号。3.编译程序:点击这个“小锤子”的标号。然后就可以点击仿真进行调试了。发生连接错误时请按此顺序上电。就可以在板子上看到实现结果。选择好之后,点击save。
2023-03-22 10:25:55
6131
1
原创 CCS6.13安装教程及安装包
第一次打开会弹出:点击YES就可以,从ti的官网下载安装一些插件,这个过程和网速有关。更不更新这个意义不大,不更新也不会出现问题。那就更一下吧,点“Run in Background”让它后台运行去吧。下载完之后,点击右键,以管理员方式运行。工具也全部勾选:然后点击finish。然后就可以进行编程了。
2023-03-11 13:57:48
1564
原创 自定义数据类型,各模块共享数据类型(VIVADO&VHDL)
但是depth38_2_width16里面的数据类型是depth38_width16,也就是在用depth38_2_width16是只能用A(i),i的范围是0——37.然后depth38_38_width16里面的数据类型是std_logic_vector(15 downto 0),也就是在用depth38_38_width16是只能用A(i,j),i和j的范围是0——37. 所以在使用信号时,一定要是同一数据类型的数据进行操作。就是一个二维数组,里面的元素是37*37个16bit的数据。
2023-03-09 09:47:56
688
原创 visual studio创立上位机软件(C#)(定时器)
由于最近使用FPGA的通信模块,对于上位机的功能需要一些改动,开始学习一下上位机软件的制作,因为没有学过C++等等,更不了解上位机软件的制作流程。最近看了一点学习资料,觉得是很好的入门教程。通过一个定时器一个小软件的制作,来熟悉整个流程。下面是该软件的制作过程。然后点击debug(或者release)旁边的绿色三角形,就可以看到效果(一个是调试版本,一个是发布版本)完整工程放在qq群了,稍后会发布视频到哔哩哔哩。
2022-12-19 10:51:16
4873
原创 usb传输时的数据格式处理(十进制 十六进制的转换)
因为使用usb和单片机进行数据交互时,需要使用纯二进制文件,如果单纯发送txt文件,读进去的就是改文件的ascii码数值。
2022-11-05 15:13:52
1471
原创 Vivado联合modelsim仿真卡在executing analysis and compilation step阶段
三、如果上面步骤都对了,还是不行,就点击setting里面的restore,然后重新打开工程,或者将仿真题改成vivado自带的,跑一遍仿真,如果还是不行,那只能说没救了,但是一般如果vivado的仿真跑不出来,肯定是仿真文件有错,就去按照提示改一下,然后能跑之后,再去换回modelsim就可以。总的来说,vivado联合modelsim有问题,一般只有两个方面,仿真文件有错,但没有报错,可以在modelsim里面单独打开仿真文件,编译一下,一般也就会发现了。
2022-10-29 17:27:09
3445
原创 xilinx FPGA 开方(cordic)ip核的使用(VIVADO&VHDL)
选择开发模式,然后模式可以选择最优或者最大,数据格式可以选择无符号整数或者无符号分数,然后再选择输入位宽,以及就散模式,向下取整或者四舍五入等等。数据在使能信号有效时输入,在输出使能有效时输出。
2022-10-24 16:56:44
3187
原创 xilinx FPGA 除法器ip核(divider)的使用(VHDL&Vivado)
可以看到,因为除数和被除数的ready信号在使能无效时,一直为高,所以当除数被除数第一次被使能时,使能和ready信号是同时有效的,所以就直接在数据输入后的第三个时钟输出正确结果。综上,就是我们让使能信号两个时钟有效,就可以了,因为在这两个时钟里面,ready信号都只可能有效一次,然后数据两个时钟也是 一样的,就会在输出valid有效输出正确结果。valid是数据输入有效信号(in),ready是数据已经输入的标志信号(out),但是在该模式下对于除数和被除数是否有效的判定是一样的,只是两个过程是独立的,
2022-10-24 16:10:08
17909
1
原创 xilinx FPGA 乘法器ip核(multipler)的使用(VHDL&Vivado)
五、仿真结果::可以看到vivado的乘法器ip核和ISE的一样,当ce有效时,乘法器的乘积会在下一个时钟得出。可以选择两个变量数相乘,也可以选择一个变量输入数据和一个常数相乘。可以选择mult(dsp资源)或者lut(fpga资源)二、编写VHDL程序:声明和例化乘法器ip核。可以选择速度优先或者面积优先。还有时钟使能和复位功能。可以自己选择输出位宽。
2022-10-23 18:16:08
7325
原创 xilinx FPGA usb模块的使用(VHDL)
-之所以不像小梅哥里面写的去使能fifo0的读使能,是因为小梅哥自己写的fifo好像不会存在延时,所以他的fx2_slwr和fifo_rd(fifo_pop)是同时有效的,根据fx2的原理可以知道,当fx2_slwr为0时,就可以将fifo里面相应的数据传输给fx_data,然后发送到上位机,这个前提是fx2和fifo的时钟是一致的。因为fx2用的是同步(1.1 第一点,是对fifo0_rd_en ,fx2_slwr,fx2_fdata_out的使能不一样。),而fifo也是根据时钟信号去实现功能的。
2022-10-02 19:10:54
3193
原创 vivado ila没有信号,也不能添加
这种情况就是下载的程序不对,或者没有下进去,一般是两种情况,第一,下载了固化的bit文件,那么必须先掉电才有效。第二种,下载程序时,没有掉电就打开硬件连接了,此时没有下载新的bit文件,里面还是上一次的bit文件,但此时ila会自动打开。所以点击program device重新下载程序即可。
2022-10-02 15:31:33
5820
1
原创 xilinx FPGA FX2 usb通信模块之上位机发送的数据格式
这是因为fpga没有对数据进行处理,而fpga usb通信整个传输过程就是上位机将要发送的文件,将该符号对应的ascii码发送到fx2 usb的 模拟fifo当中(而小梅哥的开发板当中使用的fx2 usb模块,是规定为16位的数据格式),然后就传输到fpga的接收端口,当然如果fpga不做任何处理,就将该数据传输给usb的fifo当中,然后传输到上位机,并解析成对应的符号(ascii码),当然得到的数据就跟上位机发送的一样。然后保存文件,再进行传输,就可以看到上位机收到的和fpga当中的数据是一致的。
2022-10-02 14:55:07
1697
原创 File does not exist or is not accessible:‘c:/Users/Administrator/Desktop/FX2_Stream_IN/FX2_Str
可以看到upgrade selscted是高亮的,然后选择锁住的ip核,点击upgrade ,然后一直点击ok就可以了,ip核就会解锁了。当使用vivado编译时,如果是从其他地方拷贝过来,并且是更换了器件类型的,那么可能ip核会出现错误,编译不成功。右击ip核,点击report ip status。
2022-09-26 15:40:41
6755
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人