Verilog初级教程(1)认识 Verilog HDL

背景

集成电路的设计经历了从原理图绘制(工程师在纸上绘制晶体管及其连接,以便对其设计,使其可以在硅上制造)到硬件描述语言的转变,这是因为大型的设计,如果使用原理图的方式进行设计会耗费大量的人力、时间和资源等,这催生着硬件描述语言的诞生!

硬件描述语言最开始出现的VHDL,它是1983年,应美国国防部要求开发的,目的是记录供应商公司将其包括在设备中的ASIC的行为。

硬件描述语言允许工程师描述所需硬件的功能,并使得EDA工具将该行为转换为组合逻辑以及时序逻辑之类的实际硬件单元,VHDL很快得到了发展!
Verilog的开发旨在简化开发流程,并使得硬件描述语言(HDL)更加的健壮和灵活。如果,Verilog已经成为全球使用地区最多的硬件描述语言。

如下图,来自于参考资料2,显示了使用Verilog以及VHDL的地域区别,

HDL使用地域差异

正文介绍

Verilog有什么用途?

Verilog创建了一种抽象级别,以帮助隐藏电路实现及其细节,让我们能关注于电路的行为。

举个例子:

 module ctr (
    input up_down,
    input clk,
    input rstn,
    output reg [2:0]  out
    );
 
    always @ (posedge clk)
      if (!rstn)
        out <= 0;
      else begin
        if (up_down)
          out <= out + 1;
        else
          out <= out - 1;
      end
  endmodule

这段设计描述的电路是一种计数器,输入信号up_down有效时候,计数递增,否则递减!

这很清晰地让我们知道Verilog长什么样子,我们不需要描述电路的实现细节,而只需要描述电路的行为或者功能即可,这大大提高了开发效率!

如何验证Verilog设计的功能?

打个不恰当的比喻,也许能帮助理解,如果将Verilog描述的电路比作一个灯泡,那么验证的方式就是给灯泡通电,测试灯泡亮或不亮,以此达到验证的目的。

通过不同的方法对设计进行检查,统称为验证。验证的最普遍和广泛实践的方法是电路仿真。有一些软件工具可以了解Verilog中描述的硬件应如何工作并为设计模型提供各种输入刺激。然后对照预期值检查设计的输出,以查看设计在功能上是否正确。

所有仿真均由EDA(电子设计自动化)软件工具执行,并且Verilog设计RTL放置在称为testbench的平台内。在测试平台内,各种测试为设计提供了不同的刺激。下图显示了这样的测试平台。

在这里插入图片描述

Verilog设计模板

module [design_name] ( [port_list] );
 
  [list_of_input_ports]
  [list_of_output_ports]
 
  [declaration_of_other_signals]
 
  [other_module_instantiations_if_required]
 
  [behavioral_code_for_this_module]
endmodule

  1. 模块定义和端口列表声明
  2. 输入和输出端口列表
  3. 使用允许的Verilog数据类型声明其他信号
  4. 设计可能依赖于其他Verilog模块,因此它们的实例是通过模块实例化创建的
  5. 描述该模块行为的此模块的实际Verilog设计

例如下面的verilog设计显示了一个D触发器的行为:

 
// "dff" is the name of this module 
 
module  dff  (
    input   d,       // Inputs to the design should start with "input"
    input rstn,
    input clk,
    output reg   q);     // Outputs of the design should start with "output"
 
 
  always @ (posedge clk) begin   // This block is executed at the positive edge of clk 0->1
    if (!rstn)          // At the posedge, if rstn is 0 then q should get 0
      q <= 0;
    else 
      q <= d;         // At the posedge, if rstn is 1 then q should get d
  end
endmodule               // End of module
 

对这段设计进行测试的仿真文件:

 
module tb;
 
  // 1. Declare input/output variables to drive to the design
  reg   tb_clk;
  reg   tb_d;
  reg   tb_rstn;
  wire   tb_q;
 
  // 2. Create an instance of the design
  // This is called design instantiation
  dff   dff0 (   
          .clk   (tb_clk),     // Connect clock input with TB signal
          .d     (tb_d),     // Connect data input with TB signal
          .rstn   (tb_rstn),     // Connect reset input with TB signal
          .q     (tb_q));     // Connect output q with TB signal
 
  // 3. The following is an example of a stimulus
  // Here we drive the signals tb_* with certain values
  // Since these tb_* signals are connected to the design inputs,
  // the design will be driven with the values in tb_*
  initial begin
    tb_rsnt   <=   1'b0;
    tb_clk     <=   1'b0;
    tb_d     <=  1'b0;
  end
