CSCI 660 EEGN-CSCI 660 Introduction to VLSI Design Lecture 6 Khurram Kazi.

Slides:



Advertisements
Similar presentations
Verilog HDL -Introduction
Advertisements

Simulation executable (simv)
Verilog Overview. University of Jordan Computer Engineering Department CPE 439: Computer Design Lab.
Combinational Logic.
Chapter 11 Verilog HDL Application-Specific Integrated Circuits Michael John Sebastian Smith Addison Wesley, 1997.
Table 7.1 Verilog Operators.
Verilog Intro: Part 1.
Hardware Description Language (HDL)
Logic Values 0:logic 0 / false 1:logic 1 / true X:unknown logic value Z:high-impedance.
1 Workshop Topics - Outline Workshop 1 - Introduction Workshop 2 - module instantiation Workshop 3 - Lexical conventions Workshop 4 - Value Logic System.
 HDLs – Verilog and Very High Speed Integrated Circuit (VHSIC) HDL  „ Widely used in logic design  „ Describe hardware  „ Document logic functions.
Verilog - 1 Writing Hardware Programs in Abstract Verilog  Abstract Verilog is a language with special semantics  Allows fine-grained parallelism to.
ELEN 468 Lecture 151 ELEN 468 Advanced Logic Design Lecture 15 Synthesis of Language Construct I.
ENEE 408C Lab Capstone Project: Digital System Design Spring 2006 Class Web Site:
Logic Values 0:logic 0 / false 1:logic 1 / true X:unknown logic value Z:high-impedance.
Verilog Sequential Circuits Ibrahim Korpeoglu. Verilog can be used to describe storage elements and sequential circuits as well. So far continuous assignment.
Silicon Programming--Intro. to HDLs1 Hardware description languages: introduction intellectual property (IP) introduction to VHDL and Verilog entities.
CSE241 R1 Verilog.1Kahng & Cichy, UCSD ©2003 CSE241 VLSI Digital Circuits Winter 2003 Recitation 1: Verilog Introduction.
Reconfigurable Computing (EN2911X, Fall07) Lecture 05: Verilog (1/3) Prof. Sherief Reda Division of Engineering, Brown University
ECEN ECEN475 Introduction to VLSI System Design Verilog HDL.
Kazi Fall 2006 EEGN 4941 EEGN-494 HDL Design Principles for VLSI/FPGAs Khurram Kazi.
University of Jordan Computer Engineering Department CPE 439: Computer Design Lab.
Digital System Design EEE344 Lecture 3 Introduction to Verilog HDL Prepared by: Engr. Qazi Zia, Assistant Professor EED, COMSATS Attock1.
Today’s Lecture Process model –initial & always statements Assignments –Continuous & procedural assignments Timing Control System tasks.
Overview Logistics Last lecture Today HW5 due today
Verilog Basics Nattha Jindapetch November Agenda Logic design review Verilog HDL basics LABs.
Programmable Logic Architecture Verilog HDL FPGA Design Jason Tseng Week 2-3.
Introduction to FPGA AVI SINGH. Prerequisites Digital Circuit Design - Logic Gates, FlipFlops, Counters, Mux-Demux Familiarity with a procedural programming.
ECE 2372 Modern Digital System Design
1 Workshop Topics - Outline Workshop 1 - Introduction Workshop 2 - module instantiation Workshop 3 - Lexical conventions Workshop 4 - Value Logic System.
Verilog Language Concepts
CS 3850 Lecture 3 The Verilog Language. 3.1 Lexical Conventions The lexical conventions are close to the programming language C++. Comments are designated.
1 An Update on Verilog Ξ – Computer Architecture Lab 28/06/2005 Kypros Constantinides.
1 Workshop Topics - Outline Workshop 1 - Introduction Workshop 2 - module instantiation Workshop 3 - Lexical conventions Workshop 4 - Value Logic System.
1 Workshop Topics - Outline Workshop 1 - Introduction Workshop 2 - module instantiation Workshop 3 - Lexical conventions Workshop 4 - Value Logic System.
COE 202 Introduction to Verilog Computer Engineering Department College of Computer Sciences and Engineering King Fahd University of Petroleum and Minerals.
1 COMP541 Sequential Circuits Montek Singh Feb 1, 2012.
Anurag Dwivedi. Basic Block - Gates Gates -> Flip Flops.
1 Hardware description languages: introduction intellectual property (IP) introduction to VHDL and Verilog entities and architectural bodies behavioral,
Behavioral Modelling - 1. Verilog Behavioral Modelling Behavioral Models represent functionality of the digital hardware. It describes how the circuit.
1 Verilog Digital System Design Z. Navabi, 2006 Verilog Language Concepts.
Kazi ECE 6811 ECE 681 VLSI Design Automation Khurram Kazi Thanks to Automation press THE button outcomes the Chip !!! Reality or Myth.
CSCE 211: Digital Logic Design Chin-Tser Huang University of South Carolina.
Introduction to ASIC flow and Verilog HDL
© 2009 Pearson Education, Upper Saddle River, NJ All Rights ReservedFloyd, Digital Fundamentals, 10 th ed Digital Logic Design Dr. Oliver Faust.
Verilog Intro: Part 1. Hardware Description Languages A Hardware Description Language (HDL) is a language used to describe a digital system, for example,
1 University of Jordan Computer Engineering Department CPE 439: Computer Design Lab.
1 Workshop Topics - Outline Workshop 1 - Introduction Workshop 2 - module instantiation Workshop 3 - Lexical conventions Workshop 4 - Value Logic System.
1 Lecture 3: Modeling Sequential Logic in Verilog HDL.
Exp#5 & 6 Introduction to Verilog COE203 Digital Logic Laboratory Dr. Ahmad Almulhem KFUPM Spring 2009.
Structural Description
Overview Logistics Last lecture Today HW5 due today
Hardware Description Languages: Verilog
TODAY’S OUTLINE Introduction to Verilog Verilog coding format
ELEN 468 Advanced Logic Design
Discussion 2: More to discuss
Lecture 2 Supplement Verilog-01
Hardware Description Languages: Verilog
Introduction to DIGITAL CIRCUITS MODELING & VERIFICATION using VERILOG [Part-I]
Behavioral Modeling in Verilog
Logic Values 0:logic 0 / false 1:logic 1 / true X:unknown logic value
332:437 Lecture 10 Verilog Language Details
332:437 Lecture 10 Verilog Language Details
Logic Values 0:logic 0 / false 1:logic 1 / true X:unknown logic value
332:437 Lecture 10 Verilog Language Details
Logic Values 0:logic 0 / false 1:logic 1 / true X:unknown logic value
Supplement on Verilog adder examples
The Verilog Hardware Description Language
The Verilog Hardware Description Language
Reconfigurable Computing (EN2911X, Fall07)
Presentation transcript:

