student exercises - IRESTE (98/99)

prepared by P.Bakowski

PART one - VHDL modeling and system integration

Exercise 0 : simulation start-up and an introductory example (binary adder and 4-bit adder )

Exercise 1: combinational circuit (7-segment display decoder)

Exercise 2: a simple sequential circuit (counter) with test and configuration module

Exercise 3: sequential circuit and system (counter and 7-segment decoder)

Exercise 4: generic RAM and memory sub-system

Exercise 5: building a system from your own processor and RAM subsystem

Exercise 6: building a complex system from your own memory-subsystem and an external processor  model (e.g. dp32, dlx, 8085, ARM, ..)
 


Exercise 0: a complete study of simple combination circuit - descriptional  aspects
 

Exercice 0 - partie A: 

Analyser et simuler l'additionneur binaire complet (full adder). 


Voir les commandes du simulateur ModelTech: 

initialisation - cette commande depend  de l'installation locale 

%setup modeltech 

créer un répertoire VHDL: 

%mkdir vhdl 


Commandes du ModelTech: 

initialiser la bibliotheque de travail - (work) 

%vlib work  

compilation d'un fichier source .vhd 

e.g. %vcom adder.vhd 

lancement du simulateur dans l'environnement X-windows: 

%vsim motif 


Quelques commandes internes du simulateur: 

afficher toutes les fenetres: 

VSIM> view *  

voir tous les signaux: 

VSIM> wave * 

forcer un signal d'entree- liste de valeurs et de retards en ns 

VSIM> force /a 1 10, 0 20, 1 40 

VSIM> force /b 1 20, 0 40 -repeat 40

 
a b cin s cout
0 

0 

0 

0 

1 

1 

1 

1

0 

0 

1 

1 

0 

0 

1 

1

0 

1 

0 

1 

0 

1 

0 

1

0 

1 

1 

0 

1 

0 

0 

1

0 

0 

0 

1 

0 

1 

1 

1



 
entity adder is   end adder;  

-- a,b,cin,s,cout are signals

 
architecture 

behavioral of adder is  

begin  

    s <= (a xor b) xor cin after sum_del;  

    cout <= (a and b) or (cin and a) or (cin and b) after carry_del; 

end behavioral; 

Exercice 0 - partie B: 

 


A partir de la description d'un additionneur binaire écrire un additionneur 4-bit en version fonctionnelle - architecture fonctionnelle:   
architecture fonctionnelle of adder4 is  

signal ... 

process(liste_de_sensibilite) 

variable ... 

begin 

for i in ... loop 

-- ici mettre l'operation de l'additionneur binaire 

end loop; 

end process; 
end fonctionnelle;


Attention
 
  • la première version de l'architecture fonctionnelle utilise une variable interne pour le stockage de la valeur de la retenue entre les étages de l'additionneur; le délai entre cin est cout est globalisé

  • la  deuxième version de l'architecture fonctionnelle doit utiliser des signaux intermediaires entre les étages de l'additionneur;   p.e. signal c: bit_vector(2 downto 0)  avec des délais locaux

  •  

  • la troisième  version de l'architecture fonctionnelle est générique :

  • dans l'interface de cette version il faut introduire le terme générique caractérisant la taille de l'additionneur 
    generic(taille: integer := 4); le module de l'architecture doit etre modifiée en conséquence 
     

  • la quatrième  version de l'architecture fonctionnelle contient une fonction "+" surchargée :

  • cette fonction "+" effectue l'opération de l'addition sur des vecteurs binaires, le résulat est un vecteur 
    binaire de la même taille que les opérandes;  
    dans ce cas l'expression s <= a + b; est acceptée le compilateur 
    reste le problème des retenues cin et cout ? 
     

Architecture "data flow" 
  • la  cinqième  version de l'architecture (additionneur 4 bits) est du type data flow  : elle ne contient que des affectations type signal enchainées par les signaux internes:
 
architecture dataflow of adder4 is  

signal ... 

begin 

    s(0) <= .. 
    c(0) <= .. 
    s(1) <= .. 
    c(1) <= .. 
    ..
end dataflow;


Architecture structurelle:   
architecture structurelle of adder4 is 

signal... 
 

begin 

add1: full_adder 

add2: ... 

... 

end structurelle;

 
Attention
 
  • la première version de l'architecture structurelle utilise une instantiation directe par  port map listé dans l'architecture 

  • la  deuxième version de l'architecture structurelle doit utiliser le mécanisme de génération des instantiations: generate

  •  

Exercise 1: a complete study of a simple combinational circuit - test bench aspect
 

Exercice 1: 

Ecrire et simuler un transcodeur du code DCB en segments d'un afficheur a 7 segments.

 


Attention
 
  • la première version peut être testée  manuellement avec les commandes du simulateur


  •  
  • la deuxième  version doit être testée  par une unité de test générant automatiquement  les valeurs nécessaires; cette solution est basée sur un système à deux composants: unité testée et unite de test. L'unité de test contient un algorithme de génération de vecteurs de test (p.e. un compteur) : voir test bench


     
  • la troisième  version doit être testée  par une unité de test générant et vérifiant automatiquement  les entrées et les sorties (reponses) du circuit testé ; cette solution est basée sur un système à deux composants: unité testée et unite de test. L'unité de test utilise un fichier de vecteurs de test préparé indépendament.


