【Verilog】一、Verilog概述
文章目录
前言
一、简单的Verilog HDL模块
1.1 Verilog HDL程序
1.2 Verilog 语法小结
总结
前言
Verilog HDL是一种硬件描述语言,以文本形式来描述数字系统硬件的结构和行为的语言,是一种被用于数字逻辑电路设计的语言。用Verilog HDL描述的电路设计就是该电路的Verilog HDL模型。Verilog 模型可以是实际电路的不同级别的抽象,这些抽象的级别和它们所对应的模型类型共有以下五种:
① 系统级(system):用高级语言结构实现设计模型的外部性能的模型;
② 算法级(algorithm):用高级语言结构实现设计算法的模型;
③ RTL级(Register Transfer Level):描述数据在寄存器之间流动和如何处理这些数据的模型;
④ 门级(gate-level):描述逻辑门以及逻辑门之间的连接的模型;
⑤ 开关级(switch-level):描述器件中三极管和储存节点以及它们之间连接的模型。
一个复杂的电路系统的完整Verilog HDL模型是由若干个Verilog HDL模块构成的,每一个模块又可以由若干个子模块构成。其中有些模块需要综合成具体电路,而有些模块只是与用户所设计的模块交互的现存电路或者激励信号源。利用Verilog HDL语言进行电路设计,可以对大型的复杂系统进行系统性地设计与仿真,相比于传统的原理图设计输入这种方式,在设计效率上有着很大地提升。到目前为止,Verilog 语言可以说是风靡全球,特别是在FPGA开发/IC设计领域占有绝对的领导地位。
一、简单的Verilog HDL模块
1.1 Verilog HDL程序
下面是一个简单的Verilog HDL语言编写的程序,我们尝试这在代码的基础上去学习Verilog语法知识;
module decoder_3_8(input a ,//输入input b ,input c ,output reg [7:0] out //输出
);always @(*)begincase({a,b,c})3'b000 : out = 8'b0000_0001;3'b001 : out = 8'b0000_0010; 3'b010 : out = 8'b0000_0100; 3'b011 : out = 8'b0000_1000; 3'b100 : out = 8'b0001_0000; 3'b101 : out = 8'b0010_0000; 3'b110 : out = 8'b0100_0000; 3'b111 : out = 8'b1000_0000; default: out = 8'b0000_0000;endcase
endendmodule
这是一个简单的实现38译码器的程序,从这个程序中就可以看到很多的Verilog语法的运用。
① Verilog模块的定义:module与endmodule是成对出现的,同时也是一个Verilog程序的开头,这就相当于一个模块;当然一个代码段中也可以有多个module/endmodule模块,但是个人不建议这样写。
② 模块名:紧跟着module后面的就是这个模块的模块名了,这就是这个模块的身份证,例化引用这些都需要用到模块名;个人建议给模块起名做到读名知其意,即模块名最好和这个模块所实现的功能有一定的关系,不然时间久了自己都不知道这个模块是干什么的了!
③ 敏感列表:模块名后面括号里面的就是敏感信号了,两个敏感信号间用逗号隔开,这里共有4个敏感信号,在下面always @后面括号里面的也是敏感信号,*号代表对所有信号敏感。这里还定义了输入输出端口,这里也可以在敏感信号外进行端口定义,根据个人喜好而来。
④ 端口定义:input表示输入端口,output表示输出端口,inout表示双向端口(这里没有),端口定义还伴随这信号类型定义,信号类型主要有reg(寄存器型)和wire(线网型),端口信号没有定义信号类型时,默认为线网型,我们这里的输出就是寄存器类型的信号。
⑤ 位拼接:{a,b,c}表示将a,b,c进行位拼接,{}是位拼接符号,假如a,b,c的位宽均是一位,则{a,b,a}的位宽就是3位。
⑥ begin/end语句:相当于括号,当有两句语句一起执行时,需要加begin/end,如果只有一句,可加可不加。
⑦ case语句:case语句时一种多分支选择语句,是并行执行的。
1.2 Verilog 语法小结
① Verilog HDL程序是由模块构成的。每个模块的内容都是嵌在module和endmodule两个语句之间。每个模块实现特定的功能,模块是可以进行层次嵌套的。
② 每个模块要进行端口定义,并说明输入输出端口,然后对模块的功能进行行为逻辑描述。
③ Verilog HDL程序的书写格式自由,一行可以多谢几个语句,一个语句也可以分写多行。
④ 除了endmodule语句外,每个语句和数据定义的最后必须要有分号。
⑤ 可以用/*.....*/和//......//对Verilog HDL程序的任何部分注释。一个好的,有使用价值的程序都应答加上注释,以增强代码的可读性和可维护性。
总结
这里通过一个简单的Verilog HDL程序对Verilog语法进行了简单的讲解,但这只是Verilog语法的一小部分,更多的语法知识我会一一分享,若有讲得不对的地方还望各位大佬指出,后续我也会进行更新改正!
【Verilog】一、Verilog概述相关推荐
- 再说System Verilog 与 Verilog 的关系
System Verilog 与 Verilog 的关系 标准 当前的System Verilog标准是由IEEE(国际电子电气工程师协会)和Accellera(基于工业的标准协会)两个国际组织制定的 ...
- (69)FPGA模块调用(system Verilog调用Verilog)
(69)FPGA模块调用(system Verilog调用Verilog) 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)FPGA模块调用(system Verilog ...
- (66)FPGA模块调用(Verilog调用Verilog)
(66)FPGA模块调用(Verilog调用Verilog) 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)FPGA模块调用(Verilog调用Verilog) 5)结 ...
- 【Verilog】——Verilog简介
目录 1.简介 2.什么是HDL以及HDL的功能 3.Verilog和C语言的比较 4.Verilog的用途 5.数字系统的抽象层次 1.系统级 2.算法级 3.RTL级(寄存器变换级) 6.数字系统 ...
- linux verilog 编译,Verilog 编译指令简介
导读 以反引号 ` 开始的某些标识符是 Verilog 系统编译指令.编译指令为 Verilog 代码的撰写.编译.调试等提供了极大的便利. 下面介绍下完整的 8 种编译指令,其中前 4 种使用频率较 ...
- verilog HDLBits Verilog语法
逐位逻辑运算符(&,|)和逻辑运算符(&&,||)之间的差别: 逐位逻辑运算符:对于 N 比特输入向量之间的逻辑比较,会在 N 比特上逐位进行,并产生一个 N 比特长的运算结果 ...
- 【Verilog】Verilog的八个经典入门例题
Verilog的八个经典入门例题 文章目录 Verilog的八个经典入门例题 前言 一.7人表决器设计 二.8位的ALU设计 三.JK触发器的设计 四.环形计数器 五.二进制整数除法器设计 六.排序任 ...
- verilog/system verilog语法
1,Verilog有变量类型和线网类型.变量类型比如reg,integer和time.线网类型比如wire,wor,wand等.system verilog使用了Verilog的变量类型:reg,in ...
- 【Verilog】Verilog定义二维数组(2D Array)
目录 定义的种类 第一种 赋值方法 第二种 赋值方法 第三种 赋值方法 定义的种类 首先看几组定义类型 第一种 定义一个位宽为8的 data1(reg) 和 data2(wire) 的变量. reg ...
- Verilog 概述
Verilog 常用的仿真软件为VCS,仿真分为前仿真和后仿真: 前仿真:通过RTL实现的Verilog代码,通过VCS仿真工具实现的编译,仿真: 后仿真:通过综合工具,将RTL代码综合成门级网表,门 ...
最新文章
- tf.data.Dataset 用法
- 第十一届河南省赛--山区修路
- 在Excel中实现查询功能
- WebService C#开发/调用
- AUTOSAR从入门到精通100讲(二十二)-AUTOSAR通信篇—CANTP模块
- java常用设计模式一:单例模式
- [转]2006年十二星座运程 目录
- 日志分析工具 Log Parser
- devexpress.xtraeditors.xtraform 类型初始值设定_远程智能电表的常见类型推荐--老王说表...
- 力软 框架 转 mysql_开发框架-.Net:Learun(力软敏捷开发)
- 组态软件(Configure)
- 安装配置磁盘阵列SAN存储系统
- python读取文件名或路径含中文字符的图片并从中筛选出全白或者全黑的图片
- 【压缩感知合集5】压缩感知简介和数学模型分析
- R语言客户端RStudio快捷键大全
- background-size设置背景图片自适应 在ie8下失效的问题
- 深度学习入门笔记(九):深度学习数据处理
- [Pytorch] ValueError: sampler option is mutually exclusive with shuffle
- 基于akshare查取每天五分钟成交额,35分钟成交额,1h成交额,并输出为cvs
- centos8安装之centos8.3 制作U盘启动 避坑指南