CSE 591: Advanced Hardware Design Professor: Kyle Gilsdorf

Size: px
Start display at page:

Download "CSE 591: Advanced Hardware Design Professor: Kyle Gilsdorf"

Transcription

1 CSE 591: Advanced Hardware Design Professor: Kyle Gilsdorf What: System Verilog Verification Environment for Lab #2 Table of Contents 1. Overview 2 1. Verification 3 2. Feature Extraction 3 3. Stimulus Generation Plan 3 4. Coverage Plan 3 5. Verification Environment 3 Phase-0: Randomizer Class 4 Phase-1: TestBench 7 1. Interfaces 7 2. Testcase 8 3. Top Module Top Module Source Code Log file after simulation: Phase-2: Environment Environment Class: Environment Class Source Code: Log file after simulation Phase-3 Reset Define the reset() method Log file after simulation Phase-4 Packet Complete Packet Class Source Code Program Block Source Code Log file after simulation: Phase-5 Driver Developing the Driver Class Driver Class Source Code: Developing the Environment Class Environment Class Source Code: Log file from Simulation Phase-6 RECEIVER Steps to create the receiver Receiver Class Source Code: Develop the Environment Class: Environment Class Source Code: Phase-7 SCOREBOARD Scoreboard Class Source Code: Source Code of The Environment Class: 49

2 1. Overview In this tutorial, we will develop the Switch RTL core and verify it. Following are the steps we follow to verify the Switch RTL core. 1. Understand the specification and Develop Design 2. Developing Verification Plan 3. Building the Verification Environment. We will build the Environment in Multiple phases, so it will be easy for you to lean step by step. Phase 1) Develop the Testcase and interfaces, and integrate them in these with the DUT in top module. Phase 2) Develop the Environment class. Phase 3) Develop reset and configuration methods in Environment class. Then using these methods, we will reset the DUT and configure the port address. Phase 4) Develop a packet class based on the stimulus plan. We will also write a small code to test the packet class implementation. Phase 5) Develop a driver class. Packets are generated and sent to dut using driver. Phase 6) Develop receiver class. Receiver collects the packets coming from the output port of the DUT. Phase 7) We will develop scoreboard class which does the comparison of the expected packet with the actual packet received from the DUT. Phase 8) In this phase, we will write test cases and analyze the coverage report.

3 1. Verification This Document describes the Verification Plan for Switch. The Verification Plan is based on System Verilog Hardware Verification Language. The methodology used for Verification is Constraint random coverage driven verification. 2. Feature Extraction This section contains list of all the features to be verified. TC # Test Name Description 1 Configuration Configure all the 4 port address with unique values. 2 Packet DA DA field of packet should be any of the port address. All the 4 port address should be used. 3 Packet payload Length can be from 0 to 255. S packets with all the lengths. 4 Length Length field contains length of the payload. S Packet with correct length field and incorrect length fields. 5 FCS Good FCS: S packet with good FCS. Bad FCS: S packet with corrupted FCS. 3. Stimulus Generation Plan 1. Packet DA: Generate packet DA with the configured address. 2. Payload length: generate payload length ranging from 2 to Correct or Incorrect Length field. 4. Generate good and bad FCS. 4. Coverage Plan 1. Cover all the port address configurations. 2. Cover all the packet lengths. 3. Cover all correct and incorrect length fields. 4. Cover good and bad FCS. 5. Cover all the above combinations. 5. Verification Environment Mailbox Scoreboard Mailbox Generator & Driver D evice U nder T est receiver(s) receiver(s) receiver(s) receiver(s) reset() cfg_dut()

4 Phase-0: Randomizer Class We are going to use a package, classpackages.sv, in SystemVerilog which contains the following: classpackages typedef enum {FALSE, TRUE} bool_t; typedef enum {DISABLE, ENABLE} mode_t; randi mode : mode_t = ENABLE value : integer = 0 cons : int_constraint = {ENABLE, 0, 1} function void rand_modei (mode_t) function bool_t ranomizei (void) mode : mode_t = ENABLE max : integer min : integer int_constraint function void constraint_modei (mode_t) function void set_max_constraint (integer) function void set_mix_constraint (integer) randi: Class Properties: o mode: This value is an enumerated data-type whose value indicates whether or not generation of random values is enabled. o value: This is the current state of the random value contained in this class. It is updated upon every call to randomizei provided the mode is set to ENABLE. o cons: Of type int_constraint. Is used to capture the individual constraints on the integer being generated. Class Methods: o rand_modei: This function is used to ENABLE or DISABLE the generation of random values. o randomize_i: This function is used to generate random values for its property value. If the current mode is set to ENABLE. Otherwise, the value is left as is. If the mode of the object of type int_constraint is set to ENABLE, the function will try to generate a random value that fits within the constraints specified by that object. It will attempt to do so (how it does so is up to you) for some number of times (you decide what is a good limit). If the mode is disabled for the object of type int_constraint, any random value generated will be accepted. If the function successfully generates a random value, TRUE is returned. If it fails, FALSE will be returned.

5 int_constraint: Class Properties: o mode: This property is an enumerated data-type whose value indicates whether or not generation of constrained random values is enabled. o max: This property indicates the maximum value that can be randomly generated, i.e. value <= max, when the mode is set to ENABLE. o min: This property indicates the minimum value that can be randomly generated, i.e. value >= min, when the mode is set to ENABLE. Class Methods: o constraint_modei: This function is used to ENABLE or DISABLE the constraints on randomly generated values. o set_max_constraint: This is a method that changes the value of the property max. o set_min_constraint: This is a method that changes the value of the property min. `define ENABLE `define DISABLE `define TRUE `define FALSE 8'd1 8'd0 8'd1 8'd0 // Randomization Modes `define ENABLE_SET `define ENABLE_SEQ `define DISABLE 8'd2 8'd1 8'd0 class int_constraint; // variables (properties) byte unsigned mode; byte unsigned max; byte unsigned min; // functions (methods) function new( ); constraint_mode_i(`enable); set_max_constraint(8'd255); set_min_constraint(8'd0); function function void constraint_mode_i(input byte unsigned _mode); this.mode = _mode; function function void set_max_constraint(input byte unsigned _max); this.max = _max; function function void set_min_constraint(input byte unsigned _min); this.min = _min; function class : int_constraint class randi; // properties byte unsigned mode; byte unsigned value; int_constraint cons; static byte unsigned empty_set []; byte unsigned set []; // methods function new (byte unsigned _mode = `ENABLE,

6 byte unsigned _value = 8'h00, byte unsigned _set [] = empty_set); this.mode = _mode; this.set = _set; this.value = _value; cons = new ( ); function function void rand_mode_i(input byte unsigned _mode); this.mode = _mode; function function byte unsigned randomize_i( ); if (this.mode == `ENABLE) if (this.cons.mode == `DISABLE) // set random value this.value = {$random}; return `TRUE; else // set random value for(int i = 0; i < 20; i++) this.value = this.cons.min + {$random} % (this.cons.max - this.cons.min + 1); if((this.value >= this.cons.min) && (this.value <= cons.max)) return `TRUE; break; else $display("%m: could not generate constrained random value: \ %d >= %d <= %d", this.cons.min, this.value, \ this.cons.max); return `FALSE; else if (this.mode == `ENABLE_SET) this.value = set [{$random} % set.size]; return `TRUE; else $display("randi mode is disabled. enable to use randomize_i"); return `FALSE; function : randomize_i class : randi Endpackage

7 Phase-1: TestBench This section is broken down into four individual parts: 1. write SystemVerilog Interfaces for input port, output port and memory port. 2. write Top module where test case and DUT instances are done. 3. Instance and connect DUT and TestBench using interfaces 4. The Clock is generated from the top module. 1. Interfaces In the interface.sv file, declare the 3 interfaces in the following way. All the interfaces have a clock as input. All the signals in the interface are of type logic type. All the signals are synchronized to clock except reset in clocking block. Signal directional with respect to TestBench is specified with modport. Interface.sv /////////////////////////////////////////////////////////////////////////////// // Interface declaration for the memory // /////////////////////////////////////////////////////////////////////////////// interface mem_interface (input bit clock); logic [07:00] mem_data; logic [01:00] mem_add; logic mem_en; logic mem_rd_wr; clocking cb@(posedge clock); default input #1 output #1; output mem_data; output mem_add; output mem_en; output mem_rd_wr; clocking property clk) if(mem_en) mem_rd_wr => mem_add[0]== d0 ##1 mem_rd_wr== b0 ##1 mem_rd_wr == b1 && mem_add[1] == d1 ##1 mem_rd_wr == b0 ##1 mem_rd_wr == b1 && mem_add[1] == d2 ##1 mem_rd_wr == b0 ##1 mem_rd_wr == b1 && mem_add[1] == d3 ##1 mem_rd_wr == b0 property assert_mem_int: assert property (mem_int) else $error( memory read error ); modport MEM (clocking cb, input clock); interface /////////////////////////////////////////////////////////////////////////////// // Interface for the input side of switch. Reset signal is also passed hear. // /////////////////////////////////////////////////////////////////////////////// interface input_interface (input bit clock); logic data_status; logic [07:00] data_in; logic reset; clocking cb@(posedge clock); default input #1 output #1; output data_status; output data_in; clocking property clk) disable iff(rst) if (data_status)

8 ready_0 => read_0; ready_1 => read_1; ready_2 => read_2; ready_3 => read_3; property assert_input_int: assert property(input_int) else $error( input read error ); modport IP(clocking cb, output reset, input clock); interface /////////////////////////////////////////////////////////////////////////////// // Interface for the output side of the switch output_interface is for only // // one output port // /////////////////////////////////////////////////////////////////////////////// interface output_interface (input bit clock); logic [7:0] data_out; logic ready; logic read; clocking clock); default input #1 output #1; input data_out; input ready; output read; clocking property clk) disable iff (rst) ready_0 => read_0; ready_1 => read_1; ready_2 => read_2; ready_3 => read_3; property assert_input_int: assert property(output_int) else $error( output read error ); modport OP(clocking cb, input clock); interface 2. Testcase Testcase is a program block which provides an entry point for the test and creates a scope that encapsulates program-wide data. Currently this is an empty Testcase which just s the simulation after 100 time units. Program block contains all the above declared interfaces as arguments. This Testcase has initial and final blocks. program Testcase ( ); Testcase.sv initial $display(" ******************* Start of testcase ****************"); #1000; $finish; final $display(" ******************** End of testcase *****************");

9 program