endmodule
 

参考资料汇总

参考资料1
参考资料2

  • 17
    点赞
  • 108
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
目 录 译者序 前言 第1章 简介 1 1.1 什么是Verilog HDL? 1 1.2 历史 1 1.3 主要能力 1 第2章 HDL南 4 2.1 模块 4 2.2 时延 5 2.3 数据流描述方式 5 2.4 行为描述方式 6 2.5 结构化描述形式 8 2.6 混合设计描述方式 9 2.7 设计模拟 10 第3章 Verilog语言要素 14 3.1 标识符 14 3.2 注释 14 3.3 格式 14 3.4 系统任务和函数 15 3.5 编译令 15 3.5.1 `define和`undef 15 3.5.2 `ifdef、`else 和`endif 16 3.5.3 `default_nettype 16 3.5.4 `include 16 3.5.5 `resetall 16 3.5.6 `timescale 16 3.5.7 `unconnected_drive和 `nounconnected_drive 18 3.5.8 `celldefine 和 `endcelldefine 18 3.6 值集合 18 3.6.1 整型数 18 3.6.2 实数 19 3.6.3 字符串 20 3.7 数据类型 20 3.7.1 线网类型 20 3.7.2 未说明的线网 23 3.7.3 向量和标量线网 23 3.7.4 寄存器类型 23 3.8 参数 26 第4章 表达式 28 4.1 操作数 28 4.1.1 常数 28 4.1.2 参数 29 4.1.3 线网 29 4.1.4 寄存器 29 4.1.5 位选择 29 4.1.6 部分选择 29 4.1.7 存储器单元 30 4.1.8 函数调用 30 4.2 操作符 30 4.2.1 算术操作符 31 4.2.2 关系操作符 33 4.2.3 相等关系操作符 33 4.2.4 逻辑操作符 34 4.2.5 按位操作符 35 4.2.6 归约操作符 36 4.2.7 移位操作符 36 4.2.8 条件操作符 37 4.2.9 连接和复制操作 37 4.3 表达式种类 38 第5章 门电平模型化 39 5.1 内置基本门 39 5.2 多输入门 39 5.3 多输出门 41 5.4 三态门 41 5.5 上拉、下拉电阻 42 5.6 MOS开关 42 5.7 双向开关 44 5.8 门时延 44 5.9 实例数组 45 5.10 隐式线网 45 5.11 简单示例 46 5.12 2-4解码器举例 46 5.13 主从触发器举例 47 5.14 奇偶电路 47 第6章 用户定义的原语 49 6.1 UDP的定义 49 6.2 组合电路UDP 49 6.3 时序电路UDP 50 6.3.1 初始化状态寄存器 50 6.3.2 电平触发的时序电路UDP 50 6.3.3 边沿触发的时序电路UDP 51 6.3.4 边沿触发和电平触发的混合行为 51 6.4 另一实例 52 6.5 表项汇总 52 第7章 数据流模型化 54 7.1 连续赋值语句 54 7.2 举例 55 7.3 线网说明赋值 55 7.4 时延 55 7.5 线网时延 57 7.6 举例 57 7.6.1 主从触发器 57 7.6.2 数值比较器 58 第8章 行为建模 59 8.1 过程结构 59 8.1.1 initial 语句 59 8.1.2 always语句 61 8.1.3 两类语句在模块的使用 62 8.2 时序控制 63 8.2.1 时延控制 63 8.2.2 事件控制 64 8.3 语句块 65 8.3.1 顺序语句块 66 8.3.2 并行语句块 67 8.4 过程性赋值 68 8.4.1 语句内部时延 69 8.4.2 阻塞性过程赋值 70 8.4.3 非阻塞性过程赋值 71 8.4.4 连续赋值与过程赋值的比较 72 8.5 if 语句 73 8.6 case语句 74 8.7 循环语句 76 8.7.1 forever 循环语句 76 8.7.2 repeat 循环语句 76 8.7.3 while 循环语句 77 8.7.4 for 循环语句 77 8.8 过程性连续赋值 78 8.8.1 赋值—重新赋值 78 8.8.2 force与release 79 8.9 握手协议实例 80 第9章 结构建模 83 9.1 模块 83 9.2 端口 83 9.3 模块实例语句 83 9.3.1 悬空端口 84 9.3.2 不同的端口长度 85 9.3.3 模块参数值 85 9.4 外部端口 87 9.5 举例 89 第10章 其他论题 91 10.1 任务 91 10.1.1 任务定义 91 10.1.2 任务调用 92 10.2 函数 93 10.2.1 函数说明部分 93 10.2.2 函数调用 94 10.3 系统任务和系统函数 95 10.3.1 显示任务 95 10.3.2 文件输入/输出任务 97 10.3.3 时间标度任务 99 10.3.4 模拟控制任务 99 10.3.5 定时校验任务 100 10.3.6 模拟时间函数 101 10.3.7 变换函数 102 10.3.8 概率分布函数 102 10.4 禁止语句 103 10.5 命名事件 104 10.6 结构描述方式和行为描述方式的 混合使用 106 10.7 层次路径名 107 10.8 共享任务和函数 108 10.9 值变转储文件 110 10.9.1 举例 111 10.9.2 VCD文件格式 112 10.10 定程序块 113 10.11 强度 114 10.11.1 驱动强度 114 10.11.2 电荷强度 115 10.12 竞争状态 116 第11章 验证 118 11.1 编写测试验证程序 118 11.2 波形产生 118 11.2.1 值序列 118 11.2.2 重复模式 119 11.3 测试验证程序实例 123 11.3.1 解码器 123 11.3.2 触发器 124 11.4 从文本文件读取向量 126 11.5 向文本文件写入向量 127 11.6 其他实例 128 11.6.1 时钟分频器 128 11.6.2 阶乘设计 130 11.6.3 时序检测器 132 第12章 建模实例 136 12.1 简单元件建模 136 12.2 建模的不同方式 138 12.3 时延建模 139 12.4 条件操作建模 141 12.5 同步时序逻辑建模 142 12.6 通用移位寄存器 145 12.7 状态机建模 145 12.8 交互状态机 147 12.9 Moore有限状态机建模 150 12.10 Mealy型有限状态机建模 151 12.11 简化的21点程序 153 附录 语法参考 157 参考文献 172
### 回答1: 对于华为Verilog HDL入门教程的下载,您可以按照以下步骤进行操作: 1. 打开您的网络浏览器,并访问华为官方网站。 2. 在网站的搜索框输入“华为Verilog HDL入门教程”。 3. 单击搜索按钮,系统会显示与您搜索相关的结果。 4. 从搜索结果选择与您需求最符合的教程链接,并单击进入。 5. 在页面上找到下载链接或示,可能是以PDF或文本文件的形式提供。 6. 单击下载链接,并等待下载完成。 请注意,华为官方网站是最可靠和安全的资源来源,确保您从该网站下载教程。此外,您可能需要通过华为账户进行登录或注册,然后才能下载教程。 如果以上步骤不适用或无法找到相关教程,请您尝试通过其他渠道获取帮助。您可以到华为官方论坛、技术社区或与华为客服联系,以获取更多关于Verilog HDL入门教程的信息和支持。 ### 回答2: 华为Verilog HDL入门教程可以在华为官方网站上进行下载。以下是下载教程的步骤: 1. 打开浏览器,访问华为官方网站(www.huawei.com)。 2. 在网站首页的搜索栏输入“华为Verilog HDL入门教程”。 3. 在搜索结果找到与入门教程相关的链接。 4. 点击链接进入教程页面。 5. 浏览页面,找到下载按钮或链接。 6. 点击下载按钮或链接,选择下载到您的计算机或设备上的位置。 7. 根据提示完成下载过程。 请注意,华为官方网站通常提供多种语言的下载选项,您可以选择适合您的语言版本进行下载。 通过下载华为Verilog HDL入门教程,您将有机会学习到使用Verilog HDL进行硬件设计的基本知识和技巧。这个教程将引导您了解Verilog HDL的基本语法、模块化设计、时序和组合逻辑等概念。同时,教程还提供了一些示例代码和案例,帮助您更好地理解和应用所学内容。 通过学习华为Verilog HDL入门教程,您将能够掌握Verilog HDL的基础,从而能够进行更复杂的硬件设计和开发。无论您是从事硬件设计的工程师,还是对硬件设计有兴趣的初学者,这个教程都会为您提供一个很好的起点。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李锐博恩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值