FPGA入门
文章平均质量分 79
FPGA入门
FPGA从入门到跑路
微信公众号:FPGA从入门到跑路
展开
-
FPGA入门系列:计数器
60进制计数器的显示需要两个数码管。其中一个数码管显示计数低位0-9,另一个数码管显示计数高位0-5。为了与两个数码管相连,可以设计两个4位寄存器变量:一个寄存器变量为0-9的变化;链接:https://mp.weixin.qq.com/s/YGLIwpxsCxuMrUC-zXGYoQ。计数器是一种典型的时序器件,常用于对时钟脉冲的个数进行计数,还用于定时、分频、产生同步脉冲等。在使用硬件描述语言设计计数器时,不需要专门设计触发器,而是直接对寄存器变量进行操作。按触发方式分:同步计数器和异步计数器。原创 2024-08-02 17:45:07 · 591 阅读 · 0 评论 -
FPGA入门系列:亚稳态 (metastablility)
由于异步输入信号不依固定的频率或相位关系相对于采样它的时钟到达,可以在任意时间改变,这样异步输入信号在一些点上破坏了触发器的建立/保持窗口,从而可能使触发器保持旧值、或者改变为新的值、或者可能变成亚稳态。当异步信号被触发器采样时,信号可能正在发生翻转,将以一定的概率采样到 在触发器建立或保持时间内的逻辑值;异步信号同步化(将异步信号同步到采样时钟域,即采用高达一个时钟周期的延时来消释第一个触发器的亚稳态)原创 2024-08-02 17:42:40 · 419 阅读 · 0 评论 -
FPGA入门系列:寄存器是如何构成的&移位寄存器
(4)触发器有记忆功能,由它构成的电路在某时刻的输出不仅取决于该时刻的输入,还与电路原来状态有关。而门电路无记忆功能,由它构成的电路在某时刻的输出完全取决于该时刻的输入,与电路原来状态无关。需要注意的是,在同一时钟上升沿,所有的数值都是同时移位的。可以把4个1位寄存器模块组合在一起,构成4位的寄存器,同理,可以用N个1位寄存器构造成1个N位寄存器。8位移位寄存器由8个D触发器串联构成,在时钟信号的作用下,前级的数据向后移动。移位寄存器是一种在时钟脉冲的作用下,将寄存器中的数据按位移动的逻辑。原创 2024-07-23 17:20:24 · 1485 阅读 · 0 评论 -
verilog行为建模(四):过程赋值
非阻塞赋值不阻塞过程流,仿真器读入一条赋值语句并对它进行调度之后,就可以处理下一条赋值语句。阻塞过程赋值执行完成后再执行在顺序块内下一条语句。原创 2024-07-22 11:16:50 · 410 阅读 · 0 评论 -
verilog行为建模(五):条件语句
in的值赋给o1,但其每位赋值的强度及延迟可能不同。如果o1是一个标量(scalar)信号,则其延迟和前面的条件缓冲器上的门延迟相同。对向量线网(net)的赋值上的延迟情况不同。0赋值使用下降延迟,Z赋值使用关断延迟,所有其他赋值使用上升延迟。这种行为描述方式可以非常灵活的描述时钟,可以控制时钟的开始时间及周期占空比。while:只要表达式为真(不为0),则重复执行一条语句(或语句块)。上面的例子显示出持续赋值的灵活性和简单性。:赋值语句或空语句;:赋值语句或空语句;原创 2024-07-22 11:18:07 · 1387 阅读 · 0 评论 -
Verilog中的高级结构:任务及函数(下)
函数返回值可以声明为其它register类型:integer, real, 或time。在任何表达式中都可调用函数。在关键词begin或fork后加上 : 对块进行命名。disable disable原创 2024-07-19 13:56:47 · 891 阅读 · 0 评论 -
Verilog中的高级结构:任务及函数(上)
结构化设计是将任务分解为较小的,更易管理的单元,并将可重用代码进行封装。这通过将设计分成模块,或任务和函数实现。原创 2024-07-19 13:48:11 · 633 阅读 · 0 评论 -
verilog行为建模(三):块语句
b和a的值被立即采样(时刻0),保存的值在时刻5被赋值给他们各自的目标。注意,另一个过程块可以在时刻0到时刻5之间影响a和b的值。b的值被立即采样(时刻0),这个值在时刻5赋给a。a的值在时刻5被采样,这个值在时刻10赋给b。注意,另一个过程块可能在时刻0到时刻5之间影响b的值,或在时刻5到时刻10之间影响a的值。注意fork-join块是典型的不可综合语句,并且在一些仿真器时效率较差。块语句用来将多个语句组织在一起,使得他们在语法上如同一个语句。并行语句在同一时间同步发生,但由仿真器在另外一个时间执行。原创 2024-07-05 17:54:45 · 425 阅读 · 0 评论 -
verilog行为建模(二):命名事件和行为描述
在行为代码中定义一个命名事件可以触发一个活动。下面的RTL例子中只使用单个边沿敏感时序控制。原创 2024-07-05 17:51:13 · 725 阅读 · 0 评论 -
verilog行为建模(一):基本概念
时序控制@可以用在RTL级或行为级组合逻辑或时序逻辑描述中。可以用关键字posedge和negedge限定信号敏感边沿。敏感表中可以有多个信号,用关键字or连接。下面 的输出锁存的加法器的行为描述中,使用了用关键字or的边沿敏感时序以及用wait语句描述的电平敏感时序。在test bench中使用简单延时(#延时)施加激励,或在行为模型中模拟实际延时。wait用于行为级代码中电平敏感的时序控制。原创 2024-07-05 17:50:24 · 765 阅读 · 0 评论 -
Verilog进行结构描述(四):Verilog逻辑强度(strength)模型
微信公众号获取更多FPGA相关源码:例:onitor例如:原创 2024-06-28 15:13:15 · 596 阅读 · 0 评论 -
Verilog进行结构描述(三):Verilog模块实例化
微信公众号获取更多FPGA相关源码:2.实例数组(Array of Instances)实例名字后有范围说明时会创建一个实例数组。在说明实例数组时,实例必须有一个名字 (包括基本单元实例)。其说明语法为:如果范围中MSB与LSB相同,则只产生一个实例。一个实例名字只能有一个范围。下面以模块comp为例说明这些情况微信公众号获取更多FPGA相关源码:原创 2024-06-27 11:17:52 · 732 阅读 · 0 评论 -
Verilog进行结构描述(二):Verilog基本单元(primitives)
基本单元是Verilog开发库的一部分。大多数ASIC和FPGA元件库是用这些基本单元开发的。基本单元库是自下而上的设计方法的一部分。基本单元引脚的数目由连接到门上的net的数量决定。因此当基本单元输入或输出的数量变化时用户不需要重定义一个新的逻辑功能。Verilog基本单元提供基本的逻辑功能,也就是说这些逻辑功能是预定义的,用户不需要再定义这些基本功能。条件基本单元有三个端口:输出、数据输入、使能输入。原创 2024-06-27 11:16:53 · 419 阅读 · 0 评论 -
Verilog进行结构描述(structural modeling)(一):基本概念
微信公众号获取更多FPGA相关源码:# 1.结构描述(structural modeling)的内容:Verilog HDL不同于C语言这类程序语言,在写Verilog HDL代码时,一定要清楚是在描述硬件,而不是在编写程序。上图电路图可用如下硬件语言描述:上图的RS触发器,可用如下硬件语言描述:Verilog结构描述表示一个逻辑图结构描述用已有的元件构造。原创 2024-06-25 17:04:42 · 473 阅读 · 0 评论 -
Verilog HDL语法入门系列(四):Verilog的语言操作符规则(下)
微信公众号获取更多FPGA相关源码:# 7.移位操作符。原创 2024-06-25 17:01:52 · 1013 阅读 · 0 评论 -
Verilog HDL语法入门系列(三):Verilog的语言操作符规则(上)
逻辑反操作符将操作数的逻辑值取反。例如,若操作数为全0,则其逻辑值为0,逻辑反操作值为1。逻辑反操作符将操作数的逻辑值取反。例如,若操作数为全0,则其逻辑值为0,逻辑反操作值为1。integer和reg类型在算术运算中,integer是有符号数,而reg是无符号数。当两个操作数位数不同时,位数少的操作数零扩展到相同位数。下表以优先级顺序列出了Verilog操作符。按位操作符对矢量中相对应位运算。原创 2024-06-25 16:56:19 · 593 阅读 · 0 评论 -
Verilog的逻辑系统及数据类型(三):寄存器数组(Register Arrays)
STS一个周期的16个时域样值被存入片内ROM中,该ROM共有16个地址空间,每个地址对应16位的字长,其中高8位存储STS样值的虚部,低8位存储STS样值的实部(与IFFT输出保持一致)。STS_din_rdy作为ROM的读使能信号,代表后面的模块准备好接收数据。当STS_din_rdy为高时,计数器以模161形式开始计数161个时钟,生成的地址信号为计数器的低4位,即cnt[3:0]控制ROM将其中存储的16个STS样值重复读取10个周期,形成标准所规定的短训练序列。原创 2024-06-25 16:53:30 · 507 阅读 · 0 评论 -
Verilog的逻辑系统及数据类型(二):参数和参数重载
【代码】Verilog的逻辑系统及数据类型(二):参数和参数重载。原创 2024-06-25 16:50:42 · 436 阅读 · 0 评论 -
Verilog的逻辑系统及数据类型(一):四值逻辑系统
信号可以分为端口信号和内部信号。出现在端口列表中的信号是端口信号,其它的信号为内部信号。对于端口信号,输入端口只能是net类型。输出端口可以是net类型,也可以是register类型。若输出端口在过程块中赋值则为register类型;若在过程块外赋值(包括实例化语句),则为net类型。内部信号类型与输出端口相同,可以是net或register类型。判断方法也与输出端口相同。若在过程块中赋值,则为register类型;若在过程块外赋值,则为net类型。原创 2024-06-25 16:48:36 · 1041 阅读 · 0 评论 -
Verilog HDL语法入门系列(二):Verilog的语言文字规则
Verilog中,字符串大多用于显示信息的命令中。Verilog没有字符串数据类型。Verilog中,常量(literals)可是整数也可以是实数。整数的大小可以定义也可以不定义。整数的大小可以定义也可以不定义。实数常量可以用十进制或科学表示法表示。格式符%0d表示没有前导0的十进制数。原创 2024-06-25 16:41:10 · 706 阅读 · 0 评论 -
Verilog HDL语法入门系列(一):硬件描述语言的历史、特点、用途
硬件描述语言HDL是具有特殊结构能够对硬件逻辑电路的功能进行描述的一种高级编程语言。描述电路的连接描述电路的功能在不同抽象级上描述电路描述电路的时序表达具有并行性HDL主要有两种:Verilog和VHDLVerilog起源于C语言,因此非常类似于C语言,容易掌握VHDL起源于ADA语言,格式严谨,不易学习。VHDL出现较晚,但标准化早。IEEE 1706-1985标准。原创 2024-06-25 16:39:59 · 1122 阅读 · 0 评论 -
一文搞懂阻塞赋值和非阻塞赋值
阻塞赋值对应的电路结构往往与触发沿没有关系,只与输入的电平变化有关系;非阻塞赋值对应的电路结构往往与触发沿有关系,只有在触发沿时才有可能发生赋值的情况。时序电路建模时,用非阻塞赋值(原创 2024-06-14 17:29:28 · 548 阅读 · 0 评论 -
Vivado 设置关联使用第三方编辑器 Notepad++
Vivado软件自带的编辑器超级难用,代码高亮对比不明显,而且白色背景看久了眼睛痛。为了写代码时有更加舒适的体验,可以找自己喜欢的编辑器进行替换。之前是用的VsCode,但是有时候VsCode会莫名其妙占用内存,非常的卡,后来改用Notepad++,简洁舒适,没有那些乱七八糟的玩意,也不卡。原创 2024-06-06 22:41:37 · 2981 阅读 · 3 评论 -
Vivado 设置关联使用第三方仿真软件 Modelsim
Vivado 软件自带有仿真功能,该功能使用还是比较方便的,初学者可以直接使用自带的仿真功能。Modelsim仿真工具是Model公司开发的。它支持Verilog、VHDL以及他们的混合仿真,它可以将整个程序分步执行,使设计者直接看到他的程序下一步要执行的语句,而且在程序执行的任何步骤任何时刻都可以查看任意变量的当前值,可以在Dataflow窗口查看某一单元或模块的输入输出的连续变化等,比vivado自带的仿真器功能强大的多,是目前业界最通用的仿真器之一。原创 2024-06-06 22:40:36 · 1072 阅读 · 0 评论 -
高效的VIVADO BlockDesign设计方法:将自己设计的模块信号以总线形式聚合
在FPGA的顶层设计中,常常会涉及到诸多模块进行相互连接。通常情况下,我们会使用verilog语言中的模块例化,来完成各个模块之间的连接,但是这样可读性太差,过一段时间再来看项目,或者交给其他人,要理清模块之间的连接情况,需要额外花费大量时间。原创 2024-06-03 23:34:34 · 7766 阅读 · 2 评论 -
Vivado的两种下载安装方式:Webpack下载与安装、本地文件安装详细步骤讲解
本人自本科大二开始接触FPGA相关知识,现已将近六年,由于一直在上学,也不是一直在搞FPGA,但是也完成过一些项目。整个学习的过程中,零零碎碎的,也没写啥总结,总是觉得不系统。从这篇开始将从比较基础的角度讲述如何一步步了解FPGA。我相信动手一步步做下去是从零开始学习知识的最快方法,而不是一直去看书看文章,学习工科最重要的就是动手,且FPGA只是一个工具,学习信号处理、通信、以及一些算法相关的知识比FPGA更为重要。原创 2024-06-02 21:17:55 · 2593 阅读 · 0 评论 -
FPGA基础:触发器和锁存器
异步控制信号是指该信号在任何时刻只要有效,就会对电路起作用,而不必等时钟边沿信号。(4)触发器有记忆功能,由它构成的电路在某时刻的输出不仅取决于该时刻的输入,还与电路原来状态有关。使用异步复位(Using an asynchronous reset):always@(posedge(clk) or (posedge(rst))(2)在输入信号作用下,触发器的两个稳定状态可相互转换(称为状态的翻转)。只列出了上升沿触发的时钟clk,而没有将输入d列写进去,是因为输入d要想起作用,必须要有时钟边沿信号的触发。原创 2024-05-29 17:53:06 · 844 阅读 · 0 评论
分享