1 / 17

SystemC

Programación de Sistemas. SystemC. Waldo López Javier Santana. Porque SystemC ???. Noción de Tiempo Concurrencia Tipos de datos de HW. Todos estos inconvenientes son suplidos gracias a la aparición de SystemC. Sistema de SystemC. Formado por un conjunto de módulos

denis
Download Presentation

SystemC

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programación de Sistemas SystemC Waldo López Javier Santana

  2. Porque SystemC ??? • Noción de Tiempo • Concurrencia • Tipos de datos de HW Todos estos inconvenientes son suplidos gracias a la aparición de SystemC

  3. Sistema de SystemC Formado por un conjunto de módulos Módulos contienen procesos concurrentes, se comunican entre si a través de canales Procesos describen funcionalidad y se comunican entre si a través de canales o eventos

  4. Estructura básica de un modelo Un modulo puede representar: sistema, bloque, tablero, chip, etc Un puerto puede representar: interfaz, pins, etc

  5. El tiempo y algo mas Modelo del tiempo Se usa un numero entero 64-bit sin signo. Unidades de tiempo: SC_FS, SC_PS...SC_MS,SC_SEC Tipos de datos sc_unit<>, sc_int<> ; sc_logic ; sc_fixed<>, sc_ufixed<>; sc_biguint<>, sc_bigint<>; sc_lv<>....entre otros

  6. Interfaces y canales Interfaces Define un conjunto métodos de accesos Puramente funcional y no proporciona implementación Puesta en practica de interfaz se realiza dentro de un canal Existen: sc_signal_in_if ; sc_signal_inout_if, sc_fifo_in_if.... Canales Se utilizan para la comunicación entre procesos dentro de los módulos Primitivos o Jerárquicos Algunos canales son: sc_signal ; sc_fifo ; sc_mutex.... Syntax:sc_signal<T> signal_name, signal_name, ... ; Syntax:sc_fifo<T> channel_name, channel_name, ... ;

  7. Módulos y puertos Módulos Es un contenedor Se describe usando un header file (nombre_modulo.h) y un archivo de implementación (nombre_modulo.cpp) Un modulo puede tener procesos o instancias de otros módulos Syntax:SC_MODULE ( module_name) {    // body of module } ; Puertos Son creados desde la clase sc_port y son ligados a un tipo de interfaz Syntax:sc_port<interface_type, N> port_name, port_name,...;

  8. Procesos • Describen la funcionalidad. • Son similares a los métodos de C++ y a las funciones. • No son jerárquicos. • Entre lo más usados están: • Procesos Hilos (SC_THREAD) • Métodos (SC_METHOD)

  9. Procesos Hilos • Hilo de ejecución. • Uso de la función Wait(). • Para la creación de un proceso se deben seguir los siguiente pasos: • Declaración. • Definición. • Registro. SC_THREAD() • Declaración de la Sensibilidad estática (opcional).

  10. Métodos • Similar a un Hilo. • No puede ser suspendido. • Una vez ejecutado vuelve a al simulador que lo invoco. • Para crear métodos se realizan los siguientes pasos: • Declaración. • Definición. • Registro. SC_METHOD() • Declaración de la Sensibilidad estática (opcional).

  11. Ejemplo práctico. • Se implementara una compuerta Exor, usando 4 puertas NAND.

  12. # include “systemc.h” SC_MODULE (nand2) { sc_in<bool> A, B; sc_out<bool> F; void do_nand2 () { F.write (! A.read() &&B.read() ) ); } SC_CTOR(nand2) { SC_METHOD(do_nand2); Sensitive <<A << B; } }; Implementando una compuerta NAND.

  13. # include “nand2.h” SC_MODULE(exor29 { sc_in<bool> A, B; sc_out<bool> F; nand2 n1, n2, n3, n4; _signal<bool> S1, S2, S3; _CTOR(exor) : n1(“N1”), n2(“N2”), n3(“N3”), n4(“N4”), n1.A(A); n1.B(B); n1.F(S1); < A << S1 << S2; n3.(S1); n3.(B); n3.(S3); n4.A(S2); n4.B(S3); n4.F(F); } }; Creando el EXOR.

  14. #include “systemc.h” SC_MODULE (stim) { sc_out<bool> A, B; sc_in_clk Clk; void StimGen() { A.write (false); B.write (false); wait (); A.write (false); B.write (true); wait (); A.write (true); B.write (false); wait (); A.write (true); B.write (true); wait (); sc_stop(); } SC_CTOR(stim) { SC_CTHREAD(StimGen, Cñk.pos()); } }; Simulando las entradas.

  15. #include “systemc.h” #include “stim.h” #include “exor2.h” #include “mon.h” int sc_main (int argc, char* argv []) { sc_signal<bool> Asig, Bsig, Fsig; sc_clock TestClk(“TestClock”, 10, SC_NS_0.5); stim Stim1(“Stimulus”); Stim1.A(Asig); Stim1.B(Bsig); Stim1.Clk(TestClk); Exor2 DUT(“exor2”); DUT.A(Asig) ; DUT.B(Bsig) ; DUT.F(Fsig) ; mon Monitor1(“Monitor”) Monitor1.A(Asig); Monitor1.B(Bsig); Monitor1.F(Fsig); Monitor1.Clk(TestClk); sc_start() ; return 0; } Monitoreo de la salida.

  16. Finamente se visualiza lo siguiente: Time A B F 0 s 0 0 1 10 ns 0 0 0 20 ns 0 1 1 30 ns 1 0 1 40 ns 1 1 0

More Related