Exercise 2: a simple sequential circuit with test and configuration module
 

Exercice 2: 

Ecrire et simuler un circuit de compteur type "ripple carry" à quatre bascules. Dans cette exercice nous avons trois niveaux hierarchiques de description: 

  • bascule D (dff):  entrées - din, clr; sorties - q, qb
  • compteur quatre bits: quatres bascules dff interconnectés
  • banc de test "test bench": sorties - enb, clk, rst
Pour la description finale utiliser le module de configuration 
 
    configuration FourBitConfig of FourBitTop is 
    for structural 
      for fb: FourBitCounter 
              use entity work.FourBitCounter(FFstructure); 
              for FFstructure 
                  for all: DFF 
                           use entity work.DFlipFlop(behavioral); 
                  end for; 
              end for; 
      end for; 
      for TB: TestBench 
              use entity work.FourBitTB(simple); 
      end for; 
    end FourBitConfig;
  

 
 
 
 
 
 



Exercise 3: sequential circuit and system
 
Exercice 3: 

Ecrire et simuler un circuit sequentiel a 10 etats avec une ligne d'horloge (clk) et une ligne de reset (rst).  

Les sorties du sequenceur doivent etre connectees au converteur BCD->7 segments elabore dans le premier exercice. 

L'ensemble: le sequenceur et le transcodeur doivent etre integres dans une architecture structurelle a deux composants.

 



Exercise 4:
 

Exercice 4 

Ecrire et simuler un sous-systeme memoire compose de: 

  • 4 blocs RAM de taille generique
  • un decodeur pour les signaux de selection
  • bus adresse (abus) 
  • bus donnee (dbus) a trois etats
Attention: 
Utiliser logique standard IEEE et package numerique pour la traduction des adresses en entiers 
IEEE.std_logic_1164 et  IEEE.numeric_std. 

La logique standard  intègre un système logique à 9 valeurs et les fonctions de resolution nécessaires pour construire un bus. 
Pour l'inspiration  voir external links: "libs&cores" par exemple : Doulos
URL: http://www.doulos.co.uk/models

 


 



Attention
 
  • la première version de l'architecture structurelle utilise une instantiation directe par  port map listé dans l'architecture 

  • la  deuxième version de l'architecture structurelle doit utiliser le mécanisme de génération des instantiations: generate


Exercise 5:

 

Exercice 5: 
Behavioral model of a simple processor* 

(this model is a modified version of the ASIC processor taken from the book of U. Golze ,"VLSI Chip Design with Hardware Description Language VERILOG") 


This model implements a simple 32-bit processor. The processor has no registers; it reads and writes the operands 

directly from and to memory. 

Instructions 

The list of the instructions is as follows: 
 

opcode  name comments
NOP 

HLT 

BRA 

STR 

CPL 

ADD 

MUL 

SHF

no operation 

halt 

branch 

store 

complement 

add 

multiply 

shift

... 

... 

if flag of type CCODEis set, branch to BB 

if IMMED, MEM[BB] <= AA else MEM[BB] <= MEM[AA] 

if IMMED, MEM[BB] <= ~AA else MEM[BB] <= ~MEM[AA] 

MEM[BB]<=MEM[BB] + MEM[AA] 

MEM[BB]<=MEM[BB] * MEM[AA] 

if SHLEFT, shift MEM[BB] left by SHDIST, else shift right


Instruction formats: 
VERILOG model  

The source code of the behavioral description of the processor consists of one module 
This unique VERILOG module implements processor and memory. 
The description of the module begins with main memory declaration . The size of the memory is 2**12 of 32-bit words. 
The program counter is 12 bits. 
The 'define stements abbreviate the instruction fields and provide the code constants for different opcodes and condition codes. 
The task setcondcode is a function which computes the values of condition flags (status flags). 
The always block always execute one instruction of the application program:  
first an instruction is fetched from MEM and PC is increased then the instruction is decoded by a case statement. 
The selection  

      if ('IMMED) MEM['BB]='AA; 

      else MEM['BB] = MEM['AA];

distinguishes the two address modes: immediate and direct. 


The VERILOG code

A realiser: 

1. Transcrire le code VERILOG en VHDL et effectuer sa simulation 
2. Decomposer l'entite unique du model VHDL en deux parties (version "structurelle"): 

  • le sous-systeme memoire
  • le CPU
3. Simuler la version structurelle 
 
 
 

Exercise 6:
 

Exercice 6: 
Construction d'un système complet processeur/sous-systeme mémoire avec un model  externe du processeur: 
Le système mémoire est développé dans l'exercice 3  
Le processeur - modèle externe à chercher. 
 
Quelques exemples: 
A chercher dans: 
   
  • Regardez dans l'interface de ressources locales  - models 
  • Regardez dans l'interface externe - le bouton:  libs&cores 
  • Cherchez sur le WEB avec le bouton: WWW search 
 
 

Please mail the results using VCL mail