首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

verilog 语言快速入门教程#fpga开发

  • 25-03-07 23:43
  • 3032
  • 5621
blog.csdn.net

一.verilog概述

  • Verilog全称是Verilog Hardware Description Language(Verilog硬件描述语言),缩写为Verilog HDL,简称Verilog。
  • Verilog是一种功能强大且灵活的硬件描述语言,它允许设计者以代码形式来描述数字系统和电路的结构和行为。通过学习和掌握Verilog,设计者可以更加高效地设计和验证数字电路,提高设计质量和效率。

二.与其他语言的比较

  • 与C和Java等软件编程语言相比,Verilog的语法和编程概念有所不同。
  • Verilog用于描述数字电路和数字系统,而C和Java则用于编写在计算机上运行的软件程序。
  • Verilog描述了线、寄存器和逻辑门的属性,而C和Java则定义了变量、函数和控制循环。
  • Verilog代码被编译成可以在物理电路或FPGA中实现的硬件配置,而C和Java代码被编译成可以由计算机处理器直接执行的机器代码。

三.verilog的基础知识

3.1模块结构

一般使用assign.always语句   ,module和endmoudule是必不可少的,下面来讲讲这两种常用的语句。

端口定义:

输入端口input

输出端口output

双向端口inout

3.1.1常量


无符号数格式:[换算为二进制后位宽的总长度]['][数值进制符号][与数值进制符号对应的数值]

有符号数格式:[换算为二进制后位宽的总长度]['][s数值进制符号][与数值进制符号对应的数值]

8'd171: 位宽是8bit,十进制的171。
[数值进制符号]中如果是[h]则表示十六进制,如果是[o]则表示八进制,如果是[b]则表示二进制,如果是[d]则表示十进制。
[换算为二进制后位宽的总长度]:可有可无,verilog 会为常量自动匹配合适的位宽。
当总位宽大于实际位宽,则自动在左边补0,总位宽小于实际位宽,则自动截断左边超出的位数。
 

3.2 assign语句

又称为连续赋值语句

格式:assign  赋值目标=表达式,assign赋值目标必须为wire数据类型,一般不做说明默认为wire型,reg型需要手动定义。主要说一些比较陌生的符号。

3.2.1算术型

强调一个求幂运算符**,其余的操作符与c语言类似。

Y=2**3   结果为8

3.2.2逻辑值

0: 逻辑低电平,条件为假
1: 逻辑高电平,条件为真
z: 高阻态,无驱动
x: 未知逻辑电平

3.2.3等价

强调一下==和===的区别  ,==一般是用于比较两个操作数,但是对于比较包含未定义的值(x或z)时,会返回不确定的结果。===是三等号操作符,不仅比较操作数的值,还比较值位和未知位x

3.2.4拼接复制

{  }拼接  格式:{   操作数1,操作数2...}

{  {   }  }复制拼接  格式:{n{操作数1,操作数2  }}  例如:Y={{4{2'b01}},2'b11}  结果为0101010111

3.3 always语句

又成为过程赋值语句 

格式:always @(敏感信号条件)

                       各类顺序语句;

赋值目标必须是reg型,敏感条件分为1.边沿敏感2.电平敏感,触发条件列表中的多个条件之间采用“or”来连接。下面是具体案例

3.3.1门原语调用

格式:门原语名  实例名(端口连接)

其中实例名一般可以省略,端口连接采用顺序法输出在前,输入在后

门原语:  and与 or或  xor异或

nand与非  nor或非非   xnor同或

3.3.2 assign和always主要区别:

assign总是处于激活状态,只要操作数一变化就马上进行计算和赋值。always语句块挂起,直到激活该过程,才会进行计算和赋值,未激活,改变操作数无效。assign赋值目标为wire型,always赋值目标为reg型。

3.4数据类型

分为两大类:线网类(net类),变量类(variable类)。

net型一般用于连续赋值的赋值目标或门原语的输出,仿真时不需要分配内存空间,variable用于过程赋值的赋值目标且仿真时需要分配内存空间。

对于端口信号来说input  inout必须定义成net型,output可以是net也可以是variable,取决于如何对它赋值。

3.5赋值方式

阻塞型赋值  =

阻塞赋值可以理解为顺序执行,也就是说第一句语句执行完毕之后, 才会执行第二句语句。声明 3 个变量,a 的值是 1,b 的值是2,c 的值是 3.

非阻塞型赋值<=

非阻塞型赋值语句是并行执行的。即在同一时刻,多条语句是同时执行的。
声明 3 个变量,a 的值是 1,b 的值是2,c 的值是 3.
b 的值目前是 2,a 的值目前是 1. 在同一时刻,将 b 的值赋值给 a,将 a 的值赋值给 c.

3.6条件语句

if-else语句  

与c语言相似,这里就不强调了

case语句(类似于c语言中switch)

格式:case(条件)

值1:语句1;

值2:语句2;

值n:语句n;

default:语句n+1;

endcase

3.6其他规定

3.6.1关键字

Verilog HDL中所有的关键字都是小写的。

3.6.2标识符

标识符用来命名信号、模块、参数等,它可以是任意一组字母、数字、$符号和_(下划线)符号的组合。标识符中字母区分大小写,且第一个字必须是字母或下划线。

3.6.3文件取名和存盘

verilog的文件拓展名为.v,verilog不要求文件名和模块名一致,但QUartII要求一致

总结:

学习新的语言还是需要多敲代码,学的还只是边角料远远不够用

注:本文转载自blog.csdn.net的2303_80199604的文章"https://blog.csdn.net/2303_80199604/article/details/143415736"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

117
前沿技术
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top