EDAverilog语法入门

合集下载

Verilog语法入门,初学者必看

Verilog语法入门,初学者必看

Verilog的词法约定1Verilog是大小写相关的,其中的关键字全部为小写。

2空白符由空格、制表符、和换行符组成。

3单行注释以“//”开始,verilog将忽略此处到行尾的内容。

多行注释以“/*”开始,以“*/”结束。

多行注释不允许嵌套4操作符有三种:单目操作符、双目操作符和三目操作符。

5数字声明Verilog中有两种数字生命:指明位数的数字和不指明位数的数字指明位数的数字表示形式:<size>’<base format><number>Size用来指明数字位宽度,只能用十进制整数表示Base format包括十进制(’d或’D),二进制(’b或’B),八进制(‘o或’O),十六进制(‘h或’H)例如4’b1111 //4位2进制数12’h3ac //12位16进制数不指明位数的数字:如果数字说明中没有指定基数,那么默认表示为十进制数。

如果没有指定位宽,则默认的位宽度与仿真器和使用的计算机有关(最小为32位)。

‘o21 //32位八进制数X值和Z值:不确定值用X表示,高阻用Z值表示。

在八进制数中代表3位,十六进制中代表4位。

12’h12X //这是一个12位16进制数,其中低四位不确定负数:在表示位宽的数字前面增加一个减号来表示它是一个负数。

-6’d3 //一个6位的用二进制补码形式存储的十进制数3,表示负数-6’sd3 //一个6位的带符号算数运算的负数下划线符号和问号:除了第一个字符,下划线“_”可以出现在数字中的任何位置,它的作用只是提高可读性,在编译阶段会被忽略掉问号“?”是z的另一种表示,使用问号的目的在于增强casex和casez语句的可读性。

在这两条语句中,“?”表示不必关心的情况。

12’B1111_0011_1110 // 增强可读性4’b10?? //相当于4’b10zz6字符串是双引号括起来的一个字符队列。

对于字符串的限制是,它必须在一行中书写完,不可书写在多行中,也不能包含回车符。

Verilog语法基础

Verilog语法基础
操作符类型
下表以优先级顺序列出了Verilog操作符。注意“与”操作符的优先级总是比相 同类型的“或”操作符高。本章将对每个操作符用一个例子作出解释。
操作符类型 连接及复制操作符 一元操作符 算术操作符 符号 {} ! * / + << > == = & ^ | && || ?: {{}} ~ & %
当一个负数赋值给无符号变量如reg时,Verilog自动完成二进制补码计算
module sign_size; reg [3:0] a, b; reg [15:0] c;
initial begin
a = -1; // a是无符号数,因此其值为1111
b = 8; c= 8; // b = c = 1000 #10 b = b + a; // 结果10111截断, b = 0111
Байду номын сангаас
最高
| ^
逻辑移位操作符 关系操作符 相等操作符 按位操作符
>> < >= ===
优先级
<= != !=
~^
逻辑操作符
最低
条件操作符
Verilog中的大小(size)与符号
Verilog根据表达式中变量的长度对表达式的值自动地进行调整。 Verilog自动截断或扩展赋值语句中右边的值以适应左边变量的长度。
按位操作符
~ & | ^ ~^ ^~ not and or xor xnor xnor
regb = 4'b1 0 1 0 regc = 4'b1 x 1 0 num = regb & regc = 1 0 1 0 ; module bitwise (); reg [3: 0] rega, regb, regc; reg [3: 0] num; initial begin rega = 4'b1001; regb = 4'b1010; regc = 4'b11x0; end initial fork #10 num = rega & 0; // num = 0000 #20 num = rega & regb; // num = 1000 #30 num = rega | regb; // num = 1011 #40 num = regb & regc; // num = 10x0 #50 num = regb | regc; // num = 1110 #60 $finish; join endmodule

verilog 基本语法

verilog 基本语法

verilog 基本语法Verilog基本语法Verilog是一种硬件描述语言,用于描述数字电路的行为和结构。

它具有强大的建模能力,能够描述复杂的数字系统,并用于逻辑设计和硬件验证。

本文将介绍Verilog的基本语法,以帮助读者对这种语言有一个基本的了解。

1. 模块声明在Verilog中,所有的设计都是通过模块来实现的。

模块是Verilog 的基本组织单位,类似于其他编程语言中的函数或类。

模块声明由关键字module开头,后面跟着模块的名称和输入输出端口的定义。

例如:module my_module(input a, b, output c);// 模块的主体endmodule2. 端口声明在模块声明中,使用关键字input和output来声明输入和输出端口。

