Verilog HDL的基本语法

verilog基本语法

Verilog基本语法 【逻辑值】 逻辑0 表示低电平,GND 逻辑1 表示高电平,VCC 逻辑X 表示未知电平,可能是高电平,也可能是低电平 逻辑Z 表示高阻态,外部没有激励信号,是一个悬空状态 注:高阻态的实质:电路分析时高阻态可做开路理解。 可以把它看作输出(输入)电阻非常大,对下级电路无任何影响。 若为0、x、z则按照假处理;若为1,按真处理。 【进制】 二进制4'b0101 —4位二进制数0101 十进制数4’d2 —4位十进制数2 十六进制数4’ha —4位十六进制数a Verilog中若不指定位宽,默认32位;若不指定位宽不指定进制,默认32位宽的十进制数。 【标识符】 标识符可以是字母、数字、$和_(下划线)的组合,且开头必须是字母或下划线,区分大小写。不建议大小写混合使用。 【数据类型】 寄存器关键字reg,默认初始值位不定值X; reg[31:0] delay_cnt; //[31:0],指定寄存器位宽32位, reg key_reg; // 默认位宽为1. reg类型数据只能在always和initial语句中被赋值。 线网表示结构实体的物理连线,包括wire和tri类型 参数常量,用parameter定义。 parameter H_SYNC = 11'd41; 【运算符】 [条件操作符] ?: 例,a?b:c //如果a为真就选b,否则选择c。 result=(a>=b)?a:b; [逻辑运算符] !&& || [位运算符] ~ & | ^(按位异或) a&b; //自动将位宽小的数高位补零至较大数的位宽,然后按位与操作。[移位运算符] << >> 用0填补移出的空位。左移时位宽增加,右移位宽不变。 [位拼接运算符] {} 例,{a,b} //将a和b拼接起来,作为一个新信号,a为高位。 c={a,b[3:0]}; //a、b位宽均为8位,c为8+4=12位。

从Verilog到VHDL(上)基本语法

从Verilog 到VHDL(上)基本语法 16 六 从学校里开始,我所接触的就一直是VerilogHDL 而非更老牌的VHDL, 而且后续接触的项目中也多半是Verilog 的用户,坦白的讲,Verilog 的活力也确实更足一些,从 IEEE1800-2005 开始的SystemVerilog 的标准化,将 Verification 和Design 的一体化的尝试,我个人认为,是走在正确的道路上。 所以,我确实想不到,我竟然也要回头学起VHDL 来了,毕竟一些老牌公司,特别是欧洲的公司,往往因为历史原因,仍然在使用VHDL ,看来终究是绕不过去的了正如一个Design Verification 工程师在目前想完全的不和SpecmanE 打交道是很难的一样。 面记载的是两种语言学习过程中的一些体会,而且更多的是从语法角度出发,算是梳理一下思路吧,而且,以前从来 没有接触过VHDL ,当然会存在很多非常初级的东西。 而在本文之后,打算再写一篇简单阐述下结合Cadence 的IUS 工具,使用SystemVerilog 对VHDL 进行验证的基本方

法。 起手式从Verilog 撞进VHDL 的世界,有些东西要先搞清 楚,否则会一头雾水: 1. 大小写敏感:Verilog 是大小写敏感的,VHDL 则非; 2.注释:Verilog 的行注释为// ,块注释为/**/;VHDL 只 支持 行注释–;[1. 这个算是不方便的一个地方了,不过不 基本结构 论是在Vim 还是Emacs 当中,批量做行注释也很容易实现;] VHDL 被认为是要求更严格,更多讲究的语言,相比和 C 类 似的Verilog ,架构上更严谨一些: 1.基本结构:从上往下为 USE 定义区(调用库和包);Package 定义区(自定义程序包);Entity定义区(定义电路实体外观,I/O接口的规 格); [2. Entity 感觉像是 C 的头文件定义之类的东西,而在Verilog 当中,这些其实都是被整合在Module 里头一起完成 了。]Architecture 定义区(描述内部功能);[3. 同 上,相当于Verilog 的Module 内部实现。]Configuration 定义区(决定那个Architecture 被使用)[4. 这也许就是 之所以要分开 Arch 和Entity 的原因,类似的效果在Verilog 里实现,则

Verilog语法入门,初学者必看