10 3. Top Module The modules that are included in the source text but are not instantiated are called top modules. This module is the highest scope of modules. Generally this module is named as "top" and referenced as "top module". Module name can be anything. Do the following in the top module: 1. Generate the clock signal. bit Clock; top.sv initial forever #10 Clock = ~Clock; 2. Define the instances of memory interface. top.sv (continued) mem_interface mem_intf (Clock); 3. Define the instances of input interface. top.sv (continued) input_interface input_intf (Clock); 4. There are 4 output ports. Create 4 instances of output_interface. top.sv (continued) output_interface output_intf [4] (Clock); 5. Define the instance of test case top.sv (continued) testcase TC ( ); 6. Define the instance of DUT top.sv (continued) switch DUT (. 7. Connect all the interfaces and DUT. The design we will be using is from LAB_B. The Verilog DUT instance is connected signal by signal. top.sv (continued) switch DUT (.clk (Clock),.reset (input_intf.reset),.data_status (input_intf.data_status),.data (input_intf.data_in),.port0 (output_intf[0].data_out),.port1 (output_intf[1].data_out),.port2 (output_intf[2].data_out),.port3 (output_intf[3].data_out),.ready_0 (output_intf[0].ready),.ready_1 (output_intf[1].ready),.ready_2 (output_intf[2].ready),.ready_3 (output_intf[3].ready),.read_0 (output_intf[0].read),.read_1 (output_intf[1].read),.read_2 (output_intf[2].read),.read_3 (output_intf[3].read),.mem_en (mem_intf.mem_en),.mem_rd_wr (mem_intf.mem_rd_wr),.mem_add (mem_intf.mem_add),.mem_data (mem_intf.mem_data));

11 Memory_interface Memory Ports Output Port - 0 Output_interface Input_interface Input port Switch DUT Output Port - 1 Output Port - 2 Output_interface Output_interface Output Port - 3 Output_interface Clock Generator 4. Top Module Source Code top.sv module top ( ); ///////////////////////////////////////////////////// // Clock Declaration and Generation // ///////////////////////////////////////////////////// bit Clock; initial forever #10 Clock = ~Clock; ///////////////////////////////////////////////////// // Memory interface instance // ///////////////////////////////////////////////////// mem_interface mem_intf(clock); ///////////////////////////////////////////////////// // Input interface instance // ///////////////////////////////////////////////////// input_interface input_intf (Clock); ///////////////////////////////////////////////////// // output interface instance // ///////////////////////////////////////////////////// output_interface output_intf[4](clock); ///////////////////////////////////////////////////// // Program block Testcase instance // ///////////////////////////////////////////////////// Testcase TC ( ); ///////////////////////////////////////////////////// // DUT instance and signal connection // ///////////////////////////////////////////////////// switch DUT (.clk (Clock),.reset (input_intf.reset),.data_status (input_intf.data_status),.data (input_intf.data_in),.port0 (output_intf[0].data_out),.port1 (output_intf[1].data_out),.port2 (output_intf[2].data_out),.port3 (output_intf[3].data_out),.ready_0 (output_intf[0].ready),.ready_1 (output_intf[1].ready),.ready_2 (output_intf[2].ready),

12 module.ready_3 (output_intf[3].ready),.read_0 (output_intf[0].read),.read_1 (output_intf[1].read),.read_2 (output_intf[2].read),.read_3 (output_intf[3].read),.mem_en (mem_intf.mem_en),.mem_rd_wr (mem_intf.mem_rd_wr),.mem_add (mem_intf.mem_add),.mem_data (mem_intf.mem_data)); 5. Log file after simulation: ******************* Start of testcase **************** ******************** End of testcase *****************

13 6. Phase-2: Environment In this phase, we will write Environment class. Defining Environment class constructor. Defining required methods for execution. Currently these methods will not be implemented in this phase. Note: All the above are done in class.sv file. We will write a test case using the above define environment class in testcase.sv file. 1. Environment Class: The class is a base class used to implement verification environments. Testcase contains the instance of the environment class and has access to all the public declaration of environment class. In environment class, we will formalize the simulation steps using virtual methods. The methods are used to control the execution of the simulation. Following are the methods which are going to be defined in environment class. 1. new( ): The constructor method. It will be empty for the moment. 2. build(): In this method, all the objects like driver, monitor etc are constructed. Currently this method is empty as we did not develop any other component. 3. reset(): in this method we will reset the DUT. 4. cfg_dut(): In this method, we will configure the DUT output port address. 5. start(): in this method, we will call the methods which are declared in the other components like driver and monitor. 6. wait_for_(): this method is used to wait for the of the simulation. Waits until all the required operations in other components are done. 7. report(): This method is used to print the TestPass and TestFail status of the simulation, based on the error count.. 8. run(): This method calls all the above declared methods in a sequence order. The testcase calls this method, to start the simulation. We are not implementing build(), reset(), cfg_dut(), start() and report() methods in this phase.

14 1. New( ) Any initialization that needs to occur at the ning of the simulation will occur here. At this point, there is no initialization to speak of. So, we will just leave this blank with a print to the console to indicate that this task has been activated. class.sv (Environment) function new ( ); $display(" %0d : Environment : created env object", $time); function : new 2. Run ( ) The run ( ) method is called from the testcase to start the simulation. run ( ) method calls all the methods which are defined in the Environment class. class.sv (Environment) task run( ); $display(" %0d : Environment : start of run() method", $time); build ( ); reset ( ); cfg_dut ( ); start ( ); wait_for_ ( ); report ( ); $display(" %0d : Environment : of run() method", $time); task : run Testcase.sv class.sv (Environment) build ( ) program testcase (.... Environment env; initial.... env = new ( ); env.run ( );.... reset ( ) cfg_dut ( ) start ( ) wait_for_ ( ) report ( )

15 2. Environment Class Source Code: class.sv (Environment) class Environment; function new ( ); $display(" %0d : Environment : created env object",$time); function : new function void build ( ); $display(" %0d : Environment : start of build() method", $time); $display(" %0d : Environment : of build() method", $time); function : build task reset ( ); $display(" %0d : Environment : start of reset() method", $time); $display(" %0d : Environment : of reset() method", $time); task : reset task cfg_dut ( ); $display(" %0d : Environment : start of cfg_dut() method",$time); $display(" %0d : Environment : of cfg_dut() method",$time); task : cfg_dut task start ( ); $display(" %0d : Environment : start of start() method", $time); $display(" %0d : Environment : of start() method", $time); task : start task wait_for_ ( ); $display(" %0d : Environment : start of wait_for_() method", $time); $display(" %0d : Environment : of wait_for_() method", $time); task : wait_for_ task run ( ); $display(" %0d : Environment : start of run() method", $time); build ( ); reset ( ); cfg_dut ( ); start ( ); wait_for_ ( ); report ( ); $display(" %0d : Environment : of run() method", $time); task : run task report ( ); task : report class We will define global variables and definitions to constrain our design and track our validation results. We define all the port address as macros and a variable error as integer to keep track the number of errors occurred during the simulation. class.sv

16 `define P0 8'h00 `define P1 8'h11 `define P2 8'h22 `define P3 8'h33 `define TRUE 1 b1 `define FALSE 1 b0 int error = 0; int num_of_pkts = 10; Now we will update the test case. Take an instance of the Environment class and call the run method of the Environment class. program Testcase ( ); Testcase.sv Environment env; initial $display(" ******************* Start of testcase ****************"); env = new ( ); env.run ( ); #1000; final $display(" ******************** End of testcase *****************"); program 3. Log file after simulation ******************* Start of testcase **************** 0 : Environment : created env object 0 : Environment : start of run() method 0 : Environment : start of build() method 0 : Environment : of build() method 0 : Environment : start of reset() method 0 : Environment : of reset() method 0 : Environment : start of cfg_dut() method 0 : Environment : of cfg_dut() method 0 : Environment : start of start() method 0 : Environment : of start() method 0 : Environment : start of wait_for_() method 0 : Environment : of wait_for_() method 0 : Environment : of run() method ******************** End of testcase ***************** 7. Phase-3 Reset In this phase we will reset and configure the DUT. The Environment class has reset() method which contains the logic to reset the DUT and cfg_dut() method which contains the logic to configure the DUT port address.

17 D evice U nder T est reset() cfg_dut() NOTE: Clocking block signals can be driven only using a non-blocking assignment. 1. Define the reset() method. 1. Set all the DUT input signals to a known state. class.sv (Environment) $root.mem_intf.cb.mem_data <= 0; $root.mem_intf.cb.mem_add <= 0; $root.mem_intf.cb.mem_en <= 0; $root.mem_intf.cb.mem_rd_wr <= 0; $root.input_intf.cb.data_in <= 0; $root.input_intf.cb.data_status <= 0; $root.output_intf[0].cb.read <= 0; $root.output_intf[1].cb.read <= 0; $root.output_intf[2].cb.read <= 0; $root.output_intf[3].cb.read <= 0; 2. Reset the DUT. class.sv (Environment) // Reset the DUT $root.input_intf.reset <= 1; repeat $root.input_intf.clock; $root.input_intf.reset <= 0; 3. Updated the cfg_dut method. class.sv (Environment) task cfg_dut ( ); $display(" %0d : Environment : start of cfg_dut() method", $time); $root.mem_intf.cb.mem_en <= $root.mem_intf.clock); $root.mem_intf.cb.mem_rd_wr <= $root.mem_intf.clock); $root.mem_intf.cb.mem_add <= 8'h0; $root.mem_intf.cb.mem_data <= `P0; $display(" %0d : Environment : Port 0 Address %h ", $root.mem_intf.clock); $root.mem_intf.cb.mem_add <= 8'h1; $root.mem_intf.cb.mem_data <= `P1; $display(" %0d : Environment : Port 1 Address %h ", $time, $root.mem_intf.clock); $root.mem_intf.cb.mem_add <= 8'h2; $root.mem_intf.cb.mem_data <= `P2; $display(" %0d : Environment : Port 2 Address %h ", $root.mem_intf.clock);

18 $root.mem_intf.cb.mem_add <= 8'h3; $root.mem_intf.cb.mem_data <= `P3; $display(" %0d : Environment : Port 3 Address %h ", $root.mem_intf.clock); $root.mem_intf.cb.mem_en <= 0; $root.mem_intf.cb.mem_rd_wr <= 0; $root.mem_intf.cb.mem_add <= 0; $root.mem_intf.cb.mem_data <= 0; $display(" %0d : Environment : of cfg_dut() method", $time); task : cfg_dut 4. In wait_for_ method, wait for some clock cycles. class.sv (Environment) task wait_for_ ( ); $display(" %0d : Environment : start of wait_for_() method", $time); $display(" %0d : Environment : of wait_for_() method", $time); task : wait_for_ 2. Log file after simulation ******************* Start of testcase **************** 0 : Environment : created env object 0 : Environment : start of run() method 0 : Environment : start of build() method 0 : Environment : of build() method 0 : Environment : start of reset() method 40 : Environment : of reset() method 40 : Environment : start of cfg_dut() method 70 : Environment : Port 0 Address : Environment : Port 1 Address : Environment : Port 2 Address : Environment : Port 3 Address : Environment : of cfg_dut() method 150 : Environment : start of start() method 150 : Environment : of start() method 150 : Environment : start of wait_for_() method : Environment : of wait_for_() method : Environment : of run() method ******************** End of testcase *****************

19 8. Phase-4 Packet In this Phase, We will define a packet and then test it whether it is generating as expected. Packet is modeled using class. Packet class should be able to generate all possible packet types randomly. Packet class should also implement required methods like packing ( ), unpacking ( ), compare ( ) and display ( ) methods. We will write the packet class in class.sv file. Packet class variables and constraints have been derived from stimulus generation plan. Revisit Stimulus Generation Plan 1) Packet DA: Generate packet DA with the configured address. 2) Payload length: generate payload length ranging from 1 to ) Correct or Incorrect Length field. 4) Generate good and bad FCS. Before we get into defining the Packet class, we will need to make some minor modifications to our randomization class generated in a previous assignment. class int_constraint; // variables (properties) byte unsigned mode; byte unsigned max; byte unsigned min; class.sv (int_constraint, randi) // functions (methods) function new( ); constraint_mode_i(`enable); set_max_constraint(8'd255); set_min_constraint(8'd0); function function void constraint_mode_i(input byte unsigned _mode); this.mode = _mode; function function void set_max_constraint(input byte unsigned _max); this.max = _max; function function void set_min_constraint(input byte unsigned _min); this.min = _min; function class : int_constraint class randi; // properties byte unsigned mode; byte unsigned value; int_constraint cons; // methods function new ( ); rand_mode_i(`enable); cons = new ( ); function