输入端口用于接收信号,输出端口用于输出信号。

端口可以是单个的信号,也可以是信号的数组。

例如:input a, b; // 单个输入端口output c; // 单个输出端口input [7:0] d; // 输入信号的数组3. 信号声明在Verilog中,使用关键字wire、reg、integer等来声明信号。

wire用于声明连续的信号,reg用于声明时序的信号,integer用于声明整数变量。

例如:wire a, b; // 连续信号reg [7:0] c; // 时序信号,有8位integer d; // 整数变量4. 时钟和复位在数字电路中,时钟和复位信号是非常重要的。

在Verilog中,可以使用关键字input来声明时钟和复位信号,并在模块的输入端口中定义。

例如:input clk; // 时钟信号input rst; // 复位信号5. 运算符Verilog支持各种运算符,包括算术运算符、逻辑运算符、位运算符等。

算术运算符用于执行加减乘除等操作,逻辑运算符用于执行与或非等逻辑操作,位运算符用于执行位操作。

例如:a =b + c; // 加法运算d = ~(a & b); // 与运算和非运算6. 控制结构在Verilog中,可以使用if语句、case语句等控制结构来实现条件判断和多路选择。

verilog语法基础概念

verilog语法基础概念

verilog语法基础概念【verilog语法基础概念】文章目录:1. 介绍2. 模块和端口3. 数据类型4. 信号声明与赋值5. 运算符6. 控制结构7. 实例8. 总结【1. 介绍】Verilog是一种硬件描述语言,用于对数字电路进行建模和仿真。

它是一种结构化的语言,可方便地表示电路的层次结构和行为。

本文将介绍Verilog语言的基础概念,帮助您快速入门。

【2. 模块和端口】在Verilog中,我们使用模块(module)来表示电路的组件。

模块定义了电路的接口和行为。

每个电路都由一个或多个模块组成。

模块可以有输入端口(input)、输出端口(output)和内部信号(wire)。

模块定义的一般形式如下:module 模块名(输入端口声明, 输出端口声明);// Verilog代码endmodule下面是一个简单的模块定义示例:module AndGate(input a, input b, output y);assign y = a & b;endmodule【3. 数据类型】在Verilog中,数据类型用于定义信号或内存中存储的值的类型。

常用的Verilog数据类型有:- 位(bit): 表示二进制中的一个位,取值为0或1。

- 向量(vector): 由多个位组成的数据类型。

向量可以表示多位的二进制数,例如4位的向量可以表示16种不同的值。

- 寄存器(reg): 用于存储和传输数据的元件。

可以使用reg类型声明寄存器变量。

- 线(wire): 用于表示信号的元件。

可以使用wire类型声明信号变量。

下面是数据类型的声明示例:input [3:0] a; // 4位输入向量output reg [1:0] b; // 2位输出向量的寄存器wire [7:0] c; // 8位线信号【4. 信号声明与赋值】Verilog中使用信号(signal)来表示电路中的输入、输出和内部临时变量。

EDA 第5章verilogHDL语法规范2

EDA 第5章verilogHDL语法规范2
可以通过一条单独的赋值语句给一个n位的寄存器赋值, 但是不能通过这样的一条语句对整个存储器赋值。
为了对存储器的某个字赋值,需要为该字指定数组索引。 该索引可以是一个表达式。该表达式中含有其他的变量 或网络数据,通过对该表达式的运算,得到一个结果值, 从而定位存储器中的某个字。
Verilog HDL数据类型
其中:
net_kind 是上述网络类型的一种。 msb和lsb 用于定义网络范围的常量表达式。其范围定义是可选的。 如果没有定义范围,默认的网络类型为1位。
Verilog HDL数据类型
--网络类型
wire和tri网络类型
用于连接单元的连线是最常见的网络类型。连线(wire) 网络与 三态(tri)网络语法和语义一致。
// 16位三态总线网络类型
wire [0: 31] w1, w2; bit0
// 两个32位网络类型,MSB为
Verilog HDL数据类型
--网络和变量
变量是对数据存储元件的抽象。
从当前赋值到下一次赋值之前,变量应当保持当前的值不 变。
注:
对于reg,time和integer这些变量类型数据,它们的初始值应当是x。 对于real和realtime变量类型数据,默认的初始值是0.0。 在变量数据类型中,只有reg和integer变量型数据类型是可综合的,其
Verilog HDL数据类型
--整数、实数、时间和实时时间
实数型变量声明 real
在机器码表示法中,实数型数据是浮点型数值。该变量 类型可用于对延迟时间的计算。
实数型变量是不可综合的。对于实数来说: 不是所有的Verilog HDL操作符都能用于实数值。 实数变量不使用范围声明。 实数变量默认的初始值为0。

