临近期末,组原刚考完,还有一天半复习。verilog,记录你个人认为需要知道的事情Verilog重点(我选的verilog课时很少)
本文主要采摘Verilog HDL-巴斯克的内容
一、简介
Verilog HDL从算法级、门级到开关级,用于数字系统建模的硬件描述语言。
Verilog HDL它不仅定义了语法,还定义了清晰的模拟和模拟每个语法结构的语义。
所以很多操作符看起来都很熟悉。
Verilog HDL设计建模支持三种不同的方法或混合方法。。(重点)
Verilog HDL两种数据类型:。线网类型表示构件之间的物理连接,而寄存器类型表示抽象的数据存储元件。
可用于高级编程语言结构,如条件语句、情况语句和循环语句。
二、HDL指南
1、模块
,用于描述设计的功能或结构以及与其他模块通信的外部端口。
开关级原语、门级原语和用户定义的原语可以描述设计结构;连续赋值语句用于描述设计的数据流行行为;时序行为使用过程结构描述。
模块的基本语法:
module module_name (port_list) ; Declarations: //说明部分:定义不同的项目 reg, wire, parameter, input, output, inout, function, task, . . . Statements: //语句:定义功能和结构 Initial statement Always statement Module instantiation Gate instantiation UDP instantiation Continuous assignment endmodule
说明部分
用于定义不同的项目,如模块描述中使用的寄存器和参数。语句
定义设计的功能和结构。模块中的任何地方都可以分模块中的任何地方;但在使用前必须出现变量、寄存器、线网和参数。
端口位数没有定义,端口大小为1位。
如无端口数据类型说明,则为线网数据类型。
2、时延
assign #2 Sum = A ^ B; // #2 指两个时间单位
使用编译指令将时间单位与物理时间相关联,这样的编译器指令需要在模块描述前定义,如下:
`timescale 1ns /100ps
以反引号开头的第一句话是编译器指令,说明延迟单位为1ns,时间精度为100ps,因此,在上述连续赋值句中 #2代表2ns。
3.数据流描述
。在连续赋值语句中,将某一值分配给线网变量。
assign [delay] LHS_net = RHS_ expression
无论右表达式使用的操作数何时发生变化,都会重新计算右表达式,并在指定时间延迟变化值,赋予左表达式。
延迟定义了右表达式操作数的变化和赋值给左表达式之间的持续时间。(个人认为是滞后或延迟)。
连接类型是一种线网类型。
,也就是说,每个句子的执行顺序与描述中的顺序无关。
4.行为描述
(1)initial句子:这句话只执行一次。
(2)always句子:这个句子总是循环执行,或者这个句子重复执行。
。在赋予新值之前,寄存器类型数据保持原始值不便。。
reg类型是一种寄存器数据类型。
always句子中有一个与事件控制密切相关@后面的表达式)相关的顺序过程(begin-end对)。
语句顺序在顺序过程中执行,顺序执行后挂起,再次等待事件控制。
在顺序过程中出现的句子是。过程赋值可以有可选的延迟。
延迟分为两种类型:
////语句间延迟的示例 Sum = (A ^ B) ^ Cin; #4 T1 = A & Cin; ////语句中实验的示例 Sum = #3 (A ^ B) ^ Cin;
initial句子包含一个顺序过程,所有句子都完成后,initial永远挂句子。
举例:
initial begin Pop = 0; //0ns Pid = 0; //0ns Pop = #5 1; //5ns Pid = #3 1; //8ns Pop = #6 0; //14ns Pid = #2 0; //16ns end
5、结构化描述形式
Verilog HDL以下方式描述结构:
使用线网相互连接。
举例:
module FA_Str(A,B,Cin,Sum,Cout); input A,B,Cin; output Sum,Cout; wire S1,T1,T2,T3; xor X1(S1,A,B),X2(Sum,S1,Cin); and A1(T3,A,B),A2(T2,B,Cin),A3(T1,A,Cin); or O1(Cout,T1,T2,T3); endmodule
。。xor、and和or它是内置门的原语,紧跟在每扇门后面的信号列表是它的互联。第一个列表是门的输出,其余的是输入。
module FourBitFA(FA,FB,FCin,FSum,FCout); parameter SIZE = 4; input [SIZE:1] FA,FB; output [SIZE:1] FSum; input FCin; input FCout; wire [1:SIZE-1] FTemp; ///书上写的,个人认为[1::SIZE-1]或者[SIZE-1:1]都可以 FA_Str FA1 (.A(FA[1]),.B(FB[1]),.Cin(FCin),.Sum(FSum[1]),.Cout(FTemp[1])), FA2 (.A(FA[2]),.B(FB[2]),.Cin(FTemp[1]),.Sum(FSum[2]),.Cout(FTemp[2])), FA3 (FA[3],FB[3],FTemp[2],FSum[3],FTemp[3]), FA4 (FA[4],FB[4],FTemp[3],FSum[4],FCout); endmodule
前两个例子采用命名关联方式,后两个例子使用位置关联端口和线网。
6.混合设计的描述
模块描述可包括实例门、模块实例句、连续赋值句和always语句和initial句子的混合可以相互包含。