CSCI 660 EEGN-CSCI 660 Introduction to VLSI Design Lecture 6 Khurram Kazi

CSCI Introduction to Verilog  Present day ASIC/FPGA designers most likely have to work with VHDL and Verilog in one form or another.  People who used VHDL mostly, are likely to encounter Verilog as the language that describes the gate level netlist.  Good to know both HDLs.  Both have their strong points and have weaknesses.

CSCI Verilog Vs VHDL  Verilog is perceived to be loosely typed language.  VHDL strongly typed language.  Fact of the matter is that ones choice of VHDL over Verilog or vice versa most likely tends to be based ones familiarity with either of the languages or company’s past history of development platform.  Both languages serve as an excellent tool for RTL development.  Neither of them is well suited for the verification of complex ASICs especially that are algorithmic intensive.  Languages like specman ‘e’, Synopsys “vera”, SystemC, System Verilog or C/C++ have become the languages of choice for verification platform.

CSCI Syntax used in describing a module Module is a fundamental block in Verilog that is synonymous to entity. Verilog does not support different architectures for the same entity module (port list); endmodule

CSCI Continuous assignment This is synonymous to concurrent block statement in VHDL // get continuously updated whenever any of the input operands // change value. module new_or ( a, b, c, ); input a; input b; output c; assign c = (a | | b); // OR function is implied here endmodule

CSCI Initial block // Initial block consists of a statement or a group of statements enclosed in a begin and // end which will be executed only once at simulation time 0. If there is more than one // initial block they get executed concurrently independent of each other. Normally used // for initializing, monitoring, generating clocks etc. module stimulus1 initial reset_n = 1’b0; #25 reset_n = 1’b1; end; initial begin // multiple statements have to be lumped together variable1 = 0; #10 variable1 = 1; #10 variable1 = 0 #30 variable1 = 1; #50 variable1 = 0; end;

