Presentation is loading. Please wait.

Presentation is loading. Please wait.

ECE 448 – FPGA and ASIC Design with VHDL George Mason University ECE 448 Lab 2 Implementing Combinational Logic in VHDL.

Similar presentations


Presentation on theme: "ECE 448 – FPGA and ASIC Design with VHDL George Mason University ECE 448 Lab 2 Implementing Combinational Logic in VHDL."— Presentation transcript:

1 ECE 448 – FPGA and ASIC Design with VHDL George Mason University ECE 448 Lab 2 Implementing Combinational Logic in VHDL

2 Part 1: Hands-on Session: Simulation Using Aldec Active-HDL Part 2: Introduction to Lab 2 Part 3: Asserts and Reports Part 4: Advanced Testbenches with test vectors stored in arrays of records Part 5: Advanced Testbenches with test vectors stored in text files Part 6: Demos of Lab 1 Agenda for today

3 ECE 448 – FPGA and ASIC Design with VHDL Part 1 Hands-on Session Simulation Using Aldec Active-HDL

4 Hands-on Session based on the MLU example with simple testbench

5 ECE 448 – FPGA and ASIC Design with VHDL Part 2 Introduction to Lab 2

6 Discussion of the Pseudocode, Requirements, and Hints

7 Part 1: Example of a Block Diagram (for a different circuit)

8 Bonus Task Variable Rotator Example of a Problem Similar to the Bonus Task

9 Function C = A <<< B A – 4-bit data input B – 2-bit rotation amount

10 Interface 4 4 2 A B C

11 Block diagram C

12 Fixed Rotation in VHDL A(3) A(2) A(1) A(0) A(2)A(1)A(0)A(3) A<<<1 SIGNAL A : STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL ArotL: STD_LOGIC_VECTOR(3 DOWNTO 0); ArotL <= A(2 downto 0) & A(3); ArotL A

13 ECE 448 – FPGA and ASIC Design with VHDL Advanced Testbenches

14 14 Simple Testbench Processes Generating Stimuli Design Under Test (DUT) Observed Outputs

15 15 Advanced Testbench (1) Processes Generating Input Stimuli Design Under Test (DUT) Process Comparing Actual Outputs vs. Expected Outputs Design Correct/Incorrect Yes/No

16 16 Advanced Testbench (2) Processes Generating Input Stimuli Design Under Test (DUT) Process Comparing Actual Outputs vs. Expected Outputs Design Correct/Incorrect Yes/No Testvector file(s)

17 17 Test vectors Set of pairs: {Input i, Expected Output i} Input 1, Expected Output 1 Input 2, Expected Output 2 …………………………… Input N, Expected Output N Test vectors can be: - defined in the testbench source file - stored in a data file

18 18 Representative Inputs VHDL Design Manual Calculations or Reference Software Implementation (C, Java, Matlab ) expected results Testbench actual results = ? Possible sources of expected results used for comparison

19 19ECE 448 – FPGA and ASIC Design with VHDL Part 3 Asserts and Reports

20 20 Assert Assert is a non-synthesizable statement whose purpose is to write out messages on the screen when problems are found during simulation. Depending on the severity of the problem, The simulator is instructed to continue simulation or halt.

