马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
Verilog HDL语言
Verilog HDL步调是由模块构成的。每个模块嵌套在module和endmodule声明语句中。模块是可以进行层次嵌套的。每个Verilog HDL源文件中只准有一个顶层模块,其他为子模块。每个模块要进行端口定义,并分析输入输出端口,然后对模块的功能进行行为逻辑形貌。步调书写格式自由,一行可以写几个语句,一个语句也可以分多行写。除了endmodule语句、begin/end语句和fork/join语句外,每个语句和数据定义的最后必须有分号。可用 / ∗ . . . . . ∗ / /*.....*/ /∗.....∗/和 / / . . . //... //...对步调的任何部分作注释。加上必要的注释,以加强步调的可读性和可维护性。
以下为verilog实例代码
8位全加器
- module adder8 ( cout,sum,a,b,cin );
- output cout; // 输出端口声明
- output [7:0] sum;
- input [7:0] a,b; // 输入端口声明
- input cin;
- assign {cout,sum}=a+b+cin;
- endmodule
复制代码 8位计数器
- module counter8 ( out,cout,data,load, cin,clk );
- output [7:0] out;
- output cout;
- input [7:0] data;
- input load, cin,clk ;
- reg[7:0] out;
- always @(posedge clk)
- begin
- if(load)
- out = data; // 同步预置数据
- else
- out = out + 1 + cin; // 加1计数
- end
- assign cout = &out & cin; //若out为8‘hFF,cin为1,则cout为1
- endmodule
复制代码 2位比较器
- module compare2 ( equal,a,b);
- output equal;
- input [1:0] a,b;
- assign equal = ( a = = b ) ? 1:0;
- / * 如果a等于b,则equal 为1,否则为0 * /
- endmodule
复制代码 三态驱动器
- module trist1(out,in,enable);
- output out;
- input in, enable;
- mytri tri_inst(out,in,enable);
- endmodule
- module mytri(out,in,enable);
- output out;
- input in, enable;
- assign out = enable? in:’bz;
- / * 如果enable为1,则out = in,否则为高阻态 * /
- endmodule
复制代码 Verilog HDL模块的布局
Verilog的基本设计单元是“模块 (block) ”。Verilog 模块的布局由在module和endmodule关键词之间的4个主要部分构成:
模块声明。
模块声明包括模块名字和模块输入、输出端口列表。其格式如下:
- module 模块名 (端口1,端口2,端口3……);
-
- …….
-
- endmodule。
复制代码 端口定义。
端口是模块与外界或其他模块毗连和通信的信号线,有三种类型的端口:输入端口(input)、输出端口(output)和输入/输出端口(inout)。对模块的输入、输出端口要明确分析,其格式为:
- Input 端口1,端口2,….端口N; //输入端口
- output 端口1,端口2,….端口N; //输出端口
- Inout 端口1,端口2,….端口N; //双向端口
复制代码 信号类型。
对端口的输入输出要明确分析外,还要进行信号数据类型的定义。Verilog语言提供了各种信号类型,分别模仿实际电路中的各种物理毗连和物理实体。常用的数据类型包括连线型(wire)、寄存器型(reg)两种。如果信号的数据类型没有定义,则综合器将其默认为wire型。需要留意的是,输入和双向端口不能声明为寄存器型。定义信号数据类型举例:
- reg cout; //定义信号cout数据类型为reg型
- wire a,b,c; //定义信号a,b,c数据类型为wire(连线)型
复制代码 功能形貌
在Verilog 模块中有多种方法可以形貌电路的逻辑功能:
(1)用assign 语句。assign x = ( b & c ) ( b \& ~c ) (b& c);
(2)用元件例化(instantiate)。调用元件方法类似于在电路图输入方式下调入图形符号来完成设计,这种方法侧重于电路的布局形貌。在Verilog语言中,可通过调用如下元件的方式来形貌电路的布局:1.调用Verilog内置门元件(门级布局形貌);2.调用开关级元件(开关级布局形貌);3.用户定义元件UDP(也在门级)。
一个模块可以通过模块名及端口分析利用另一个模块。实例化模块时不需要知道其实现细节。这正是自上而下设计方法的一个重要特点。模块的实现可以是行为级也可以是门级,但并不影响高层次模块对它的利用。
需要留意的是,模块实例化时实例必须有一个名字。在利用位置映射时,端口次序与模块的分析雷同。在利用名称映射时,端口次序与位置无关。对于没有毗连的输入端口,初始化值为x。
(3)用 “always” 块语句。“always” 块语句常用于形貌时序逻辑,也可形貌组合逻辑。“always” 块可用多种本领来表达逻辑关系,如用if-else语句或case语句。
“always” 块语句与assign语句是并发执行的, assign语句一定要放在“always” 块语句之外。
Verilog模型可以是实际电路不同级别的抽象。所谓不同的抽象级别,实际上是指同一个物理电路,可以在不同的层次上用Verilog语言来形貌它,如果只从行为和功能的角度来形貌某一电路模块,就称为行为模块;如果从电路布局的角度来形貌该电路模块,就称为布局模块。抽象的级别和它们对应的模块类型常可以分为以下5种:(1) 系统级(system)、(2) 算法级(algorithmic)、(3) RTL级(RegisterTransferLevel)、(4) 门级(gate-level)、(5) 开关级(switch-level)。其中,系统级、算法级和RTL级是属于行为级的,门级是属于布局级的。而Verilog既是一种行为形貌的语言也是一种布局形貌语言。
Verilog模型可以是实际电路的不同级别的抽象。这些抽象的级别包括:系统分析、设计文档/算法形貌、RTL/功能级、门级/布局级、版图/物理级。
Verilog可以在三种抽象级上进行形貌:
行为级抽象。用功能块之间的数据流对系统进行形貌,在需要时在函数块之间进行调度赋值。
RTL级/功能级抽象。用功能块内部或功能块之间的数据流和控制信号形貌系统,基于一个已定义的时钟的周期来定义系统模型。
布局级/门级抽象。用基本单元(primitive)或低层元件(component)的毗连来形貌系统以得到更高的准确性,特别是时序方面。在综合时用特定工艺和低层元件将RTL形貌映射到门级网表。
设计工程师在不同的设计阶段可以采用不同的抽象级。比如,起首在行为级形貌各功能块,以降低形貌难度,进步仿真速率。在综合前将各功能模块进行RTL级形貌。用于综合的库中的大多数单元采用布局级形貌。在布局级形貌部分将对布局级(门级)形貌进行更详细的分析。
除此之外,Verilog还有一定的晶体管级形貌本领及算法级形貌本领。
前面提到的所谓逻辑综合就其实质而言是设计流程中的一个阶段,在这一阶段中将较高级抽象层次的形貌自动地转换成较低层次形貌。就如今达到的水平而言,所谓逻辑综合就是通过综合器把HDL步调转换成尺度的门级布局网表,而并非真实具体的电路。而真实具体的电路还需要利用ASIC和FPGA制造厂商的布局布线工具根据综合后生成的尺度的门级布局网表来产生。为了能转换成尺度的门级布局网表,HDL步调的编写必须符合特定综合器所要求的风格。由于门级布局、RTL级的HDL步调的综合是很成熟的技术,所有的综合器都支持这两个级别HDL步调的综合。
对于数字系统的逻辑设计工程师而言,熟练地把握门级、RTL级、算法级、系统级是非常重要的。而对于电路基本部件(如门、缓冲器、驱动器等)库的设计者而言,则需要把握用户自定义源语元件(UDP)和开关级的形貌。
一个复杂电路的完整Verilog HDL模型是由若干个Verilog HDL模块构成的,每一个模块又可以由若干个子模块构成。这些模块可以分别用不同抽象级别的Verilog HDL形貌,在一个模块中也可以有多种级别的形貌。利用Verilog HDL语言布局所提供的这种功能就可以构造一个模块间的清楚层次布局来形貌极其复杂的大型设计。
模块内具体逻辑行为的形貌方式又称为建模方式。根据设计的不同要求,每个模块内部具体的逻辑行为形貌方式可以分为四个不同的抽象级别。
对于外部来说,看不到逻辑行为的具体实现方式。因此,模块的内部具体逻辑行为形貌相对于外部其它模块来说是不可见的。
改变一个模块内部逻辑行为的形貌方式,并不会影响该模块与其它模块的毗连关系。
Verilog HDL提供了下面四种方式形貌具体的逻辑行为:
行为级形貌方式。Verilog HDL的行为级形貌是最能体现电子设计自动化风格的硬件形貌方式,它既可以形貌简单的逻辑门,也可以形貌复杂的数字系统以致微处理惩罚器;既可以形貌组合逻辑电路,也可以形貌时序逻辑电路。因此,它是Verilog HDL最高抽象级别的形貌方式。其可以按照要求的设计算法来实现一个模块,而不消关心该模块具体硬件实现的细节。这种抽象级别形貌方式非常类似c编程。一般行为级形貌用于对设计进行仿真研究。
数据流形貌方式。数据流形貌方式,也称寄存器传输级(Register Transfer,RTL)形貌方式。所谓的数据流形貌可以如许明确,即在一个复杂的数字系统中,应该包罗有数据流和控制流。控制流用于控制数据的“流向”,即:数据将要到达的地方。从寄存器传输级的角度,可以如许明确,即在寄存器之间插入组合逻辑电路。在一个复杂的数字系统中,任何数据从输入到输出,都需要经过寄存器,寄存器用于重定序和影象。
行为级形貌方式到底和数据流形貌方式的本质区别在什么地方?
下面对其进行分析:行为级形貌中,包罗一些设计元素,在FPGA内无法找到相应的逻辑单元来实现这些设计元素。而数据流形貌中,只包罗可以在FPGA内实现的设计元素。行为级形貌,一般只用于对设计进行仿真,也就是生成对设计的测试向量,通过特定的仿真软件来测试设计有无设计缺陷。但是,不能转换成FPGA的具体物理实现。而数据流形貌,用于对设计进行综合,最后下载到FPGA器件进行具体的物理实现。
布局级形貌方式。布局形貌就是在设计中,通过调用库中的元件或者是已经设计好的模块来完成设计实体功能的形貌。通常情况下,在利用层次化设计时,一个高层次模块会调用一个或者多个低层次模块。这种模块的调用是通过模块例化语句实现的。
开关级形貌方式。从本质上来说,开关级属于布局化形貌方式,但是其形貌更接近于底层的门级和开关级电路。这里突出分析开关级形貌方式,是为了分析Verilog HDL对底层强大的形貌功能。
逻辑电路的设计块完成后,就要测试这个设计块形貌的逻辑功能是否正确。为此必须在输入端口参加测试信号,而从其输出端口检测其效果是否正确,这一过程常称为搭建测试台 test bench 。根据仿真软件的不同,搭建测试平台的方法也不同。
测试台 (test bench) 提供测试激励及验证机制。
Test bench 利用行为级形貌。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |