verilog tutorial
DESCRIPTION
Verilog HDL is a hardware description language used to design and document electronic systems. Verilog HDL allows designers to design at various levels of abstraction. It is the most widely used HDL with a user community of more than 50,000 active designers. A brief history Verilog HDL originated at Automated Integrated Design Systems (later renamed as Gateway Design Automation) in 1985. The company was privately held at that time by Dr. Prabhu Goel, the inventor of the PODEM test generation algorithm. Verilog HDL was designed by Phil Moorby, who was later to become the Chief Designer for Verilog-XL and the first Corporate Fellow at Cadence Design Systems. Gateway Design Automation grew rapidly with the success of Verilog-XL and was finally acquired by Cadence Design Systems, San Jose, CA in 1989. Verilog was invented as simulation language. Use of Verilog for synthesis was a complete afterthought. Rumors abound that there were merger discussions between Gateway and Synopsys in the early days, where neither gave the other much chance of success.. In the late 1980's it seemed evident that designers were going to be moving away from proprietary languages like n dot, HiLo and Verilog towards the US Depatment of Defense standard H.D.L., known as the VHSIC Hardware Description Language. VHSIC it self stands for "Very High Speen Intergrated Circuit" BTW). Perhaps due to such market pressure, Cadence Design Systems decided to open the Verilog language to the public in 1990, and thus OVI (Open Verilog International) was born. Until that time, Verilog HDL was a proprietary language, being the property of Cadence Design Systems. When OVI was formed in 1991, a number of small companies began working on Verilog simulators, including Chronologic Simulation, Frontline Design Automation, and others. The first of these came to market in 1992, and now there are mature Verilog simulators available from many sources. As a result, the Verilog market has grown substantially. The market for Verilog related tools in 1994 was well over $75,000,000, making it the most commercially significant hardware description language on the market. An IEEE working group was established in 1993 under the Design Automation Sub-Committee to produce the IEEE Verilog standard 1364. Verilog became IEEE Standard 1364 in 1995. As an international standard, the Verilog market continued to grow. In 1998 the market for Verilog simulators alone was well over $150,000,000; continuing its dominance. The IEEE working group released a revised standard in March of 2002, known as IEEE 1364-2001. Significant publication errors marred this release, and a revised version was released in 2003, known as IEEE 1364-2001 Revision C.TRANSCRIPT
![Page 1: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/1.jpg)
Tutorial on Verilog HDL
![Page 2: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/2.jpg)
HDLHardware Description Languages
Widely used in logic designVerilog and VHDL
Describe hardware using codeDocument logic functionsSimulate logic before buildingSynthesize code into gates and layout
Requires a library of standard cells
![Page 3: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/3.jpg)
VerilogVerilog is one of the two major Hardware Description Languages(HDL) used by hardware designers in industry and academia.VHDL is another oneVerilog is easier to learn and use than VHDLVerilog HDL allows a hardware designer to describer designs at a high level of abstraction such as at the architectural or behavioral level as well as the lower implementation levels (i.e., gate and switch levels).
![Page 4: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/4.jpg)
Why use Verilog HDLDigital system are highly complex.Verilog language provides the digital designer a software platform.Verilog allows user to express their design with behavioral constructs.A program tool can convert the Verilogprogram to a description that was used to make chip, like VLSI.
![Page 5: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/5.jpg)
Module portsModule name
Verilog keywords
Taste of Verilog
module Add_half ( sum, c_out, a, b );input a, b;output sum, c_out;wire c_out_bar;
xor (sum, a, b);// xor G1(sum, a, b);nand (c_out_bar, a, b);not (c_out, c_out_bar);
endmodule
DeclarationDeclaration of port modes
DeclarationDeclaration of internal signal
InstantiationInstantiation of primitive gates
c_out
ab sum
c_out_bar
G1G1
![Page 6: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/6.jpg)
Lexical Convention
Lexical convention are close to C++.Comment// to the end of the line./* to */ across several lines
. Keywords are lower case letter.the language is case sensitive
![Page 7: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/7.jpg)
Lexical ConventionNumbers are specified in the traditional form or below .<size><base format><number>
Size: contains decimal digitals that specify the size of the constant in the number of bits.Base format: is the single character ‘ followed by one of the following characters b(binary),d(decimal),o(octal),h(hex).Number: legal digital.
![Page 8: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/8.jpg)
Lexical ConventionExample :
347 // decimal number4’b101 // 4- bit binary number 01012’o12 // 2-bit octal number5’h87f7 // 5-bit hex number h87f72’d83 // 2-bit decimal number
String in double quotes“ this is a introduction”
![Page 9: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/9.jpg)
Lexical ConventionOperator are one, two, or three characters and are used in the expressions.
just like C++.Identifier: specified by a letter or underscore followed by more letter or digits, or signs.
![Page 10: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/10.jpg)
Program structureStructuremodule <module name> (< port list>);
< declares><module items>
endmodule. Module name
an identifier that uniquely names the module.. Port list
a list of input, inout and output ports which are referenced in other modules.
![Page 11: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/11.jpg)
Program structure. Declares
section specifies data objects as registers, memories and wires as well as procedural constructs such as functions and tasks.
. Module items initial constructsalways constructsassignment……………….
![Page 12: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/12.jpg)
Test Module structure
module <test module name> ;// Data type declaration. // Data type declaration. Inputs declared as Inputs declared as regreg and and outputs declared as outputs declared as wirewire// Instantiate module ( call the module that is// Instantiate module ( call the module that is going going to be tested)to be tested)// Apply the stimulus// Apply the stimulus// Display results// Display results
endmodule
![Page 13: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/13.jpg)
Three Modeling Styles in Verilog
Structural modeling (Gate-level) Use predefined or user-defined primitive gates.
Dataflow modelingUse assignment statements (assign)
Behavioral modelingUse procedural assignment statements (always)
![Page 14: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/14.jpg)
Structural model//structural model of a NAND gate// program nand2.vmodule my_NAND(A, B, F);
input A, B;output F;nand G(F, A, B); // first parameter must be output.
endmodule
![Page 15: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/15.jpg)
Example of gate NAND
module test_my_nand;// Test bench to test nandreg A, B; wire F; my_NAND test_my_nand(A, B, F); // instantiate my_NAND.initial begin // apply the stimulus, test data
A = 1'b0; B = 1'b0;#100 A = 1'b1; // delay one simulation cycle, then change A=>1.
#100 B = 1'b1;#100 A = 1'b0;
endinitial #500 $finish;begin // setup monitoring
//$monitor("Time=%0d a=%b b=%b out1=%b", $time, A, B, F);//#500 $finish;
endendmodule
Test bench module test_nand for the nand1.v
![Page 16: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/16.jpg)
//Gate-level description of a 2-to-4-line decoder
//Figure 4-19
module decoder_gl (input A,B,E, output [0:3] D);
wire Anot, Bnot, Enot;
not
n1 (Anot, A),
n2 (Bnot, B),
n3 (Enot, E);
nand
n4 (D[0], Anot, Bnot, Enot),
n5 (D[1], Anot,B, Enot),
n6 (D[2], A, Bnot, Enot),
n7 (D[3], A, B, Enot);
endmodule
Structural Modeling
![Page 17: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/17.jpg)
//Gate-level hierarchical description of 4-bit adder
// Description of half adder (see Fig 4-5b)
//module halfadder (S,C,x,y);
// input x,y;
// output S,C;
module halfadder (output S,C, input x,y);
//Instantiate primitive gates
xor (S,x,y);
and (C,x,y);
endmodule
//Description of full adder (see Fig 4-8)
module fulladder (output S,C, input x,y,z);
wire S1,C1,C2; //Outputs of first XOR and two AND gates
halfadder HA1 (S1,C1,x,y), HA2 (S,C2,S1,z); //Instantiate the halfadder
or g1(C,C2,C1);
endmodule
![Page 18: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/18.jpg)
//Description of 4-bit adder (see Fig 4-9)
module ripple_carry_4bit_adder (output [3:0] S, output C4, input [3:0] A,B, input C0)
// input [3:0] A,B;
//input C0;
//output [3:0] S;
//output C4;
wire C1,C2,C3; //Intermediate carries
//Instantiate the fulladder
fulladder FA0 (S[0], C1, A[0], B[0], C0),
FA1 (S[1], C2, A[1], B[1], C1),
FA2 (S[2], C3, A[2], B[2], C2),
FA3 (S[3], C4, A[3], B[3], C3);
endmodule
The names are required!
![Page 19: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/19.jpg)
Dataflow Modeling//HDL Example 4-3
//----------------------------------------------
//Dataflow description of a 2-to-4-line decoder
//See Fig.4-19
module decoder_df (output [0:3] D, input A, B, enable);
assign D[0] = ~(~A & ~B & ~ enable),
D[1] = ~(~A & B & ~ enable),
D[2] = ~(A & ~B & ~ enable),
D[3] = ~(A & B & ~ enable);
endmodule
![Page 20: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/20.jpg)
Dataflow Modeling//HDL Example 4-4
//----------------------------------------
//Dataflow description of 4-bit adder
module binary_adder (A, B, Cin, SUM, Cout);
input [3:0] A,B;
input Cin;
output [3:0] SUM;
output Cout;
assign {Cout, SUM} = A + B + Cin;
endmodule
concatenation Binary addition
![Page 21: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/21.jpg)
Dataflow Modeling//HDL Example 4-5
//-----------------------------------
//Dataflow description of a 4-bit comparator.
module magcomp (A,B,ALTB,AGTB,AEQB);
input [3:0] A,B;
output ALTB,AGTB,AEQB;
assign ALTB = (A < B),
AGTB = (A > B),
AEQB = (A == B);
endmodule
![Page 22: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/22.jpg)
Dataflow Modeling
//HDL Example 4-6
//----------------------------------------
//Dataflow description of 2-to-1-line multiplexer
module mux2x1_df (A, B, select, OUT);
input A,B,select;
output OUT;
assign OUT = select ? A : B;
endmodule
![Page 23: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/23.jpg)
Behavioral Description
module Add_half ( sum, c_out, a, b );input a, b;output sum, c_out;reg sum, c_out;always @ ( a or b )
beginsum = a ^ b; // Exclusive orc_out = a & b; // And
endendmodule
a
bAdd_half sum
c_out
Event control expressionProcedure
assignment statements
Must be of the ‘reg’ type
![Page 24: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/24.jpg)
Example of Flip-flopmodule Flip_flop ( q, data_in, clk, rst );
input data_in, clk, rst;output q;reg q;
always @ ( posedge clk )begin
if ( rst == 1) q = 0;else q = data_in;
endendmodule
data_in q
rst
clk
Declaration of synchronous behavior
Procedural statement
![Page 25: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/25.jpg)
Using Verilogger Pro
Evaluation Version.enter the window of VeriloggerStart Program SynaptiCad Verilogger Pro..
![Page 26: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/26.jpg)
How to build a new projectClick Menu [ Project]Project] [New [New Project]Project] enterthe conversation window.Enter the Project Name.
default: untitled.hpj. *.hpjEnter the Project Directory
C:\SynaptiCAD\project\Or others.
.Click the [Finish] to close the window.
![Page 27: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/27.jpg)
Other menus of [Project]
[Open Project][Open Project][Close Project][Close Project][Save Project][Save Project][Save Project as][Save Project as][Add User Source Files][Add User Source Files]
all the user source used by this all the user source used by this project.project.Project settingProject settingPrint Project HierarchyPrint Project Hierarchy
![Page 28: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/28.jpg)
Verilogger Editor
Use the Verilogger Editor to build a program.In the Verilogger Window:
click [Editor] [New HDL file] popup a editor window for you.
. Others Menu in the [Editor] same as Menu[Project]
![Page 29: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/29.jpg)
Example of gate NAND
Save the HDL files as nand1.v in menu [Editor] [Save HDL File As] and
save another HDL file as test-nand1.vAttach these two HDL files to a new project test.hpj in [project window]Run the simulation program
run/resume simulation button or in the [simulate].
![Page 30: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/30.jpg)
How to build a new project?
![Page 31: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/31.jpg)
![Page 32: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/32.jpg)
![Page 33: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/33.jpg)
![Page 34: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/34.jpg)
![Page 35: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/35.jpg)
How to create a HDL file?
![Page 36: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/36.jpg)
![Page 37: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/37.jpg)
![Page 38: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/38.jpg)
![Page 39: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/39.jpg)
How to save the HDL file?
![Page 40: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/40.jpg)
![Page 41: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/41.jpg)
![Page 42: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/42.jpg)
![Page 43: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/43.jpg)
![Page 44: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/44.jpg)
How to add a source HDL file to a Project(project1)
![Page 45: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/45.jpg)
![Page 46: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/46.jpg)
![Page 47: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/47.jpg)
![Page 48: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/48.jpg)
![Page 49: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/49.jpg)
![Page 50: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/50.jpg)
Now, Ready to run the program!
![Page 51: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/51.jpg)
![Page 52: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/52.jpg)
![Page 53: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/53.jpg)
The Report Window of Verilogger.(all the simulation information is in this window)
![Page 54: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/54.jpg)
![Page 55: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/55.jpg)
Example of gate NANDSimulation report from Verilog-Report window.Running...
Time=0 a=0 b=0 out1=1Time=1 a=1 b=0 out1=1Time=2 a=1 b=1 out1=0Time=3 a=0 b=1 out1=10 Errors, 0 WarningsCompile time = 0.00000, Load time = 0.00000,
Execution time = 0.06000
Normal exit
![Page 56: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/56.jpg)
Diagram window of Simulation result
![Page 57: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/57.jpg)
![Page 58: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/58.jpg)
![Page 59: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/59.jpg)
![Page 60: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/60.jpg)
How to copy the diagram to Microsoft Word!
![Page 61: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/61.jpg)
Example of gate NANDWave from Verilog diagram.Verilog windows
Activate the the diagram windowsMethod 1: [File] -> [Print Diagram] -> Print to: [WMF
Metafile[MS Word];Method 2: [edit] [copy to clipboard] select “wave
form, name and time line” select “ok”then you can paste the diagram to anywhere you want.
![Page 62: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/62.jpg)
![Page 63: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/63.jpg)
![Page 64: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/64.jpg)
![Page 65: Verilog tutorial](https://reader033.vdocuments.us/reader033/viewer/2022050804/546b2b70af7959651f8b55f3/html5/thumbnails/65.jpg)
You can paste the diagram here!