初识Verilog HDL其一

embedded/2024/12/21 23:39:02/

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/embedded/109701.html

相关文章

十二、新版UI

一、UI Toolkit 这个组件是新版的UI系统 创建了一个新的UIBuild&#xff0c;在单独的场景中打开 未来Unity会以这个为基准。 缺点&#xff1a;目前没有Animator&#xff0c;做不了动画&#xff1b;没法加shader

Python 全栈系列267 telegraf、influxdb和grafana

说明 没想到如此丝滑 本来是因为想稍微了解一下influxdb&#xff0c;然后发现和telegraf配套能干监控&#xff0c;然后正好之前又起了grafana,然后瞬间就通了。 内容 1 telegraf Telegraf 是一个开源的服务器代理&#xff0c;用于收集、处理和发送数据。它是 InfluxData 公司…

4 个步骤带你快速上手 Einstein Copilot for Tableau

如果你的企业仍未部署或希望迁移至 Tableau Cloud&#xff0c;可考虑订阅 Tableau 高级套件。 自 Einstein Copilot for Tableau 发布以来&#xff0c;相信部分用户已经尝试过在 Tableau Cloud 中借助 AI 对话助理&#xff0c;快速解决数据分析中的问题&#xff0c;获得更准确的…

MySQL 事务处理

本篇文章介绍了为什么要使用MYSQL事务处理&#xff0c;事务处理的术语和命令及事务处理示例。 目录 事务处理 事务处理的术语 控制事务处理 准备表 班级表 学生表 开始事务 使用回退 使用提交 使用保留点 保留点 创建保留点 回退保留点 使用保留点示例 总结 事务…

element UI学习使用(1)

https://element.eleme.cn/2.6/#/zh-CN/component/container vue模块库&#xff0c;可复制直接使用 1、搜索框、下拉搜索框 <el-form :inline"true" class"demo-form-inline"><el-form-item label"结果搜索"><el-inputplaceho…

苹果企业签名原理与实现方法

苹果企业签名是一种允许企业在不通过 App Store 的情况下将内部应用分发给员工或特定用户群体的方式。 一、苹果企业签名原理 证书机制 苹果企业开发者账号允许企业创建企业证书。 这个证书用于对应用进行签名&#xff0c;以证明应用的来源和完整性。 当用户安装经过企业签…

类与结构体实例(Class和Struct)——C#学习笔记

由于类是引用类型&#xff0c;因此类对象的变量引用该对象在托管堆上的地址。 以下为类实例&#xff1a; 以上实例中&#xff0c;当person2改名字后&#xff0c;person1的名字也随之改变&#xff0c;因为对象本身变了。而struct则不会出现这种情况&#xff0c;当person P 2 P…

Redis位图BitMap

一、为什么使用位图&#xff1f; 使用位图能有效实现 用户签到 等行为&#xff0c;用数据库表记录签到&#xff0c;将占用很多存储&#xff1b;但使用 位图BitMap&#xff0c;就能 大大减少存储占用 二、关于位图 本质上是String类型&#xff0c;最小长度8位&#xff08;一个字…