EDA_verilog知识点

EDA_verilog知识点

第1章:EDA(Electronic Design Automation)即电子设计自动化,是指利用计算机完成电子系统的设计。

(以填空题的形式出题)狭义的EDA技术是指以大规模可编程逻辑器件为载体,以硬件描述语言HDL为系统逻辑的主要表达方式,借助功能强大的计算机,在EDA工具软件平台上,对用HDL描述完成的设计文件,自动完成用软件方式设计的电子系统到硬件系统的设计工作,最终形成集成电子系统或专用集成芯片ASIC的一门新技术。

(以简答题的形式出题)EDA的实现目标:完成专用集成电路(ASIC)或印制电路板(PCB)的设计和实现。

作为EDA技术最终实现目标的ASCI可以通过以下3种途径完成:(要知道它们三种途径之间的区别)1)可编程逻辑器件FPGA/CPLD(直接面向用户、具用极大的灵活性和通用性)2)半定制或全定制ASCI(用户提要求,厂家设计生产,出厂后用户不可更改)3)混合ASCI(既具有面向用户的FPGA可编程功能和逻辑资源,同时也含有可方便调用和配置的硬件标准单元模块)EDA主要内容1)可编程逻辑器件可编程逻辑器件是一种由用户编程以实现某种逻辑功能的新型件。

可编程逻辑器件也称为可编程ASIC,它是EDA技术的物质基础。

2)硬件描述语言HDLHDL语言是EDA技术的重要组成部分,它是一种用于描述硬件电子系统的计算机语言,它用软件编程的方式来描述电子系统的逻辑功能、电路结构和连接形式。

软件开发工具3)软件开发工具EDA软件开发工具是EDA技术的强有力支持。

EDA软件开发工具是指以工作站或者高档计算机为基本工作平台,利用计算机图形学、拓扑逻辑学、计算数学和人工智能等多种应用学科的最新成果而开发出来的一套软件工具,它是一种帮助设计工程师进行电子系统设计的辅助工具。

在EDA中首选的设计方法是:自顶向下第2章:实践中发现:任何组合逻辑都可化成“与-或”表达式;任何时序电路都可由组合电路加上存储元件组成。

EDA 第3章 Verilog设计入门

EDA 第3章 Verilog设计入门

www.themBiblioteka
5.注释符号

3.1.4 4选1多路选择器及其if语句描述方式

1.if_ else条件语句
执行过程:当if后的条件表达式为真时,执行赋值语句, 否则执行else后的If语句,如此数据的执行下去,直到完 成所有if语句。 同样,如果执行多条语句时,应该用begin-end块语句将 它们括起来。
5.并位操作和数字表达
(1)并位操作
大括号{}:并位运算符,将两个或多个信号按二进制位拼接起来, 作为一个信号使用。

(2)数字表示 表示二进制数的一般格式:
说明: 1. B表示二进制,O表示八进制,H表示十六进制,D表示十进制,且 不分大小写。 2. verilog2001规定可定义有符号二进制数,如8„b10111011和 8‟sb10111011是不一样的。前者是普通无符号数,后者是有符号数,最 高位1是符号。

3.1.2 4选1多路选择器及其case语句表述方式


1.reg型变量定义
(1)verilog中最常用的变量:寄存器型变量(reg)和网线型变量 (wire)。 (2)模块中功能描述涉及的所有信号都必须定义相应的变量类型, 如果没有在模块中显式地定义信号的类型,verilog默认定义为 wire型。 (3)当需要信号为寄存器型信号时必须使用reg进行显示定义,在 过程语句always@引导的顺序语句中规定必须是reg型变量。 (4)输入或双向口信号不能定义为寄存器型信号类型
(2)条件数值虽为整数1、2、3的表达式,但综合器自 动转化为case的变量{a,b}与对应数据类型的数值进 行比较判定。

说明:例3.8直接使用了加法算术操作符“+”的描述方式。

EDAVerilog语言学习教程

