逻辑与数字系统设计 第三章 硬件描述语言基础
3.1 硬件描述语言概述
Q : 什么是硬件描述语言 ?
硬件描述语言是一种描述硬件电路的语言
通过它 , 可以实现从上层到下层的复杂系统的建设
Q : 硬件描述语言如何描述电路 ?
三种层次 .
第一为结构级(逻辑门级) , 即描述与门或门等
第二为行为级
第三为寄存器传输级(RTL)
通过逻辑综合 , 后两种层次可以被转换为低抽象层的门电路
Q : 硬件描述的用途 ?
- 系统仿真
通过仿真 , 检测设计电路的问题 . 仿真可以使用所有的语法 - 硬件实现
必须保证硬件"可综合" , 不是所有的硬件描述语言都可以用于硬件实现
Q : 目前的硬件描述语言是什么 ?
VHDL和Verilog HDL
VHDL是美国军方开发的 , 1987年称为IEEE标准
Verilog HDL是1983年企业设计
Verilog HDL可以实现系统级 , 算法级 , RTL级 , 门级 ,开关级的逻辑设计(从高到低) , 每个Verilog模型由多个模块组成 , 模块内部又有模块
3.2 Verilog 语言基本概念
3.2.1 Verilog 程序基本结构
module full_adder(
input Ai,//输入端口
input Bi,//输入端口
input Ci,//低位进位,输入端口
output Ci,//本位和,输出端口
output Ciout);//向高位进位,输出端口
//线网说明
wire C0,A0,C1;
assign Ciout = C0|C1;//全加器输出
half_adder u0(
.Ai(Ai),
.Bi(Bi),
.Si(A0),
.Ci(C0));
half_adder u1(
.Ai(A0),
.Bi(Ci),
.Si(Si),
.Ci(C1));
//两个例化
endmodule
其中 , 全加器为顶层模块 , 半加器为底层模块 , 通过例化调用底层模块
3.2.2 Verilog 语言要素
标识符
字母 , 数字 , $ , _的组合 , 第一个为字母或者下划线 , 字符数不超过1024个 , 区别大小写
关键词
即保留字
关键词都是小写
注释
同cpp
逻辑值
四种
- 逻辑0 : 表示低电平 , 接地
- 逻辑1 : 表示高电平 , 接电源
- 逻辑x : 表示逻辑状态不定 , 可能高可能低
- 逻辑z : 表示高阻态 , 悬空
常量
-
整型常量
有10进制格式和基数格式
基数格式 :
<位宽>'<进制符号><数字>
如 7'b1000000
8'h2a
16'b1010_1011_1111_1010
注意 : b之后是数字 , 不是'_' -
字符串型常量
如"hello,world"
- 参数声明
类似cosnt int
parameter byte_size = 8;
- 数据类型
- 线网类型 : 物理连线 assign F = B & C
当线网没有被驱动时 , 默认为高阻态Z
- 寄存器类型 : 只能在always和initial中被赋值
最常用的是reg
3.2.3 Verilog 运算符
算术运算符
-
-
- \ %
-
关系运算符
< > <= >= == !=
逻辑运算符
&& || !
位运算
~非
&与
|或
^异或
~^同或
条件运算
条件?表达式1:表达式2
连接运算
{}
用于赋值wire [7:0]Dbus之类
移位运算
data <<2 左移两位
操作符优先级
略
3.3 Verilog 行为语句
类别
有过程语句 initial(N) , always(Y)
块语句begin-end(Y),fork-join(N)
赋值语句assign(Y),=(Y)<=(Y)
条件语句if-else(Y),case(Y)
循环语句for(静态可综合),repeat(重复次数常数可综合),while(N)
编译预处理'define(Y),'include(Y),'ifdef-'else-'endif(Y)
赋值语句
-
持续性赋值
对wire
assign #10 F = A&B; -
过程赋值
对reg
always里 , 一旦触发 , 则产生赋值
条件语句
0,x,z为假
循环语句
- forever , 用在initiial , 生成周期性波形/
- repeat , n次
- while , 同cpp
- for , 同cpp
3.4 Verilog 描述语句
行为级建模-行为级描述形式
只需要描述清楚输入输出信号的行为 , 抽象程度高于结构级建模
结构级建模-结构描述形式
调用模块实现建模
数据流建模-数据流描述形式
列举问题和答案进行函数构建 , 常见很多位运算

浙公网安备 33010602011771号