CSCI Always block // statements in the “always” block repeatedly get executed until the simulation is // stopped by $finish or $stop. Similar to a process in VHDL // Block that generates a clock module clk_gen reg clk; Intial begin clk = 1’b0; // setting the initial value of the clock end always begin #25 clk = ~clk; // clock repeating every 50 time units end Intial begin #5000 $finish; // simulation ends after 5000 time units end endmodule clk_gen

CSCI Module instantiation (by position) module couple_of_ands ( a, b, c, d ); input a; input b; input c; output d wire w1; // two instances of the module testands testands and1 (a, b, w1); // assuming the 1 st two ports are inputs and 3 rd // is the output of the and gate testands and2 (w1, c, d); endmodule

CSCI Module instantiation (connectivity by name) module mux4cbn ( out, a, b, sel ); output [3:0] out; input [3:0] a, b; input sel; // the inputs and output of the mux2 are 2 bits wide Mux2hi (.a(a[3:2]),.b(b[3:2]),.sel(sel),.out(out3:2]) ); Mux2lo (.a(a[1:0]),.b(b[1:0]),.out([out3:2]),.sel(sel) ); endmodule Name of net being connected.portname(net_to_be_connected) Name of port in lower level module (period indicating a hierarchical name)

CSCI Data Objects  Nets represent connections between hardware elements. They are one-bit values by default unless they are declared explicitly as vectors. Term wire and net are often used interchangeably.  Net is not a keyword but represents a class of data types such as wire, wand, wor, tri, triand, trior, trireg, etc.  Nets/wires are most common data objects to interconnect modules. The default net type is a plain wire. There are wired OR, wired AND, pullups, pulldowns etc.  For synthesis use wire only!! wire a, b, c; // three 1-bit nets of type wire wire [7:0] d, e, f; // three 8-bit vectors Verilog implicitly declares nets for every port declaration. Every connection made in a module instance or primitive instance is also implicitly declared as a net, if it isn’t already declared. Nets get the output value of their drivers. If net has no driver, it gets the value z

CSCI Registers  Registers represent data storage elements. Register retain value until another value is placed onto them.  The register (reg) data object holds its value from one procedural assignment statement to the next and holds its value from one to the next simulation cycle.  It DOES NOT imply that a physical register will be synthesized.  The fundamental difference between nets and registers is that the registers have to be assigned values explicitly. Once a value is assigned to a register, it is held until next procedural assignment to it.  Verilog registers do not need a clock as hardware registers. Same word different meaning (all in the context)  Values of registers can be changed anytime in a simulation by assigning a new values to the register

CSCI Port Connection Rules when modules are instantiated  Inputs: Internally, input ports must always be of type net. Externally, the inputs can be connected to a variable which is a reg or a net.  Output: Internally, output ports can be of the type reg or net. Externally, outputs must always be connected to a net. They cannot be connected to a reg.  Inouts: Internally, inout ports must always be of the type net. Externally, inout ports must always be connected to a net. Outside the module: Inputs can be Reg or net Inside the module: Input port must always be net only Inside the module: Output ports can be of net or reg type Outside the module: Outputs must always be connected to nets Inside the module: Inout ports: net only inside Outside the module: inout: net only outside

CSCI Numbers Number of bits ‘ radixValue ‘b ‘B Binary ‘d ‘D Decimal ‘h ‘H Hexadecimal ‘o ‘O Octal 8’b ’d245

CSCI Description of a flip flop module fflop (q, data, reset_n, clk); output q; input data, reset_n, clk; reg q; //Output port q holds value; Therefore, it is declared as reg. clk) if (reset_n == 0) // this can also be written as “if (!reset_n)” q = 1’b0; else q = data; endmodule // fflop

CSCI Description of a flip flop with asynchronous reset_n module fflop_async (q, data, reset_n, clk); output q; input data, reset_n, clk; reg q; clk or negedge reset_n) if (!reset_n) q = 1’b0; else q = data; endmodule // fflop_async ** Since the clk is not used in any conditional statement, hence implicitly the synthesis tool knows that clk is the CLOCK signal

CSCI Arithmetic operators  Binary: +, -, *, /, % (the modulus operator)  Unary: +, - (e.g. -4 represents Negative 4; +5 represents Positive 5)  Integer division truncates any fractional part  The result of a modulus operation takes the sign of the first operand  If any operand bit value is the unknown value x, then the entire result value is x  Register data types are used as unsigned values  negative numbers are stored in two ’ s complement form