Verilog的词法约定 1Verilog是大小写相关的,其中的关键字全部为小写。 2空白符由空格、制表符、和换行符组成。 3单行注释以“//”开始,verilog将忽略此处到行尾的内容。多行注释以“/*” 开始,以“*/”结束。多行注释不允许嵌套 4操作符有三种:单目操作符、双目操作符和三目操作符。 5数字声明 Verilog中有两种数字生命:指明位数的数字和不指明位数的数字 指明位数的数字表示形式: 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’b10zz 6字符串是双引号括起来的一个字符队列。对于字符串的限制是,它必须在一行中书写完,不可书写在多行中,也不能包含回车符。Verilog将字符串当作一个单字节的ASCII字符队列。 “Hello Verilog world” //是一个字符串 7标识符和关键字 关键字是语言中预留的用于定义语言结构的特殊标识符。Verilog中关键字全部小写。 标识符是程序代码中对象的名字,程序员使用标识符来访问对象。Verilog中标识符由字母数字字符、下划线和美元符号组成,区分大小写。其第一个字符必须是数字字符或下划线。 reg value; //reg是关键字;value是标识符

VerilogHDL语法基础

Verilog HDL语法基础(1) Verilog的词法约定 1Verilog是大小写相关的,其中的关键字全部为小写。 2空白符由空格、制表符、和换行符组成。 3单行注释以“//”开始,verilog将忽略此处到行尾的内容。多行注释以“/ *”开始,以“*/”结束。多行注释不允许嵌套 4操作符有三种:单目操作符、双目操作符和三目操作符。 5数字声明 Verilog中有两种数字生命:指明位数的数字和不指明位数的数字 指明位数的数字表示形式: 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’b10zz 6字符串是双引号括起来的一个字符队列。对于字符串的限制是,它必须在一行中书写完,不可书写在多行中,也不能包含回车符。Verilog将字符串当作一个单字节的ASCII字符队列。 “Hello Verilog world”//是一个字符串 7标识符和关键字 关键字是语言中预留的用于定义语言结构的特殊标识符。Verilog中关键字全部小写。 标识符是程序代码中对象的名字,程序员使用标识符来访问对象。Verilog中标识符由字母数字字符、下划线和美元符号组成,区分大小写。其第一个字符必须是数字字符或下划线。

汇编语言常用语句一览

汇编语言常用语句一览 一、数据传输指令 ──────────────────────────────────它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据. 1.通用数据传送指令. MOV传送字或字节. MOVSX先符号扩展,再传送. MOVZX先零扩展,再传送. PUSH把字压入堆栈. POP把字弹出堆栈. PUSHA把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈. POPA把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈. PUSHAD把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈. POPAD把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈. BSWAP交换32位寄存器里字节的顺序 XCHG交换字或字节.(至少有一个操作数为寄存器,段寄存器不可作为操作数) CMPXCHG比较并交换操作数.(第二个操作数必须为累加器AL/AX/EAX) XADD先交换再累加.(结果在第一个操作数里) XLAT字节查表转换.──BX指向一张256字节的表的起点,AL 为表的索引值(0-255,即0-FFH);返回AL为查表结果.([BX+AL]->AL) 2.输入输出端口传送指令. IN I/O端口输入.(语法:IN累加器,{端口号│DX}) OUT I/O端口输出.(语法:OUT{端口号│DX},累加器) 输入输出端口由立即方式指定时,其范围是0-255;由寄存器DX 指定时,其范围是0-65535. 3.目的地址传送指令. LEA装入有效地址.例:LEA DX,string;把偏移地址存到DX. LDS传送目标指针,把指针内容装入DS.例:LDS SI,string;把段地址:偏移地址存到DS:SI. LES传送目标指针,把指针内容装入ES.例:LES DI,string;把段地址:偏移地址存到ES:DI. LFS传送目标指针,把指针内容装入FS.例:LFS DI,string;把段地址:偏移地址存到FS:DI. LGS传送目标指针,把指针内容装入GS.例:LGS DI,string;把段地址:偏移地址存到GS:DI. LSS传送目标指针,把指针内容装入SS.例:LSS DI,string;把段地址:偏移地址存到SS:DI. 4.标志传送指令. LAHF标志寄存器传送,把标志装入AH. SAHF标志寄存器传送,把AH内容装入标志寄存器. PUSHF标志入栈.

第二章Verilog基本知识

2.1 Verilog HDL的语言要素 Verilog HDL语法来源于C语言基本的语法,其基本此法约定与 C语言类似。 程序的语言要素称为语法,是由符号、数据类型、运算符和表达式构成的,其中符号包括空白符、注释符、和转义标示符、关键字、数值等。 2.1.1 空白符 空白符包括空格符(\b),制表符(\t)、换行符和换页符。空白符使代码看起来结构清晰,阅读起来更方便。在编译过程中,空白符被忽略。 2.1.2 注释符 Verilog HDL语言允许插入注释,标明程序代码功能、修改、版本等信息,以增强程序的可阅读性和帮助管理文档。 Verilog HDL有两种注释方式 1) 单行注释:单行注释以“ // ”开始,Verilog HDL 忽略从此处到行尾的内 容 2) 多行注释:多行注释以“ /* ”开始,到“ */ ”结束,Verilog 忽略 其中的注释内容

