Tutorial de ModelSim PE Student Edition Instalación

Anuncio
Tutorial de ModelSim PE Student Edition
Instalación
●
●
●
●
●
●
●
●
●
●
●
●
Ir a http://portal.model.com/modelsim/downloads/license_agreement_form_gen.asp
Rellenar los datos y selecionar “Request Download”
Seleccionar el enlace ftp generado (e.g. ftp://xxxxx:yyyyy@ftp.model.com//)
Ir a la carpeta EDU
Descargar el instalador: modelsim-pe_student_edition.exe
Instalar ModelSim ejecutando el fichero descargado (usar WinE si el sistema operativo
es Linux - notas)
Debería aparecer la siguiente pantalla
Seleccionar “Next” repetidamente hasta que el instalador empiece a copiar los ficheros
El instalador abrirá una página Web - rellenar los datos y pedir la licencia
La licencia será enviada por e-mail, (fichero student_license.dat)
Copiar el anexo en la carpeta de instalación de ModelSim
○ Si estás usando Windows <install_dir> = C:\ModelTech_pe_edu_X.Xx
○ Si estás usando Linux+WinE <install_dir> = /home/myuser/.wine/drive_c/
ModelTech_pe_edu_X.Xx
La licencia será valida por 180 días, pero se puede volver a pedir en http://
www.model.com/download/edu
Ejecutar ModelSim desde el enlace en el escritorio
Primera simulación
Antes de simular un diseño, hay que crear una librería y compilar el código fuente en la librería.
● Crear una nueva carpeta (por ejemplo <work_dir> = C:\Users\myuser\DCSE or /home/
myuser/DCSE) y copiar en ella los ficheros siguientes:
○ <install_dir>/examples/tutorials/vhdl/basicSimulation/counter.vhd
○ <install_dir>/examples/tutorials/vhdl/basicSimulation/tcounter.vhd
● Ejecutar ModelSim
● Si es la primera vez que se ejecuta ModelSim, aparecerá la pantalla de bienvenida.
Seleccionar Close.
● Seleccionar File > Change Directory y cambiar a la carpeta <work_dir> (nota: en Linux
la carpeta se encuentra el en drive Z)
● Crear la librería de trabajo:
a. Seleccionar File > New > Library
b. Dejar todos los campos sin cambiar y seleccionar Ok
●
●
●
Compilar los ficheros VHDL. Ejecutar en la línea de comando (transcript): vcom -work
work counter.vhd tcounter.vhd
En la ventana Library, clicar el símbolo ’+’ a lado de la librería work para ver las
unidades de diseño compiladas
Cargar el diseño. Ejecutar en la línea de comando: vsim -novopt test_counter
●
●
●
●
●
●
●
●
Cuando se haya cargado el diseño, se abrirá la ventana Structure (etiquetada sim). Esta
ventana muestra la estructura jerárquica del diseño. Es posible navegar en la jerarquía
seleccionando los símbolos ’+’ (expandir) o ’-’ (contraer).
Además, se abrirá una ventana Objects y una Processes. La ventana Objects muestra
los nombres y los valores corriente de los objetos en la región seleccionada en la
ventana Structure. Los objetos incluyen señales, redes, registros, constantes y variables
que no estén declarados en un process, generics, o parameters (tres constructos del
VHDL).
Simular. Ya es posible simular. Pero antes de hacerlo, hay que abrir la ventana Wave y
añadir señales a ella.
Abrir la ventana Wave. Ejecutar: view wave
Añadir las señales a la ventana Wave. Ejecutar: add wave dut/*
Iniciar la simulación. Ejecutar: run 500 ns
Aparecerán las formas de onda siguientes. Intenta navegar y desplazar el campo de
vista.
Cuando hayas acabado, cierra la simulación ejecutando: quit -sim
El código fuente
La simulación precedente usa dos ficheros fuente, cada uno de los cuales representa una entity
diferente y específica una architecture conrespondiente:
Fichero
Descripción
Entitad (entity)
Arquitectura (architecture)
counter.vhd
Device under test
counter
only
tcounter.vhd
Test bench
tcounter
only
counter.vhd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
entity counter is
port (count : buffer bit_vector(8 downto 1);
clk
: in bit;
reset : in bit);
end;
architecture only of counter is
constant tpd_reset_to_count : time := 3 ns;
constant tpd_clk_to_count
: time := 2 ns;
function increment(val : bit_vector) return bit_vector
is
-- normalize the indexing
alias input : bit_vector(val'length downto 1) is val;
variable result : bit_vector(input'range) := input;
variable carry : bit := '1';
begin
for i in input'low to input'high loop
result(i) := input(i) xor carry;
carry := input(i) and carry;
exit when carry = '0';
end loop;
return result;
end increment;
begin
ctr:
process(clk, reset)
begin
if (reset = '1') then
if reset'event then
count <= (others => '0') after
tpd_reset_to_count;
end if;
elsif clk'event and (clk = '1') then
count <= increment(count) after tpd_clk_to_count;
end if;
end process;
end only;
tcounter.vhd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
entity test_counter is
PORT ( count : BUFFER bit_vector(8 downto 1));
end;
architecture only of test_counter is
COMPONENT counter
PORT ( count : BUFFER bit_vector(8 downto 1);
clk
: IN bit;
reset : IN bit);
END COMPONENT ;
SIGNAL clk
: bit := '0';
SIGNAL reset : bit := '0';
begin
dut : counter
PORT MAP (
count => count,
clk => clk,
reset => reset );
clock : PROCESS
begin
wait for 10 ns; clk
end PROCESS clock;
stimulus : PROCESS
begin
wait for 5 ns; reset
wait for 4 ns; reset
wait;
end PROCESS stimulus;
end only;
<= not clk;
<= '1';
<= '0';
Ejercicio 1
Cuando el compilador encuentra sólo una Arquitectura para una Entidad, la asocia
automaticamente a ella. Sin embargo es posible anular este comportamiento, añadiendo una
sentencia use.
1. Añadir la línea siguiente por debajo de la declaración del componente counter en el fichero
tcounter.vhd:
11b for dut : counter use entity work.counter(only);
2. Proponer y justificar un nombre más apropiado que “only” para la Arquitectura asociada a la
Entitad counter. Modificar el fichero fuente en acuerdo con el nuevo nombre y volver a simular
el ejemplo.
Ejercicio 2
El VHDL permite describir un sistema digital a nivel comportamental o estructural
(jerárquica). El nivel comportamental además se puede dividir entre dos estilos: a flujo de
datos o algoritmico. La representación a flujo de datos describe como los datos se mueven
a través del sistema. Esto se hace tipicamente en términos de flujo de datos entre registros
(register transfer level, rtl). El modelo a flujo de datos usa sentencias concurrentes que se
ejecutan en paralelo a la vez que lleguan los datos en entrada. Por contra, las sentencias
sequenciales se ejecutan una tras la otra en el mismo orden en el que estén escritas. El VHDL
permite usar ambos tipos de sentencias.
En el nivel estructural, el circuito está compuesto de sub-partes. La descripción especifica que
típos tienen las partes usadas y como estas están conectadas la una a la otra. Este tipo de
descripción es esencialmente un plano esquemático que representa un diagrama de bloques o
circuital.
1. Determinar los niveles de descripción del código en counter.vhd y en tcounter.vhd.
Justificar las respuestas.
2. Renombrar las arquitecturas añadiendo un sufijo que indique el tipo de descripción, de
acuerdo con las respuestas del punto 1.
Ejercicio 3
La palabra clave buffer en la declaración del contador en counter.vhd significa que el puerto
count es un puerto de salida, al cual se puede escribir pero también leer desde dentro la
arquitectura. Sin embargo, los tipos buffer no se usan comunemente en VHDL porqué pueden
causar problemas a la hora de sintetizar el automaticamente el hardware. En cambio es
preferible usar señales intermedios y declarar el puerto con el tipo out.
1. Cambiar el tipo del puerto count a out en la declaración de la entitad counter.
2. Aplicar las modificaciones oportunas para no incurrir en errores de lectura a un puerto
de salida (“read from output”).
Descargar