首页 > 其他分享 >Verilog基本语法(一)基本概念

Verilog基本语法(一)基本概念

时间:2023-01-09 21:24:09浏览次数:42  
标签:reset 变量 port 基本概念 语法 Verilog time reg

Verilog HDL是一种硬件描述语言(HDL:Hardware Description Language),以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。Verilog由Gateway Design Automation公司(该公司于1989年被Cadence公司收购)开发。Verilog可以从五个层次对电路(系统)进行描述,包括:系统级、算法级、寄存器传输级(即RTL级)、门级、开关级。我们平时用的最多的为RTL级,故Verilog代码也经常被称为RTL代码。

Verilog, standardized as IEEE 1364, is a hardware description language used to model electronic systems. It is most commonly used in the design and verification of digital circuits at the register-transfer level of abstraction. It is also used in the verification of analog circuits and mixed-signal circuits, as well as in the design of genetic circuits. In 2009, the Verilog standard was merged into the SystemVerilog standard, creating IEEE Standard 1800-2009. Since then, Verilog is officially part of the SystemVerilog language. The current version is IEEE standard 1800-2017.

词法

// 注释
// 单行注释
/* 多行
    注释 */

// 操作符
a = ~b; // 单目操作符,取反操作。
a = b && c; // 双目操作符,
a = b ? c : d; // ?:是三目操作符,条件选择操作。

// 数字声明:<size>'<base format><number>
a = 4'b1111; // 4位的二进制数。
a = 12'habc; // 12位的十六进制数。
a = 16'd255; // 16位的十进制数。
a = 23456; // 如果不指定位数,则位数与所使用的计算机相关。
a = 6'hx; // 6位的十六进制数,所有位不确定(x表示值不确定)。
a = 32'bz; // 32位的高阻值(z表示高阻值)。

// 字符串
a = "Hello World"; 

// 标识符与关键字
reg value; // reg是关键字,value是标识符。
input clk; // input是关键字,clk是标识符。

数据类型

// 线网
wire a = 1'b0; // 声明a是wire(连线)类型,并被赋值为逻辑值0。

// 寄存器
reg reset; // 声明能保持数值的变量reset;
initial begin
    reset = 1'b1; // 把clk初始化为1,使数字电路复位。
    #100 reset = 1'b0; // 经过100个时间单位后,reset置为0。
end

// 向量:[high#:low#]或[low#:high#],左边的数总是代表向量的最高有效位。
wire a; // 标量线网变量。
wire [7:0] bus; // 8位总线。
wire [31:0] busA, busB, busC; // 3条32位宽的总线。
reg [0:40] virtual_addr; //向量寄存器,41位宽的虚拟地址,最高有效位是第0位。
busA[7]; // 向量busA的第8位。
bus[2:0]; // 向量bus的低3位。如果写成bus[0:2]是非法的,因为高位应该卸载范围说明的左侧。
virtual_addr[0:1]; // 向量virtual_addr的2个最高位。

// 整数
integer counter; // 一般用途的变量,作为计数器。

// 实数
real delta; // 定义一个名为delta的实型变量。

// 时间寄存器
time save_sim_time; // 定义时间类型的变量save_sim_time。
initial begin
    save_sim_time = $time; //把当前的仿真时间记录下来。
end

// 数组
// 向量是一个单独的元件,位宽是n;数组是多个元件组成的,每个元件的位宽是n或1。
integer count[0:7]; // 由8个计数变量组成的数组。
reg bool[31:0]; // 由32个1位的布尔计数器变量组成的数组。
reg[4:0] port_id[0:7]; // 由8个端口标识变量组成的数组,端口变量的位宽是5。
integer matrix[4:0][0:255]; // 二维的整数型数组。

// 存储器
// 存储器是verilog中对RAM或ROM的建模,通常用寄存器的一维数组表示。
reg mem1[0:1023]; // 1K的1位存储器。
reg[7:0] mem2[0:1023]; // 1K的1字节存储器。

