写点什么

Verilog HDL 仿真常用命令

作者:timerring
  • 2023-01-27
    甘肃
  • 本文字数:1886 字

    阅读完需:约 6 分钟

⭐本专栏针对 FPGA 进行入门学习,从数电中常见的逻辑代数讲起,结合 Verilog HDL 语言学习与仿真,主要对组合逻辑电路与时序逻辑电路进行分析与设计,对状态机 FSM 进行剖析与建模。🔥文章和代码已归档至【Github 仓库:hardware-tutorial】,需要的朋友们自取。或者关注公众号【AIShareLab】,回复 FPGA 也可获取。

系统任务(System Tasks)

1.显示任务(Display Task)

$display 是 Verilog 中最有用的任务之一,用于将指定信息(被引用的字符串、变量值或者表达式)以及结束符显示到标准输出设备上。其格式如下:


2.display 的相同.

3.仿真的中止 (Stopping) 和 完成(Finishing)任务

  • $stop;//在仿真期间,停止执行,未退出仿真环境。

  • $finish;//仿真完成,退出仿真环境,并将控制权返回给操作系统。

  • 系统任务stop 使仿真器被挂起。然后可以发送交互命令给仿真器继续仿真。

编译指令(Compiler Directives)

以 `(反撇号)开头的标识符就是编译指令,用来控制代码的整个过程。在 Verilog 代码编译的整个过程中,编译指令始终有效(编译过程可能跨越多个文件),直至遇到其他不同的编译指令为止。


`timescale  time_unit/time_precision`include  " ../../header.v "`define  WORD_SIZE  32      //定义文本宏 `undef`ifdef  `ifndef    `else    `elseif   `endif
复制代码

时间尺度`timescale

`timescale 命令用于在文件中指明时间单位和时间精度,通常在对文件进行仿真时体现。EDA 工具可以支持在一个设计中可根据仿真需要在不同模块里面指定不同的时间单位。如模块 A 仿真的时间单位为皮秒(ps),模块 B 仿真的时间单位为纳秒(ns)。


使用`timescale 命令语句格式如下:


  • `timescale <时间单位> / <时间精度>

  • 使用时注意: <时间单位>和<时间精度>必须是整数,且时间精度不能大于时间单位值。

  • 例如:`timescale 1ns / 1ns


时间单位是定义仿真时间和延迟时间的基准单位;时间精度是定义模块仿真时间的精确程度的,又被称为取整精度(在仿真前,被用来对延迟的时间值进行取整操作)。如果在同一个设计中,出现多个`timescale 命令,工具会采用最小的时间精度值来决定仿真的时间单位。


`timescale 1ns / 1ps:此命令已定义模块中的时间单位为 1ns,即仿真模块中所有的延迟时间单位都是 1ns 的整数倍;定义了模块的时间精度为 1ps,即仿真模块中延迟单位可以指定到小数点后 3 位,小数超过 3 位会进行取小数点后 3 位的操作。

宏定义`define

在设计中,为了提高程序可读性和简化程序描述,可以使用指定的标识符来代替一个长的字符串,或者使用一个简单的名字来代替没有含义的数字或者符号,此时需使用到宏定义命令`define。


使用`define 命令格式如下:


  • `define signal(宏名) string(宏内容)

  • 在设计中进行了以上声明后,在预编译处理时,在此命令后程序中所有的 signal 都替换成 string,此过程称为“宏展开”。


//例1 :`define LENGTH 16  reg [ `LENGTH–1 : 0 ]   writedata;    //即定义reg[15:0] writedata;//例2 :`define  expression  a+b+c  assign data = `expression + d ; //经宏展开之后                                   //assign  data = a+b+c+d;//例3 :`define A  a+b`define B  c+`A assign  data = `B ;   // 即data = c + a + b;
复制代码

文件包含指令`include

和 C 语言中声明头文件很类似。其一般形式为:


``include “文件名”`


例:文件 para.v 中有一个宏定义 `define A 2+3, 在 test.v 文件中可以直接调用。


`timescale 1ns/1ps`include  "para.v"`module test(         input wire       clk,        output reg [7:0] result                       );     always@(posedge clk)      begin        result <= `A + 10;          endendmodule
复制代码


关于文件包含的几点说明:


  • 一个`include 只能指定一个包含文件;

  • `include 中的文件名可以是相对路径,也可以是绝对路径(ISE 中调用 Modelsim 仿真的时候得用绝对路径,否则 Modelsim 会报错);

  • 如果文件 1 包含文件 2,而文件 2 要用到文件 3 的内容,那么在文


例:para.v 中 : `define A 2+3 para2.v 中: `define B `A+2 test.v 中:


`timescale 1ns/1ps`include  " para.v"`include  " para2.v"module test(         input  wire        clk,         output  reg [7:0] result                   );      always@(posedge  clk)          begin        result <= `B+ 10;          endendmodule
复制代码




欢迎关注公众号【AIShareLab】,一起交流更多相关知识,前沿算法,Paper 解读,项目源码,面经总结。

发布于: 刚刚阅读数: 6
用户头像

timerring

关注

公众号【AIShareLab】 2022-07-14 加入

公众号【AIShareLab】

评论

发布
暂无评论
Verilog HDL仿真常用命令_FPGA_timerring_InfoQ写作社区