EDAVerilog语言学习教程
器型单元的0~15位置为0 port_id=0; //非法 matrix[1]=0; //非法
第8页/共80页
Ve r i l o g 语 言
6) memory类型
通过扩展reg型数据的地址范围生成格式:
reg[n-1:0] 存储器名[m-1:0必];须为常数
或者
表达式
reg[n-1:0] 存储器名[m:1]; Parameter wordsize=16, memsize=256 ;
reg[wordsize-1:0] mem[memsize-1:0], wreitereg, readreg; 例: reg[7:0] memea[255:0];
第9页/共80页
Ve r i l o g 语 言 注意:
reg[n-1:0] rega; reg mema[n-1:0]; rega=0; 等于 mema=0; ?? mema[3]=0;正确??
Ve r i l o g 语 言 例:寄存器的声明和使用
reg reset; initial begin
reset=1`b1; #100 reset=1`b0; end
reg signed [63:0] m; integer i;
第2页/共80页
Ve r i l o g 语 言 3) 整数、实数和时间寄存器类型
同一门类型的多个实例能够在一个结构形式中定义。语法如下: gate_type [instance_name1](term11,term12,...,term1N), [instance_name2](term21,term22,...,term2N), ... [instance_nameM](termM1,termM2,...,termMN);
基本单元名称
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