20 function void rand_mode_i(input byte unsigned _mode); this.mode = _mode; function function byte unsigned randomize_i( ); if (this.mode == `ENABLE) if (this.cons.mode == `DISABLE) // set random value this.value = {$random}; return `TRUE; else // set random value for(int i = 0; i < 20; i++) this.value = this.cons.min + {$random} % (this.cons.max - this.cons.min + 1); if((this.value >= this.cons.min) & (this.value <= cons.max)) return `TRUE; break; else $display("%m: could not generate constrained random value: %d >= %d <= %d", this.cons.min, this.value, this.cons.max); return `FALSE; else $display("randi mode is disabled. enable to use randomize_i"); return `FALSE; function : randomize_i class : randi 1) Declare FCS constants as global definitions. Name the definitions as GOOD_FCS and BAD_FCS. `define BAD_FCS 8'd0 `define GOOD_FCS 8'd1 class.sv (Packet) 2) Declare the length type definitions data type. Name the definitions as GOOD_LENGTH and BAD_LENGTH. `define BAD_LENGTH 8'd0 `define GOOD_LENGTH 8'd1 class.sv (Packet) 3) Declare the length type and fcs type variables as randi. class.sv (Packet) randi fcs_kind; // Randomize the validity of the F rame S equence C heck field randi length_kind; // Randomize the length of the data field 4) Declare the packet field as rand. All fields are bit data types. All fields are 8 bit packet array. Declare the payload as dynamic array. class.sv (Packet) randi fcs_kind; // Used as part of constraining packet type randi length_kind; randi length; randi da; randi sa; randi data[]; //Payload using Maximum array,size is generated on the fly randi fcs;

21 5) Constrain the DA field to be any one of the configured address. class.sv (Packet) set = new[4]; set[0] = 8'h00; set[1] = 8'h11; set[2] = 8'h22; set[3] = 8'h33; this.da = new(`enable_set, 8'h00, set); this.da.cons.set_min_constraint(8'd0); this.da.cons.set_max_constraint(8'd255); this.da.cons.constraint_mode_i(`disable); status = status & this.da.randomize_i( ); 6) Constrain the payload dynamic array size to a value that is between 1 and to 255. class.sv (Packet) this.length = new( ); this.length.cons.set_min_constraint(8'd1); this.length.cons.set_max_constraint(8'd255); this.length.cons.constraint_mode_i(`enable); status = status & this.length.randomize_i( ); this.data = new[this.length.value]; for(i = 0; i < this.length.value ; i++) this.data[i] = new( ); this.data[i].cons.set_min_constraint(8'd0); this.data[i].cons.set_max_constraint(8'd255); this.data[i].cons.constraint_mode_i(`enable); status = status & this.data[i].randomize_i( ); 7) Constrain the payload length to the length field based on the length type. class.sv (Packet) this.length_kind = new( ); this.length_kind.cons.set_min_constraint(`bad_length); this.length_kind.cons.set_max_constraint(`good_length); this.length_kind.cons.constraint_mode_i(`enable); status = status & this.length_kind.randomize_i( ); 8) Constrain the FCS field initial value based on the fcs kind field. class.sv (Packet) this.fcs_kind = new( ); this.fcs_kind.cons.set_min_constraint(`bad_fcs); this.fcs_kind.cons.set_max_constraint(`good_fcs); this.fcs_kind.cons.constraint_mode_i(`enable); status = status & fcs_kind.randomize_i( ); 9) Define the FCS method. class.sv (Packet) /* Method to calculate the Frame Sequence Check */ function byte cal_fcs; byte result; result = 0; result = result ^ this.da.value; result = result ^ this.sa.value; result = result ^ this.length.value; for (int i = 0; i < this.length.value; i++) result = result ^ this.data[i].value; // If we are generating a bas Frame Sequence Check Field, we will // XOR a value of 1 into this field to create an invalid result. // Otherwise, we will XOR a value of 0 into this field which will

22 // result in a valid Frame Sequence Check. result = result ^ this.fcs.value; return result; function : cal_fcs 10) Define display methods: Display method displays the current value of the packet fields to standard output. class.sv (Packet) /* method to print the packet fields */ function void display ( ); $display(" PACKET KIND "); $display(" fcs_kind : %h ", fcs_kind.value); $display(" length_kind : %h ", length_kind.value); $display(" PACKET "); $display(" 0 : %h ", this.da.value); $display(" 1 : %h ", this.sa.value); $display(" 2 : %h ", this.length.value); foreach (data[i]) $write("%3d : %0h ",i + 3, this.data[i].value); $display("\n %2d : %h ",this.length.value + 3, cal_fcs); $display(" "); function : display

23 11) Define pack method: << Packet >> randi da; randi sa; randi len; randi data[ ]; randi fcs; DA SA Length Data 0 Data 1... FCS Packing is commonly used to convert the high level data to low level data that can be applied to DUT. In packet class various fields are generated. Required fields are concatenated to form a stream of bytes which can be driven conveniently to DUT interface by the driver. class.sv (Packet) /* method to pack the packet into bytes */ function int unsigned byte_pack (ref logic unsigned [7:0] bytes [ ]); bytes = new[this.data.size + 4]; bytes[0] = this.da.value; bytes[1] = this.sa.value; bytes[2] = this.length.value; foreach (data[i]) bytes[3 + i] = this.data[i].value; bytes[this.data.size + 3] = cal_fcs; byte_pack = bytes.size; function : byte_pack 12) Define unpack method: << Packet >> randi da; randi sa; randi len; randi data[255]; randi fcs; DA SA Length Data 0 Data 1... FCS

24 The unpack() method does exactly the opposite of pack method. Unpacking is commonly used to convert a data stream coming from DUT to high level data packet object. class.sv (Packet) /* method to unpack the bytes in to packet */ function void byte_unpack (ref logic [7:0] bytes []); this.da.value = bytes[0]; this.sa.value = bytes[1]; this.length.value = bytes[2]; this.fcs.value = bytes[bytes.size - 1]; this.data = new[bytes.size - 4]; foreach(this.data[i]) this.data[i] = new ( ); this.data[i].value = bytes[i + 3]; this.fcs.value = 0; if(bytes[bytes.size - 1]!= cal_fcs) this.fcs.value = 1; function : byte_unpack 14) Define a compare method. The compare ( ) method compares the current value of the object instance with the current value of the specified object instance. If the value is different, FALSE is returned. class.sv (Packet) /* method to compare the packets */ function bit compare (Packet pkt); compare = 1; if(pkt == null) $display(" ** ERROR ** : pkt : received a null object "); compare = 0; else if(pkt.da.value!== this.da.value) $display(" ** ERROR **: pkt : Da field did not match"); compare = 0; if(pkt.sa.value!== this.sa.value) $display(" ** ERROR **: pkt : Sa field did not match"); compare = 0; if(pkt.length.value!== this.length.value) $display(" ** ERROR **: pkt : Length field did not match"); compare = 0; foreach(this.data[i]) if(pkt.data[i].value!== this.data[i].value) $display(" ** ERROR **: pkt : Data[%0d] field did not match",i); compare = 0; if(pkt.fcs.value!== this.fcs.value) $display(" ** ERROR **: pkt : fcs field did not match %h %h", pkt.fcs.value,this.fcs.value); compare = 0; function : compare 3. Complete Packet Class Source Code

25 class.sv (Packet) class Packet; randi fcs_kind; // Used as part of constraining packet type randi length_kind; randi length; randi da; randi sa; randi data [ ]; // Payload using Maximum array, size is generated on the fly randi fcs; function new ( ); bit status = `TRUE; integer i; this.fcs_kind = new ( ); this.fcs_kind.cons.set_min_constraint (`BAD_FCS); this.fcs_kind.cons.set_max_constraint (`GOOD_FCS); this.fcs_kind.cons.constraint_mode_i (`ENABLE); status = status & this.fcs_kind.randomize_i ( ); this.length_kind = new ( ); this.length_kind.cons.set_min_constraint(`bad_length); this.length_kind.cons.set_max_constraint(`good_length); this.length_kind.cons.constraint_mode_i(`enable); status = status & this.length_kind.randomize_i ( ); this.length = new ( ); this.length.cons.set_min_constraint (8'd1); this.length.cons.set_max_constraint (8'd255); this.length.cons.constraint_mode_i (`ENABLE); status = status & this.length.randomize_i( ); this.da = new ( ); this.da.cons.set_min_constraint (8'd0); this.da.cons.set_max_constraint (8'd255); this.da.cons.constraint_mode_i (`ENABLE); status = status & this.da.randomize_i ( ); this.sa = new ( ); this.sa.cons.set_min_constraint(8'd0); this.sa.cons.set_max_constraint(8'd255); this.sa.cons.constraint_mode_i(`enable); status = status & this.sa.randomize_i ( ); this.data = new[this.length.value]; for(i = 0; i < this.length.value; i++) this.data[i] = new( ); this.data[i].cons.set_min_constraint(8'd0); this.data[i].cons.set_max_constraint (8'd255); this.data[i].cons.constraint_mode_i (`ENABLE); status = status & this.data[i].randomize_i ( ); fcs = new( ); fcs.cons.set_min_constraint(8'd0); fcs.cons.set_max_constraint(8'd255); fcs.cons.constraint_mode_i(`enable); function : new function bit randomize_o ( ); bit status = `TRUE; integer i = 0; status = status & this.fcs_kind.randomize_i ( ) ; status = status & this.length_kind.randomize_i ( ); status = status & this.length.randomize_i ( ); status = status & this.da.randomize_i ( ); status = status & this.sa.randomize_i ( );

