
数字设计基础教程
文章平均质量分 92
分享数字设计的基础知识,学习笔记,硬件语言描述基础等。
李锐博恩
退网中
展开
-
FPGA的设计艺术(18)如何使用Verilog中的数组对存储器进行建模?
Verilog中的二维数组很有用,可以使用for以及generate for配合二维数组进行使用,可以代替大量寄存器的场合,其实大量同类寄存器可以使用存储器进行代替,Verilog中可以使用二维数组对存储器进行建模。原创 2021-09-21 01:52:39 · 6838 阅读 · 1 评论 -
FPGA的设计艺术(14)使用函数和任务提升逻辑的可重用性
使用Verilog中的函数和任务,可以编写出很多精炼的代码,让代码可读性提高。例如仿真中,某个功能模块我们需要重复利用,那么就可以使用函数或者任务的一种,让其成为我们仿真平台的一部分,逼格提升了不说,效率也提高了不少。原创 2021-06-27 20:43:04 · 1852 阅读 · 5 评论 -
Verilog初级教程(23)Verilog仿真中的显示任务
显示系统任务主要用于显示信息和调试信息,从日志文件中跟踪仿真的流程,也有助于更快地进行调试。显示任务有不同的组别和格式,它们可以打印数值。原创 2020-08-09 02:05:58 · 4447 阅读 · 0 评论 -
Verilog初级教程(22)赋值间延迟语句与赋值内延迟语句
Verilog延迟语句可以在赋值运算符的左侧或右侧指定延迟。原创 2020-08-09 01:14:34 · 11622 阅读 · 8 评论 -
Verilog初级教程(21)Verilog中的延迟控制语句
如果延迟表达式的值为未知值或高阻抗值,将被解释为零延迟。原创 2020-08-02 23:03:32 · 8859 阅读 · 5 评论 -
Verilog初级教程(20)Verilog中的`ifdef 条件编译语句
条件编译可以通过Verilog的 `ifdef 和 `ifndef 关键字来实现。 这些关键字可以出现在设计中的任何地方,并且可以相互嵌套。原创 2020-08-02 18:05:33 · 28896 阅读 · 1 评论 -
Verilog初级教程(19)Verilog中的参数
Verilog中的参数是使得设计更具有通用性、易读性的手段之一,使用十分频繁。原创 2020-07-19 23:06:43 · 13186 阅读 · 0 评论 -
Verilog初级教程(18)Verilog中的函数与任务
函数与任务是仿真中常用的语法,但合理使用也可以在设计中使用,可以综合。原创 2020-07-19 17:54:27 · 6796 阅读 · 0 评论 -
Verilog初级教程(17)Verilog中的case语句
case语句检查给定的表达式是否与列表中的其他表达式之一相匹配,并据此进行分支。它通常用于实现一个多路复用器。原创 2020-07-19 16:34:46 · 97385 阅读 · 2 评论 -
Verilog初级教程(16)Verilog中的控制块
硬件行为的实现离不开条件语句和其他控制逻辑流的方式。Verilog有一套控制流块和机制来实现。它包括:if-elseforever looprepeat loopwhile loopfor loop原创 2020-07-19 01:20:58 · 5156 阅读 · 1 评论 -
Verilog初级教程(15)Verilog中的阻塞与非阻塞语句
本文通过仿真的方式,形象的说明阻塞赋值以及非阻塞赋值的区别,希望和其他教程相辅相成,共同辅助理解。原创 2020-07-18 23:04:22 · 4548 阅读 · 3 评论 -
Verilog初级教程(14)Verilog中的赋值语句
何为赋值语句?即将值放到线网或者变量上,这种操作称为赋值,英文:assignment.它有三种基本形式:* 过程性赋值* 连续赋值* 过程连续赋值原创 2020-07-18 18:09:19 · 20537 阅读 · 1 评论 -
Verilog初级教程(13)Verilog中的块语句
所谓的块语句,无非就是一组语句,例如在initial或者always中,使用begin...end或者fork...join包裹的语句,都可以称为块语句。块语句有两种原创 2020-07-18 14:04:06 · 5160 阅读 · 2 评论 -
Verilog初级教程(12)Verilog中的generate块
generate块应用的场合通常是对模块进行批量例化,或者有条件的例化,使用参数进行控制对哪些模块进行例化,或者例化多少。不仅限于模块例化,当同一个操作或模块实例需要多次重复,或者某些代码需要根据给定的Verilog参数有条件地包含时,这些语句特别方便。原创 2020-07-13 01:04:40 · 20525 阅读 · 5 评论 -
Verilog初级教程(11)Verilog中的initial块
仿真中通常会依次执行一组Verilog语句。这些语句被放置在一个程序块中。在Verilog中主要有两种类型的程序块--initial块和always块。原创 2020-07-13 00:14:32 · 33675 阅读 · 4 评论 -
Verilog初级教程(10)Verilog的always块
always块是Verilog中的程序块之一。always块内的语句是按顺序执行的。原创 2020-07-12 01:57:45 · 72883 阅读 · 6 评论 -
Verilog初级教程(9)Verilog的运算符
不能处理的数据是没有用的,在数字电路和计算机系统中总是需要一些形式的计算,让我们来看看Verilog中的一些运算符,这些运算符可以使综合工具实现相应的硬件元素。原创 2020-06-27 18:11:25 · 5262 阅读 · 1 评论 -
Verilog初级教程(8)Verilog中的assign语句
wire类型的信号需要连续赋值。例如,考虑一根电线用于连接面包板上的元件。只要将+5V电池施加在电线的一端,连接在电线另一端的元件就会得到所需的电压。原创 2020-06-27 17:19:03 · 77882 阅读 · 7 评论 -
Verilog初级教程(7)Verilog模块例化以及悬空端口的处理
所有的端口声明都隐含地声明为wire,因此在这种情况下端口方向就足够了。然而需要存储值的输出端口应该声明为 reg 数据类型,并且可以在程序块中使用,比如 always 和 initial only。输入或inout类型的端口不能声明为reg,因为它们是由外部连续驱动的,不应该存储值,而是尽快反映外部信号的变化。连接两个不同向量大小的端口是完全合法的,但以向量大小较小的端口为准,而另一个宽度较大的端口的剩余位将被忽略。原创 2020-06-27 15:11:25 · 28029 阅读 · 1 评论 -
Verilog初级教程(6)Verilog模块与端口
模块化设计思想是Verilog的核心,也是数字设计的核心,模块化设计就像搭建积木一样搭建数字电路。原创 2020-06-27 01:48:52 · 9874 阅读 · 2 评论 -
Verilog初级教程(5)Verilog中的多维数组和存储器
本篇博文进一步延伸,Verilog中也存在多维数组,它对应的硬件逻辑可以是存储器,诸如RAM,ROM,以及FIFO等。原创 2020-06-26 21:55:04 · 86069 阅读 · 24 评论 -
Verilog初级教程(4)Verilog中的标量与向量
一个没有指定范围的net或reg声明被认为是1位宽,是一个标量。如果指定了范围,那么net或reg就变成了一个多比特的实体,称为向量。原创 2020-06-26 20:08:37 · 20007 阅读 · 6 评论 -
Verilog初级教程(3)Verilog 数据类型
本篇博客讲的是Verilog HDL中的数据类型,我最常用的数据类型,无非就三种,reg、wire,integer;其中integer 主要在for 循环中使用。原创 2020-06-26 16:45:30 · 9415 阅读 · 3 评论 -
Verilog初级教程(2)Verilog HDL的初级语法
学习Verilog和学习任何一门编程语言一样,都需要从语法开始,不会语法去学习设计是几乎不可能的,当然从另一门类似语言转来的除外(例如VHDL是你的第一门硬件描述语言)。学会了语法不懂硬件思维也不可以,因为你不能使用软件思维来设计硬件电路。原创 2020-06-26 15:35:54 · 7315 阅读 · 0 评论 -
Verilog初级教程(1)认识 Verilog HDL
集成电路的设计经历了从原理图绘制(工程师在纸上绘制晶体管及其连接,以便对其设计,使其可以在硅上制造)到硬件描述语言的转变,这是因为大型的设计,如果使用原理图的方式进行设计会耗费大量的人力、时间和资源等,这催生着硬件描述语言的诞生!原创 2020-06-25 17:29:00 · 6827 阅读 · 2 评论 -
芯片设计抽象层及其设计风格
在了解Verilog语言的更多细节之前,我们最好先了解一下芯片设计中的不同抽象层。翻译 2020-06-25 16:32:15 · 3599 阅读 · 0 评论 -
FPGA基础知识极简教程(10)二进制到BCD转换算法
Double-Dabble Binary-to-BCD Conversion Algorithm原创 2020-06-25 01:02:15 · 4201 阅读 · 0 评论 -
FPGA基础知识极简教程(9)七段数码管显示的Verilog简单设计
七段显示器是FPGA设计人员通常用来向用户显示信息的指示器。在VHDL和Verilog中可以轻松完成将二进制文件转换为兼容七段显示器的代码。有许多应用程序可能需要使用一个或多个八段显示器,例如:* 闹钟* 秒表* 按钮计数指示器* 电压测量(从模拟到数字转换器)原创 2020-06-21 01:59:41 · 41153 阅读 · 5 评论 -
Verilog以及VHDL所倡导的的代码准则
1. 提高代码的可读性,使代码易于理解;2. 编写代码的统一性,规范代码设计;3. 使得代码不容易出错。原创 2020-06-20 16:40:06 · 3361 阅读 · 0 评论 -
FPGA基础知识极简教程(8)详解三态缓冲器
三态缓冲器可以处于以下三种状态之一:逻辑0,逻辑1和Z(高阻抗)。它们的使用允许多个驱动程序共享一条公共线路。这使得它们在半双工通信中特别有用。让我们首先讨论半双工和全双工通信之间的区别。原创 2020-06-20 01:45:30 · 5958 阅读 · 0 评论 -
FPGA/ASIC初学者应该学习Verilog还是VHDL?
对于FPGA或者ASIC的初学者来说,选择哪种语言貌似应该根据自身的需求而定,例如实验室项目需要使用哪种语言,或者实验室师兄师姐使用了哪种语言,或者导师推荐你学习哪种原因,这都是硬性需求了,因为你需要完成项目的接手,所以必须根据要求而来!但如果你没有这些顾虑呢?该如何做出选择?原创 2020-06-16 20:10:34 · 5278 阅读 · 0 评论 -
FPGA基础知识极简教程(7)详解亚稳态与跨时钟域传输
这篇文章主要是对过去对于亚稳态以及跨时钟域传输问题的一次总结,作为这个系列博文的一次梳理吧。注:微信公众号也会更新,欢迎大家关注,我有了新文章会通过微信公众号推送通知大家,让你有选择的看到我的最新动态。原创 2020-06-16 01:15:10 · 5451 阅读 · 2 评论 -
FPGA基础知识极简教程(6)UART通信与移位寄存器的应用
UART(Universal Asynchronous Receiver/Transmitter)代表“通用异步接收器/发送器”,它是由Digital Equipment Corporation的Gordon Bell在1960年代开发的。 “通用”部分是关于数据格式和传输速度是可配置的事实。原创 2020-06-13 01:28:41 · 3118 阅读 · 0 评论 -
FPGA基础知识极简教程(5)什么是锁存器以及如何在FPGA开发中避免生成锁存器?
在FPGA设计中永远不要使用锁存器!但好像没人在FPGA设计中故意设计锁存器,那为什么要讨论锁存器呢?话虽如此,虽然你没有有意设计锁存器,但你能保证你的代码中没有锁存器了吗?原创 2020-06-11 03:28:46 · 4298 阅读 · 4 评论 -
FPGA基础知识极简教程(4)从FIFO设计讲起之异步FIFO篇
一开始是想既然是极简教程,就应该只给出FIFO的概念,没想到还是给出了同步以及异步FIFO的设计,要不然总感觉内容不完整,也好,自己设计的FIFO模块不用去担心因IP核跨平台不通用的缺陷!那我们开始吧。原创 2020-06-09 01:46:12 · 10864 阅读 · 35 评论 -
FPGA基础知识极简教程(3)从FIFO设计讲起之同步FIFO篇
FIFO可以认为是汽车可以驶过的单向隧道。隧道的尽头是一个带门的收费站。门一旦打开,汽车便可以离开隧道。如果那扇门从未打开,而更多的汽车继续进入隧道,那么最终隧道将充满汽车。这称为FIFO溢出,通常这不是一件好事。原创 2020-06-08 07:47:26 · 10096 阅读 · 14 评论 -
FPGA基础知识极简教程(2)抛却软件思维去设计硬件电路
学过一门或多门软件语言的数字设计初学者经常会犯一些错误 ,例如硬件语言的并发性,可综合以及不可综合语句区分,循环语句的使用等等。本文的建议将带你区别并扫除这些易错点,助你成为一名优秀的硬件设计师。原创 2020-06-07 22:49:27 · 3445 阅读 · 1 评论 -
FPGA基础知识极简教程(1)从布尔代数到触发器
从初学者对数字设计的疑问?到什么是FPGA?什么是ASIC?在到布尔代数如何在FPGA内部实现?最后到数字设计的核心元件触发器?本文将从简洁的角度带你认识这些数字设计的必备基础知识!原创 2020-06-07 18:16:16 · 3792 阅读 · 2 评论