如果不明确地说明连接是何种类型,应该 是指 wire 类型。
2、主要的数据类型
寄存器(register)类型变量
register型变量能保持其值,直到它被赋于新的值。 register型变量常用于行为建模,产生测试的激励信号 常用行为语句结构来给寄存器类型的变量赋值。
reg_a reg_sel reg_b
a
sl b nsl
sela out selb
2、主要的数据类型
寄存器(register)类型变量的数据类型
寄存器类型变量共有四种数据类型:
类型 功能 . reg 无符号整数变量,可以选择不同的位宽。 integer 有符号整数变量,32位宽,算术运算可产生2的补码。 real 有符号的浮点数,双精度。 time 无符号整数变量,64位宽(Verilog-XL仿真工具用64位的 正数来记录仿真时刻)
7、编译引导语句
使用`include 编译引导,在编译时能把其指定的整个 文件包括进来一起处理
举例说明: `include “global .v” `include “parts/counter .v” `include “../../library/mux .v” 合理地使用`include 可以使程序简洁、清晰、条理清 楚、易于查错。
6、特殊符号 “#”特殊符号 “#” Fra bibliotek用来表示延迟:
在过程赋值语句时表示延迟。 例:initial begin #10 rst=1; #50 rst=0; end
在门级实例引用时表示延迟。
例:not #1 not1(nsel, sel); and #2 and2(a1, a, nsel);
out selb
b
例如:右图上,selb的改 变,会自动地立刻影响或 门的输出。
sl
nets
2、主要的数据类型
连接(Nets) 类型变量的种类:
类型 功能
wire, tri 对应于标准的互连线(缺省) supply1, supply2 对应于电源线或接地线 wor, trior 对应于有多个驱动源的线或逻辑连接 wand, triand 对应于有多个驱动源的线与逻辑连接 trireg 对应于有电容存在能暂时存储电平的连接 tri1, tri0 对应于需要上拉或下拉的连接
Verilog HDL 基础语法入门
Verilog 的应用
Verilog HDL是一种用于数字逻辑电路设计的语言:
• 用 Verilog HDL 描 述 的 电 路 设 计 就 是 该 电 路 的 verilog HDL模型; • Verilog HDL 既是一种行为描述的语言也是一种结构描 述的语言。
10’b10
10’bx1 3’b10010011
3、字符串
Verilog 语言中,字符串常常用于表示命令内需要显示 的信息。
用“ ”括起来的一行字符串; 在字符串中可以用 C 语言中的各种格式控制符,如 换新一行用 “\n” 字符,\t, \”,\\… 在字符串中可以用 C 语言中的各种数值型式控制符 (有些不同),如: %b(二进制), %o(八进制),%d(十进制),%h(十六进制), %t(时间类型),%s (字符串类型)…
• 格式: `uselib 器件库1的地点 器件库2的地点…. • 上面的器件库地点可用以下两种方法表示: 1)file = 库文件名的路径 2)dir = 库目录名的路径 libext = .文件扩展名 例如: `uselib dir =/lib/TTL_lib/ libext=.v file = /libs/TTL_U/udp.lib
4.1 简单的 Verilog HDL 模块
module adder ( count,sum,a,b,cin ); input [2:0] a,b; input cin; //声明输出信号a, b, cin output count; output [2:0] sum; //声明输入信号count, sum assign {count,sum}=a+b+cin; endmodule
• 算法级(algorithmic) • RTL级(Register Transfer Level) • 门级(gate-level) • 开关级(switch-level)
4.1 简单的 Verilog HDL 模块
下面先介绍几个简单的Verilog HDL程序, 然后从中分析Verilog HDL程序的特性
4、标识符
shift_reg_a
34net
bus263
busa_index
a*b_net
n@263
5、系统任务和函数
格式: $ <标识符>
„$‟ 符号表示 Verilog 的系统任务和函数 常用的系统任务和函数有下面几种: ------------------------------------------------------1) $time //找到当前的仿真时间 2) $display, $monitor//显示和监视信号值的变化 3) $stop //暂停仿真 4) $finish //结束仿真 -------------------------------------------------------
4.1 简单的 Verilog HDL 模块
从上面的例子可以看出:
- Verilog语言模块结构完全嵌在module和 endmodule声明语句之间; - 每个Verilog程序包括四个主要部分:端 口定义、I/O说明、内部信号声明、功 能定义。
4.1 简单的 Verilog HDL 模块
Verilog的基本设计单元是“模块”(block)。一 个模块是由两部分组成的: 一)描述接口; 二)描述逻辑功能,即定义输入是如何影响输 出的。
4.1 简单的 Verilog HDL 模块
模块语句一般格式
module 模块名 (端口名称表) 模块端口描述 模块功能描述 endmodule
4.1 简单的 Verilog HDL 模块
端口语句
端口或端口信号是模块与外部电路相连的通道。
input 端口名1;端口名2;… output 端口名1;端口名2;… Inout 端口名1;端口名2;… Input [msb:lsb] 端口名1;端口名2;…
实常数可以用十进制表示也可以用科学浮点数 表示 如:32e-4 (表示0.0032) 4.1E3( 表示 4100)
5’o37
4’D2 4’B1x01 7’Hx 4’Hz 2’h1? 8’h2A
4’d-4
3’ b001 (2+3)’b10 ‘o72 ‘hAF
7、编译引导语句
使用`define 编译引导能提供简单的文本替代功能 `define <宏名> <宏文本> 在编译时会用宏文本来替代源代码中的宏名。 合理地使用`define可以提高程序的可读性
举例说明:
`define on 1‟b1 `define off 1‟b0 `define and_delay #3 在程序中可以用 `on, `off, `and_delay 分别表示 1,0,和 #3 。
2、主要的数据类型
举例说明数据类型的选择
模块DUT的边界
module top; wire y; reg a, b; DUT u1(y,a,b); initial begin a = 0; b = 0; #10 a =1; …. end endmodule
7、编译引导语句
编译引导语句用主键盘左上角小写键 “ ` ” 起 头 用于指导仿真编译器在编译时采取一些特殊处理
编译引导语句一直保持有效,直到被取消或重写 `resetall 编译引导语句把所有设置的编译引导恢 复到缺省状态
7、编译引导语句
常用的编译引导有:
a) `define b) `include c) `timescale d) `uselib e) `resetall ……..
Nets 表示器件之间的物理连接, 称为网络连接类型 Register 表示抽象的储存单元,称为寄存器/变量类型 Parameter 表示运行时的常数,称为参数类型
2、主要的数据类型
Nets(网络连线):
由模块或门驱动的连线。 a 驱动端信号的改变会立刻 传递到输出的连线上。 nsl sela
4.2 Verilog HDL语法要点
1、空格和注释
Verilog 是一种格式很自由的语言。
空格在文本中起一个分离符的作用,别的没有其他 用处。
单行注释符用 //*********与C 语言一致 多行注释符用 /* ------------------------- */ 与C 语言 一致
4、标识符
所谓标识别符就是用户为程序描述中的Verilog 对象 所起的名字。
标识符必须以英语字母(a-z, A-Z)起头,或者用下 横线符( _ )起头。其中可以包含数字、$符和下横 线符。 标识符最长可以达到1023个字符。 模块名、端口名和实例名都是标识符。 Verilog语言是大小写敏感的
举例说明:在上例中所有的时间单位都是1ns的整数倍
7、编译引导语句
尽可能地使精度与时间单位接近,只要满足 设计的实际需要就行。仿真步长即仿真单位 (STU) 是所有参加仿真模块中由`timescale 指定的精度中最高(即时间最短)的那个决 定的
7、编译引导语句
• `uselib 编译引导语句:用于定义仿真器到哪里去找 库元件
7、编译引导语句
`timescale 用于说明程序中的时间单位和仿真精度
举例说明: `timescale 1ns/100ps `timescale 语句必须放在模块边界前面 举例说明: `timescale 1ns/100ps module MUX2_1(out,a,b,sel); …… not #1 not1(nsel, sel); and #2 and1(a1, a, nsel); …… endmodule
相关文档
最新文档