CSCI Relational Operators  a<b a less than b  a>b a greater than b  a<=b a less than or equal to b  a>=b a greater than or equal to b  The result is a scalar value:  0 if the relation is false  1 if the relation is true  x results if any of the operands has unknown x bits  Note: If a value is x or z, then the result of that test is false

CSCI Equality Operators  a === ba equal to b, including x and z  a !== ba not equal to b, including x and z  a == ba equal to b, result may be unknown  a != ba not equal to b, result may be unknown  Operands are compared bit by bit, with zero filling if the two operands do not have the same length  Result is 0 (false) or 1 (true)  For the == and != operators the result is x, if either operand contains an x or a z  For the === and !== operators  bits with x and z are included in the comparison and must match for the result to be true  the result is always 0 or 1

CSCI Logical Operators  Logical operators always evaluate to a 1-bit value, 0 (false), 1 (true), or x (ambiguous)  If an operand is not equal to zero, it is equivalent to a logical 1 (true condition). If it is equal zero, it is equivalent to a logical 0 (false condition). If an operand bit is x or z, it is equivalent to x (ambiguous condition and is normally treated by the simulator as a false condition  E.g. A = 3; B = 0;  ! logic negation!A //Evaluates to 0  && logical and A && B //Evaluates to 0  || logical orA || B // Evaluates to 1  Expressions connected by && and || are evaluated from left to right  Evaluation stops as soon as the result is known  The result is a scalar value:  0 if the relation is false  1 if the relation is true  x if any of the operands has unknown x bits

CSCI Bit-wise operators  ~ negation  & and  | inclusive or  ^ exclusive or  ^~ or ~^ exclusive nor (equivalence)  Computations include unknown bits, in the following way:  ~x = x  0&x = 0  1&x = x&x = x  1|x = 1  0|x = x|x = x  0^x = 1^x = x^x = x  0^~x = 1^~x = x^~x = x  When operands are of unequal bit length, the shorter operand is zero-filled in the most significant bit positions

CSCI if -- else if -- else syntax

CSCI case statement

CSCI for loop synthesis integer i; (a or b) begin for (i = 0; i < 6; i = i + 1) example[i] = a[i] & b [5 – i]; end Example(0) <= a(0) and b(5); Example(1) <= a(1) and b(4); Example(2) <= a(2) and b(3); Example(3) <= a(3) and b(2); Example(4) <= a(4) and b(1); Example(5) <= a(5) and b(0); for loops are “unrolled” and then synthesized.

CSCI Basic Verilog file // Use two slashes for comments module simple_counter ( reset_n, sys_clk, enable, count8 ); //end port list // Input ports declaration input reset_n; input sys_clk; input enable; // Output ports\par output [3:0] count8; // Input ports Data Type // By rule all the input ports should be wires wire sys_clk; //by default they are and dont wire reset_n; // need to specify as wire wire enable; // Output ports data type // Output ports can be storage elements or a wire reg [3:0] count8; //Code start // Counter uses +ve edge triggered and // has synchronous reset_n (posedge sys_clk) begin : COUNT // Block Name if (reset_n == 1'b0) begin count8 <= 4'b000; end // Counter counts when enable is 1 else if (enable == 1'b1) begin count8 <= count8 + 1; end end // end of block COUNT endmodule // end of module // simple_counter

CSCI Basic Verilog file: testbench portion // // Copyright 2006 Mentor Graphics Corporation // // All Rights Reserved. // // THIS WORK CONTAINS TRADE SECRET AND PROPRIETARY INFORMATION WHICH IS THE PROPERTY OF // MENTOR GRAPHICS CORPORATION OR ITS LICENSORS AND IS SUBJECT TO LICENSE TERMS. // module test_counter; reg clk, reset, enable; wire [3:0] count; simple_counter dut (.reset_n(reset),.enable(enable),.count8(count),.sys_clk(clk)); initial // Clock generator begin clk = 0; forever #10 clk = !clk; end initial// Test stimulus begin reset = 0; enable = 0; #20 reset = 1; #20 enable = 1; end endmodule

CSCI ModelSim command to run Verilog simulations vsim –voptargs=+acc design_name Where design_name is the top level entity name that you are trying to simulate!!