在Verilog HDL 中,标识符( Identifier )被用来命令信号名、模块名、参数名等。它可以使任意一组字母、数字、$符号和_符号的组合。应该注意的是,标识符的字符区分大小写,并且第一个字符必须是字母或者下划线 Verilog HDL规定了转义标识符(Escaped Identifie) 采用转义字符可以在一 条标识符中包含任何可打印的字符。转义标识符以“ ”(反斜线)符号开头,以 空白符结尾(空白可以是一个空格、一个制表符或者换行符) 2.1.4 关键字 Verilog HDL语言内部已经使用的词称为关键字或保留字,它是 Verilog HDL语言的内部专用词,是事先定义好的确认符,用来组织语言结构的。需要注意的是,在Verilog HDL中,保留字都是小写的。

AT&T汇编语言语法

AT&T汇编语言语法 1.Register Reference 引用寄存器要在寄存器号前加百分号%,如“movl %eax, %ebx”。 80386 有如下寄存器: [1] 8 个32-bit 寄存器 %eax,%ebx,%ecx,%edx,%edi,%esi,%ebp,%esp;( 8 个16-bit 寄存器,它们事实上是上面8 个32-bit 寄存器的低16 位:%ax,%bx, %cx,%dx,%di,%si,%bp,%sp; 8 个8-bit 寄存器:%ah,%al,%bh,%bl,%ch,%cl,%dh,%dl。它们事实上 是寄存器%ax,%bx,%cx,%dx 的高8 位和低8 位;) [2] 6 个段寄存器:%cs(code),%ds(data),%ss(stack), %es,%fs,%gs; [3] 3 个控制寄存器:%cr0,%cr2,%cr3; [4] 6 个debug 寄存器:%db0,%db1,%db2,%db3,%db6,%db7; [5] 2 个测试寄存器:%tr6,%tr7; [6] 8 个浮点寄存器 栈:%st(0),%st(1),%st(2),%st(3),%st(4),%st(5),%st(6),%st(7)。 2. Operator Sequence 操作数排列是从源(左)到目的(右),如“movl %eax(源), %ebx(目的)” 3. Immediately Operator 使用立即数,要在数前面加符号$, 如“movl $0x04, %ebx” 或者: para = 0x04 movl $para, %ebx 指令执行的结果是将立即数0x04 装入寄存器ebx。 4. Sym bol Constant 符号常数直接引用如 value: .long 0x12a3f2de movl value , %ebx 指令执行的结果是将常数0x12a3f2de 装入寄存器ebx。 引用符号地址在符号前加符号$, 如“movl $value, % ebx”则是将符号value 的地址装入寄存器ebx。 5. Length of Operator 操作数的长度用加在指令后的符号表示b(byte, 8-bit), w(word, 16-bits), l(long,32-bits),如“m ovb %al, %bl”,“movw %ax, %bx”,“movl %eax, %ebx ”。 如果没有指定操作数长度的话,编译器将按照目标操作数的长度来设置。比如指令 “m ov %ax, %bx”,由于目标操作数bx 的长度为word,那么编译器将把此指令等同于 “m ovw %ax,%bx”。同样道理,指令“mov $4, %ebx”等同于指令“movl $4, %ebx”,“push %al”等同于“pushb %al”。对于没有指定操作数长度,但编译器又无法猜测的指令,编译器将会报错,比如指令“push $4”。 6. Sign and Zero Extension 绝大多数面向80386 的AT&T 汇编指令与Intel 格式的汇编指令都是相同的,但符号扩展指令和零扩展指令有不同格式。符号扩展指令和零扩展指令需要指定源操作数长度和目的操作数长度,即使在某些指令中这些操作数是隐含的。 在AT&T 语法中,符号扩展和零扩展指令的格式为,基本部分"movs"和"movz"(对应Intel 语法的movsx 和movzx),后面跟上源操作数长度和目的操作数长度。movsbl 意味着movs

_Verilog_HDL的基本语法

