Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
V
VHDL_2023
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Deploy
Releases
Package registry
Container Registry
Model registry
Operate
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Teo Pisenti
VHDL_2023
Commits
0bfb7936
Commit
0bfb7936
authored
1 year ago
by
Teo Pisenti
Browse files
Options
Downloads
Patches
Plain Diff
le test complet du RxUnit
parent
765b9784
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
UART/UART_Emission/testRxUnit.vhd
+190
-49
190 additions, 49 deletions
UART/UART_Emission/testRxUnit.vhd
with
190 additions
and
49 deletions
UART/UART_Emission/testRxUnit.vhd
+
190
−
49
View file @
0bfb7936
...
...
@@ -27,68 +27,90 @@
--------------------------------------------------------------------------------
LIBRARY
ieee
;
USE
ieee
.
std_logic_1164
.
ALL
;
-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
--USE ieee.numeric_std.ALL;
ENTITY
testRxUnit
IS
END
testRxUnit
;
END
testRxUnit
;
ARCHITECTURE
behavior
OF
testRxUnit
IS
-- Component Declaration for the Unit Under Test (UUT)
component
RxUnit
IS
PORT
(
clk
,
reset
:
IN
STD_LOGIC
;
enable
:
IN
STD_LOGIC
;
read
:
IN
STD_LOGIC
;
rxd
:
IN
STD_LOGIC
;
data
:
OUT
STD_LOGIC_VECTOR
(
7
DOWNTO
0
);
Ferr
,
OErr
,
DRdy
:
OUT
STD_LOGIC
);
END
component
;
component
RxUnit
IS
PORT
(
clk
,
reset
:
IN
STD_LOGIC
;
enable
:
IN
STD_LOGIC
;
read
:
IN
STD_LOGIC
;
rxd
:
IN
STD_LOGIC
;
data
:
OUT
STD_LOGIC_VECTOR
(
7
DOWNTO
0
);
Ferr
,
OErr
,
DRdy
:
OUT
STD_LOGIC
);
END
component
;
COMPONENT
clkUnit
PORT
(
clk
:
IN
std_logic
;
reset
:
IN
std_logic
;
enableTX
:
OUT
std_logic
;
enableRX
:
OUT
std_logic
);
END
COMPONENT
;
-- Vu qu'on a deja testé le TxUnit, autant l'utiliser
-- pour généréer nos signaux de test
COMPONENT
TxUnit
PORT
(
clk
:
IN
std_logic
;
reset
:
IN
std_logic
;
enable
:
IN
std_logic
;
ld
:
IN
std_logic
;
txd
:
OUT
std_logic
;
regE
:
OUT
std_logic
;
bufE
:
OUT
std_logic
;
data
:
IN
std_logic_vector
(
7
downto
0
)
);
END
COMPONENT
;
COMPONENT
clkUnit
PORT
(
clk
:
IN
std_logic
;
reset
:
IN
std_logic
;
enableTX
:
OUT
std_logic
;
enableRX
:
OUT
std_logic
);
END
COMPONENT
;
signal
clk
:
std_logic
:
=
'0'
;
signal
reset
:
std_logic
:
=
'0'
;
signal
enableTx
:
std_logic
:
=
'0'
;
signal
enableRx
:
std_logic
:
=
'0'
;
signal
data
:
std_logic_vector
(
7
downto
0
);
-- Clock period definitions
constant
clk_period
:
time
:
=
10
ns
;
signal
clk
:
std_logic
:
=
'0'
;
signal
reset
:
std_logic
:
=
'0'
;
signal
enableTx
:
std_logic
:
=
'0'
;
signal
enableRx
:
std_logic
:
=
'0'
;
signal
Ferr
,
OErr
,
DRdy
:
STD_LOGIC
;
-- Clock period definitions
constant
clk_period
:
time
:
=
10
ns
;
signal
read
:
std_logic
;
-- signaux à tester (vérifier qu'on a les outputs attendues)
signal
Ferr
,
OErr
,
DRdy
:
STD_LOGIC
;
signal
data
:
std_logic_vector
(
7
downto
0
);
signal
rxd
:
std_logic
;
-- signaux générés par le test à envoyer au composant
-- à tester
signal
read
:
std_logic
:
=
'0'
;
signal
rxd
,
ld
,
txd
:
std_logic
;
signal
data_in
:
std_logic_vector
(
7
downto
0
);
signal
selection
:
std_logic
;
-- permet de choisir si rxd = txd
-- ou si on choisit sa valeur manuellement
BEGIN
-- Instantiate the Unit Under Test
-- Instantiate the Unit Under Test
uut0
:
RxUnit
PORT
MAP
(
clk
=>
clk
,
reset
=>
reset
,
enable
=>
enableRX
,
read
=>
read
,
rxd
=>
rxd
,
data
=>
data
,
Ferr
=>
Ferr
,
OErr
=>
OErr
,
DRdy
=>
DRdy
);
-- Instantiate the clkUnit
clk
=>
clk
,
reset
=>
reset
,
enable
=>
enableRX
,
read
=>
read
,
rxd
=>
rxd
,
data
=>
data
,
Ferr
=>
Ferr
,
OErr
=>
OErr
,
DRdy
=>
DRdy
);
-- Instantiate the clkUnit
clkUnit1
:
clkUnit
PORT
MAP
(
clk
=>
clk
,
reset
=>
reset
,
...
...
@@ -96,7 +118,7 @@ BEGIN
enableRX
=>
enableRX
);
-- Clock process definitions
-- Clock process definitions
clk_process
:
process
begin
clk
<=
'0'
;
...
...
@@ -106,14 +128,133 @@ BEGIN
end
process
;
-- Stimulus process
-- On utilise le TxUnit déjà testé pour nous aider
-- à générer le signal rxd
txUnit1
:
TxUnit
port
map
(
clk
=>
clk
,
enable
=>
enableTx
,
reset
=>
reset
,
ld
=>
ld
,
txd
=>
txd
,
regE
=>
open
,
bufE
=>
open
,
data
=>
data_in
);
-- choisir si rxd est piloté par le TxUnit ou géré manuellement
rxd
<=
txd
when
selection
=
'1'
else
'0'
;
-- Automate qui sert à générer le test
stim_proc
:
process
begin
-- maintien du reset durant 100 ns.
selection
<=
'1'
;
-- maintien du reset durant 100 ns.
wait
for
100
ns
;
reset
<=
'1'
;
wait
for
100
ns
;
-- TEST TRANSMISSION CORRECTE 1
data_in
<=
"10100101"
;
-- valeur aléatoire
ld
<=
'1'
;
wait
for
(
clk_period
);
-- on attend que ld soit vu
ld
<=
'0'
;
wait
for
(
clk_period
*
5
);
-- on attend le vrai début de l'envoi
wait
for
(
clk_period
*
16
*
9
);
-- on attend fin envoi (8 bits + start)
wait
for
(
clk_period
*
8
);
-- le RxUnit travaille avec tmpclk décalée de 8 clocks
wait
for
(
clk_period
);
-- on attend que DRdy soit mis à jour
wait
for
(
clk_period
/
2
);
-- on se désynchronise de l'horloge du RxUnit
-- tester que la fin d'envoi est correcte
assert
DRdy
=
'1'
report
"donnée pas prête à être lue à temps"
severity
error
;
assert
Ferr
=
'0'
report
"la donnée n'a pas été correctement reçue"
severity
error
;
assert
data
=
"10100101"
report
"c'est pas la donnée qu'on a envoyée !!"
severity
error
;
read
<=
'1'
;
-- on prévient qu'on a lu
wait
for
(
clk_period
);
-- on attend que read soit vu
assert
OErr
=
'0'
report
"OErr alors que le processeur a lu la data"
severity
error
;
read
<=
'0'
;
wait
for
(
clk_period
/
2
);
-- on se resynchronise de l'horloge du RxUnit
wait
for
100
ns
;
-- TEST TRANSMISSION CORRECTE 2
-- envoi de 2 données à la suite
data_in
<=
"10110111"
;
-- valeur aléatoire
ld
<=
'1'
;
wait
for
(
clk_period
);
-- on attend que ld soit vu
ld
<=
'0'
;
data_in
<=
"11110000"
;
-- valeur aléatoire numéro 2 envoyée en buffer
wait
for
(
clk_period
);
-- on attend que ld soit vu
ld
<=
'1'
;
-- deuxième ordre d'envoi
wait
for
(
clk_period
);
-- on attend que ld soit vu
ld
<=
'0'
;
wait
for
(
clk_period
*
8
);
-- on attend le vrai début de l'envoi
wait
for
(
clk_period
*
16
*
9
);
-- on attend fin envoi (8 bits + start)
wait
for
(
clk_period
*
8
);
-- le RxUnit travaille avec tmpclk décalée de 8 clocks
wait
for
(
clk_period
);
-- on attend que DRdy soit mis à jour
wait
for
(
clk_period
/
2
);
-- on se désynchronise de l'horloge du RxUnit
-- tester que la fin d'envoi est correcte
assert
DRdy
=
'1'
report
"donnée pas prête à être lue à temps"
severity
error
;
assert
Ferr
=
'0'
report
"la donnée n'a pas été correctement reçue"
severity
error
;
assert
data
=
"10110111"
report
"c'est pas la donnée qu'on a envoyée !!"
severity
error
;
read
<=
'1'
;
-- on prévient qu'on a lu
wait
for
(
clk_period
);
-- on attend que read soit vu
assert
OErr
=
'0'
report
"OErr alors que le processeur a lu la data"
severity
error
;
read
<=
'0'
;
wait
for
(
clk_period
/
2
);
-- on se resynchronise de l'horloge du RxUnit
wait
for
(
clk_period
*
5
);
-- on attend le vrai début du second envoi (sans pause)
wait
for
(
clk_period
*
16
*
9
);
-- on attend fin envoi (8 bits + stop)
wait
for
(
clk_period
*
8
);
-- le RxUnit travaille avec tmpclk décalée de 8 clocks
wait
for
(
clk_period
);
-- on attend que DRdy soit mis à jour
wait
for
(
clk_period
/
2
);
-- on se désynchronise de l'horloge du RxUnit
-- tester que la fin d'envoi est correcte
assert
DRdy
=
'1'
report
"donnée pas prête à être lue à temps"
severity
error
;
assert
Ferr
=
'0'
report
"la donnée n'a pas été correctement reçue"
severity
error
;
assert
data
=
"11110000"
report
"c'est pas la donnée qu'on a envoyée !!"
severity
error
;
read
<=
'1'
;
-- on prévient qu'on a lu
wait
for
(
clk_period
);
-- on attend que read soit vu
assert
OErr
=
'0'
report
"OErr alors que le processeur a lu la data"
severity
error
;
read
<=
'0'
;
wait
for
(
clk_period
/
2
);
-- on se resynchronise de l'horloge du RxUnit
wait
for
100
ns
;
-- TEST TRANSMISSION ERREUR : BIT STOP MANQUANT
data_in
<=
"10110111"
;
-- valeur aléatoire
ld
<=
'1'
;
wait
for
(
clk_period
);
-- on attend que ld soit vu
ld
<=
'0'
;
wait
for
(
clk_period
*
10
);
-- on attend le vrai début de l'envoi
wait
for
(
clk_period
*
16
*
9
);
-- on attend bit stop (start + 8 bits data)
selection
<=
'0'
;
-- on force rxd à 0 pour causer une erreur de bit de stop
wait
for
(
clk_period
*
9
);
-- le RxUnit travaille avec tmpclk décalée de 8 clocks
wait
for
(
clk_period
/
2
);
-- on se resynchronise de l'horloge du RxUnit
assert
Ferr
=
'1'
report
"bit de stop manquant non détecté"
severity
error
;
selection
<=
'1'
;
wait
for
(
clk_period
/
2
);
-- on se resynchronise de l'horloge du RxUnit
wait
for
100
ns
;
assert
Ferr
=
'0'
report
"Ferr non réinitialisé"
severity
error
;
-- TEST TRANSMISSION ERREUR : DATA PAS LUE À TEMPS
data_in
<=
"10110111"
;
-- valeur aléatoire
ld
<=
'1'
;
wait
for
(
clk_period
);
-- on attend que ld soit vu
ld
<=
'0'
;
wait
for
(
clk_period
*
10
);
-- on attend le vrai début du second envoi (sans pause)
wait
for
(
clk_period
*
16
*
9
);
-- on attend fin envoi (8 bits + stop)
wait
for
(
clk_period
*
8
);
-- le RxUnit travaille avec tmpclk décalée de 8 clocks
wait
for
(
clk_period
);
-- on attend que DRdy soit mis à jour
wait
for
(
clk_period
/
2
);
-- on se désynchronise de l'horloge du RxUnit
wait
for
(
clk_period
*
2
);
-- on attend 2 tours de clock pour lire la data trop tard
assert
Oerr
=
'1'
report
"non détection que la donnée n'a pas été lue"
severity
error
;
wait
for
100
ns
;
assert
Oerr
=
'0'
report
"Oerr non réinitialisé"
severity
error
;
wait
for
200
ns
;
wait
;
end
process
;
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment