找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4006|回复: 2
收起左侧

VerilogHDL扫盲文(共26页pdf)FPGA初学资料分享

[复制链接]
ID:255886 发表于 2017-11-30 21:30 | 显示全部楼层 |阅读模式
0.png
0.png
第0章: Verilog HDL扫盲文
会翻开这本笔记的读者,估计你们都受够了参考书的 “ 权威 ” ,即使把厚厚的参考书都啃完了 , 发觉自己对 Verilog HDL 语言的理解还是 “ 迷迷糊糊 ” 。 呵呵 , 笔者也是过来人 ,笔者当然清楚这样的心情,那种感觉真的是想 “ 涅破了蛋蛋 ” 。当读者还没有进入正章之前 , 笔者有责任帮读者们来个简单的扫盲扫盲 。 扫盲的目的有许多 , 第一是更进一步刷新读者对 Verilog HDL 语言的认识。第二则是可以清楚表达笔记所要讨论的范围。

0.1 各种的 HDL 语言
很多进入 FPGA 世界不久得朋友,第一个要学习当然是 HDL 语言,在网上流行的有Verilog 和 VDL 这两个 HDL 语言 。 如果读者是 VDL HDL 语言的爱好者 , 那么读者可以立即把这本笔记关了 。 在笔者的眼中 VDL 太石板了 , 好像带着三角眼睛的中年女老师,对男学生都要求和尚头;对女生的裙字一定要长裙,这就是 VDL 给笔者的印象 。笔者不是说它不好 , 只是笔者嫌它麻烦而已 。 反之 Verilog 却像是一个活泼而且爱捣蛋的小男孩,我们知道小男孩的思想很简单却很俏皮,我们要很难捉拿它。网上有一个很常见的问题 : “ 学习 VDL HDL 好?还是学习 Verilog HDL 好? ” ... 唉 ~朋友 , 很多问题的答案都是明显的 。 笔者会很好客的说 : “ 来来来 ! Verilog HDL 很有趣也很好玩,不要理那个石板的 VDL HDL ” 。
“ 为什么笔记选择 Verilog HDL 语言? ”
嗯 ... 这个问题笔者也很难回答,笔者是被特权同学带入这个世界的。当时学习的时候没有考虑那么多 , 但是后来发现到 Verilog HDL 语言有太多的潜能了 , 笔者不小心就陷入研究它的陷阱了。 Verilog HDL 语言的语法和格式都比较随便,它没有 VDL HDL 语言那么严谨 , 可能是这个原因吧?事实上选择 VDL HDL 语言 也好 , 还是选择 VerilogHDL 语言也好,都是一些萝卜青菜的问题(各有所爱 ) 。笔者自身不喜欢受限制太多 ,故 Verilog HDL 语言和笔记意气相投,所以笔者最终还是选择了它。

0.2 HDL 语言的层次有一个很好笑的话题,老师常常都说 HDL 语言的层次是汇编语言和 C 语言的之间 。 假设汇编语言是低级语言, C 语言是高级语言,那么 HDL 语言既是不上又不小?啊哈哈哈 , 如果站在人类之中它亦是不男也不女 。 我们不需要为这个无聊的话题 , 浪费太多思考的时间。 HDL 语言的英文全名是 Hardware Description Language ,中文译名就是硬件描述语言 。 事实上无论是汇编语言也好还是 C 语言也好 , 它们的作用就是用来控制处
理器,反之 HDL 语言的作用只是用来建立一个硬件的模块而已。打个比方 , 假设有一个 c51 单片机的串口硬件 , 我们可以使用汇编语言去控制它 , 我们也可以使用 C 语言去控制它 。 但是站在 HDL 语言的角度上 , 我们可以建立一个受控制的串口硬件模块,我们也可以建立一个不受控制(是自动的意思,而不是暴走的意思 )的串口硬件模块,当然我们也可以用 HDL 去控制一个可以受控制的串口硬件模块。从这一点 , 我们就可以看出 HDL 语言和汇编语言与 C 语言基本上就在不同的层次上的东东,我们又何为把它们来作比较呢?但是在一些标准上 HDL 语言却是硬件语言又是低级语言 ( 凡是涉及硬件的通通都被打入低级语言的冷宫 ) , 总而言之 HDL 语言的层次就是很暧昧就是了。
实际上还有不同层次级的 HDL 语言 , 如 SystemVerilog 或者 SystemC 。 传言上它们都是系统级的 HDL 语言 , 相比之下 Verilog HDL 语言 和 VDL HDL 语言的层次都称为模块级 。 但是这些层次的区分一点也不重要 , 只要把 Verilog HDL 语言掌握得好 , 读者什么层次都可以实现。