26 this.data = new[this.length.value - 4]; foreach (this.data[i]) this.data[i] = new ( ); status = status & this.data[i].randomize_i( ); function : randomize_o /* method to calculate the fcs */ function byte cal_fcs ( ); byte unsigned result; result = 0; result = result ^ this.da.value; result = result ^ this.sa.value; result = result ^ this.length.value; for (int i = 0; i < data.size; i++) result = result ^ this.data[i].value; // If we are generating a bas Frame Sequence Check Field, we will // XOR a value of 1 into this field to create an invalid result. // Otherwise, we will XOR a value of 0 into this field which will // result in a valid Frame Sequence Check. result = result ^ this.fcs.value; return result; function : cal_fcs /* method to print the packet fields */ function void display ( ); $display(" PACKET KIND "); $display(" fcs_kind : %h ", fcs_kind.value); $display(" length_kind : %h ", length_kind.value); $display(" PACKET "); $display(" 0 : %h ", this.da.value); $display(" 1 : %h ", this.sa.value); $display(" 2 : %h ", this.length.value); foreach(data[i]) $write("%3d : %0h ",i + 3, this.data[i].value); $display("\n %2d : %h ",this.length.value + 3, cal_fcs); $display(" "); function : display /* method to pack the packet into bytes */ function int unsigned byte_pack(ref logic unsigned [7:0] bytes [ ]); bytes = new [this.data.size + 4]; bytes[0] = this.da.value; bytes[1] = this.sa.value; bytes[2] = this.length.value; foreach (data[i]) bytes[3 + i] = this.data[i].value; bytes[this.data.size + 3] = cal_fcs; byte_pack = bytes.size; function : byte_pack /* method to unpack the bytes in to packet */ function void byte_unpack (ref logic [7:0] bytes[]); this.da.value = bytes[0]; this.sa.value = bytes[1]; this.length.value = bytes[2]; this.fcs.value = bytes[bytes.size - 1]; this.data = new[bytes.size - 4]; foreach(this.data[i]) this.data[i] = new ( ); this.data[i].value = bytes[i + 3]; this.fcs.value = 0;

27 if (bytes[bytes.size - 1]!= cal_fcs) this.fcs.value = 1; function : byte_unpack /* method to compare the packets */ function bit compare (Packet pkt); compare = 1; if(pkt == null) $display(" ** ERROR ** : pkt : received a null object "); compare = 0; else if(pkt.da.value!== this.da.value) $display(" ** ERROR **: pkt : Da field did not match"); compare = 0; if(pkt.sa.value!== this.sa.value) $display(" ** ERROR **: pkt : Sa field did not match"); compare = 0; if(pkt.length.value!== this.length.value) $display(" ** ERROR **: pkt : Length field did not match"); compare = 0; foreach(this.data[i]) if(pkt.data[i].value!== this.data[i].value) $display(" ** ERROR **: pkt : Data[%0d] field did not match", i); compare = 0; if(pkt.fcs.value!== this.fcs.value) $display(" ** ERROR **: pkt : fcs field did not match %h %h", pkt.fcs.value,this.fcs.value); compare = 0; function : compare class : Packet Now we will write a small program to test our packet implementation. This program block is not used to verify the DUT. It is used to instantiate our test components. Write a simple program block and create two instances of the packet class. Randomize the packet and call the display method to analyze the generation. Then pack the packet in to bytes and then unpack bytes and then call compare method to check all the methods. 4. Program Block Source Code program Testcase ( ); Testcase.sv Environment env; Packet pkt1; Packet pkt2; logic [7:0] bytes [ ]; initial $display(" ******************* Start of testcase ****************"); env = new ( ); env.run ( );

28 #1000; $finish; initial pkt1 = new ( ); pkt2 = new ( ); repeat(1) if(pkt1.randomize_o) $display (" Randomization Successful."); pkt1.display ( ); void'(pkt1.byte_pack(bytes)); pkt2 = new ( ); pkt2.byte_unpack(bytes); // Copy the bytes over from the Packet 1 if(pkt2.compare(pkt1)) $display(" Packing, Unpacking and compare worked"); else $display(" *** Something went wrong in Packing or Unpacking or compare ***"); else $display(" *** Randomization Failed ***"); final $display(" ******************** End of testcase *****************"); program

29 Randomization Successful. 5. Log file after simulation: PACKET KIND fcs_kind : BAD_FCS length_kind : GOOD_LENGTH PACKET : 00 1 : f7 2 : be 3 : a6 4 : 1b 5 : b5 6 : fa 7 : 4e 8 : 15 9 : 7d 10 : : : : c4 14 : aa 15 : c4 16 : cf 17 : 4f 18 : f4 19 : : : f1 22 : 2c 23 : ce 24 : 5 25 : cb 26 : 8c 27 : 1a 28 : : : 5f 31 : 7a 32 : a2 33 : f0 34 : c9 35 : dc 36 : : 3f 38 : : f4 40 : df 41 : c5 42 : d7 43 : : : 1 46 : : : d6 49 : f4 50 : d9 51 : 4f 52 : 0 53 : dd 54 : d2 55 : a6 56 : : : : f2 60 : a2 61 : a1 62 : fd 63 : ea 64 : c1 65 : : c7 67 : : e1 69 : : c6 71 : cf 72 : cd 73 : : : : b8 77 : 1c 78 : df 79 : e6 80 : 1a 81 : ce 82 : 8c 83 : ec 84 : b6 85 : bb 86 : a5 87 : : cb 89 : : e1 91 : : : e 94 : ee 95 : : : cd 98 : : : 7b 101 : e6 102 : : ad 104 : : ee 106 : 9c 107 : : a7 109 : b8 110 : : f 112 : ca 113 : ec 114 : b5 115 : 8d 116 : d8 117 : 2f 118 : 6f 119 : ea 120 : 4c 121 : : : f2 124 : 4e 125 : : d8 127 : : f1 129 : d 130 : d6 131 : d5 132 : : c 134 : de 135 : a9 136 : 1d 137 : a0 138 : ae 139 : : f5 141 : : d8 143 : 7a 144 : 4c 145 : d4 146 : b8 147 : : b7 149 : c3 150 : c9 151 : 7b 152 : a3 153 : : 2b 155 : b4 156 : : : : : df 161 : : c9 163 : : : 2b 166 : f0 167 : ba 168 : 4a 169 : a9 170 : 7f 171 : : 1e 173 : : a8 175 : : : 3d 178 : : e6 180 : : : c6 183 : : d6 185 : 1b 186 : 5f 187 : : a0 189 : a3 190 : : : : Packing, Unpacking and compare worked Randomization Successful

30 9. Phase-5 Driver In phase 5 we will write a driver and then instantiate the driver in environment and s packet in to D evice U nder T est. Driver class is defined in class.sv file. Driver is class which generates the packets and then drives it to the D evice U nder T est input interface and pushes the packet in to mailbox. Mailbox Drive the packet Generate the Packet Pack the Packet 1. Developing the Driver Class 1. Declare a packet. Packet gpkt; class.sv (Driver) 2. Define a mailbox "drvr2sb" Define a parameterized mailbox "drvr2sb" which is used to s the packets to the score board. We must use a Parameterized mailbox due to our license limitations. mailbox #(Packet) drvr2sb; class.sv (Driver) 3. Define new constructor with arguments Define new constructor with a mail box for arguments, which is used to s packets from the driver to scoreboard. class.sv (Driver) // constructor method // function new (mailbox #(Packet) _drvr2sb); if(_drvr2sb == null) $display(" **ERROR**: drvr2sb is null"); $finish; else this.drvr2sb = _drvr2sb; // Point our mailbox handle to the global mailbox handle

31 4. Construct the packet in the driver constructor. class.sv (Driver) gpkt = new ( ); // Initialize the local Packet Object 5. Define the start method. In start method, do the following: Repeat the following steps for num_of_pkts times. repeat ($root.num_of_pkts) class.sv (Driver) Randomize the packet and check if the randomization is successful. class.sv (Driver) if (pkt.randomize_o( )) $display (" %0d : Driver : Randomization Successes full.", $time); else $display (" %0d Driver : ** Randomization failed. **", $time); Display the packet content. pkt.display( ); class.sv (Driver) Then pack the packet in to bytes. length = pkt.byte_pack(bytes); class.sv (Driver) Then s the packet byte in to the switch by asserting data_status of the input interface signal and driving the data bytes on to the data_in signal. class.sv (Driver) // assert the data_status signal and s the packed bytes // foreach $root.input_intf.clock); $root.input_intf.cb.data_status <= 1; $root.input_intf.cb.data_in <= bytes[i]; After driving all the data bytes, de-assert data_status signal of the input interface. // deassert the data_status $root.input_intf.clock); $root.input_intf.cb.data_status <= 0; $root.input_intf.cb.data_in <= 0; class.sv (Driver) S the packet in to mail "drvr2sb" box for scoreboard. class.sv (Driver) // Push the packet in to mailbox for scoreboard

32 drvr2sb.put(pkt); If randomization fails, increment the error counter which is defined in Globals.sv file $root.error++; class.sv (Driver) 2. Driver Class Source Code: class Driver; mailbox #(Packet) drvr2sb; Packet gpkt; class.sv (Driver) // constructor method function new(mailbox #(Packet) _drvr2sb); if(_drvr2sb == null) $display(" **ERROR**: drvr2sb is null"); $finish; else this.drvr2sb = _drvr2sb; // Point our mailbox handle to the global mailbox handle gpkt = new(); // Initialize the local Packet Object function : new // method to s the packet to DUT task start(); Packet pkt; int length; logic [7:0] bytes [ ]; repeat($root.num_of_pkts) $root.input_intf.clock); pkt = new gpkt; // Randomize the packet if (pkt.randomize_o ( )) $display (" %0d : Driver : Randomization Successes full. ", $time); // display the packet content pkt.display ( ); // Pack the packet in tp stream of bytes length = pkt.byte_pack(bytes); // assert the data_status signal and s the packed bytes foreach $root.input_intf.clock); $root.input_intf.cb.data_status <= 1; $root.input_intf.cb.data_in <= bytes[i]; // deassert the data_status $root.input_intf.clock); $root.input_intf.cb.data_status <= 0; $root.input_intf.cb.data_in <= 0; // Push the packet in to mailbox for scoreboard drvr2sb.put(pkt); $display(" %0d : Driver : Finished Driving the packet with length %0d", $time, length); else $display (" %0d Driver : ** Randomization failed. **", $time); // Increment the error count in randomization fails $root.error++; task : start

