吉大秦少游
吉林大学硕士,研究兴趣为芯片数字设计
展开
-
verilog代码复用总结
文章目录一、verilog中有关代码复用的语法二、代码复用示例一、verilog中有关代码复用的语法1、连接符“{}”{4{1'b1}} 或者 {5'd6, 5'd8} 2、参数(Parameter)型常量定义parameter 参数名=表达式; 或者 localparam 参数名=表达式;parameter DATA_WIDTH = 20; 3、function函数定义函数内部语句只能写组合逻辑。function [7:0] adder;input [6:0] a;input [原创 2022-03-16 10:58:36 · 879 阅读 · 0 评论 -
Verilog中function、generate的用法
文章目录function特点for和if的使用case的用法递归调用generategenerate-forgenerate-if和casefunctionverilog中的function类似于软件函数或者matlab中的函数,用于实现某一功能。但具体细节上有些微区别:特点1)不能有always块,也就是不考虑延时,一般都是使用for、case、if-else完成函数功能。2)至少有一个输入变量。3)只有一个返回值,且没有输出。5)函数可以调用其他函数,但是不能调用任务。用途:验证中可用于原创 2022-03-16 08:56:53 · 680 阅读 · 0 评论 -
FPGA总线实现形式
文章目录用选择器实现总线用三态门实现总线用选择器实现总线用选择器的思想来实现总线:总线从宏观上看是“多写多读”的,但是从微观上来看是“一写多读”,因为系统中的各个部件只能分时使用总线,而无法同时使用。也就是在某一固定时刻,总线是“一写多读”的,只不过通过一写控制电路,我们貌似可以在不同时刻为总线分配不同的驱动源,以达到宏观上的“多写多读”。下面用FPGA来简单地实现总线:利用多路选择器的选通特性,可以实现总线的功能,这也是FPGA芯片内部设计总线时最常用的方法,因为FPGA芯片内部有些非常丰富的MU转载 2022-02-12 09:33:11 · 1998 阅读 · 0 评论 -
FPGA的IP核之软核、硬核、固核
IP核(Intellectual Property core),即知识产权核。IP核是一段具有特定电路功能的硬件描述语言程序,该程序通常与集成电路工艺无关,可以移植到不同的半导体工艺中去生产集成电路芯片。由于IP核将一些在数字电路中常用,但比较复杂的功能块设计成可修改参数的模块,因此FPGA的设计人员可以通过调用相关IP核来完成所需逻辑功能,从而节省了大量的开发时间。调用IP核能避免重复劳动,大大减轻设计人员的负担,因此使用IP核必然成为将来FPGA设计的一个发展趋势。IP代表知识产权,从它的名字我们就转载 2022-02-11 20:51:15 · 3249 阅读 · 0 评论 -
FPGA设计中RAM和ROM初始化的方法
文章目录RAM的初始化方法方法1:小型RAM复位时按地址写入初值方法2:大型RAM通过init和for循环来初始化方法3:大型RAM通过读文件形式初始化ROM的初始化方法方法1:小型ROM按地址写入初值方法2:大型ROM通过读文件形式初始化FPGA设计中RAM和ROM作为存储器用来存储可变或不可变类型的数据,根据使用场景不同有不同的初始化方法。ROM初始化一般是加载固定数据,RAM声明时默认为不定态数据,初始化时可以让数据为全1或者全0。RAM的初始化方法方法1:小型RAM复位时按地址写入初值针对小原创 2021-11-25 15:45:56 · 2848 阅读 · 0 评论 -
Verilog除法器的设计总结
Verilog除法器的设计总结1 概述2 基于减法和移位实现除法2.1 组合逻辑实现的实例2.2 时序逻辑实现的实例3 基于乘法和移位实现除法1 概述Verilog实现除法器需要根据实际使用场景进行调整,但整体来说实现的算法有两类:基于减法和移位实现除法基于乘法和移位实现除法下面将对两类算法的实现过程和原理进行总结,并给出基本的实例。2 基于减法和移位实现除法2.1 组合逻辑实现的实例对于32的无符号除法,被除数a除以除数b,他们的商和余数一定不会超过32位。首先将a转换成高32位为原创 2021-07-04 22:59:36 · 2662 阅读 · 0 评论 -
Verilog参数例化时自动计算位宽的函数
在工程中,参数化设计是非常常见的。模块接口的位宽,常见的有8位、16位、32位、64位和128位等;虽然功能相同,仅因为位宽不同,就要另外写一个模块,那设计工作就很繁复了。为此,我们可以采用参数化来实现,即用parameter来定义常数。但是参数化会遇到一个问题,就是某些信号的位宽跟此参数有着密切的关系。例如,我们可以使用parameter来定义FIFO的深度,但是表示FIFO深度的信号usedw,其位宽是跟参数相关的。如果深度为512,usedw位宽是9位,如果深度为1024,其位宽是10位。这时如果.原创 2021-05-21 15:26:12 · 3879 阅读 · 0 评论 -
搞定can‘t place multiple pins assigned to pin location pin_101
Quartus Prime编译时,遇到了下面的问题:can't place multiple pins assigned to pin location pin_101根据错误提示信息,在管脚PIN101处分配了多个引脚,这是怎么回事?查看了一下电路原理图,如图2所示,PIN101引脚既可以作为普通IO,也可以作为可编程IO。点击Quartus II软件菜单栏“Assignments–>Device”,在弹出的对话框中选择Device and Pin Options,在弹出的对话框中选择Dua原创 2021-05-13 20:21:05 · 2036 阅读 · 1 评论 -
Verilog呼吸灯练习
文章目录1 实现“暗1s亮Ns的闪烁控制”2 led呼吸灯的实现1 实现“暗1s亮Ns的闪烁控制”题目:实现暗1s亮1s,暗1s亮2s,暗1s亮3s的循环闪烁module paomadeng( input clk, input rst_n, output reg [11:0] led);// 50MHz, clk = 20nsparameter one_second = 50_000_000;reg [28:0] cnt1;reg [28:0] x;reg原创 2021-05-13 14:46:03 · 252 阅读 · 0 评论 -
Quartus Prime固化烧结文件的步骤
步骤一:点击Flie,选择Convert Programming File选项,在Programming file type选项中选择.jic文件格式。 步骤二:在Configuration Device选项中选择配置芯片步骤三:在File name选项中更改生成的.jic文件名称以及存放的位置。步骤四:在Input files to convert 栏中,点击选择Flash Loader,点击Add Device按钮,选择Flash Loader的芯片,点击SOF Data,选择相应的SOF转载 2021-05-11 18:37:46 · 1916 阅读 · 1 评论 -
Quartus prime工程中各种文件的后缀及意义
转载:https://blog.csdn.net/wu_yi_xiang/article/details/57553132转载 2021-05-10 23:55:29 · 1759 阅读 · 0 评论 -
usb_blaster的安装
在使用usb_blaster进行FPGA烧录之前需要先进行usb_blaster驱动的安装,但是这个驱动比较特殊,都是dll文件和sys文件,不像常规驱动是exe,百度了驱动的安装方法,如下:首先高版本的Quartus ii和Quartus Prime都在软件安装之后的目录下面有usb_blaster驱动文件的,不需要额外去找驱动程序。虽然有的开发板会额外给usb_blaster的驱动。安装USB-Blaster驱动首先我们需要一个USB-Blaster,一般某宝的商家买板子时会配一个,没有的话小伙伴原创 2021-05-10 23:41:05 · 4613 阅读 · 0 评论 -
如何编写带测试向量文件的Testbench
文章目录测试向量文件的好处实例测试向量文件的好处高效的编写测试程序对复杂模块的测试十分重要。相对于测试信号有多种可能性的模块,编写带测试向量文件的测试程序能极大提高模块测试的效率。测试向量文件的好处在于在输入测试信号较多时,显然以测试向量的方式进行仿真效率更高些。测试向量中可以加入预期结果,和实际结果打印出来,方便对比观察,非常直观。测试向量往往具有规律性,可采用编程的方式(Matlabe C等)来获得。实例下面以一个阶乘的例子来说明测试向量的好处。下面这个是阶乘的文件,文件名为fact原创 2021-05-09 21:16:54 · 500 阅读 · 0 评论 -
Verilog实现序列检测器
文章目录1 问题2 FSM分析3 状态机实现3.1 状态机实现3.2 测试激励3.3 仿真3.4 三段式FSM1 问题利用Verilog实现输入的序列检测,输入是1bit的数据,检测序列为10010,若检测到则输出1,否则输出0。允许序列重复(比如10010010,前面5个数字和后面5个数字都被检测到了,则输出为00001001,说明有两次检测到10010)。2 FSM分析网上看到有人画了如下的状态转移图:上图中的S6,S7状态实际上分析一下是多余的,S7状态可以等效为S1,S6可以等效为idl原创 2021-05-08 18:03:03 · 2151 阅读 · 0 评论 -
Verilog 除法器设计(包含单步设计和流水线设计)
Verilog 除法器设计(包含单步设计和流水线设计)1 除法器原理(定点)2 除法器设计2.1 单步运算设计2.2 流水级例化1 除法器原理(定点)和十进制除法类似,计算 27 除以 5 的过程如下所示:除法运算过程如下:(1) 取被除数的高几位数据,位宽和除数相同(实例中是 3bit 数据)。(2) 将被除数高位数据与除数作比较,如果前者不小于后者,则可得到对应位的商为 1,两者做差得到第一步的余数;否则得到对应的商为 0,将前者直接作为余数。(3) 将上一步中的余数与被除数剩余最高位 1转载 2021-04-25 16:24:05 · 7308 阅读 · 3 评论 -
Verilog--除法器的简单实现
Verilog--除法器的简单实现除法器在FPGA里怎么实现呢?当然不是让用“/”和“%”实现。在Verilog HDL语言中虽然有除的运算指令,但是除运算符中的除数必须是2的幂,因此无法实现除数为任意整数的除法,很大程度上限制了它的使用领域。并且多数综合工具对于除运算指令不能综合出令人满意的结果,有些甚至不能给予综合。即使可以综合,也需要比较多的资源。对于这种情况,一般使用相应的算法来实现除法,分为两类,基于减法操作和基于乘法操作的算法。基于减法的除法器的算法:对于32的无符号除法,被除数a除以除转载 2021-04-25 00:33:09 · 13742 阅读 · 7 评论 -
FPGA分频器设计总结
FPGA再进行电路设计时,往往需要不同频率的时钟,一般的做法是使用PLL或者DCM实现,这当然可以保证PLL之后的时钟时序变得很好,而且可以产生时钟复位的lock信号。但有时在时钟性能要求不高时,我们也可以自己设计简单的分频电路,这样消耗的资源也会比较少,并能实现所需要的时钟。分频器设计可以分为两种:偶分频和奇分频。...原创 2021-04-20 23:20:26 · 849 阅读 · 0 评论 -
FPGA之异步FIFO篇
FPGA之异步FIFO篇1 异步FIFO的用途1.1 解决读写时钟不一致的数据传输1.2 解决数据宽度不一致的接口问题2 异步FIFO的关键原理3 异步FIFO代码1 异步FIFO的用途异步FIFO的用途可以总结为两块:1.1 解决读写时钟不一致的数据传输异步FIFO读写分别采用相互异步的不同时钟。在现代集成电路芯片中,随着设计规模的不断扩大,一个系统中往往含有数个时钟,多时钟域带来的一个问题就是,如何设计异步时钟之间的接口电路。异步FIFO是这个问题的一种简便、快捷的解决方案,使用异步FIFO可原创 2021-04-16 12:49:12 · 630 阅读 · 0 评论 -
Verilog信号边沿检测方法总结
Verilog信号边沿检测方法总结1 单比特信号——打拍取反,再逻辑与2 多比特信号——移位寄存器信号边缘检测应用十分广泛,例如:通信协议的时序操作,按键的检测等,都应用到按键的检测。按键的检测分为上升沿和下降沿两种,基本的检测思想是一致的。1 单比特信号——打拍取反,再逻辑与方法:对于单比特数据,检测上升沿和下降沿一般通过打拍取反,再进行逻辑与操作。例子如下:input_risedge = (~in_r1) & in; //检测输入信号 in 的上升沿input_falledge原创 2021-04-15 18:34:57 · 2079 阅读 · 0 评论 -
Verilog-LFSR线性反馈移位寄存器
Verilog-LFSR线性反馈移位寄存器1 LFSR 是什么2 几道题目2.1 题目1:5-bit LFSR2.2 题目2:3-bit LFSR2.3 题目3:32-bit LFSR1 LFSR 是什么在HDLBits网站做到了几道关于LFSR,Liner Feedback Shift Register线性反馈移位寄存器的题目,总结如下。所谓LFSR,就是指移位寄存器的某些位在移位之前进行了异或操作。普通的移位寄存器中下一级别D触发器的输入是上一级别D触发器的输出,而LFSR下一级别D触发器的输入不原创 2021-03-26 19:40:53 · 1204 阅读 · 0 评论 -
verilog利用选择器和D触发器搭建移位寄存器
题目:Consider the n-bit shift register circuit shown below:Write a top-level Verilog module (named top_module) for the shift register, assuming that n = 4. Instantiate four copies of your MUXDFF subcircuit in your top-level module. Assume that you are goi原创 2021-03-25 18:27:55 · 1120 阅读 · 0 评论 -
Verilog写一个时钟
题目:Create a set of counters suitable for use as a 12-hour clock (with am/pm indicator). Your counters are clocked by a fast-running clk, with a pulse on ena whenever your clock should increment (i.e., once per second).reset resets the clock to 12:00 AM.原创 2021-03-25 11:35:25 · 1639 阅读 · 0 评论 -
Verilog计数器0~9999
题目:Build a 4-digit BCD (binary-coded decimal) counter. Each decimal digit is encoded using 4 bits: q[3:0] is the ones digit, q[7:4] is the tens digit, etc. For digits [3:1], also output an enable signal indicating when each of the upper three digits shou原创 2021-03-25 10:00:10 · 2066 阅读 · 0 评论 -
Verilog计数器搭建时钟
HDLBits官网有一道题目:From a 1000 Hz clock, derive a 1 Hz signal, called OneHertz, that could be used to drive an Enable signal for a set of hour/minute/second counters to create a digital wall clock. Since we want the clock to count once per second, the OneHer原创 2021-03-23 18:13:10 · 450 阅读 · 0 评论 -
Verilog实现双边沿触发器的方法及分析
在做HDLBits发现有一道双边沿触发器的题目,如下:You’re familiar with flip-flops that are triggered on the positive edge of the clock, or negative edge of the clock. A dual-edge triggered flip-flop is triggered on both edges of the clock. However, FPGAs don’t have dual-edge t原创 2021-03-16 16:48:36 · 3445 阅读 · 0 评论 -
verilog中多比特数据变化的边缘检测方法总结
verilog中多比特数据变化的边缘检测方法总结1 两道练习题2 原理3 两道题目的参考答案1 两道练习题在做HDLBits遇到了两道题目涉及多比特数据某些位发生变化对应的边缘检测,如下:单边检测For each bit in an 8-bit vector, detect when the input signal changes from 0 in one clock cycle to 1 the next (similar to positive edge detection). The o原创 2021-03-16 15:50:02 · 1698 阅读 · 0 评论 -
Verilog中generate用法总结
Verilog中generate用法总结1、generate-for2、generate-if3、generate-case生成语句可以动态的生成verilog代码,当对矢量中的多个位进行 重复操作 时,或者当进行多个模块的实例引用的重复操作时,或者根据参数的定义来确定程序中是否应该包含某段Verilog代码的时候,使用生成语句能大大简化程序的编写过程。生成语句生成的实例范围,关键字generate-endgenerate用来指定该范围。生成实例可以是以下的一个或多个类型:(1)模块;(2)用户定义原创 2021-03-15 14:51:14 · 5770 阅读 · 0 评论 -
Verilog动态截取固定长度
Verilog在数据剪裁拼接处理方面很快捷,截取用[],拼接用{}。但是有时候可以碰到动态截取固定长度的应用场景。例如,HDLBits官网有一道题目Mux256to1v:Create a 4-bit wide, 256-to-1 multiplexer. The 256 4-bit inputs are all packed into a single 1024-bit input vector. sel=0 should select bits in[3:0], sel=1 selects bits原创 2021-03-15 10:37:45 · 2764 阅读 · 0 评论 -
dat模板文件读取的Python脚本
FPGA对视频检测中检测数字时,经常用模板匹配的方法,而模板文件很多以dat文件n行1列的格式存储,dat模板文件读取时需要按照模板的宽度和高度呈现。读取的脚本如下:### read Monitor FPGA template from .dat fileimport sysimport osimport xlwtdat_name = '\\Template_FD.dat'template_width = 34source_path = sys.path[0]dat_file_path原创 2021-03-01 11:13:03 · 574 阅读 · 4 评论 -
FPGA工程代码追溯的完整性检查(文件级别)的Python脚本
FPGA工程中做代码追溯时,如果追溯的比较粗一些,需要追溯到Verilog代码中.v文件,VHDL代码中的.vhd文件。为便于核查追溯是否有遗漏,编写了一个脚本,统计上述需要追溯的块元素,代码如下:import xlrdimport sysimport reimport os########################################################### Get source code name list #######################原创 2021-03-01 10:58:17 · 299 阅读 · 1 评论 -
统计FPGA工程中always块与process块的Python脚本
FPGA工程中做代码追溯时,如果追溯的比较细致,需要追溯到Verilog代码中的always块,VHDL代码中的process块,module的例化名,或者对assign语句的TAG标签。为便于核查追溯是否有遗漏,编写了一个脚本,统计上述需要追溯的块元素,代码如下:# coding=utf-8import osimport xlwt #操作excel模块import sysimport re# print(sys.path[0])table_path = sys.path[0]+'\\Mo原创 2021-03-01 10:43:18 · 399 阅读 · 0 评论 -
ModelSim如何关联第三方编辑器(Notepad++、GVIM)
打开Modelsim软件,在Transcript命令行里输入命令(引号内为编辑器路径,可根据需要替换成所需编辑器的路径):proc external_editor {filename linenumber} { exec "D:\\Program Files\\Notepad++\\notepad++.exe" $filename}回车,再输入:set PrefSource(altEditor) external_editor注意路径里的\必须都为两个。...转载 2021-01-26 00:03:34 · 5014 阅读 · 5 评论 -
负数的二进制表示及左移功能的验证
Verilog代码中经常处理小数时经常需要左移 n 位,实际上相当于放大对应的 2^n 倍。但当涉及带有小数的负数呢,做了验证结果是一样的。比如我们有十进制数 -5.5,先将其表示成二进制数:先看数的绝对值,然后将数分成整数和小数两部分。整数采用除基数再倒取余数法;小数部分采用乘基数再取整数法。(1)整数部分为5:5 / 2=2……12 / 2=1……01 / 2=0……1故整数6的二进制数为101(2)小数部分为0.50.5 x 2=1 取出整数1如果十进制的每一位都用四位二进原创 2020-12-23 23:15:01 · 767 阅读 · 0 评论 -
UDP的定义与使用
UDP定义的基本格式UDP在Verilog HDL也可以看成是一个模块,因此与module模块的定义在语法是同一级别的,所以UDP的定义不能在module与endmodule之间。一般一个UDP定义也是单独一个文件。UDP定义的基本语法如下所示:// UDP 定义的基本语法格式primitive udp_name(port_list) port_declaration udp_bodyendprimitive// 定义UDP的关键词不是 module,而是 primitive// udp原创 2020-11-24 22:10:38 · 1054 阅读 · 0 评论 -
LCD显示的一些基本概念以及DSI的一些clock解释
转载:https://blog.csdn.net/dddd0216/article/details/78195153数字视频的基本概念源自于模拟视频。对于模拟视频我们可以这样理解:视频可以分解为若干个基本视点(像素),每个像素都有独立的色彩信息,在屏幕上依次将 这些点用电子枪按照行和列打出来,就形成了一幅完整画面,连续的打出画面,利用人眼的延迟特点就可以“显示”动态的图像了。水平消隐:电子枪从左到右画出象素,它每次只能画一条扫描线,画下一条之前要先回到左边并做好画下一条扫描线的准备,这之间有一段时间叫做转载 2020-11-09 10:36:57 · 1169 阅读 · 0 评论 -
Verilog设计电路的时序要点及时序仿真
转载:https://blog.csdn.net/fengyuwuzu0519/article/details/72599432一个电路能跑到多少M的时钟呢?这和电路的设计有密切联系(组合逻辑的延时),我们知道电路器件都是由一定延迟的,所以信号的仿真很重要。如果延迟时间大于时钟,就会导致时序违例,出现逻辑错误。项目要求300M怎么实现呢?学习涉及如下:建立时间保持时间;电路延时时钟频率关键路径流水线设计来提高CLK首先来看下D触发器一、D触发器时序分析上升沿前后对D有一定要求,称转载 2020-11-09 11:29:47 · 2326 阅读 · 0 评论 -
Verilog练习:流水灯显示
文章目录题目:流水灯程序及testbench题目:流水灯程序及testbench// liushuideng.vmodule liushuideng( input clk, input rst_n, output reg [11:0] led ); // time counter's parameter parameter TIME_1S = 50; // reg [11:0] led; reg time_1s; reg [25:0] cnt; //原创 2020-11-05 14:21:46 · 569 阅读 · 0 评论 -
Verilog练习:数码管显示
Verilog练习:数码管显示题目:数码管显示程序及testbench题目:数码管显示程序及testbench// shumaguan.vmodule shumaguan( input clk , input rst_n , output reg[7:0] segment , output wire[7:0] seg_sel ); // para definiti原创 2020-11-05 13:57:19 · 4722 阅读 · 1 评论 -
二进制和格雷码转换方法及程序
进制转格雷码:简单来说就是把二进制码右移一位再与二进制异或。assign wr_poi_gray = wr_poi ^ (wr_poi>>1); //produce wr pointer gray code;格雷码转二进制:格雷码转二进制是从左边第二位起,将每位与左边一位二进制码的值异或,作为该位二进制码的值。比如四位的码:bin[3] = gray[3];bin[2] = gray[2]^bin[3];bin[1] = gray[1]^bin[2];bin[0] = gray原创 2020-10-26 12:50:11 · 1556 阅读 · 1 评论 -
FPGA之同步FIFO篇
我想大家都知道,队列是计算机系统中一种比较基本的数据结构。作为队列中的一种,先进先出的FIFO是一种比较常用的存储器单元。FIFO通常有读允许端口、写允许端口、数据输入端口、数据输出端口、FIFO状态端口等信号端口。其中,FIFO状态端口输出当前FIFO的状态——满、未满或空。16*16位FIFO的功能框图如下。其中,clock为系统时钟信号输入,reset为系统复位信号,read为读数据信号允许信号,write为写入FIFO允许信号,fifo_in[15:0]为数据输入,fifo_out[15:0]为数原创 2020-10-26 12:31:59 · 694 阅读 · 0 评论