TSTE12

Individual handin exercises retake 2024-01-02


Solve the handin tasks individually! No cooperation with anyone else is allowed!

Theory questions are submitted in Lisam using the comment field.

A pass on this handin exercise requires atleast 6 correct exercises out of 9 on each of theory and code exercises respectively. Read closely the instructions on the handin main page!

Note the time schedule!
Handin exercises must be in place and compiled at latest by the deadline on the given date. Use the commands "module load courses/TSTE12 ; TSTE12handin" to open a shell window to work from.

Exercise retake part is due by Wednesday 10 January 2024 at 23.30!

The results will be available in the lisam course room.

Note:
   Read the instructions at the main page!!
   Ask if any difficulties or uncertainty!!
   Solve the tasks individually!!

Good luck!


Theory A

What is wrong related to signals in VHDL? 1) Signals are always initilized at simulation start
2) Signals can be assigned values from variables
3) Signals can be declared in the declaration area of a processes
4) Signals can be assigned values from constants



Theory B

What is wrong regarding VHDL timing? 1) Delta delays will add up to a standard delay
2) Signal updates are always delayed
3) Processes can contain wait statements
4) Attributes can be used to check old values of a signal



Theory C

What is the maximum number of different architectures connect to an entity declaration? 1) 1
2) 2
3) 16
4) not defined



Theory D

What is wrong related to variables? 4) Variable declarations does not include the type
1) Variables can be declared in functions
2) Variables can be assigned to the value of a constant
3) Variable declaration can define an initialisation value



Theory E

What is wrong regarding processes? 4) A process is required to have a sensitivity list
1) Procedures can be declared in a process
2) The process contains sequential code
3) Variables can be declared in processes



Theory F

What is not a valid VHDL identifier (VHDL standard 1987 version)? 1) One_fine_design
2) register
3) MC68000
4) address_bus



Theory G

What is wrong related to the VHDL language? 1) Data types are automatically translated to match the variable data type
2) Packages are used to support information hiding
3) Operators can be redefined (overloading)
4) Inheritence is not supported



Theory H

What is wrong regarding VHDL synthesis? 1) For and loop statements in a process can not be synthesized
2) Only a subset of the language can be synthesized
3) Fixed delays in signal assignments are ignored by synthesis tools
4) Integers can be used for synthesis



Teori J

What wrong related to FPGA hardware? 1) The synthesis output is executed by a processor in the FPGA chip
2) An FPGA can use a different clock frequency internally
3) RAM based FPGAs must be configured every time power is applied
4) FPGA hardware often contains features to speed up addition



Exercise Code A

   source file: INL5_KA.vhdl   Name of the source file.
        Entity: INL5_KA        Name of the entity
  Architecture: KA             Name of the architecture
        Inputs: A              data in, bit_vector(5 downto 2)
       Outputs: Y              data out, bit

      Behavour: Create a 4-input NOR-gate.
 
      Example: A="0100" => Y='0',
               A="1011" => Y='0',
               A="0000" => Y='1'
      


Exercise Code B

   source file: INL5_KB.vhdl   Name of the source file.
        Entity: INL5_KB        Name of the entity
  Architecture: KB             Name of the architecture
        Inputs: A              data in, integer
                Level          generic, integer, default value 5
       Outputs: Y              data out, bit

      Behavour: An level checker circuit with configurable level definition.
                Output '1' if A > Level, otherwise output '0'.

       Example: Level=5, A=9 => Y='1'
                Level=11, A=11 => Y='0'
                Level=-6, A=-7 => Y='0'


Exercise Code C

   source file: INL5_KC.vhdl   Name of the source file.
       Package: INL5_KC        Name of the package
      Function: KC             Name of the function
        Inputs: A              data in, bit
                B              data in, bit
                C              data in, bit
       Outputs:                data out, std_logic

      Behavour: Create a packet containing a function KC that checks that
                A, B and C have the same value. Return the value of A if
                A, B, and C have the same value, otherwise return 'X'.

      Examples: A='1',B='1',C='1' => '1'
                A='0',B='0',C='1' => 'X'