33 class : Driver 3. Developing the Environment Class Now we will take the instance of the driver in the environment class. Mailbox Drive the packet D evice U nder T est Generate the Packet Pack the Packet reset() cfg_dut() 1) Declare a mailbox "drvr2sb" which will be used to connect the scoreboard and driver. mailbox #(Packet) drvr2sb; class.sv (Environment) 2) Declare a driver object "drvr". Driver drvr; class.sv (Environment) 3) In build method, construct the mail box. drvr2sb = new (); class.sv (Environment) 4) In build method, construct the driver object. Pass the "drvr2sb" mail box. Drvr = new(drvr2sb); class.sv (Environment) 5) To start sing the packets to the DUT, call the start method of "drvr" in the start method of Environment class. drvr.start ( ); class.sv (Environment) 3. Environment Class Source Code: class.sv (Environment)

34 class Environment; `define P0 8'h00 `define P1 8'h11 `define P2 8'h22 `define P3 8'h33 Driver drvr; mailbox #(Packet) drvr2sb; function new ( ); $display(" %0d : Environment : created env object", $time); function : new function void build ( ); $display(" %0d : Environment : start of build() method", $time); drvr2sb = new; drvr = new (drvr2sb); $display(" %0d : Environment : of build() method", $time); function : build task reset ( ); $display(" %0d : Environment : start of reset() method", $time); // Drive all DUT inputs to a known state $root.mem_intf.cb.mem_data <= 0; $root.mem_intf.cb.mem_add <= 0; $root.mem_intf.cb.mem_en <= 0; $root.mem_intf.cb.mem_rd_wr <= 0; $root.input_intf.cb.data_in <= 0; $root.input_intf.cb.data_status <= 0; $root.output_intf[0].cb.read <= 0; $root.output_intf[1].cb.read <= 0; $root.output_intf[2].cb.read <= 0; $root.output_intf[3].cb.read <= 0; // Reset the DUT $root.input_intf.reset <= 1; repeat $root.input_intf.clock; $root.input_intf.reset <= 0; $display(" %0d : Environment : of reset() method", $time); task : reset task cfg_dut ( ); $display(" %0d : Environment : start of cfg_dut() method", $time); $root.mem_intf.cb.mem_en <= $root.mem_intf.clock); $root.mem_intf.cb.mem_rd_wr <= $root.mem_intf.clock); $root.mem_intf.cb.mem_add <= 8'h0; $root.mem_intf.cb.mem_data <= `P0; $display(" %0d : Environment : Port 0 Address %h ", $time, $root.mem_intf.clock); $root.mem_intf.cb.mem_add <= 8'h1; $root.mem_intf.cb.mem_data <= `P1; $display(" %0d : Environment : Port 1 Address %h ", $time, $root.mem_intf.clock); $root.mem_intf.cb.mem_add <= 8'h2; $root.mem_intf.cb.mem_data <= `P2; $display(" %0d : Environment : Port 2 Address %h ", $root.mem_intf.clock);

35 $root.mem_intf.cb.mem_add <= 8'h3; $root.mem_intf.cb.mem_data <= `P3; $display(" %0d : Environment : Port 3 Address %h ", $root.mem_intf.clock); $root.mem_intf.cb.mem_en <= 0; $root.mem_intf.cb.mem_rd_wr <= 0; $root.mem_intf.cb.mem_add <= 0; $root.mem_intf.cb.mem_data <= 0; $display(" %0d : Environment : of cfg_dut() method", $time); task : cfg_dut task start ( ); $display(" %0d : Environment : start of start() method", $time); drvr.start ( ); $display(" %0d : Environment : of start() method", $time); task : start task wait_for_ (); $display(" %0d : Environment : start of wait_for_() method", $time); $display(" %0d : Environment : of wait_for_() method", $time); task : wait_for_ task run ( ); $display(" %0d : Environment : start of run() method", $time); build ( ); reset ( ); cfg_dut ( ); start ( ); wait_for_ ( ); report ( ); $display(" %0d : Environment : of run() method", $time); task : run task report ( ); task : report class : Environment

36 4. Log file from Simulation. ******************* Start of testcase **************** 0 : Environment : created env object 0 : Environment : start of run() method 0 : Environment : start of build() method 0 : Environment : of build() method 0 : Environment : start of reset() method 40 : Environment : of reset() method 40 : Environment : start of cfg_dut() method 70 : Environment : Port 0 Address : Environment : Port 1 Address : Environment : Port 2 Address : Environment : Port 3 Address : Environment : of cfg_dut() method 150 : Environment : start of start() method 210 : Driver : Randomization Successes full PACKET KIND fcs_kind : BAD_FCS length_kind : GOOD_LENGTH PACKET : 22 1 : 11 2 : 2d 3 : 63 4 : 2a 5 : 2e 6 : c 7 : a 8 : 14 9 : c1 10 : : 8f 12 : : 5d 14 : da 15 : : 2c 17 : ac 18 : 1c 19 : : 3c 21 : 7e 22 : f3 23 : ed 24 : : d1 26 : 3e 27 : : aa 29 : : : : aa 33 : cf 34 : : : 9a 37 : 1d 38 : : 8 40 : : : : b 44 : : : fc 47 : 8f 48 : cd : Driver : Finished Driving the packet with length : Driver : Randomization Successes full

37 10. Phase-6 RECEIVER In this phase, we will write a receiver and use the receiver in environment class to collect the packets coming from the switch output_interface. Receiver collects the data bytes from the interface signal. And then packs the bytes in to packet and pushes it into mailbox. Receiver class is written in reveicer.sv file. Put the packet in the mailbox Collect the bytes Unpack the bytes 1. Steps to create the receiver 1. Declare a mailbox. Declare a mailbox. "rcvr2sb" which is used to s the packets to the score board mailbox #(Packet) rcvr2sb; class.sv (Receiver) 2. Define new constructor. Define a new constructor with arguments, virtual input interface and a mail box which is used to s packets from the receiver to scoreboard. class.sv (Receiver) function new (mailbox rcvr2sb); this.output_intf = output_intf_new; if (rcvr2sb == null) $display(" **ERROR**: rcvr2sb is null"); $finish; else this.rcvr2sb = rcvr2sb; function : new

List of Code Samples. xiii

List of Code Samples. xiii xiii List of Code Samples Sample 1-1 Driving the APB pins 16 Sample 1-2 A task to drive the APB pins 17 Sample 1-3 Low-level Verilog test 17 Sample 1-4 Basic transactor code 21 Sample 2-1 Using the logic

More information

CIS-331 Exam 2 Fall 2015 Total of 105 Points Version 1

CIS-331 Exam 2 Fall 2015 Total of 105 Points Version 1 Version 1 1. (20 Points) Given the class A network address 117.0.0.0 will be divided into multiple subnets. a. (5 Points) How many bits will be necessary to address 4,000 subnets? b. (5 Points) What is

More information

4. Specifications and Additional Information

4. Specifications and Additional Information 4. Specifications and Additional Information AGX52004-1.0 8B/10B Code This section provides information about the data and control codes for Arria GX devices. Code Notation The 8B/10B data and control

More information

CIS-331 Fall 2014 Exam 1 Name: Total of 109 Points Version 1

CIS-331 Fall 2014 Exam 1 Name: Total of 109 Points Version 1 Version 1 1. (24 Points) Show the routing tables for routers A, B, C, and D. Make sure you account for traffic to the Internet. Router A Router B Router C Router D Network Next Hop Next Hop Next Hop Next

More information

CIS-331 Exam 2 Fall 2014 Total of 105 Points. Version 1

