没有合适的资源?快使用搜索试试~ 我知道了~
首页Verilog HDL入门教程:硬件描述语言详解
Verilog HDL入门教程:硬件描述语言详解
需积分: 18 20 下载量 45 浏览量
更新于2024-07-21
收藏 148KB PDF 举报
Verilog HDL简明教程是一本详细介绍Verilog硬件描述语言的中文教材,它涵盖了从算法级到硬件实现的广泛设计层次。Verilog HDL是一种强大的工具,用于建模数字系统,其灵活性允许设计师描述从基本门到复杂电子系统的各种抽象级别。该语言强调行为、数据流、结构组成及验证过程中的时序性和波形表示,所有这些都使用统一的建模语言,使得设计者能够直观地理解和控制设计流程。 在Verilog HDL语言中,行为特性描述了系统如何响应输入,数据流特性关注信号之间的交互,而结构组成则关注模块如何组合以形成更大的系统。语言还支持实时模拟和验证,用户可以通过编程接口从外部控制和观察设计,这对于调试和优化至关重要。 语言的语法严谨,且对每个语法结构都有明确的模拟和仿真含义,确保了模型的可验证性。虽然Verilog HDL的某些扩展功能可能起初不易理解,但核心部分易于上手,足以满足大部分设计者的建模需求。完整版本的Verilog HDL能够覆盖从复杂芯片到完整电子系统的描述范围,显示出其强大的适应性和灵活性。 教程共分为多个章节,如第一章介绍语言基础,随后的章节分别深入探讨HDL指南、语言要素、表达式、门电平模型化等,为学习者提供了一个循序渐进的学习路径。通过学习这本简明教程,读者将掌握Verilog HDL的基本概念和技能,为其在实际硬件设计项目中高效应用打下坚实的基础。
资源详情
资源推荐
中文版 Verilog HDL 简明教程
- 9 -
的输入连接。
4 位全加器可以使用 4 个 1 位全加器模块描述。下面是 4 位全加器的结构描述形式。
module FourBitFA (FA, FB, FCin, FSum, FCout );
parameter SIZE = 4;
input [SIZE:1] FA, FB;
output [SIZE:1] FSum
input FCin;
input FCout;
wire [ 1: SIZE-1] FTemp;
FA_Str
FA1( .A (FA[1]), .B(FB[1]), .Cin(FCin),
.Sum(FSum[1]), .Cout(FTemp[2])),
FA2( .A (FA[2]), .B(FB[2]), .Cin(FTemp[1]),
.Sum(FSum[2]), .Cout(FTemp[2])),
FA3(FA[3], FB[3], FTemp[2], FSum[3], FTemp[3],
FA4(FA[4], FB[4], FTemp[3], FSum[4], FCout);
endmodule
在这一实例中,模块实例用于建模 4 位全加器。在模块实例语句中,端口可以与名
称或位置关联。前两个实例 FA1 和 FA2 使用命名关联方式,也就是说,端口的名称和
它连接的线网被显式描述(每一个的形式都为“.port_name (net_name))。最后两个实例
语句,实例 FA3 和 FA4 使用位置关联方式将端口与线网关联。这里关联的顺序很重要,
例如,在实例 FA4 中,第一个 FA[4]与 FA_Str 的端口 A 连接,第二个 FB[4]与 FA_Str 的
端口 B 连接,余下的由此类推。
2.6 混合设计描述方式
在模块中,结构的和行为的结构可以自由混合。也就是说,模块描述中可以包含实
例化的门、模块实例化语句、连续赋值语句以及 always 语句和 initial 语句的混合。它
们之间可以相互包含。来自 always 语句和 initial 语句(切记只有寄存器类型数据可以
在这两种语句中赋值)的值能够驱动门或开关,而来自于门或连续赋值语句(只能驱动
线网)的值能够反过来用于触发 always 语句和 initial 语句。
下面是混合设计方式的 1 位全加器实例。
module FA_Mix (A, B, Cin, Sum, Cout);
input A,B, Cin;
output Sum, Cout;
reg Cout;
reg T1, T2, T3;
wire S1;
xor X1(S1, A, B); // 门实例语句。
always
中文版 Verilog HDL 简明教程
- 10 -
@ ( A or B or Cin ) begin // always 语句。
T1 = A & Cin;
T2 = B & Cin;
T3 = A & B;
Cout = (T1| T2) | T3;
end
assign Sum = S1 ^ Cin; // 连续赋值语句。
endmodule
只要A 或 B 上有事件发生,门实例语句即被执行。只要 A、B 或 Cin 上有事件发
生,就执行 always 语句,并且只要 S1 或 Cin 上有事件发生,就执行连续赋值语句。
2.7 设计模拟
Verilog HDL 不仅提供描述设计的能力,而且提供对激励、控制、存储响应和设计
验证的建模能力。激励和控制可用初始化语句产生。验证运行过程中的响应可以作为“变
化时保存”或作为选通的数据存储。最后,设计验证可以通过在初始化语句中写入相应
的语句自动与期望的响应值比较完成。
下面是测试模块 Top 的例子。该例子测试 2.3 节中讲到的 FA_Seq 模块。
‘timescale 1ns/1ns
module Top; // 一个模块可以有一个空的端口列表。
reg PA, PB, PCi;
wire PCo, PSum;
// 正在测试的实例化模块:
FA_Seq F1(PA, PB, PCi, PSum, PCo); // 定位。
initial
begin: ONLY_ONCE
reg [3:0] Pal;
//需要 4 位, Pal 才能取值 8。
for (Pal = 0; Pal < 8; Pal = Pal + 1)
begin
{PA, PB, PCi} = Pal;
#5 $display (“PA, PB, PCi = %b%b%b”, PA, PB, PCi,
“ : : : PCo, PSum=%b%b”, PCo, PSum);
end
end
endmodule
在测试模块描述中使用位置关联方式将模块实例语句中的信号与模块中的端口相
连接。也就是说,PA 连接到模块 FA_Seq 的端口 A,PB 连接到模块 FA_Seq 的端口 B,
中文版 Verilog HDL 简明教程
- 11 -
依此类推。注意初始化语句中使用了一个 for 循环语句,在 PA、PB 和 PCi 上产生波形。for 循
环中的第一条赋值语句用于表示合并的目标。自右向左,右端各相应的位赋给左端的参
数。初始化语句还包含有一个预先定义好的系统任务。系统任务$display 将输入以特定
的格式打印输出。
系统任务$display 调用中的时延控制规定$display 任务在 5 个时间单位后执行。这 5
个时间单位基本上代表了逻辑处理时间。即是输入向量的加载至观察到模块在测试条件
下输出之间的延迟时间。
这一模型中还有另外一个细微差别。Pal 在初始化语句内被局部定义。为完成这一
功能,初始化语句中的顺序过程(begin-end)必须标记。在这种情况下, ONLY_ONCE
是顺序过程标记。如果在顺序过程内没有局部声明的变量,就不需要该标记。下面是测
试模块产生的输出。
PA, PB, PCi = 000 ::: PCo, PSum = 00
PA, PB, PCi = 001 ::: PCo, PSum = 01
PA, PB, PCi = 010 ::: PCo, PSum = 01
PA, PB, PCi = 011 ::: PCo, PSum = 10
PA, PB, PCi = 100 ::: PCo, PSum = 01
PA, PB, PCi = 101 ::: PCo, PSum = 10
PA, PB, PCi = 110 ::: PCo, PSum = 10
PA, PB, PCi = 111 ::: PCo, PSum = 11
验证与非门交叉连接构成的 RS_FF 模块的测试模块如下例所示。
`timescale 10ns/1ns
module RS_FF (Q, Qbar, R, S);
output Q, Qbar;
input R, S;
nand #1 (Q, R, Qbar);
nand #1 (Qbar, S, Q,);
//在门实例语句中,实例名称是可选的。
endmodule
module Test;
reg TS, TR;
wire TQ, TQb;
//测试模块的实例语句:
RS_FF NSTA (.Q(TQ), .S(TS), .R(TR), .Qbar(TQb));
//采用端口名相关联的连接方式。
// 加载激励:
initial
begin:
TR = 0;
剩余50页未读,继续阅读
qq_31304675
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- AirKiss技术详解:无线传递信息与智能家居连接
- Hibernate主键生成策略详解
- 操作系统实验:位示图法管理磁盘空闲空间
- JSON详解:数据交换的主流格式
- Win7安装Ubuntu双系统详细指南
- FPGA内部结构与工作原理探索
- 信用评分模型解析:WOE、IV与ROC
- 使用LVS+Keepalived构建高可用负载均衡集群
- 微信小程序驱动餐饮与服装业创新转型:便捷管理与低成本优势
- 机器学习入门指南:从基础到进阶
- 解决Win7 IIS配置错误500.22与0x80070032
- SQL-DFS:优化HDFS小文件存储的解决方案
- Hadoop、Hbase、Spark环境部署与主机配置详解
- Kisso:加密会话Cookie实现的单点登录SSO
- OpenCV读取与拼接多幅图像教程
- QT实战:轻松生成与解析JSON数据
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功