0.3 RTL 级和组合逻辑级
笔者说太多废话了还是切入正题吧 。 虽说 Verilog HDL 语言是用来描述硬件 , 但是这些都是一些刻板的认识和标准而已。从笔者的眼中 Verilog HDL 语言建立的硬件模块可以分为有时钟源和无时钟源。
有时钟源的意思是需要时钟信号作为操作最基本消耗单位 , 硬件模块才能执行 。 无时钟源的意思就是不需要消费时钟信号 , 硬件模块也可以被执行 。 无时钟源最好的例子就是由组合逻辑建立的硬件模块 , 一些典型的设计如 : 硬件乘法器 , 硬件除法器等基本上都是由一些复杂的逻辑门组合 , 故它们根本就不需要时钟来操作 , 或者说它们只需要一个步骤又或者只需要一个时钟就可以完成任务。打个比方,就如同人类吃饭,在无时钟源的情况下,放在餐桌上的食物一下子被吃光 ,而且瞬间食物被消化和被吸收(事实上这是不可能的 ) 。反之有时钟源,就像我们需要心跳来提供身体一个节拍,每一个节拍都有固定的动作,先张口,送入饭,吃下饭 , 消
化饭,然后吸收。
由此就有 RTL 级和组合逻辑级的建模之分 。 基本上 RTL 级建模的基本单元会是 “ 寄存器 ” , 然而组合逻辑级的建模基本单元就是逻辑门 。 单单用几行的文字来讲述 RTL 级和组合逻辑级的建模实在太抽象了,笔者聚个简单的例子:
0.png
0.png
0.4 Verilog HDL 语言真的那么难掌握?
Verilog HDL 语言容易入门但是不容易掌握,估计这是所有学习 Verilog HDL 语言人们的心声 。 其实要掌握 Verilog HDL 语言是很简单的 , 笔者的秘诀就是 “ 掌握 Verilog HD L语言的思想 ” 。 在笔者眼中 Verilog HDL 语言的思想有两种 , 一种是建模和另一种是时序 。建模是 Verilog HDL 语言的结构或者说是它的地基,然而时序是所有模块的活动记录 。这些概念,目前的读者不明白也不要紧,笔者已经分为两个笔记来详谈了它们了。笔者相信很多接触 FPGA 的朋友之前都有接触过单片机,在不知不觉之中,自然而然学习单片机的想法就主宰了学习 FPGA 。 笔者也是过来人 , 这样的心情笔者非常的了解 。当我们再学习单片机的时候 , 很多人估计都是直接以 C 语言入门吧?笔者就先说说单片机这个硬件吧 : 它们都是各大产商的产品 , 一些基本的硬件资源老早就已经嵌入在这个小小的单片机当中 。 余下 , 尤其说学习单片机还不如说我们学习如何控制单片机的寄存器更为贴切 。 一些硬件的发生 , 使用者可以完全不用知道 , 我们只要懂得如何配置控制该硬件的寄存器就可以了。

相比之下 FPGA 可以称为赤裸裸的乐高积木 , 如果读者要实现串口 , 读者就要自行建立串口硬件模块 。 要建立一个串口硬件模块 , 首先需要明白串口的操作原理 , 然后根据需要自定义和修改原理的发生 。 最后还要考虑这个串口硬件模块如何被控制?是否独立化它(见接口建模 ) ?这些就是建模思路。在软件方面 , 我们可以用 C 语言去配置单片机的寄存器和编辑单片机操作的逻辑 。 但是有一点请读者不要忘了 , C 语言也是一个产品 , 它和 Verilog HDL 语言不同 C 语言在出生之后它就有自己的结构和自己一套的使用规则 。 最后根据单片机的产商需要 , C 语言还可以进一步被自定义 , 这种现象不难看见 , 学习 c51 和学习 AVR 基本上就有两套的C语言用法。反之 Verilog HDL 语言虽然有语法 , 但是 Verilog HDL 语言就没有自身的结构也没有自己一套的用法 。 在网上这种现象很普遍 , 读者会看到五花八门 , 百花齐放 , 各种各样的模块内容 。 很多时候 , 这些模块的内容只有设计者自己看懂而已 , 别人估计要花上几倍的精力才可以搞明白 “ 它在干嘛 ” 。为此 , 如果要把 Verilog HDL 语言掌握好 , 第一要提供 Verilog HDL 语言的结构 , 第二要提供 Verilog HDL 语言一套用法(使用规则 ) 。前者笔者是用建模来解决,后者笔者用 “ 仿顺序操作 ” 的想法来补充。
0.png

余下完整的pdf格式文档51黑下载地址(共26页pdf):
VerilogHDL扫盲文.pdf (3.23 MB, 下载次数: 92)
回复

使用道具 举报

ID:188115 发表于 2018-9-27 21:00 | 显示全部楼层
谢谢分享!
回复

使用道具 举报

ID:343601 发表于 2018-10-8 15:01 来自手机 | 显示全部楼层
学完32,想学FPGA,处于白纸状态
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表