CIS-331 Exam 2 Fall 2014 Total of 105 Points. Version 1 Version 1 1. (20 Points) Given the class A network address 119.0.0.0 will be divided into a maximum of 15,900 subnets. a. (5 Points) How many bits will be necessary to address the 15,900 subnets? b. (5

More information

SystemVerilog Essentials Simulation & Synthesis

SystemVerilog Essentials Simulation & Synthesis SystemVerilog Essentials Simulation & Synthesis Course Description This course provides all necessary theoretical and practical know-how to design programmable logic devices using SystemVerilog standard

More information

CIS-331 Spring 2016 Exam 1 Name: Total of 109 Points Version 1

CIS-331 Spring 2016 Exam 1 Name: Total of 109 Points Version 1 Version 1 Instructions Write your name on the exam paper. Write your name and version number on the top of the yellow paper. Answer Question 1 on the exam paper. Answer Questions 2-4 on the yellow paper.

More information

CIS-331 Fall 2013 Exam 1 Name: Total of 120 Points Version 1

CIS-331 Fall 2013 Exam 1 Name: Total of 120 Points Version 1 Version 1 1. (24 Points) Show the routing tables for routers A, B, C, and D. Make sure you account for traffic to the Internet. NOTE: Router E should only be used for Internet traffic. Router A Router

More information

CIS-331 Final Exam Spring 2018 Total of 120 Points. Version 1

CIS-331 Final Exam Spring 2018 Total of 120 Points. Version 1 Version 1 Instructions 1. Write your name and version number on the top of the yellow paper and the routing tables sheet. 2. Answer Question 2 on the routing tables sheet. 3. Answer Questions 1, 3, 4,

More information

The cache is 4-way set associative, with 4-byte blocks, and 16 total lines

The cache is 4-way set associative, with 4-byte blocks, and 16 total lines Sample Problem 1 Assume the following memory setup: Virtual addresses are 20 bits wide Physical addresses are 15 bits wide The page size if 1KB (2 10 bytes) The TLB is 2-way set associative, with 8 total

More information

C1098 JPEG Module User Manual

C1098 JPEG Module User Manual C1098 JPEG Module User Manual General Description C1098 is VGA camera module performs as a JPEG compressed still camera that can be attached to a wireless or PDA host. Users can send out a snapshot command

More information

Chap 4 Connecting the Testbench and. Design. Interfaces Clocking blocks Program blocks The end of simulation Top level scope Assertions

Chap 4 Connecting the Testbench and. Design. Interfaces Clocking blocks Program blocks The end of simulation Top level scope Assertions Chap 4 Connecting the Testbench and Interfaces Clocking blocks Program blocks The end of simulation Top level scope Assertions Design 1 4 Connecting the Testbench and Design Testbench wraps around the

More information

CSE 591: Advanced Hardware Design and Verification (2012 Spring) LAB #0

CSE 591: Advanced Hardware Design and Verification (2012 Spring) LAB #0 Lab 0: Tutorial on Xilinx Project Navigator & ALDEC s Active-HDL Simulator CSE 591: Advanced Hardware Design and Verification Assigned: 01/05/2011 Due: 01/19/2011 Table of Contents 1 Overview... 2 1.1

More information

CIS-331 Exam 2 Spring 2016 Total of 110 Points Version 1

CIS-331 Exam 2 Spring 2016 Total of 110 Points Version 1 Version 1 1. (20 Points) Given the class A network address 121.0.0.0 will be divided into multiple subnets. a. (5 Points) How many bits will be necessary to address 8,100 subnets? b. (5 Points) What is

More information

AXI4-Stream Verification IP v1.0

AXI4-Stream Verification IP v1.0 AXI4-Stream Verification IP v1.0 LogiCORE IP Product Guide Vivado Design Suite Table of Contents IP Facts Chapter 1: Overview Feature Summary..................................................................

More information

What, If Anything, In SystemVerilog Will Help Me With FPGA-based Design. Stuart Sutherland, Consultant and Trainer, Sutherland HDL, Inc.

What, If Anything, In SystemVerilog Will Help Me With FPGA-based Design. Stuart Sutherland, Consultant and Trainer, Sutherland HDL, Inc. What, If Anything, In SystemVerilog Will Help Me With FPGA-based Design Stuart Sutherland, Consultant and Trainer, Sutherland HDL, Inc. About the Presenter... Stuart Sutherland, SystemVerilog wizard Independent

More information

UNH-IOL MIPI Alliance Test Program

UNH-IOL MIPI Alliance Test Program DSI Receiver Protocol Conformance Test Report UNH-IOL 121 Technology Drive, Suite 2 Durham, NH 03824 +1-603-862-0090 mipilab@iol.unh.edu +1-603-862-0701 Engineer Name engineer@company.com Panel Company

More information

Here is a C function that will print a selected block of bytes from such a memory block, using an array-based view of the necessary logic:

Here is a C function that will print a selected block of bytes from such a memory block, using an array-based view of the necessary logic: Pointer Manipulations Pointer Casts and Data Accesses Viewing Memory The contents of a block of memory may be viewed as a collection of hex nybbles indicating the contents of the byte in the memory region;

More information

SystemVerilog For Design Second Edition

SystemVerilog For Design Second Edition SystemVerilog For Design Second Edition A Guide to Using SystemVerilog for Hardware Design and Modeling by Stuart Sutherland Simon Davidmann Peter Flake Foreword by Phil Moorby 4y Spri ringer Table of

More information

166 SystemVerilog Assertions Handbook, 4th Edition

166 SystemVerilog Assertions Handbook, 4th Edition 166 SystemVerilog Assertions Handbook, 4th Edition example, suppose that a cache controller performs behavior A when there is a cache hit (e.g., fetch data from the cache), or performs behavior B when

More information

CIS-331 Final Exam Spring 2015 Total of 115 Points. Version 1

CIS-331 Final Exam Spring 2015 Total of 115 Points. Version 1 Version 1 1. (25 Points) Given that a frame is formatted as follows: And given that a datagram is formatted as follows: And given that a TCP segment is formatted as follows: Assuming no options are present

More information

List of Examples List of Figures List of Tables. Acknowledgments 1. VERIFICATION GUIDELINES 1

List of Examples List of Figures List of Tables. Acknowledgments 1. VERIFICATION GUIDELINES 1 Contents List of Examples List of Figures List of Tables Preface Acknowledgments xiii xxvii xxix xxxi xxxvii 1. VERIFICATION GUIDELINES 1 1.1 The Verification Process 2 1.2 The Verification Methodology

More information

ZN-DN312XE-M Quick User Guide

ZN-DN312XE-M Quick User Guide ZN-DN312XE-M Quick User Guide This manual provides instructions for quick installation and basic configuration of your IP device. Step1. Connect cables to IP device Connect required cables to the device

More information

Sunburst Design - Advanced SystemVerilog for Design & Verification by Recognized Verilog & SystemVerilog Guru, Cliff Cummings of Sunburst Design, Inc.

Sunburst Design - Advanced SystemVerilog for Design & Verification by Recognized Verilog & SystemVerilog Guru, Cliff Cummings of Sunburst Design, Inc. World Class Verilog & SystemVerilog Training Sunburst Design - Advanced SystemVerilog for Design & Verification by Recognized Verilog & SystemVerilog Guru, Cliff Cummings of Sunburst Design, Inc. Cliff

More information

DesignCon Modeling Data and Transactions in SystemVerilog. Janick Bergeron, Synopsys

DesignCon Modeling Data and Transactions in SystemVerilog. Janick Bergeron, Synopsys DesignCon 2005 Modeling Data and Transactions in SystemVerilog Janick Bergeron, Synopsys janick@synopsys.com Abstract This paper describes how to properly use the object-oriented features of SystemVerilog

More information

6.1 Combinational Circuits. George Boole ( ) Claude Shannon ( )

6.1 Combinational Circuits. George Boole ( ) Claude Shannon ( ) 6. Combinational Circuits George Boole (85 864) Claude Shannon (96 2) Signals and Wires Digital signals Binary (or logical ) values: or, on or off, high or low voltage Wires. Propagate digital signals

More information

ECHO Process Instrumentation, Inc. Modbus RS485 Module. Operating Instructions. Version 1.0 June 2010

ECHO Process Instrumentation, Inc. Modbus RS485 Module. Operating Instructions. Version 1.0 June 2010 ECHO Process Instrumentation, Inc. Modbus RS485 Module Operating Instructions Version 1.0 June 2010 ECHO Process Instrumentation, Inc. PO Box 800 Shalimar, FL 32579 PH: 850-609-1300 FX: 850-651-4777 EM:

More information

Getting Started with OVM 2.0

Getting Started with OVM 2.0 A Series of Tutorials based on a set of Simple, Complete Examples Introduction In this tutorial, the emphasis is on getting a simple example working rather than on understanding the broad flow of the constrained

More information

Course Profile SystemVerilog Design

Course Profile SystemVerilog Design Course Profile SystemVerilog Design I. CONTENTS 1. SystemVerilog for Design (SVD)... 3 2. Class Details:... 3 3. Trainers Profiles... 3 a. Srinivasan Venkataramanan, cto... 3 b. Ajeetha Kumari, ceo AND

More information

CIS-331 Final Exam Spring 2016 Total of 120 Points. Version 1

CIS-331 Final Exam Spring 2016 Total of 120 Points. Version 1 Version 1 1. (25 Points) Given that a frame is formatted as follows: And given that a datagram is formatted as follows: And given that a TCP segment is formatted as follows: Assuming no options are present

More information

271/469 Verilog Tutorial

271/469 Verilog Tutorial 271/469 Verilog Tutorial Prof. Scott Hauck, last revised 8/14/17 Introduction The following tutorial is inted to get you going quickly in circuit design in Verilog. It isn t a comprehensive guide to System

More information

Fundamentals of Cryptography

Fundamentals of Cryptography Fundamentals of Cryptography Topics in Quantum-Safe Cryptography June 23, 2016 Part III Data Encryption Standard The Feistel network design m m 0 m 1 f k 1 1 m m 1 2 f k 2 2 DES uses a Feistel network

More information

Test Scenarios and Coverage

Test Scenarios and Coverage Test Scenarios and Coverage Testing & Verification Dept. of Computer Science & Engg,, IIT Kharagpur Pallab Dasgupta Professor, Dept. of Computer Science & Engg., Professor-in in-charge, AVLSI Design Lab,

More information

A User s Experience with SystemVerilog

A User s Experience with SystemVerilog A User s Experience with SystemVerilog and Doulos Ltd Ringwood, U.K. BH24 1AW jonathan.bromley@doulos.com michael.smith@doulos.com 2 Objectives Practical use of SystemVerilog Synopsys tools (VCS, Design

More information

SVA in a UVM Class-based Environment by Ben Cohen, author, consultant, and trainer

SVA in a UVM Class-based Environment by Ben Cohen, author, consultant, and trainer SVA in a UVM Class-based Environment by Ben Cohen, author, consultant, and trainer INTRODUCTION Verification can be defined as the check that the design meets the requirements. How can this be achieved?

More information

Here is a C function that will print a selected block of bytes from such a memory block, using an array-based view of the necessary logic:

Here is a C function that will print a selected block of bytes from such a memory block, using an array-based view of the necessary logic: Pointer Manipulations Pointer Casts and Data Accesses Viewing Memory The contents of a block of memory may be viewed as a collection of hex nybbles indicating the contents of the byte in the memory region;

More information

OVERVIEW: ============================================================ REPLACE

OVERVIEW: ============================================================ REPLACE OVERVIEW: With mantis 928, formal arguments to properties and sequences are defined to apply to a list of arguments that follow, much like tasks and function arguments. Previously, the type had to be replicated

More information

The University of Alabama in Huntsville ECE Department CPE Final Exam Solution Spring 2016

The University of Alabama in Huntsville ECE Department CPE Final Exam Solution Spring 2016 The University of Alabama in Huntsville ECE Department CPE 526 01 Final Exam Solution Spring 2016 1. (6 points) Draw the transistor-level diagram of a two input CMOS NAND gate. VCC x y z f x y GND 2. (5

More information

Creating Stimulus and Stimulating Creativity:

Creating Stimulus and Stimulating Creativity: Creating Stimulus and Stimulating Creativity: Using the VMM Scenario Generator Jonathan Bromley Doulos Ltd, Ringwood, UK jonathan.bromley@doulos.com 2 Outline Introduction: motivation for scenarios The

More information

קורס SystemVerilog Essentials Simulation & Synthesis.. SystemVerilog

קורס SystemVerilog Essentials Simulation & Synthesis.. SystemVerilog קורס SystemVerilog Essentials Simulation & Synthesis תיאור הקורס קורסזהמספקאתכלהידעהתיאורטי והמעשילתכנוןרכיביםמתכנתיםבעזרתשפתהסטנדרט. SystemVerilog הקורס מעמיק מאוד ונוגע בכל אספקט של הסטנדרט במסגרת הנושאים

More information

218 SystemVerilog Assertions Handbook, 4th Edition

218 SystemVerilog Assertions Handbook, 4th Edition 218 SystemVerilog Assertions Handbook, 4th Edition Synchronous FIFO to be used as an IP. FIFO management (e.g., push, pop, error handling) is external to the FIFO. SystemVerilog Assertions in the Design

More information

Configuring a Date with a Model

Configuring a Date with a Model Configuring a Date with a Model A Guide to Configuration Objects and Register Models Jeff Montesano, Jeff Vance Verilab, Inc. copyright (c) 2016 Verilab & SNUG September 29, 2016 SNUG Austin SNUG 2016

More information

Date Performed: Marks Obtained: /10. Group Members (ID):. Experiment # 11. Introduction to Verilog II Sequential Circuits

Date Performed: Marks Obtained: /10. Group Members (ID):. Experiment # 11. Introduction to Verilog II Sequential Circuits Name: Instructor: Engr. Date Performed: Marks Obtained: /10 Group Members (ID):. Checked By: Date: Experiment # 11 Introduction to Verilog II Sequential Circuits OBJECTIVES: To understand the concepts

More information

The University of Alabama in Huntsville ECE Department CPE Final Exam April 28, 2016

The University of Alabama in Huntsville ECE Department CPE Final Exam April 28, 2016 The University of Alabama in Huntsville ECE Department CPE 426 01 Final Exam April 28, 2016 Name: 1. (6 points) Draw the transistor-level diagram of a two input CMOS NAND gate. 2. (5 points) If the NRE

More information

6. Specifications & Additional Information

6. Specifications & Additional Information 6. Specifications & Additional Information SIIGX52004-3.1 Transceier Blocks Table 6 1 shows the transceier blocks for Stratix II GX and Stratix GX deices and compares their features. Table 6 1. Stratix

More information

Formal Verification: Not Just for Control Paths

Formal Verification: Not Just for Control Paths Formal Verification: Not Just for Control Paths by Rusty Stuber, Mentor, A Siemens Business Formal property verification is sometimes considered a niche methodology ideal for control path applications.

More information

ERRATA THROUGHOUT THE BOOK PAGE 59

ERRATA THROUGHOUT THE BOOK PAGE 59 ERRATA The followings errors and omissions have been identified in the first edition of Verification Methodology Manual for SystemVerilog. They will be corrected in any future editions. THROUGHOUT THE

More information

COVERAGE DRIVEN VERIFICATION OF I2C PROTOCOL USING SYSTEM VERILOG

COVERAGE DRIVEN VERIFICATION OF I2C PROTOCOL USING SYSTEM VERILOG International Journal of Advanced Research in Engineering and Technology (IJARET) Volume 7, Issue 3, May June 2016, pp. 103 113, Article ID: IJARET_07_03_010 Available online at http://www.iaeme.com/ijaret/issues.asp?jtype=ijaret&vtype=7&itype=3

More information

Chapter 5 Copyright 2012 G. Tumbush, C. Spear v1.2

Chapter 5 Copyright 2012 G. Tumbush, C. Spear v1.2 Chapter 5, Basic OOP topics Why OOP OOP terminology Classes Objects Custom constructors Static variables/methods Classes within classes Handles Copying objects 1 5.1 Introduction Why OOP? Gains in productivity/maintainability/thoroughness

More information

Communications guide. Line Distance Protection System * F1* GE Digital Energy. Title page

Communications guide. Line Distance Protection System * F1* GE Digital Energy. Title page Title page GE Digital Energy D90 Plus Line Distance Protection System Communications guide D90 Plus firmware revision:.9x GE publication code: 60-9070-F (GEK-3469) GE Digital Energy 650 Markland Street

More information

SystemVerilog Functional Coverage

SystemVerilog Functional Coverage SystemVerilog Functional Coverage Ahmed Hemani System Architecture and Methodology Group Department of Electronic and Computer Systems School of ICT, KTH Functional Coverage Functional Coverage is used

More information

Gateway Ascii Command Protocol

Gateway Ascii Command Protocol Gateway Ascii Command Protocol Table Of Contents Introduction....2 Ascii Commands.....3 Messages Received From The Gateway....3 Button Down Message.....3 Button Up Message....3 Button Maintain Message....4

More information

Sending Packets Through Router

Sending Packets Through Router 2 Sending Packets Through Router Learning Objectives After completing this lab, you should be able to: Extend the SystemVerilog testbench from lab1 to send a packet from an input port through an output

More information

CSE 502: Computer Architecture

CSE 502: Computer Architecture CSE 502: Computer Architecture SystemVerilog More Resources Cannot cover everything in one day You will likely need to look up reference material: SystemVerilog for VHDL Users: http://www.systemverilog.org/techpapers/date04_systemverilog.pdf

More information

Development of UVM based Reusabe Verification Environment for SHA-3 Cryptographic Core

Development of UVM based Reusabe Verification Environment for SHA-3 Cryptographic Core Development of UVM based Reusabe Verification Environment for SHA-3 Cryptographic Core M. N. Kubavat Dept. of VLSI & Embedded Systems Design, GTU PG School Gujarat Technological University Ahmedabad, India

More information

MicroStrain LXRS Wireless Base Station EEPROM Map

MicroStrain LXRS Wireless Base Station EEPROM Map MicroStrain LXRS Wireless Base Station EEPROM Map EEPROM Address (Decimal) EEPROM Address (Hexidecimal) Nomenclature Valid Ranges Factory Init Value 0 0 Reserved - 65535-2 2 Reserved - 65535-4 4 Reserved

More information

Triple DES and AES 192/256 Implementation Notes

Triple DES and AES 192/256 Implementation Notes Triple DES and AES 192/256 Implementation Notes Sample Password-to-Key and KeyChange results of Triple DES and AES 192/256 implementation For InterWorking Labs customers who require detailed information

More information

SystemVerilog 3.1: It s What The DAVEs In Your Company Asked For

SystemVerilog 3.1: It s What The DAVEs In Your Company Asked For February 24-26, 2003 SystemVerilog 3.1: It s What The DAVEs In Your Company Asked For Stuart HDL, Inc. www.sutherland-hdl.com 2/27/2003 1 This presentation will Define what is SystemVerilog Provide an

More information

CMSC 313 Lecture 03 Multiple-byte data big-endian vs little-endian sign extension Multiplication and division Floating point formats Character Codes

CMSC 313 Lecture 03 Multiple-byte data big-endian vs little-endian sign extension Multiplication and division Floating point formats Character Codes Multiple-byte data CMSC 313 Lecture 03 big-endian vs little-endian sign extension Multiplication and division Floating point formats Character Codes UMBC, CMSC313, Richard Chang 4-5 Chapter

More information

ENGI 8868/9877 Computer and Communications Security III. BLOCK CIPHERS. Symmetric Key Cryptography. insecure channel

ENGI 8868/9877 Computer and Communications Security III. BLOCK CIPHERS. Symmetric Key Cryptography. insecure channel (a) Introduction - recall symmetric key cipher: III. BLOCK CIPHERS k Symmetric Key Cryptography k x e k y yʹ d k xʹ insecure channel Symmetric Key Ciphers same key used for encryption and decryption two

More information

KNX TinySerial 810. Communication Protocol. WEINZIERL ENGINEERING GmbH

KNX TinySerial 810. Communication Protocol. WEINZIERL ENGINEERING GmbH WEINZIERL ENGINEERING GmbH KNX TinySerial 810 Communication Protocol WEINZIERL ENGINEERING GmbH Bahnhofstr. 6 DE-84558 Tyrlaching GERMAY Tel. +49 8623 / 987 98-03 Fax +49 8623 / 987 98-09 E-Mail: info@weinzierl.de

More information

Lecture 32: SystemVerilog

Lecture 32: SystemVerilog Lecture 32: SystemVerilog Outline SystemVerilog module adder(input logic [31:0] a, input logic [31:0] b, output logic [31:0] y); assign y = a + b; Note that the inputs and outputs are 32-bit busses. 17:

More information

INF5430. SystemVerilog for Verification. Chapter Randomization

INF5430. SystemVerilog for Verification. Chapter Randomization INF5430 SystemVerilog for Verification Chapter 6.1-12 Randomization Chapter 6: Randomization Directed testing: Checks only anticipated bugs Scales poorly as requirements change Little upfront work Linear

More information

Lab 7 (Sections 300, 301 and 302) Prelab: Introduction to Verilog

Lab 7 (Sections 300, 301 and 302) Prelab: Introduction to Verilog Lab 7 (Sections 300, 301 and 302) Prelab: Introduction to Verilog Name: Sign the following statement: On my honor, as an Aggie, I have neither given nor received unauthorized aid on this academic work

More information

July Registration of a Cyrillic Character Set. Status of this Memo

July Registration of a Cyrillic Character Set. Status of this Memo Network Working Group Request for Comments: 1489 A. Chernov RELCOM Development Team July 1993 Status of this Memo Registration of a Cyrillic Character Set This memo provides information for the Internet

More information

Modular SystemVerilog

Modular SystemVerilog SystemVerilog (IEEE 1800 TM ) is a significant new language based on the widely used and industrystandard Verilog hardware description language. The SystemVerilog extensions enhance Verilog in a number

More information

APPLESHARE PC UPDATE INTERNATIONAL SUPPORT IN APPLESHARE PC

APPLESHARE PC UPDATE INTERNATIONAL SUPPORT IN APPLESHARE PC APPLESHARE PC UPDATE INTERNATIONAL SUPPORT IN APPLESHARE PC This update to the AppleShare PC User's Guide discusses AppleShare PC support for the use of international character sets, paper sizes, and date

More information

Subject: Scheduling Region Questions and Problems of new SystemVerilog commands

Subject: Scheduling Region Questions and Problems of new SystemVerilog commands Subject: Scheduling Region Questions and Problems of new SystemVerilog commands I have read and re-read sections 14-17 of the SystemVerilog 3.1 Standard multiple times and am still confused about exactly

More information

YHY502CTG++ DATASHEET MHz RFID Mifare Read/Write Module. YHY502CTG++ Datasheet Revision 2.0 Oct, 2009 Page 1 of 21

YHY502CTG++ DATASHEET MHz RFID Mifare Read/Write Module. YHY502CTG++ Datasheet Revision 2.0 Oct, 2009 Page 1 of 21 YHY5CTG++ Datasheet Revision 2.0 Oct, 29 Page 1 of 21 YHY5CTG++ 13.56MHz RFID Mifare Read/Write Module DATASHEET Complete Read/Write module with built-in transceiver antenna Auto checks for presence of

More information

EECS150 - Digital Design Lecture 20 - Finite State Machines Revisited

EECS150 - Digital Design Lecture 20 - Finite State Machines Revisited EECS150 - Digital Design Lecture 20 - Finite State Machines Revisited April 2, 2009 John Wawrzynek Spring 2009 EECS150 - Lec20-fsm Page 1 Finite State Machines (FSMs) FSM circuits are a type of sequential

More information

FORMAL SPECIFICATION, SYSTEM VERILOG ASSERTIONS & COVERAGE. By Calderón-Rico, Rodrigo & Tapia Sanchez, Israel G.

FORMAL SPECIFICATION, SYSTEM VERILOG ASSERTIONS & COVERAGE. By Calderón-Rico, Rodrigo & Tapia Sanchez, Israel G. FORMAL SPECIFICATION, SYSTEM VERILOG ASSERTIONS & COVERAGE By Calderón-Rico, Rodrigo & Tapia Sanchez, Israel G. OBJECTIVE Learn how to define objects by specifying their properties which are formally

More information

Digital Lighting Systems, Inc. CD400-DMX DMX512 Four Channel Dimmer and Switch module

Digital Lighting Systems, Inc. CD400-DMX DMX512 Four Channel Dimmer and Switch module , Inc. DMX512 Four Channel Dimmer and Switch module Input: 5 Amps @ 6-24 VDC Outputs: 5 Amps Maximum each, total 4 outputs 8 Amps Maximum. FRONT BACK USER'S MANUAL -UM User's Manual - Page 1 GENERAL DESCRIPTION

More information

Module 4. Design of Embedded Processors. Version 2 EE IIT, Kharagpur 1

Module 4. Design of Embedded Processors. Version 2 EE IIT, Kharagpur 1 Module 4 Design of Embedded Processors Version 2 EE IIT, Kharagpur 1 Lesson 23 Introduction to Hardware Description Languages-III Version 2 EE IIT, Kharagpur 2 Instructional Objectives At the end of the

More information

5 Developing Acceleratable Universal Verification Components (UVCs)

5 Developing Acceleratable Universal Verification Components (UVCs) 5 Developing Acceleratable Universal Verification Components (UVCs) This chapter discusses the following topics: Introduction to UVM Acceleration UVC Architecture UVM Acceleration Package Interfaces SCE-MI

More information

Introduction to Programming Using Java (98-388)

Introduction to Programming Using Java (98-388) Introduction to Programming Using Java (98-388) Understand Java fundamentals Describe the use of main in a Java application Signature of main, why it is static; how to consume an instance of your own class;

More information

Quick Introduction to SystemVerilog: Sequental Logic

Quick Introduction to SystemVerilog: Sequental Logic ! Quick Introduction to SystemVerilog: Sequental Logic Lecture L3 8-545 Advanced Digital Design ECE Department Many elements Don Thomas, 24, used with permission with credit to G. Larson Today Quick synopsis

More information

Testbenches for Sequential Circuits... also, Components

Testbenches for Sequential Circuits... also, Components ! Testbenches for Sequential Circuits... also, Components Lecture L04 18-545 Advanced Digital Design ECE Department Many elements Don Thomas, 2014, used with permission with credit to G. Larson State Transition

More information

Module- or Class-Based URM? A Pragmatic Guide to Creating Verification Environments in SystemVerilog. Paradigm Works, Inc. Dr.

Module- or Class-Based URM? A Pragmatic Guide to Creating Verification Environments in SystemVerilog. Paradigm Works, Inc. Dr. Module- or Class-Based URM? A Pragmatic Guide to Creating Verification Environments in SystemVerilog Paradigm Works, Inc. Dr. Ambar Sarkar Session # 2.15 Presented at Module- or Class-Based URM? A Pragmatic

More information

Modeling Usable & Reusable Transactors in SystemVerilog Janick Bergeron, Scientist

Modeling Usable & Reusable Transactors in SystemVerilog Janick Bergeron, Scientist Modeling Usable & Reusable Transactors in SystemVerilog Janick Bergeron, Scientist Verification Group, Synopsys Inc janick@synopsys.com Transactors Definition Building blocks of verification environments

More information

RS 232 PINOUTS. 1. We use RJ12 for all of our RS232 interfaces (Link-2-Modbus & Link-2-PC- Serial/RS232). The diagram below shows our pin out.

RS 232 PINOUTS. 1. We use RJ12 for all of our RS232 interfaces (Link-2-Modbus & Link-2-PC- Serial/RS232). The diagram below shows our pin out. RS 232 PINOUTS 1. We use RJ12 for all of our RS232 interfaces (Link-2-Modbus & Link-2-PC- Serial/RS232). The diagram below shows our pin out. 2. A DB9 Female to RJ12 Female Serial/Terminal Modular Adaptor

More information

271/471 Verilog Tutorial

271/471 Verilog Tutorial 271/471 Verilog Tutorial Prof. Scott Hauck, last revised 9/15/14 Introduction The following tutorial is inted to get you going quickly in circuit design in Verilog. It isn t a comprehensive guide to System

More information

Using SystemVerilog Assertions for Functional Coverage

Using SystemVerilog Assertions for Functional Coverage Using SystemVerilog Assertions for Functional Coverage Mark Litterick (Verification Consultant) mark.litterick@verilab.com 2 Outline Demonstrate capability of SVA for implementing a complex functional

More information

CS 537: Introduction to Operating Systems Fall 2015: Midterm Exam #1

CS 537: Introduction to Operating Systems Fall 2015: Midterm Exam #1 CS 537: Introduction to Operating Systems Fall 2015: Midterm Exam #1 This exam is closed book, closed notes. All cell phones must be turned off. No calculators may be used. You have two hours to complete

More information

First Data EMV Test Card Set. Version 1.30

First Data EMV Test Card Set. Version 1.30 First Data EMV Test Card Set.30 January, 2018 Disclaimer Information provided in this document describes capabilities available at the time of developing this document and information available from industry

More information

Digital Lighting Systems, Inc.

Digital Lighting Systems, Inc. Digital Lighting Systems, Inc. Four Channel Dry Contacts Relays Switch Pack DMX512 compatible USER'S MANUAL -UM User's Manual - Page 1 GENERAL DESCRIPTION The is a 4-channel DMX-512 compatible electro-mechanical

More information

First Data EMV Test Card Set. Version 2.00

First Data EMV Test Card Set. Version 2.00 First Data EMV Test Card Set.00 February, 2018 Disclaimer Information provided in this document describes capabilities available at the time of developing this document and information available from industry

More information

Lab 7 (All Sections) Prelab: Introduction to Verilog

Lab 7 (All Sections) Prelab: Introduction to Verilog Lab 7 (All Sections) Prelab: Introduction to Verilog Name: Sign the following statement: On my honor, as an Aggie, I have neither given nor received unauthorized aid on this academic work 1 Objective The

More information

Unifying Design and Verification

Unifying Design and Verification Unifying Design and Verification SystemVerilog Overview Agenda SystemVerilog Introduction Synopsys SystemVerilog Solution SystemVerilog Features and Successful Stories 2006 Synopsys, Inc. (2) Agenda SystemVerilog

More information

SystemVerilog Data Types

SystemVerilog Data Types SystemVerilog Data Types This tutorial describes the new data types that Systemverilog introduces. Most of these are synthesisable, and should make RTL descriptions easier to write and understand. Integer

More information

Debugging Inconclusive Assertions and a Case Study

Debugging Inconclusive Assertions and a Case Study Debugging Inconclusive Assertions and a Case Study by Jin Hou Mentor, A Siemens Business INTRODUCTION Formal assertion-based verification uses formal technologies to analyze if a design satisfies a given

More information

Digital Design with SystemVerilog

Digital Design with SystemVerilog Digital Design with SystemVerilog Prof. Stephen A. Edwards Columbia University Spring 25 Synchronous Digital Design Combinational Logic Sequential Logic Summary of Modeling Styles Testbenches Why HDLs?

More information

No RTL Yet? No Problem UVM Testing a SystemVerilog Fabric Model

No RTL Yet? No Problem UVM Testing a SystemVerilog Fabric Model No RTL Yet? No Problem UVM Testing a SystemVerilog Fabric Model Rich Edelman Mentor Graphics, Fremont, CA rich_edelman@mentor.com 510-354-7436 Abstract-SystemVerilog is a powerful language which can be

More information

OVM/UVM Update. Universal Verification Methodology. Open Verification Methodology. Tom Fitzpatrick Verification Technologist Mentor Graphics Corp.

OVM/UVM Update. Universal Verification Methodology. Open Verification Methodology. Tom Fitzpatrick Verification Technologist Mentor Graphics Corp. Open Verification Methodology Universal Verification Methodology OVM/UVM Update Tom Fitzpatrick Verification Technologist Mentor Graphics Corp. Sharon Rosenberg Solutions Architect Cadence Design Systems

More information

ECE 353 Lab 4. Verilog Review. Professor Daniel Holcomb UMass Amherst Fall 2017

ECE 353 Lab 4. Verilog Review. Professor Daniel Holcomb UMass Amherst Fall 2017 ECE 353 Lab 4 Verilog Review Professor Daniel Holcomb UMass Amherst Fall 2017 What You Will Do In Lab 4 Design and implement a serial MIDI receiver Hardware in an Altera Complex Programmable Logic Device

More information

GENERATION OF GRAPH FOR ETHERNET VERIFICATION USING TREK M.Vinodhini* 1, P.D. Rathika 2, J.U.Nambi 2, V.Kanmani 1

GENERATION OF GRAPH FOR ETHERNET VERIFICATION USING TREK M.Vinodhini* 1, P.D. Rathika 2, J.U.Nambi 2, V.Kanmani 1 ISSN 2277-2685 IJESR/May 2015/ Vol-5/Issue-5/187-193 M. Vinodhini et. al./ International Journal of Engineering & Science Research GENERATION OF GRAPH FOR ETHERNET VERIFICATION USING TREK M.Vinodhini*

More information

TEST DVD-VIDEO/ DVD-ROM For Checking DVD Players, DVD Recorders and DVD Drives TDH-940

TEST DVD-VIDEO/ DVD-ROM For Checking DVD Players, DVD Recorders and DVD Drives TDH-940 TEST DVD-VIDEO/ DVD-ROM For Checking DVD Players, DVD Recorders and DVD Drives TDH-940 Product Introduction. Purpose of use, Features TDH-940 is a Test Disc designed for confirmation of operation of DVD

More information

Definitions. Key Objectives

Definitions. Key Objectives CHAPTER 2 Definitions Key Objectives & Types of models & & Black box versus white box Definition of a test Functional verification requires that several elements are in place. It relies on the ability

More information

Constrained Random Data Generation Using SystemVerilog

Constrained Random Data Generation Using SystemVerilog Constrained Random Data Generation Using SystemVerilog Tim Pylant, Cadence Design Systems, Inc. 1 Ideal Stimulus Generation Need a way to generate stimulus without long, manual process Data should be random

More information

Spiral 1 / Unit 4 Verilog HDL. Digital Circuit Design Steps. Digital Circuit Design OVERVIEW. Mark Redekopp. Description. Verification.

Spiral 1 / Unit 4 Verilog HDL. Digital Circuit Design Steps. Digital Circuit Design OVERVIEW. Mark Redekopp. Description. Verification. 1-4.1 1-4.2 Spiral 1 / Unit 4 Verilog HDL Mark Redekopp OVERVIEW 1-4.3 1-4.4 Digital Circuit Design Steps Digital Circuit Design Description Design and computer-entry of circuit Verification Input Stimulus

More information

CSE140L: Components and Design Techniques for Digital Systems Lab. Verilog HDL. Instructor: Mohsen Imani UC San Diego. Source: Eric Crabill, Xilinx

CSE140L: Components and Design Techniques for Digital Systems Lab. Verilog HDL. Instructor: Mohsen Imani UC San Diego. Source: Eric Crabill, Xilinx CSE4L: Components and Design Techniques for Digital Systems Lab Verilog HDL Instructor: Mohsen Imani UC San Diego Source: Eric Crabill, Xilinx System Tasks The $ sign denotes Verilog system tasks, there

More information