21 21 Assert - syntax ASSERT condition [REPORT "message“] [SEVERITY severity_level ]; The message is written when the condition is FALSE. Severity_level can be: Note, Warning, Error (default), or Failure.

22 22 Assert – Examples (1) assert initial_value <= max_value report "initial value too large" severity error; assert packet_length /= 0 report "empty network packet received" severity warning; assert false report "Initialization complete" severity note;

23 23 Assert – Examples (2) stim_proc: process begin wait for 20 ns assert false report "PASSED CHECKPOINT 1" severity note; wait for 10 ns; assert false report "PASSED CHECKPOINT 2" severity warning;

24 24ECE 448 – FPGA and ASIC Design with VHDL wait for 10 ns; assert false report "PASSED CHECKPOINT 3" severity error; wait for 10 ns; assert false report "PASSED CHECKPOINT 4" severity failure; wait; end process; Assert – Examples (3)

25 Example 1 Asserts & Reports

26 26 Format of messages in Aldec Active-HDL

27 27 Format of messages in Xilinx ISim

28 28 Report - syntax REPORT "message" [SEVERITY severity_level ]; The message is always written. Severity_level can be: Note (default), Warning, Error, or Failure.

29 29 Report - Examples report "Initialization complete"; report "Current time = " & time'image(now); report "Incorrect branch" severity error;

30 30 library IEEE; use IEEE.STD_LOGIC_1164.all; entity example_1_tb is end example_1_tb; architecture behavioral of example_1_tb is signal clk : std_logic := '0'; begin clk <= not clk after 100 ns; process begin wait for 1000 ns; report "Initialization complete"; report "Current time = " & time'image(now); wait for 1000 ns; report "SIMULATION COMPLETED" severity failure; end process; end behavioral; Report - Examples

31 31ECE 448 – FPGA and ASIC Design with VHDL Part 4 Advanced Testbenches with Test Vectors Stored in an Array of Records

32 32 Advanced Testbench (1) Processes Generating Input Stimuli Design Under Test (DUT) Process Comparing Actual Outputs vs. Expected Outputs Design Correct/Incorrect Yes/No

33 33ECE 448 – FPGA and ASIC Design with VHDL Records

34 34 Records TYPE test_vector IS RECORD operation : STD_LOGIC_VECTOR(1 DOWNTO 0); a : STD_LOGIC; b: STD_LOGIC; y : STD_LOGIC; END RECORD; CONSTANT num_vectors : INTEGER := 16; TYPE test_vectors IS ARRAY (0 TO num_vectors-1) OF test_vector; CONSTANT and_op : STD_LOGIC_VECTOR(1 DOWNTO 0) := "00"; CONSTANT or_op : STD_LOGIC_VECTOR(1 DOWNTO 0) := "01"; CONSTANT xor_op : STD_LOGIC_VECTOR(1 DOWNTO 0) := "10"; CONSTANT xnor_op : STD_LOGIC_VECTOR(1 DOWNTO 0) := "11";

35 35 Records CONSTANT test_vector_table: test_vectors :=( (operation => AND_OP, a=>'0', b=>'0', y=>'0'), (operation => AND_OP, a=>'0', b=>'1', y=>'0'), (operation => AND_OP, a=>'1', b=>'0', y=>'0'), (operation => AND_OP, a=>'1', b=>'1', y=>'1'), (operation => OR_OP, a=>'0', b=>'0', y=>'0'), (operation => OR_OP, a=>'0', b=>'1', y=>'1'), (operation => OR_OP, a=>'1', b=>'0', y=>'1'), (operation => OR_OP, a=>'1', b=>'1', y=>'1'), (operation => XOR_OP, a=>'0', b=>'0', y=>'0'), (operation => XOR_OP, a=>'0', b=>'1', y=>'1'), (operation => XOR_OP, a=>'1', b=>'0', y=>'1'), (operation => XOR_OP, a=>'1', b=>'1', y=>'0'), (operation => XNOR_OP, a=>'0', b=>'0', y=>'1'), (operation => XNOR_OP, a=>'0', b=>'1', y=>'0'), (operation => XNOR_OP, a=>'1', b=>'0', y=>'0'), (operation => XNOR_OP, a=>'1', b=>'1', y=>'1') );

36 36ECE 448 – FPGA and ASIC Design with VHDL Variables

37 37 Variables - features Can only be declared within processes and subprograms (functions & procedures) Initial value can be explicitly specified in the declaration When assigned take an assigned value immediately Variable assignments represent the desired behavior, not the structure of the circuit Can be used freely in testbenches Should be avoided, or at least used with caution in a synthesizable code

38 38 Variables - Example testing: PROCESS VARIABLE error_cnt: INTEGER := 0; BEGIN FOR i IN 0 to num_vectors-1 LOOP test_operation <= test_vector_table(i).operation; test_a <= test_vector_table(i).a; test_b <= test_vector_table(i).b; WAIT FOR 10 ns; IF test_y /= test_vector_table(i).y THEN error_cnt := error_cnt + 1; END IF; END LOOP; END PROCESS testing;

39 Example 2 Testbenches with Test Vectors Stored in Arrays of Records

40 40ECE 448 – FPGA and ASIC Design with VHDL Part 5 Advanced Testbenches with Test Vectors Stored in Text Files

41 41 Advanced Testbench (2) Processes Generating Input Stimuli Design Under Test (DUT) Process Comparing Actual Outputs vs. Expected Outputs Design Correct/Incorrect Yes/No Testvector file(s)

42 Example 3 Testbenches with Test Vectors Stored in a Text File

43 43 Hex format In order to read/write data in the hexadecimal notation, replace read with hread, and write with hwrite

44 44ECE 448 – FPGA and ASIC Design with VHDL Part 6 Lab 1 Demos


Download ppt "ECE 448 – FPGA and ASIC Design with VHDL George Mason University ECE 448 Lab 2 Implementing Combinational Logic in VHDL."

Similar presentations


Ads by Google