《Verilog语言基础知识.docx》由会员分享,可在线阅读,更多相关《Verilog语言基础知识.docx(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Verilog HDL语言基础学问先来看两个Verilog HDL程序。例6. 1 一个8位全加器的Veri log HDL源代码module adder8 (cout, sum, ina, inb, cin);output7:0sum;output cout;input7:0 ina, inb;input cin;assign cout, sum=ina+inb+cin; 全力口 endmodule【例6. 2 一个8位计数器的Verilog HDL源代码 module counters (out, cout, data, load, cin, elk); output 7:0out;out
2、put cout;input7:0 data;input load, cin, elk;reg7:0 out;always (posedge elk) beginif(load) out二data;elseout=out+cin; endassign cout=&out&cin;endmodule从上面的例子可以看出:Verilog HDL程序是由模块构成的。每个模块的内容都是嵌在moduleendmodule两个语句之间,每个模块实现特定的功能,模块是可以进行层次嵌套的。每个模块首先要进行端口定义,并说明输入(input)和输出(output),然后对模块的功 能进行逻辑描述。Verilog
3、 HDL程序的书写格式自由,一行可以写几个语句,一个语句也可以分多行写。除了 endmodule语句外,每个语句的最终必需有分号。 可以用/*/和 对Verilog HDL程序的任何部分作注释。6.1. 2 Verilog HDL模块的结构:低优先级6. 4语句Verilog HDL支持很多语句,从而成为结构化和过程性的语言。Verilog HDL的语句 包括:赋值语句,条件语句,循环语句,结构说明语句和编译预处理语句等。每一类又 包括几种不同的语句,详细如表6. 3所示。表 6. 3 Verilog HDL 语句赋值语句连续赋值语句过程赋值语句条件语句if-elsc 语句case语句循环语句
4、forever 语句repeat语句while语句for语句结构说明语句initial 语句always语句function 语句编译预处理语句define 语句include 语句timescale 语句6.4. 1赋值语句1 .连续赋值语句assignassign为连续赋值语句,它用来对wire型变量进行赋值。格式:assign变量=表达式;如:assign c = a & b;在上面的赋值中,a和b信号的任何变更,都将随时反映到c上来,因此称为连续赋 值方式。2 .过程赋值语句过程赋值语句用于对寄存器类型(reg)的变量进行赋值。过程赋值有以下两种方式。(1)非堵塞(non_blocki
5、ng)赋值方式赋值号为 =,如b=a;非堵塞赋值在块结束时才完成赋值操作,即b的值并不是立即就变更的。(2)堵塞(blocking)赋值方式赋值号为=,如b=a;堵塞赋值在该语句结束时就完成赋值操作,即b的值在该赋值语句结束后立即变更。 假如在一个块语句中,有多条堵塞赋值语句,则在前面的赋值语句没有完成之前,后面的 语句就不能执行,就像被堵塞(blocking)一样,因此称为堵塞赋值方式(3)堵塞赋值方式和非堵塞赋值方式的区分堵塞赋值方式和非堵塞赋值方式的区分常给设计人员带来问题。问题主要是对 “always”模块内的reg型变量得赋值不易把握。为区分堵塞赋值及非堵塞赋值的不同, 可看下面两例
6、。【例6. 4】非堵塞赋值【例6. 5】堵塞赋值module non block (c, b, a, elk);output c, b;input elk, a;reg c, b;always (posedge elk)beginb=a;c 小于 二小于或等于 大于 =大于或等于在进行关系运算时,假如声明的关系是假,则返问值是0;假如声明的关系是真,则 返回值是1;假如某个操作数的值不定,则其结果是模糊的,返回值是不定值。5 .等式运算符=等于!=不等于二二二全等!=不全等这4种运算符都是双目运算符,得到的结果是1位的逻辑值。假如得到1,说明声明 的关系为真;如得到0,说明声明的关系为假。相等
7、运算符(二二)和全等运算符(二=二)的区分是参及比较的两个操作数必需逐位相 等,其相等比较的结果才为1,假如某些位是不定态或高阻值,其相等比较得到的结果就 会是不定值。而全等比较(二=)是对这些不定态或高阻值的位也进行比较,两个操作数 必需完全一样,其结果才为1。否则结果是0。如:设寄存器变量a=5bll0x01,b=5Tlx01,则= b”得到的结果为不定值x,而 a= = =b”得到的结果为1。6 .缩减运算符(单目运算)&及&及非I或“I或非异或,一同或缩减运算符及位运算符的逻辑运算法则一样,但缩减运算是对单个操作数进行及, 或,非递推运算的。如:reg3:0 a;b=&a; 等效于 b
8、= (a 0 &a 1 ) &a2) &a 3;例:若 A=5bl 1001,则:&A=0;只有A的各位都为1时,其及缩减运算的值才为1。|A=1;只有A的各位都为0时,其或缩减运算的值才为0。7 .移位运算符右移左移移位运算符用法:A n 或 A n表示把操作数A右移或左移n位,并用0填补移出位。8 .条件运算符(三目运算符)?:格式: 信号=条件 表达式L表达式2;当条件成立时,信号取表达式1的值,反之取表达式2的值.9 .位拼接运算符 将两个或多个信号的某些位拼接起来。用法:信号1的某几位,信号2的某几位,,信号n的某几位例如,在进行加法运算时,可将输出及和拼接在一起运用。output 3:0sum;sum 代表和output cout;cout 为进位输出input3:0 ina, inb;input cin;assign cout, sum=ina+inb+cin;进位及和拼接在一起位拼接可以嵌套运用,还可以用重复法来减化书写,如:3 a, b)等同于a, b, a, b), a, b,也等同于a, b, a, b, a, b。6. 3. 2.运算符的优先级以上运算符的优先级如下:!,iWj优先级*, /, %+,- , , =W|WI W W,y& , &I,I&II