文章目录

  • 背景
  • 正文介绍
    • Verilog有什么用途?
    • 如何验证Verilog设计的功能?
    • Verilog设计模板
  • 参考资料汇总

背景

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

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

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

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

正文介绍

Verilog有什么用途?

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

举个例子:

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

这段设计描述的电路是一种计数器,输入信号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->1if (!rstn)          // At the posedge, if rstn is 0 then q should get 0q <= 0;else q <= d;         // At the posedge, if rstn is 1 then q should get dend
endmodule               // End of module

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


module tb;// 1. Declare input/output variables to drive to the designreg   tb_clk;reg   tb_d;reg   tb_rstn;wire   tb_q;// 2. Create an instance of the design// This is called design instantiationdff   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 begintb_rsnt   <=   1'b0;tb_clk     <=   1'b0;tb_d     <=  1'b0;end
endmodule

参考资料汇总

参考资料1
参考资料2

Verilog初级教程(1)认识 Verilog HDL相关推荐

  1. Verilog初级教程(2)Verilog HDL的初级语法

    文章目录 前言 正文 注释 空格 操作符 数字格式 字符串 标识符 关键字 verilog修订 写在最后 前言 学习Verilog和学习任何一门编程语言一样,都需要从语法开始,不会语法去学习设计是几乎 ...

  2. Verilog初级教程(23)Verilog仿真中的显示任务

    文章目录 前言 正文 Display/Write Tasks Verilog Strobes Verilog Continuous Monitors Verilog Format Specifiers ...

  3. Verilog初级教程(21)Verilog中的延迟控制语句

    文章目录 前言 正文 延迟控制语句 事件控制语句 Named Events Event or operator 往期回顾 参考资料及推荐关注 前言 Verilog中的延迟控制有两种类型–延迟和事件表达 ...

  4. Verilog初级教程(20)Verilog中的`ifdef 条件编译语句

    文章目录 前言 正文 语法 示例 Testbench文件 往期回顾 参考资料及推荐关注 前言 `ifdef条件编译语句在逻辑设计中还是很常见的,但也常见一些滥用的情况,这应该避免. 应该在什么情况下使 ...

  5. Verilog初级教程(15)Verilog中的阻塞与非阻塞语句

    文章目录 前言 正文 阻塞赋值 非阻塞赋值 往期回顾 参考资料以及推荐关注 前言 本文通过仿真的方式,形象的说明阻塞赋值以及非阻塞赋值的区别,希望和其他教程相辅相成,共同辅助理解. 正文 阻塞赋值 阻 ...

  6. Verilog初级教程(14)Verilog中的赋值语句

    文章目录 前言 正文 合理的左值 过程性赋值(Procedural assignment) 连续赋值 过程连续性赋值 往期回顾 前言 何为赋值语句?即将值放到线网或者变量上,这种操作称为赋值,英文:a ...

  7. Verilog初级教程(12)Verilog中的generate块

    文章目录 前言 正文 generate for generate if generate case 参考资料 本系列博文 前言 verilog中的generate块可以称为生成块,所谓生成,可以理解为 ...

  8. Verilog初级教程(11)Verilog中的initial块

    文章目录 前言 正文 语法格式 initial块是用来干什么的? initial块何时开始又何时结束? 一个模块中允许有多少个initial块? 参考资料 写在最后 前言 仿真中通常会依次执行一组Ve ...

  9. Verilog初级教程(9)Verilog的运算符

    博文目录 写在前面 正文 Verilog算术运算符 Verilog关系运算符 Verilog等价运算符 Verilog逻辑运算符 Verilog位元运算符 Verilog移位运算符 参考资料 交个朋友 ...

  10. Verilog初级教程(7)Verilog模块例化以及悬空端口的处理

    博文目录 写在前面 正文 按顺序排列的端口连接 按名称排列的端口连接 未连接/悬空端口处理 关于模块端口的说明 参考资料 交个朋友 写在前面 此系列相关博文: Verilog初级教程(6)Verilo ...

最新文章

  1. 开发日记-20190825 关键词 管道和FIFO
  2. 安居客检测到网页抓取_安居客天津租房情况分析
  3. 从Google Maglev说起,如何造一个牛逼的负载均衡?
  4. [vue] vue生命周期的作用是什么?
  5. python-数据类型-字符串入门-定符串的定义-type函数-iput函数
  6. 查看回调函数执行在那个线程中的方法
  7. python图像边缘检测报告_python – 检测图像的最外边缘并基于它进行绘图
  8. 库克:5G iPhone目前还不是我们考虑的问题
  9. c语言智能车跑道检测程序,智能小车的循迹方法与流程
  10. 服务器基础设置:服务器设置PXE启动,
  11. 大道至简之四:透过现象看本质
  12. 网易笔试001(HR之声)
  13. ST17H66 低功耗蓝牙SOC开发(3)—— OSAL系统简介
  14. [M1]Daily Scum 9.27
  15. 蚂蚁区块链第10课 可信计算及TEE硬件隐私合约链智能合约开发实践
  16. VMware虚拟机怎么用U盘装win7系统
  17. Apache Tomcat优化
  18. linux 32位和64位的区别 内存,32位、64位的区别
  19. Linux设置非root用户启动程序
  20. signature=fd1093c9205f8af457ccc5f1d3251c78,An FDTD method for ELFE propagation in seawater.

热门文章

  1. 有状态会话Bean(SLSB)和无状态会话Bean(SFSB)的区别
  2. java io 文件复制_实例讲述Java IO文件复制
  3. 学业水平测试计算机都考什么,高中学业水平考试与高中会考有什么区别
  4. html动态生成榜单信息,排行榜.html
  5. k2677场效应管参数引脚_场效应管参数大全2.doc
  6. JS通过正则限制 input 输入框只能输入整数、小数(金额或者现金) 两位小数
  7. window.opener.document.getElementById(“a”)用标准的Jquery 语言怎么写
  8. notepad如何新建php,notepad新手怎么使用教程
  9. 智能车竞赛技术报告 | 智能车视觉 - 温州大学- 春华秋实
  10. 2021年春季学期-信号与系统-第十四次作业参考答案-第七小题参考答案