// 参数(常数)
// verilog可以使用parameter在模块内定义常数。
parameter port_id = 5; // 定义常数port_id是5。
parameter signed [15:0] WIDTH; // 把参数WIDTH规定为有正负号,宽度为16位。

// 字符串
reg [8*18:1] string_value; // 声明变量string_value,宽度为18个字节。
initial begin
    string_value = "Hello World"; // 字符串可以存储在变量中。
end

系统任务

// 显示信息
// $display用于显示变量、字符串或表达式的主要系统任务,是常用的系统任务之一。
$display("Hello World");
reg port_id = 5'b00101;
$display("ID of the port is %b.", port_id); // 显示为:ID of the port is 00101.

// 监视信息
// $monitor用于对信号值变化进行动态监视。
initial begin
    $monitor($time, "Value of signals clock = %b, reset = %b.", clock, reset);
    // 输出如下:
    // 0 Value of signals clock = 0, reset = 1.
    // 5 Value of signals clock = 1, reset = 1.
    // 10 Value of signals clock = 0, reset = 0.
end

// 暂停
$stop;

// 结束仿真
$finish;

// 编译指令
`define WORD_SIZE 32; // 规定字长的文本宏,在代码中用`WORD_SIZE表示。
`include header.v; // 包含header.v文件,在该文件中有本文件代码需要的内容。

标签:reset,变量,port,基本概念,语法,Verilog,time,reg
From: https://www.cnblogs.com/vicky2021/p/17033649.html

相关文章

  • markdown语法
    本文仅用于测试博客园对markdown的显示效果1、标题h1标题h2标题h3标题h4标题h5标题h6标题2、强调和斜体Thisisboldtext加粗文本Thisisitalictext......
  • 模板语法
    模板语法<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>模板语法</title><scriptsrc="../js/vue.js"></script></head><body>......
  • Apache Kafka 的基本概念
    基本概念主题Topictopic是Kafka最基础的组织单位,类似于关系数据库中的数据表。做为使用kafka的开发者,你最应该考虑的是和topoc相关的抽象。创建不同的topic保......
  • MySQL优化三,SQL语法
    ##1.3.MySQL调优前言:在前面的基础之上把相应的数据库表设计得很完美,建立了好用的索引,如果SQL语句中没有使用到相应索引的话,也是白搭,如何设计好一点的SQL,则是一大问题###......
  • 数据库语法整理及WAF绕过方式
    关系型数据库关系型数据库:指采用了关系模型来组织数据的数据库。直白的说就是:关系型数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织。当今主流......
  • linux 内存管理(一)---基本概念
    最近项目上遇到一个问题,协议栈运行一个多小时后,就会出现延迟几ms的现象,经过反复测试和用ftrace查看,最后确认是在一个多小时候出现了do_mem_abort,然后去调用缺页异常,但是处......
  • 英语语法个人笔记-乱写-哈哈
       "of"也是一个介词,它用来表示"permanentdefeat"是"flag"的一部分,即"permanentdefeat"这个标志就是"flag"。所以"theflagofpermanentdefeat"就是"永久失败的......
  • Java基础语法
    之前学习java记得笔记,但是一直没怎么遇到java类的题,平时也不用java,所以经常忘记,今天想起来了再看一遍,再把之前写的笔记整理整理发到博客上。Java预学习Jave的优势从互联......
  • kotlin语法
    apply:于不返回值且主要在接收者(this)对象的成员上运行的代码块使用 apply。apply 的常见情况是对象配置。这样的调用可以理解为“将以下赋值操作应用于对象”。also上......
  • shell语法
    expr命令,echo命令,printf命令,test命令与判断符号[],判断语句:expr命令:expr会在stdout中输出结果。如果为逻辑关系表达式,则结果为真,stdout为1,否则为0expr的exitcode......