初识Verilog HDL其一

devtools/2025/1/16 0:01:20/

VerilogHDL是一种硬件描述语言,以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。

1.1 Verilog基础语法

1.11 逻辑值

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

1.12 关键字

module                                      模块开始定义
input                                          输入端口定义
output                                        输出端口定义
inout                                           双向端口定义
integer										寄存器数据类型
parameter                                  	信号的参数定义
localparam 									信号的参数定义
wire wire                                     线网型变量
reg reg                                        寄存器型变量
always                                         产生reg信号语句的关键字
assign                                         产生wire信号语句的关键字
begin                                           语句的起始标志
end                                              语句的结束标志
posedge/negedge                       时序电路的标志
case Case                                   语句起始标记
default Case                                语句的默认分支标志
endcase Case                             语句结束标记
if if/else                                        语句标记
else if/else                                   语句标记
for for                                          语句标记
endmodule                                  模块结束定义

module -------- 模块开始定义,后续跟着模块名

moudle 模块名(一般与 .v 文件的名称是一致的)

wire -------- 线网型变量

wire 可以看作直接的连接,在可综合逻辑中,会被映射成一条真实存在的物理引线

reg -------- 寄存器型变量,变量为无符号数

reg 对有某一时间点,进行保持的功能。在可综合逻辑中,会被映射成一条真实存寄存器

integer -------- 寄存器型变量,变量为有符号数

integer的位宽为宿主机的字的位数,但最小为32,integer定义为32bit的总线for循环变量需要使用integer类型

parameter -------- 参数定义

parameter 可以在顶层文件通过实例化,来对此功能模块中的参数呢进行修改

localparam -------- 参数定义

localparam 只能在模块内部使用,不能进行实例化

always -------- 描述组合逻辑以及时序逻辑的语法

always@(敏感条件)什么是敏感条件:简单理解,当敏感条件中的电平发生变化的时候,触发一次语句同时敏感条件中可以填入 * 号 		*号表达的意思是通配符简单理解: 只要有任何一个信号发生变化的时候,都会触发这个语句。 
always块是Verilog中用来描述组合逻辑以及时序逻辑的语法。需要补充的是一个设计中可以有多个always块,或者说一定有很多个always块。
这些硬件块都是相互独立同时工作的。每个块之间的连接是决定数据流的原因。为了模拟这种行为,一个always块被做成一个连续的过程(硬件不可能断断续续工作),当敏感列表中的一个信号变化时,它就会被触发并执行一些动作(always块内的语句)。

在这里插入图片描述

reg              无符号整数变量,可以选择不同的位宽。integer          有符号整数变量,32位宽,算术运算可产生2的补码。real             有符号的浮点数,双精度。time             无符号整数变量,64位宽(Verilog-XL仿真工具用64位的正数来记录仿真时刻)

1.13 常量

在程序运行过程中,其值不能被改变的量,称为常量

  • parameter常量(或称符号常量)
  • 数字(包括整数、x和z、负数)

x:指不定值,0/1,寄存器类型变量(无初值时为x)

z: 指高阻态,断开

整数型常量(整常量)

整数型常量(整常量)

  1. 二进制整数**(b/B)**
  2. 八进制整数**(o/O)**
  3. 十进制整数**(d/D)**
  4. 十六进制整数**(h/H)**

常量一般用基数表示法

在这里插入图片描述

  • 位宽指换算为二进制后位宽的总长度

  • 为提高可读性,较长数字之间可用下划线隔开,但不能用在<进制><数字>之间。

例如:

8'd171       指的是 位宽为8bit,十进制171
8'hab        指的是 位宽为8bit,十六进制数ab
8'o253       指的是 位宽为8bit,八进制数253
8'b1010_1011 指的是 位宽为8bit,二进制数10101011

换算为二进制后的位宽总长度:可有可无,verilog会自动为常量匹配合适的位宽,当总位宽长度大于实际位宽,自动向左边补零,

当总位宽长度小于实际位宽,则自动截断左边超出的位数

例如:

大于实际位宽:'d7与8'd7:表示相同数值,8'd7换算为二进制就是8"b0000 0111,前面5位补0;小于实际位宽:2'd7换算为二进制就是2 b11,超过2位宽的部分被截断。

如果直接写参数,例如100,表示位宽为32bit的十进制数100.

1.14.阻塞赋值

可以理解为顺序执行,执行完一条才会向后面执行

a=1;
b=2;
c=3;begina = b;c = a;
end/*
最后结果为:
a=2
b=2
c=2
*/

1.15.非阻塞赋值

可以理解为并行执行(同时执行),全部一起执行的

a=1;
b=2;
c=3;begina <= b;c <= a;
end/*
最后结果为:
a=2
b=2
c=1
*/

http://www.ppmy.cn/devtools/109850.html

相关文章

flutter开发多端平台应用的探索 上(基本操作)

前言 Flutter 是一个跨平台的开发框架&#xff0c;它允许开发者使用相同的代码库来构建 iOS、Android、Web 和桌面应用程序。 最近想了想&#xff0c;自己一直在用flutter开发特定端的应用&#xff0c;但是对于其他端的端特性case&#xff0c;如桌面端的菜单、多窗口、鼠标事…

学期计划大二上

项目方面&#xff1a; 等打完icpc再翻下数据再决定走哪个方向 算法方面&#xff1a; 感觉自己的代码能力还是不够&#xff0c;明明思路已经很清晰了代码还是写的很慢&#xff0c;所以在赛场上一直没有当键盘手的勇气&#xff0c;这也导致了赛场上的失利&#xff0c;我觉得我的…

计算机毕业设计选题推荐-果蔬生产溯源管理系统-Java/Python

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

React 通用后台管理项目

React 通用后台管理项目 项目介绍 本项目是基于React的通用后台管理系统&#xff0c;整体系统有数据可视化展示&#xff0c;数据基本的增删改查功能。项目使用 Create React App创建&#xff0c;主语言为JavaScript。在使用React框架过程中通过hook进行页面逻辑编写。后端接口…

GitHub Copilot Issue in Visual Studio Code “Status Ready (disabled)“

I’m facing an issue with GitHub Copilot in Visual Studio Code, where it’s not suggesting any code. Even though it says “enabled globally” in the extensions tab settings, the icon in the status bar has a diagonal line through it. When I click on the ico…

【西电电装实习】3. SMT

前言 西电电装实习 定义 SMT&#xff0c;全称为Surface Mount Technology&#xff0c;即表面贴装技术。 是一种将电子元器件直接贴装在印刷电路板&#xff08;PCB&#xff09;表面的工艺。 与传统的插针式组装方法相比&#xff0c;SMT技术具有更高的组装密度、更小的电子产品…

手撕Python之文件操作

1.编码 编码---encode() 解码---decode() #编码(encode):将我们能够识别的文字&#xff0c;转换为计算机能够识别的内容 print(你好.encode())#默认utf-8 #b\xe4\xbd\xa0\xe5\xa5\xbd #将你好翻成进制数#解码&#xff08;decode&#xff09;:将计算机能识别的内容&#xff0c…

NestJS中使用Guard实现路由保护

NestJS中Guard是一种用于保护路由的机制。它可以在路由处理之前执行一些逻辑&#xff0c;例如验证用户身份、检查权限等。 什么是Guard&#xff1f; Guard是一个实现了CanActivate接口的类。它可以在路由处理之前执行一些逻辑&#xff0c;例如验证用户身份、检查权限等。如果…