第三章 Verilog HDL的基本语法 前言 Verilog HDL是一种用于数字逻辑电路设计的语言。用Verilog HDL描述的电路设计就是该电路的Verilog HDL模型。Verilog HDL既是一种行为描述的语言也是一种结构描述的语言。这也就是说,既可以用电路的功能描述也可以用元器件和它们之间的连接来建立所设计电路的Verilog HDL模型。Verilog模型可以是实际电路的不同级别的抽象。这些抽象的级别和它们对应的模型类型共有以下五种: ?系统级(system):用高级语言结构实现设计模块的外部性能的模型。 ?算法级(algorithm):用高级语言结构实现设计算法的模型。 ?RTL级(Register Transfer Level):描述数据在寄存器之间流动和如何处理这些数据的模型。 ?门级(gate-level):描述逻辑门以及逻辑门之间的连接的模型。 ?开关级(switch-level):描述器件中三极管和储存节点以及它们之间连接的模型。 一个复杂电路系统的完整Verilog HDL模型是由若干个Verilog HDL模块构成的,每一个模块又可以由若干个子模块构成。其中有些模块需要综合成具体电路,而有些模块只是与用户所设计的模块交互的现存电路或激励信号源。利用Verilog HDL语言结构所提供的这种功能就可以构造一个模块间的清晰层次结构来描述极其复杂的大型设计,并对所作设计的逻辑电路进行严格的验证。 Verilog HDL行为描述语言作为一种结构化和过程性的语言,其语法结构非常适合于算法级和RTL级的模型设计。这种行为描述语言具有以下功能: ?可描述顺序执行或并行执行的程序结构。 ?用延迟表达式或事件表达式来明确地控制过程的启动时间。 ?通过命名的事件来触发其它过程里的激活行为或停止行为。 ?提供了条件、if-else、case、循环程序结构。 ?提供了可带参数且非零延续时间的任务(task)程序结构。 ?提供了可定义新的操作符的函数结构(function)。 ?提供了用于建立表达式的算术运算符、逻辑运算符、位运算符。 ?Verilog HDL语言作为一种结构化的语言也非常适合于门级和开关级的模型设计。因其结构化的特点又使它具有以下功能: -提供了完整的一套组合型原语(primitive); -提供了双向通路和电阻器件的原语; -可建立MOS器件的电荷分享和电荷衰减动态模型。 Verilog HDL的构造性语句可以精确地建立信号的模型。这是因为在Verilog HDL中,提供了延迟和输出强度的原语来建立精确程度很高的信号模型。信号值可以有不同的的强 度,可以通过设定宽范围的模糊值来降低不确定条件的影响。 Verilog HDL作为一种高级的硬件描述编程语言,有着类似C语言的风格。其中有许多语句如:if语句、case语句等和C语言中的对应语句十分相似。如果读者已经掌握C语言编程的基础,那么学习Verilog HDL并不困难,我们只要对Verilog HDL某些语句的特殊方面着重理解,并加强上机练习就能很好地掌握它,利用它的强大功能来设计复杂的数字逻辑电路。下面我们将对Verilog HDL中的基本语法逐一加以介绍。 3.1.简单的Verilog HDL模块 3.1.1.简单的Verilog HDL程序介绍

Verilog语法总结

Verilog语法总结 数电基础 能够存储1位二值信号的基本单元电路统称为触发器。 根据逻辑功能的不同特点,可以将数字电路分成两大类: 组合逻辑电路和时序逻辑电路。 组合逻辑电路中,任意时刻的输出仅仅取决于该时刻的输入,与电路原来的状态无关。 时序逻辑电路中,任一时刻的输出不仅取决于当时的输入信号,而且还取决于电路原来的状态。或者说还与以前的输入有关,因此时序逻辑必须具备记忆功能。 组合逻辑电路时序逻辑电路 逻辑值 逻辑0:表示低电平,也就对应我们电路GND; 逻辑1:表示高电平,也就是对应我们电路的 VCC; 逻辑X:表示未知,有可能是高电平,也有可能 是低电平; 逻辑Z:表示高阻态,外部没有激励信号,是一 个悬空状态。 数字进制格式 Verilog数字进制格式包括二进制、八进制、十进

制和十六进制。 一般常用的为二进制、十进制和十六进制。 二进制表示如下:4’b0101 表示4位二进制数字0101 十进制表示如下:4’d2 表示4位十进制数字2(二进制0010) 十六进制表示如下:4’ha 表示4位十六进制数字a(二进制1010) 16’b1001_1010_1010_1001 = 16’h9AA9 第一个表示用几个二进制位可以表示、’为语法、b为二进制,d为十进制,h为16进制,后面则表示要输出输入的字。(括号内为二进制表示,因为最终在计算机中都会变为二进制表示) 标识符 标识符可以是任意一组字母、数字、$符号和_(下划线)符号的组合; 但标识符的第一个字符必须是字母或者下划线; 标识符是区分大小写的; 数据类型 在Verilog 语言中,主要有三大类数据类型:寄存器数据类型、线网数据类型和参数数据类型。 寄存器类型: 寄存器表示一个抽象的数据存储单元,通过赋值语句可以改变寄存器储存的值寄存器数据类型的关键字是reg,reg 类型数据的默认初始值为不定值x reg类型的数据只能在always 语句和initial 语句中被赋值。 如果该过程语句描述的是时序逻辑,即always语句带有时钟信号,则该寄存器变量对应为触发器; 如果该过程语句描述的是组合逻辑,即always语句不带有时钟信号,则该寄存器变量对应为硬件连线; 线网类型: 线网数据类型表示结构实体(例如门)之间的物理连线。线网类型的变量

相关文档
最新文档