Exercise Code D

   
   source file: INL5_KD.vhdl   Name of the source file.
        Entity: INL5_KD        Name of the entity
  Architecture: KD             Name of the architecture
        Inputs: A              data in, std_logic_vector(1 to 2)
           Out: Y              data out, std_logic

     Behaviour: 2-input NAND-gate. An input of '0' or 'L' are seen as the
                logic level 0, and the input values '1' and 'H' are seen
                as the logic level 1. Output '1' or '0' according to the
                logic function if both inputs contain values from the set
                '0','1','L', or 'H'. If any of A or B contins any other
                value then output 'X'.

       Example: A="W0" => Y='X'
                A="H1" => Y='0' 
                A="00" => Y='1'
                A="HL" => Y='1'


Exercise Code E

   source file: INL5_KE.vhdl   Name of the source file.
        Entity: INL5_KE        Name of the entity
  Architecture: KE             Name of the architecture
        Inputs: D              data in, bit_vector(4 downto 1)
                S              data in, bit
                C              data in, bit
       Outputs: Q              data out, bit_vector(4 downto 1)

      Behavour: A positive edge trigged 4-bit register with synchronous set. 
                If a rising edge on C and S = '1' then Q = "1111". If a rising
                edge on C and S = '0' then copy the value from D to Q. 

       Example: Rising edge on C, S='0' and D="0011" => Q="0011"
                Rising edge on C, S='1' => Q="1111"


Exercise Code F

   source file: INL5_KF.vhdl   Name of the source file.
        Entity: INL5_KF        Name of the entity
  Architecture: KF             Name of the architecture
        Inputs: C              data in, bit
                L              data in, bit
                D              data in, bit_vector(2 downto 0)
       Outputs: Q              data out, bit_vector(2 downto 0)

      Behavour: Synchronous negative edge trigged binary upcounter with synchronous
                load. If L='1' and negative edge on C then copy D to Q. If L='0' and
                negative edge on C then increment the binary value of Q. Q="111" is
                incremented to "000".

       Example: L='1', D="101", negative edge on C => Q="101"
                L='0', negative edge on C, Q="010" => Q="011"
                L='0', negative edge on C, Q="111" => Q="000"


Exercise Code G

   source file: INL5_KG.vhdl   Name of the source file.
        Entity: INL5_KG        Name of the entity
  Architecture: KG             Name of the architecture
        Inputs: D              data in, bit
                C              data in, bit
       Outputs: Q              data out, bit_vector(1 to 3)

      Behavour: A positive edge trigged shift register. If positive edge on
                C then shift register to the left, and put value of D on the
                rightmost position of the register.

       Example: D='1', postive edge on C, Q="000" => Q="001"
                D='0', postive edge on C, Q="101" => Q="010"


Exercise Code H

   source file: INL5_KH.vhdl   Name of the source file.
        Entity: INL5_KH        Name of the entity
  Architecture: KH             Name of the architecture
        Inputs: A              data in, bit
                B              data in, bit
                R              data in, bit
                C              data in, bit
       Outputs: Q              data out, bit

      Behavour: Positive edge trigged state machine of Moore type with asynchronous
                reset input. The state machine should flip (0->1 or 1->0) then output
                when A=B in the previous clock cycle and A!=B in the current clock
                cycle.
                If R='1' then set Q='0', and assume A!=B in previous clock cycle.

       Example: (assume here these are in a sequence)
                R='1',A='0',B='1' => Q='0'
                R='0',A='0',B='0' => Q='0'
                R='0',A='1',B='0' rising edge on C => Q='0'
                R='0',A='0',B='0' rising edge on C => Q='0'
                R='0',A='1',B='0' rising edge on C => Q='1'
                R='0',A='1',B='1' rising edge on C => Q='1'
                R='0',A='0',B='0' rising edge on C => Q='1'
                R='0',A='0',B='1' rising edge on C => Q='0'


Exercise Code J

   source file: INL5_KJ.vhdl   Name of the source file.
        Entity: INL5_KJ        Name of the entity
  Architecture: KJ             Name of the architecture
        Inputs: A              data in, bit_vector(2 downto 1)
                B              data in, bit_vector(2 downto 1)
       Outputs: Y              data out, bit_vector(2 downto 1)

      Behavour: Instanciate the component work.INL5_KJ_test(behav) into the 
                design. The component will have the same inputs and outputs as
                INL5_KJ. Connect input A to input A on INL5_KJ_test. The Y
                output from INL5_KJ_test should inverted before
                reaching the Y output of INL5_KJ.

       Example: Assume INL5_KJ_test calculates the bitwise AND function between A and B
                (A(2) and B(2); A(1) and B(1)) then A = "01", B = "11" => Y = "10"