Descarga la aplicación para disfrutar aún más
Esta es una vista previa del archivo. Inicie sesión para ver el archivo original
DISENOECO/.DS_Store __MACOSX/DISENOECO/._.DS_Store DISENOECO/archivos_practica.rar top_system1.vhd library ieee; use ieee.std_logic_1164.all; entity top_system1 is port( CLK : in std_logic; RST : in std_logic; ASTRB : in std_logic; DSTRB : in std_logic; DATA : inout std_logic_vector(7 downto 0); PWRITE : in std_logic; PWAIT : out std_logic; SWITCHES_I : in std_logic_vector(7 downto 0); PSH_BUTTON : in std_logic; LEDS_O : out std_logic_vector (7 downto 0)); end top_system1; architecture rtl of top_system1 is signal DIR, DIR_REG,DATO,DATO_REG,DATO_RD : std_logic_vector (7 downto 0); signal DIR_VLD, DATO_VLD,CE_RD : std_logic; begin -- rtl DUT:entity work.cnt_epp port map ( CLK => CLK, RST => RST, ASTRB => ASTRB, DSTRB => DSTRB, DATA => DATA, PWRITE => PWRITE, PWAIT => PWAIT, DATO_RD => DATO_RD, CE_RD => CE_RD, DIR => DIR, DIR_VLD => DIR_VLD, DATO => DATO, DATO_VLD => DATO_VLD); end rtl; V01.dat V02.dat gen_funciones.ucf NET "RELOJ" LOC = "L15"; # onBoard USB controller NET "ASTRB" LOC = "B9"; NET "DSTRB" LOC = "A9"; NET "PWRITE" LOC = "C15"; NET "PWAIT" LOC = "F13"; NET "DATA<0>" LOC = "A2"; NET "DATA<1>" LOC = "D6"; NET "DATA<2>" LOC = "C6"; NET "DATA<3>" LOC = "B3"; NET "DATA<4>" LOC = "A3"; NET "DATA<5>" LOC = "B4"; NET "DATA<6>" LOC = "A4"; NET "DATA<7>" LOC = "C5"; # onBoard Pushbuttons NET "RST" LOC = "N4"; # DAC NET "SYNC" LOC = "T3" ; NET "D1" LOC = "R3" ; NET "D2" LOC = "P6" ; NET "SCLK" LOC = "N5" ; top_system1.ucf NET "CLK" LOC = "L15"; # onBoard USB controller NET "ASTRB" LOC = "B9"; NET "DSTRB" LOC = "A9"; NET "PWRITE" LOC = "C15"; NET "PWAIT" LOC = "F13"; NET "DATA<0>" LOC = "A2"; NET "DATA<1>" LOC = "D6"; NET "DATA<2>" LOC = "C6"; NET "DATA<3>" LOC = "B3"; NET "DATA<4>" LOC = "A3"; NET "DATA<5>" LOC = "B4"; NET "DATA<6>" LOC = "A4"; NET "DATA<7>" LOC = "C5"; # onBoard Pushbuttons NET "PSH_BUTTON" LOC = "F5"; NET "RST" LOC = "N4"; # onBoard LEDS NET "LEDS_O<0>" LOC = "U18"; NET "LEDS_O<1>" LOC = "M14"; NET "LEDS_O<2>" LOC = "N14"; NET "LEDS_O<3>" LOC = "L14"; NET "LEDS_O<4>" LOC = "M13"; NET "LEDS_O<5>" LOC = "D4"; NET "LEDS_O<6>" LOC = "P16"; NET "LEDS_O<7>" LOC = "N12"; # onBoard SWITCHES NET "SWITCHES_I<0>" LOC = "A10"; NET "SWITCHES_I<1>" LOC = "D14"; NET "SWITCHES_I<2>" LOC = "C14"; NET "SWITCHES_I<3>" LOC = "P15"; NET "SWITCHES_I<4>" LOC = "P12"; NET "SWITCHES_I<5>" LOC = "R5"; NET "SWITCHES_I<6>" LOC = "T5"; NET "SWITCHES_I<7>" LOC = "E4"; cnt_dac.vhd library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity cnt_dac is port ( CLK : in std_logic; RST : in std_logic; DATO1 : in std_logic_vector(11 downto 0); DATO2 : in std_logic_vector(11 downto 0); DATO_OK : in std_logic; SYNC : out std_logic; SCLK : out std_logic; D1 : out std_logic; D2 : out std_logic); end cnt_dac; architecture RTL of cnt_dac is begin -- RTL end RTL; cnt_dpram.vhd library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity cnt_dpram is port ( CLK : in std_logic; RST : in std_logic; DIR : in std_logic_vector (7 downto 0); DIR_VLD : in std_logic; DATO : in std_logic_vector (7 downto 0); DATO_VLD : in std_logic; ADDRESS : out std_logic_vector(7 downto 0); DATA : out std_logic_vector(11 downto 0); WE_DP1 : out std_logic; WE_DP2 : out std_logic); end cnt_dpram; architecture RTL of cnt_dpram is constant dir_dpram1 : std_logic_vector( 7 downto 0) := x"A1"; constant dir_dpram2 : std_logic_vector( 7 downto 0) := x"A2"; begin -- RTL end RTL; cnt_epp.vhd library IEEE; use IEEE.STD_LOGIC_1164.all; entity cnt_epp is port ( CLK : in std_logic; RST : in std_logic; ASTRB : in std_logic; DSTRB : in std_logic; DATA : inout std_logic_vector(7 downto 0); PWRITE : in std_logic; PWAIT : out std_logic; DATO_RD : in std_logic_vector(7 downto 0); CE_RD : out std_logic; DIR : out std_logic_vector (7 downto 0); DIR_VLD : out std_logic; DATO : out std_logic_vector (7 downto 0); DATO_VLD : out std_logic); end ; architecture rtl of cnt_epp is begin end rtl; DAC121S101.vhd library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity DAC121S101 is port ( VOUT : out real range 0.0 to 3.5; SYNC : in std_logic; SCLK : in std_logic; DIN : in std_logic); end DAC121S101; architecture rtl of DAC121S101 is signal dato_bin, reg_desp : std_logic_vector(15 downto 0) := (others => '0'); signal cuenta : natural; constant tSCLK : time := 33 ns; constant tL, tH : time := 13 ns; constant tcs : time := 3 ns; constant tsud : time := 5 ns; constant tdhd : time := 4.5 ns; constant tSYNC : time := 20 ns; signal taux1, taux2 : time; begin ------------------------------------------------------------------------------- -- verificación de tiempos assert not(taux1 -taux2 <= tSCLK) report "VIOLACIÓN DEL TIEMPO PERIODO DE SCLK(tCS)" severity error; process (SCLK) variable aux1, aux2 : time; begin if SCLK'event and SCLK = '0' then taux1 <= now; taux2 <= taux1; if SCLK = '1' then aux2 := aux1; aux1 := now; assert not(aux1-aux2 <= tL) report "VIOLACIÓN DEL TIEMPO A NIVEL BAJO DE SCLK (tL)" severity error; else aux2 := aux1; aux1 := now; assert not(aux1-aux2 <= tH) report "VIOLACIÓN DEL TIEMPO A NIVEL ALTO DE SCLK (tH)" severity error; end if; end if; end process; process (SYNC) variable aux6, aux7 : time; begin aux7 := aux6; aux6 := now; if SYNC'event and SYNC = '0' then assert not(aux6-aux7 <= tSYNC) report "VIOLACIÓN DE LA DURACIÓN DEL TIEMPO DEL NIVEL ALTO DE SYNC (tSYNC)" severity error; end if; if SYNC'event and SYNC = '1' then if SCLK='0' then assert not(SCLK'last_event <= tcs) report "VIOLACIÓN DEL TIEMPO tCS" severity error; end if; end if; end process; ----------------------------------------------------------------------------- -- Modelado de funcionamiento. process (SCLK, SYNC) begin if SYNC = '1' then cuenta <= 0; reg_desp <= (others => '0'); elsif SCLK'event and SCLK = '0' then if cuenta < 16 then cuenta <= cuenta+1; reg_desp <= reg_desp(14 downto 0)&DIN; end if; end if; end process; process (cuenta, SYNC, reg_desp) begin if SYNC = '0' then if cuenta = 16 then dato_bin <= reg_desp; end if; end if; end process; process (dato_bin, cuenta) begin -- process if cuenta = 16 then case dato_bin(15 downto 14) is when "00" => VOUT <= real(to_integer(unsigned(dato_bin(11 downto 0))))*3.3/4096.0; when "11" => VOUT <= 3.4; when others => VOUT <= 0.0; end case; end if; end process; end rtl; dpram_mem.vhd library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity dpram_mem is port ( DIN : in std_logic_vector(11 downto 0); ADDR_IN : in std_logic_vector(7 downto 0); WE : in std_logic; CLK : in std_logic; RST : in std_logic; ADDR_OUT : in std_logic_vector(7 downto 0); DOUT : out std_logic_vector(11 downto 0)); end entity; architecture rtl of dpram_mem is begin end rtl; epp_device.vhd library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use std.textio.all; use ieee.std_logic_textio.all; entity epp_device is port ( DATA : inout std_logic_vector(7 downto 0); PWRITE : out std_logic; DSTRB : out std_logic; ASTRB : out std_logic; PWAIT : in std_logic); end epp_device; architecture sim of epp_device is constant T_clk_epp : time := 100 ns; -- Internal clock period. signal clk_epp : std_logic := '0'; -- Internal clock signal. signal read_value : std_logic_vector(7 downto 0) := (others => '0'); constant dir_frec : std_logic_vector( 7 downto 0) := x"F0"; constant dir_dpram1 : std_logic_vector( 7 downto 0) := x"A1"; constant dir_dpram2 : std_logic_vector( 7 downto 0) := x"A2"; constant EPP_cicle_length : natural := 10; begin -- internal clock signal generation. clk_epp <= not(clk_epp) after T_clk_epp/2; process procedure epp_cycle ( address : in std_logic_vector(7 downto 0); data_io : inout std_logic_vector(7 downto 0); r_w : in character) is begin wait until clk_epp = '1'; PWRITE <= '0'; wait until clk_epp = '1'; ASTRB <= '0'; data <= address; wait for T_clk_epp*EPP_cicle_length; ASTRB <= '1'; wait until clk_epp = '1'; data <= (others => 'Z'); PWRITE <= '1'; wait until clk_epp = '1'; wait for T_clk_epp*EPP_cicle_length; ------------------------------------------------------------------------------- if r_w = 'w' then -- write cicle PWRITE <= '0'; data <= data_io; end if; ------------------------------------------------------------------------------- wait until clk_epp = '1'; DSTRB <= '0'; wait for T_clk_epp*EPP_cicle_length; if r_w = 'r' then data_io:= data; end if; DSTRB <= '1'; wait until clk_epp = '1'; data <= (others => 'Z'); PWRITE <= '1'; wait until clk_epp = '1'; end procedure; variable dato : std_logic_vector(7 downto 0); variable dir : std_logic_vector(7 downto 0); begin --inicialización data <= (others => 'Z'); PWRITE <= '1'; DSTRB <= '1'; ASTRB <= '1'; dir := (others => '0'); wait for 130 ns; -- ciclos de lectura/escritura report "FIN CICLO R/W" severity failure; end process; end sim; gen_dir.vhd library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity gen_dir is port ( CLK : in std_logic; RST : in std_logic; DIR : in std_logic_vector (7 downto 0); DIR_VLD : in std_logic; DATO : in std_logic_vector (7 downto 0); DATO_VLD : in std_logic; ADDR_OUT : out std_logic_vector(7 downto 0); DATO_OK : out std_logic); end gen_dir; architecture rtl of gen_dir is constant dir_frec : std_logic_vector( 7 downto 0) := x"F0"; constant T_DAC : integer := 68; --pulsos dura la conversion mínima begin end rtl; gen_funciones.vhd library ieee; use ieee.std_logic_1164.all; entity gen_funciones is port ( RELOJ : in std_logic; RST : in std_logic; -- PUERTO EPP ASTRB : in std_logic; DSTRB : in std_logic; DATA : inout std_logic_vector(7 downto 0); PWRITE : in std_logic; PWAIT : out std_logic; -- DAC SYNC : out std_logic; SCLK : out std_logic; D1 : out std_logic; D2 : out std_logic); end gen_funciones; architecture rtl of gen_funciones is signal CLK : std_logic; --SEÑALES DEL CONTROLADOR EPP-- signal DIR : std_logic_vector (7 downto 0); signal DIR_VLD : std_logic; signal DATO : std_logic_vector (7 downto 0); signal DATO_VLD : std_logic; signal DATO_RD : std_logic_vector (7 downto 0); signal CE_RD : std_logic; --SEÑALES DEL CONTROLADOR DPRAM-- signal ADDRESS : std_logic_vector(7 downto 0); signal DATA_DP : std_logic_vector (11 downto 0); signal WE_DP1 : std_logic; signal WE_DP2 : std_logic; --SEÑALES DE LAS MEMORIAS DPRAM-- signal DATO1 : std_logic_vector (11 downto 0); signal DATO2 : std_logic_vector (11 downto 0); --SEÑALES DE GENERADOR DE _DIRECCIONES-- signal ADDR_OUT : std_logic_vector(7 downto 0); signal DATO_OK : std_logic; begin -- rtl U_dcm :entity work.dcm port map (CLK_IN => RELOJ, CLK_OUT => CLK, RESET => RST); U_cnt_epp:entity work.cnt_epp port map ( CLK => CLK, RST => RST, ASTRB => ASTRB, DSTRB => DSTRB, DATA => DATA, PWRITE => PWRITE, PWAIT => PWAIT, DATO_RD => DATO_RD, CE_RD => CE_RD, DIR => DIR, DIR_VLD => DIR_VLD, DATO => DATO, DATO_VLD => DATO_VLD); U_cnt_dpram:entity work.cnt_dpram port map ( CLK => CLK, RST => RST, DIR => DIR, DIR_VLD => DIR_VLD, DATO => DATO, DATO_VLD => DATO_VLD, ADDRESS => ADDRESS, DATA => DATA_DP, WE_DP1 => WE_DP1, WE_DP2 => WE_DP2); U_dpram_mem1 : entity work.dpram_mem port map ( DIN => DATA_DP, ADDR_IN => ADDRESS, WE => WE_DP1, CLK => CLK, RST => RST, ADDR_OUT => ADDR_OUT, DOUT => DATO1); U_dpram_mem2 : entity work.dpram_mem port map ( DIN => DATA_DP, ADDR_IN => ADDRESS, WE => WE_DP2, CLK => CLK, RST => RST, ADDR_OUT => ADDR_OUT, DOUT => DATO2); U_gen_dir:entity work.gen_dir port map ( CLK => CLK, RST => RST, DIR => DIR, DIR_VLD => DIR_VLD, DATO => DATO, DATO_VLD => DATO_VLD, ADDR_OUT => ADDR_OUT, DATO_OK => DATO_OK); U_cnt_dac :entity work.cnt_dac port map ( CLK => CLK, RST => RST, DATO1 => DATO1, DATO2 => DATO2, DATO_OK => DATO_OK, SYNC => SYNC, SCLK => SCLK, D1 => D1, D2 => D2); end rtl; DAC121S101.pdf DAC121S101/DAC121S101Q February 19, 2010 12-Bit Micro Power, RRO Digital-to-Analog Converter General Description The DAC121S101 is a full-featured, general purpose 12-bit voltage-output digital-to-analog converter (DAC) that can op- erate from a single +2.7V to 5.5V supply and consumes just 177 µA of current at 3.6 Volts. The on-chip output amplifier allows rail-to-rail output swing and the three wire serial inter- face operates at clock rates up to 30 MHz over the specified supply voltage range and is compatible with standard SPI™, QSPI, MICROWIRE and DSP interfaces. Competitive de- vices are limited to 20 MHz clock rates at supply voltages in the 2.7V to 3.6V range. The supply voltage for the DAC121S101 serves as its voltage reference, providing the widest possible output dynamic range. A power-on reset circuit ensures that the DAC output powers up to zero volts and remains there until there is a valid write to the device. A power-down feature reduces power consumption to less than a microWatt. The low power consumption and small packages of the DAC121S101 make it an excellent choice for use in battery operated equipment. The DAC121S101 is a direct replacement for the AD5320 and the DAC7512 and is one of a family of pin compatible DACs, including the 8-bit DAC081S101 and the 10-bit DAC101S101. The DAC121S101 operates over the extended industrial tem- perature range of −40°C to +105°C while the DAC121S101Q operates over the Grade 1 automotive temperature range of −40°C to +125°C. The DAC121S101 is available in a 6-lead TSOT and an 8-lead MSOP and the DAC121S101Q is avail- able in the 6-lead TSOT only. Features ■ DAC121S101Q is AEC-Q100 Grade 1 qualified and is manufactured on an Automotive Grade Flow. ■ Guaranteed Monotonicity ■ Low Power Operation ■ Rail-to-Rail Voltage Output ■ Power-on Reset to Zero Volts Output ■ Wide Temperature Range of −40°C to +125°C ■ Wide Power Supply Range of +2.7V to +5.5V ■ Small Packages ■ Power Down Feature Key Specifications ■ Resolution 12 bits ■ DNL +0.25, -0.15 LSB (typ) ■ Output Settling Time 8 µs (typ) ■ Zero Code Error 4 mV (typ) ■ Full-Scale Error −0.06 %FS (typ) ■ Power Consumption ■ — Normal Mode 0.64mW (3.6V) / 1.43mW (5.5V) typ — Pwr Down Mode 0.14µW (3.6V) / 0.39µW (5.5V) typ Applications ■ Battery-Powered Instruments ■ Digital Gain and Offset Adjustment ■ Programmable Voltage & Current Sources ■ Programmable Attenuators ■ Automotive Pin Configuration 20114901 20114902 SPI™ is a trademark of Motorola, Inc. © 2010 National Semiconductor Corporation 201149 www.national.com D A C 1 2 1 S 1 0 1 /D A C 1 2 1 S 1 0 1 Q 1 2 -B it M ic ro P o w e r, R R O D ig ita l-to -A n a lo g C o n v e rte r Ordering Information Order Numbers Temperature Range Package Top Mark Feature DAC121S101CIMM −40°C ≤ TA ≤ +105°C MSOP X60C DAC121S101CIMMX −40°C ≤ TA ≤ +105°C MSOP T/R DAC121S101CIMK −40°C ≤ TA ≤ +105°C TSOT X61C DAC121S101CIMKX −40°C ≤ TA ≤ +105°C TSOT T/R DAC121S101QCMK −40°C ≤ TA ≤ +125°C TSOT X61Q AEC-Q100 Grade 1 Qualified; Automotive Grade Production FlowDAC121S101QCMKX −40°C ≤ TA ≤ +125°C TSOT T/R DAC121S101EVAL Evaluation Board TSOT Block Diagram 20114903 Pin Descriptions TSOT (SOT-23) Pin No. MSOP Pin No. Symbol Description 1 4 VOUT DAC Analog Output Voltage. 2 8 GND Ground reference for all on-chip circuitry. 3 1 VA Power supply and Reference input. Should be decoupled to GND. 4 7 DIN Serial Data Input. Data is clocked into the 16-bit shift register on the falling edges of SCLK after the fall of SYNC. 5 6 SCLK Serial Clock Input. Data is clocked into the input shift register on the falling edges of this pin. 6 5 SYNC Frame synchronization input for the data input. When this pin goes low, it enables the input shift register and data is transferred on the falling edges of SCLK. The DAC is updated on the 16th clock cycle unless SYNC is brought high before the 16th clock, in which case the rising edge of SYNC acts as an interrupt and the write sequence is ignored by the DAC. 2, 3 NC No Connect. There is no internal connection to these pins. www.national.com 2 D A C 1 2 1 S 1 0 1 /D A C 1 2 1 S 1 0 1 Q A.C. and Timing Characteristics The following specifications apply for VA = +2.7V to +5.5V, RL = 2kΩ to GND, CL = 200 pF to GND, fSCLK = 30 MHz, input code range 48 to 4047. Boldface limits apply for TMIN ≤ TA ≤ TMAX: all other limits TA = 25°C, unless otherwise specified. Symbol Parameter Conductions Typical Limits Units (Limits) fSCLK SCLK Frequency 30 MHz (max) ts Output Voltage Settling Time (Note 10) 400h to C00h code change, RL = 2kΩ CL ≤ 200 pF 8 10 µs (max) CL = 500 pF 12 µs 00Fh to FF0h code change, RL = 2kΩ CL ≤ 200 pF 8 µs CL = 500 pF 12 µs SR Output Slew Rate 1 V/µs Glitch Impulse Code change from 800h to 7FFh 12 nV-sec Digital Feedthrough 0.5 nV-sec tWU Wake-Up Time VA = 5V 6 µs VA = 3V 39 µs 1/fSCLK SCLK Cycle Time 33 ns (min) tH SCLK High time 5 13 ns (min) tL SCLK Low Time 5 13 ns (min) tSUCL Set-up Time SYNC to SCLK Rising Edge −15 0 ns (min) tSUD Data Set-Up Time 2.5 5 ns (min) tDHD Data Hold Time 2.5 4.5 ns (min) tCS SCLK fall to rise of SYNC VA = 5V 0 3 ns (min) VA = 3V −2 1 ns (min) tSYNC SYNC High Time 2.7 ≤ VA ≤ 3.6 9 20 ns (min) 3.6 ≤ VA ≤ 5.5 5 10 ns (min) 5 www.national.com D A C 1 2 1 S 1 0 1 /D A C 1 2 1 S 1 0 1 Q Transfer Characteristic 20114905 FIGURE 1. Input / Output Transfer Characteristic Timing Diagram 20114906 FIGURE 2. DAC121S101 Timing 7 www.national.com D A C 1 2 1 S 1 0 1 /D A C 1 2 1 S 1 0 1 Q 1.0 Functional Description 1.1 DAC SECTION The DAC121S101 is fabricated on a CMOS process with an architecture that consists of switches and a resistor string that are followed by an output buffer. The power supply serves as the reference voltage. The input coding is straight binary with an ideal output voltage of: VOUT = VA x (D / 4096) where D is the decimal equivalent of the binary code that is loaded into the DAC register and can take on any value be- tween 0 and 4095. 1.2 RESISTOR STRING The resistor string is shown in Figure 3. This string consists of 4096 equal valued resistors with a switch at each junction of two resistors, plus a switch to ground. The code loaded into the DAC register determines which switch is closed, connect- ing the proper node to the amplifier. This configuration guar- antees that the DAC is monotonic. 20114907 FIGURE 3. DAC Resistor String 1.3 OUTPUT AMPLIFIER The output buffer amplifier is a rail-to-rail type, providing an output voltage range of 0V to VA. All amplifiers, even rail-to- rail types, exhibit a loss of linearity as the output approaches the supply rails (0V and VA, in this case). For this reason, linearity is specified over less than the full output range of the DAC. The output capabilities of the amplifier are described in the Electrical Tables. 1.4 SERIAL INTERFACE The three-wire interface is compatible with SPI, QSPI and MICROWIRE, as well as most DSPs. See the Timing Diagram for information on a write sequence. A write sequence begins by bringing the SYNC line low. Once SYNC is low, the data on the DIN line is clocked into the 16- bit serial input register on the falling edges of SCLK. On the 16th falling clock edge, the last data bit is clocked in and the programmed function (a change in the mode of operation and/ or a change in the DAC register contents) is executed. At this point the SYNC line may be kept low or brought high. In either case, it must be brought high for the minimum specified time before the next write sequence as a falling edge of SYNC can initiate the next write cycle. Since the SYNC and DIN buffers draw more current when they are high, they should be idled low between write sequences to minimize power consumption. 1.5 INPUT SHIFT REGISTER The input shift register, Figure 4, has sixteen bits. The first two bits are "don't cares" and are followed by two bits that determine the mode of operation (normal mode or one of three power-down modes). The contents of the serial input register are transferred to the DAC register on the sixteenth falling edge of SCLK. See Timing Diagram, Figure 2. 20114908 FIGURE 4. Input Register Contents Normally, the SYNC line is kept low for at least 16 falling edges of SCLK and the DAC is updated on the 16th SCLK falling edge. However, if SYNC is brought high before the 16th falling edge, the shift register is reset and the write sequence is invalid. The DAC register is not updated and there is no change in the mode of operation or in the output voltage. www.national.com 14 D A C 1 2 1 S 1 0 1 /D A C 1 2 1 S 1 0 1 Q DAC121S101/DAC121S101Q General Description Features Key Specifications Applications Pin Configuration Ordering Information Block Diagram Pin Descriptions Absolute Maximum Ratings Operating Ratings (Note 1, Note 2) Package Thermal Resistances Electrical Characteristics A.C. and Timing Characteristics Specification Definitions Transfer Characteristic FIGURE 1. Input / Output Transfer Characteristic Timing Diagram FIGURE 2. DAC121S101 Timing Typical Performance Characteristics 1.0 Functional Description 1.1 DAC SECTION 1.2 RESISTOR STRING FIGURE 3. DAC Resistor String 1.3 OUTPUT AMPLIFIER 1.4 SERIAL INTERFACE 1.5 INPUT SHIFT REGISTER FIGURE 4. Input Register Contents 1.6 POWER-ON RESET 1.7 POWER-DOWN MODES TABLE 1. Modes of Operation 2.0 Applications Information 2.1 DSP/MICROPROCESSOR INTERFACING 2.1.1 ADSP-2101/ADSP2103 Interfacing FIGURE 5. ADSP-2101/2103 Interface 2.1.2 80C51/80L51 Interface FIGURE 6. 80C51/80L51 Interface 2.1.3 68HC11 Interface FIGURE 7. 68HC11 Interface 2.1.4 Microwire Interface FIGURE 8. Microwire Interface 2.2 USING REFERENCES AS POWER SUPPLIES 2.2.1 LM4130 FIGURE 9. The LM4130 as a power supply 2.2.2 LM4050 FIGURE 10. The LM4050 as a power supply 2.2.3 LP3985 FIGURE 11. Using the LP3985 regulator 2.2.4 LP2980 FIGURE 12. Using the LP2980 regulator 2.3 BIPOLAR OPERATION FIGURE 13. Bipolar Operation TABLE 2. Some Rail-to-Rail Amplifiers 2.4 LAYOUT, GROUNDING, AND BYPASSING Physical Dimensions PmodDA1.pdf DDiiggiilleenntt PPmmooddDDAA11™™ DDiiggiittaall TToo AAnnaalloogg MMoodduullee CCoonnvveerrtteerr BBooaarrdd RReeffeerreennccee MMaannuuaall ® www.digi lent inc.com Revision: 04/12/05 215 E Main Suite D | Pullman, WA 99163 (509) 334 6306 Voice and Fax Doc: 502-063 page 1 of 1 Copyright Digilent, Inc. All rights reserved. Other product and company names mentioned may be trademarks of their respective owners. Overview The Digilent PmodAD1 Digital to Analog Module Converter module (the DA1™) converts signals from digital to analog at up to one MSa per second. The DA1 uses a 6-pin header connector and at less than one square inch is small enough to be located where the reconstructed signal is needed. Features include: • two AD7303 8-bit D/A converter chips that convert up to one MSa per second • a 6-pin header and 6-pin connector • four D/A conversion channels • very low power consumption • small form factor (0.80” x 0.80”). Functional Description The DA1 can produce an analog output ranging from 0-3.3 volts. It has four simultaneous D/A conversion channels, each with an 8-bit converter that can process separate digital signals. The DA1 is equipped with two AD7303 digital to analog converters. Each converter has two channels through which digital signals can be converted to analog signals. Outputs are produced by sending commands via the SPI/MICROWIRE™ serial bus to the D/A converters. The two converters are connected in parallel so that commands are sent to both converters simultaneously. The DA1 is designed to work with Digilent system boards. Some system boards, like the Digilent Pegasus board, have a 6-pin header that can be connected to the DA1’s 6-pin header using a 6-pin cable. Other Digilent boards may need a Digilent Modular Interface Board (MIB) and a 6-pin cable to connect to the DA1. The MIB plugs into the system board and the cable connects the MIB to the DA1. The DA1 can be powered by voltage from either a Digilent system board or an outside device. Damage can result if power is supplied from both sources or if the outside device supplies more than 3V. For more information, see www.digilentinc.com. For information on the AD7303, see the Analog Devices data sheet at www.analog.com. GND VCC DA1 Circuit Diagram AD7303 D/A Converter AD7303 D/A Converter D2 D1 2 Sync, Clock Analog Outputs J1 C on ne ct or J2 C on ne ct or __MACOSX/DISENOECO/._archivos_practica.rar DISENOECO/plib.docx Pg 4 Cnt_epp-> separa linea de direcciones y línea de datos Dpram_mem una memoria por cada tensión vo1 y vo2 Gen_dir en función de la frec seleccionada lee más rápido o más lento Cnt_dac coger un dato de 12bits y aplica protocolo en serie Dcm controlar la generación de la señal de reloj *CLK, señal de reloj exclusiva para todos los modulos (para que el diseño sea síncrono) Pg 5 6 y 7 Cnt epp: transforma protocolo USB en protocolo paralelo Ciclo de lectura (escritura de la dirección: ASTRB=nivel bajo(acvtivado) y PWRITE=Nivel bajo y lectura del dato: DSTRB=nivel bajo(activado) y PWRITE NIVEL BAJO) Ciclo escritura (escritura de dirección astrb y pwrite nivel bajo y escritura de dato ) Pg 7 Entidad cnt_epp CICLO DE LECTURA PWAIT -> genera estados de espera inv ASTRB e DTRB, no es necesario en esta aplicacion DIR-> valor de la dirección de un ciclo de acceso DIR_VLD->indica con un nivel alto y durante un periodo de la señal clk que hay una nueva dirección Tenemos que detectar mediante un sistema secuencial el flanco de la señal ASTRB para sacar la señal DIR_VLD (dibujo santy) [Qo en reposo, Q1 dir_vld =1] DEBEMOS MODELAR LA MÁQUINA DE ESTADOS (mejor moore que mealy porque si no la salida S tiene un tiempo indefinido (moore es una maquina de mealy con biestables)), se puede solucionar con el proceso secuencial del biestable y la AND (asignación concurrente) (MEJOR SOLUCIÓN) *CON UN PROCESO SECUENCIAL DONDE SE MODELAN LOS 3 BIESTABLES y SECUENCIAS CONCURRENTES (mejor solución) O un proceso por cada biestable, o una máquina de estados CICLO DE ESCRITURA DATO-> valor del dato correspondiente a un ciclo de escritura DATO_VLD-> indica con un nivel alto y durante un período de la señal clk que hay dato válido de un ciclo de escritura (nueva dirección) ***Modelado similar a ciclo de lectura pero con DSTRB (detectar su flanco de subida)*** Controlar la señal RD DATO_RD-> dato de entrada a ser leído en un ciclo de lectura. CE_RD-> señal de habilitación o de información que permanece a nivel bajo el mismo tiempo que la señal DSTRB durante el ciclo de lectura (para que el periférico ponga el dato) Puerta tristate, ya que el puerto es bidireccional, y tenemos que aislar la entrada de la salida del pc para evitar problemas (es un cortocircuito) **Se modela con una asignación concurrente, en el que una de las alternativas sea Z. DATA <= DATO_RD When {DSTRB=0 AND PWRITE=1} else { OTHERS => ‘Z’ } Creamos los procesos correspondientes a la lógica, algunos mediante sentencias concurrentes, APARTADO 1. DISEÑO DE CONTROLADOR DEL PUERTO PARALELO EPP Testbench: Generar ciclos que simulen el ciclo de escritura y el ciclo de lectura, con epp_device sólo es válido para simulación (ojo que ponga sólo simulación en el ISE) --ciclos de lectura/escritura Realizar ciclos mediante las 3 constantes que selección la frecuencia y la ram de vo1 y vo2 Llamamos al proceso (añadir llamadas) para hacer el ciclo de escritura en una dirección e igualmente con el ciclo de lectura Apartado 2. Descarga en la placa del controlador del puerto paralelo. Top_system1 donde se instancia la entidad, tenemos que implementar dos biestables tipo D Pg 18, realizar multiplexor El bloque PSH_BUTTON = 0 => se visualiza la dirección registrada =1 => se visualiza el dato registrado El bloque al que tiene conectado los 8 switches de la placa (puerto SWITCHES_I) deberá llevarlos a la entrada DATO_RD del componente cnt_epp cuando se realice un ciclo de lectura en la posición 32HEX. __MACOSX/DISENOECO/._plib.docx DISENOECO/practica_libre_2014_15.pdf ASIGNATURA Diseño Electrónico Grado en Ingeniería de Electrónica de Comunicaciones. Universidad de Alcalá Curso Académico 2014/2015 Curso 3º – Cuatrimestre 1º Dpto. Electrónica 2 1. Introducción La siguiente práctica tiene como objetivo el desarrollo en VHDL de un sistema digital que permite cubrir todas las fases del flujograma de diseño de sistemas electrónicos para configurar FPGAs u otro tipo de ASICs: modelado, simulación, síntesis, implementación y descarga en placa. Para su implementación se utilizarán la tarjeta de pruebas del laboratorio Atlys de Digilent basada en una FPGA Spartan 6 (XC6SLX45-CSG324) de la firma comercial Xilinx que incorpora distintos periféricos de entrada/salida. Concretamente, se desea diseñar un generador de funciones que proporciona dos señales analógicas cuyas formas serán diferentes y controladas desde una aplicación ejecutada en Matlab. Ambas señales tendrán la misma frecuencia, que será seleccionada desde esta aplicación. La comunicación entre el PC y la tarjeta Atlys se va a realizar utilizando un cable USB. Además de alcanzar este objetivo, la presente práctica busca que el alumno pueda realizar un primer diseño de forma libre siguiendo unas pautas mínimas. Para ello el alumno deberá resolver problemas habituales en el diseño con FPGAs como son la búsqueda del tamaño óptimo de datos, sincronización entre etapas, diseño de máquinas de estado (FSMs) así como la instanciación de componentes diseñados previamente. Los problemas a los que el alumno se enfrentará en esta práctica son los habituales que se encontrará en diseños más complejos. 2. Estructura El diseño a realizar consiste en el modelado en VHDL de un sistema digital que permite, una vez programado en una FPGA, generar dos señales analógicas Vo1 y Vo2 (figura 1) cuyas formas y frecuencia se van a poder seleccionar desde un archivo creado y ejecutado en Matlab, estos valores serán enviados a través de una conexión USB. Desde la aplicación de Matlab se enviará a través de un cable USB un periodo, formado por 256 muestras, correspondientes a las forma de onda de las señales Vo1 y Vo2. Cada una de las muestras tendrá un tamaño de 12 bits. A su vez, la frecuencia de dichas señales también se podrá seleccionar desde la aplicación de Matlab utilizando un dato de 8 bits. Cada uno de los datos generados por la aplicación de Matlab está constituido por dos campos: dirección y valor. Con la dirección se selecciona el destino del campo valor pudiéndose trabajar con 3 distintas: A1 HEX. Dato correspondiente a la forma de onda de la señal Vo1. A2 HEX. Dato correspondiente a la forma de onda de la señal Vo2. F0 HEX. Dato correspondiente a la selección de la frecuencia de Vo1 y Vo2. Los datos proporcionados por la aplicación de Matlab se envían a la placa de desarrollo Atlys a través de un cable USB. En esta última se encuentra el driver CY7C68013A que convierte los datos recibidos a un formato paralelo (EPP- Enhanced Parallel Port) y se envían a la FPGA. Cada uno de los datos correspondientes a las formas de onda de Vo1 y Vo2 tiene un tamaño de 12 bits, si bien se envían, desde el PC, en un formato de 8 bits. Por cada dato se realizan dos transferencias desde el PC. Para la frecuencia se utilizará solamente un dato de 8 bits. 3 Los datos almacenados se enviarán a dos conversores digitales analógicos DAC121S101 de National Semiconductor presentes en la placa PmodDA1 de Digilent. Para introducir los datos en el DAC se utiliza un protocolo serie de tres líneas: reloj (SCLK), dato de entrada (DIN) y un pin de selección (SYNC). Las conexiones entre los diferentes elementos de la práctica se muestran en la Figura 1. Figura 1 Conexión del hardware a utilizar. El sistema a diseñar hace uso de un RELOJ de 100 MHz como señal de sincronismo de los diferentes módulos secuenciales. Esta señal de proporciona por medio de un oscilador presente en la placa Atlys. Por su parte, la entrada RST se va a utilizar como señal asíncrona de inicialización para llevar todos los módulos secuenciales a su estado inicial. 3. Entidad gen_funciones. Con el fin de facilitar el trabajo, para el modelado del sistema de medida se realizará un diseño jerárquico en el que la entidad de mayor nivel se llamará gen_funciones, y cuya definición se realizará en el archivo gen_funciones.vhd siendo su declaración la mostrada en la Figura 2. entity gen_funciones is port ( RELOJ : in std_logic; RST : in std_logic; -- PUERTO EPP ASTRB : in std_logic; DSTRB : in std_logic; DATA : inout std_logic_vector(7 downto 0); PWRITE : in std_logic; PWAIT : out std_logic; -- DAC SYNC : out std_logic; SCLK : out std_logic; D1 : out std_logic; D2 : out std_logic); end gen_funciones; Figura 2 Declaración de la entidad gen_funciones. OSCILADOR RESET SYNC SCLK RELOJ D1 RST (100 MHz) Vcc VOUT DIN SCLKGND Vcc DAC121S101 Vo2 SYNC 3.3V D2 CABLE USB ASTRB DSTRB DATA PWRITE PWAIT FPGA XC6SLX45-CSG324 VOUT DIN SCLKGND Vcc DAC121S101 Vo1 SYNC 3.3V ATLYS DRIVER CY7C68013A PmodDA1 4 Para modelar la entidad gen_funciones se va a hacer uso de seis componentes (Figura 3). En la documentación de la práctica se proporcionan “los esqueletos” de archivos VHDL para modelar estos elementos, con excepción del DCM, los cuales se deberán completar con el código necesario para que realicen la función que posteriormente se detallará. Si bien, no se podrán modificar los puertos de cada una de las entidades. Además, el diseño de los componentes anteriores no podrá ser jerárquico y los nombres de las señales a utilizar para conectar los diferentes componentes de la entidad gen_funciones deberán ser los utilizados en la Figura 3. El incumplimiento de las restricciones anteriores conlleva a una calificación de No Apto. Figura 3 Estructura de la entidad gen_funciones. Brevemente, la funcionalidad de cada una de las entidades de la Figura 3 es: dcm. Es el gestor de reloj digital usado para la gestión de las señales de reloj de los módulos secuenciales. Se utiliza para reducir la asimetría de los relojes compensando el posible desfasaje entre ellas. cnt_epp. Entidad que recibe los datos con la temporización establecida en el protocolo EPP y proporciona dos salidas DIR y DATO, ambas de 8 bits con el valor de la dirección y dato incluidos. Se proporcionan sendas señales de validación: DIR_VLD para indicar que hay una nueva dirección y DATO_VLD para indicar que hay un nuevo dato. Ambas señales permanecen a nivel alto un periodo de la señal de reloj CLK (10 ns). dpram_mem. Entidad que modela una memoria de doble puerto en la que se guarda cada una de las 256 muestras correspondientes a un periodo de las señales Vo1 y Vo2. Cada muestra tiene un tamaño de 12 bits. De los dos puertos uno es de escritura y el otro de lectura. cnt_dac. Entidad que realiza la conversión al protocolo serie del dato de 12 bits a introducir en cada uno de los DACS. La entrada DATO_OK se utiliza como sincronismo, de forma que pasa a nivel alto, durante un periodo de la señal de reloj, para indicar que hay un nuevo dato a enviar a los DACs. gen_dir. Entidad que se encarga de proporcionar la dirección correspondiente a cada una de las muestras de un periodo de las señales Vo1 y Vo2. El ritmo al que se cambian esta dcm CLK_IN RESET CLK _OUT dpram_men cnt_dpram cnt_epp ASTRB DSTRB DATA PWRITE PWAIT CLK DATO_OK DATO2 RELOJ RST ASTRB DSTRB DATA PWRITE PWAIT RST CLK DATO_RD(7:0) CE_RD DIR_VLD DATO_VLD DIR DATO DIR_VLD DATO_VLD DIR DATO WE_DP1 WE_DP2 ADDRESS DATA DIR_VLD DATO_VLD DIR DATOWE CLK RST DIN ADDR_IN ADDRESS DATA_DP CLK RST WE_DP1 WE_DP2 ADDR_OUT DOUT DATO1 RST cnt_dac dpram_men WE DIN ADDR_IN CLK RST ADDR_OUT DOUT gen_dir CLK RST ADDR_OUT DATO_OK DATO_OK DATO1 DATO2 ADDR_OUTSYNC SCLK D1 D2 CLK SYNC SCLK D1 D2 DIR_VLD DATO_VLD DIR DATO 5 dirección variará en función del valor de frecuencia seleccionado desde la aplicación de Matlab. cnt_dpram. Entidad que gestiona la carga de los datos proporcionados por el PC, a través del protocolo EPP, en cada una de las memorias dual-port. 4. Entidad cnt_epp. La entidad cnt_epp es la encargada de actuar como interface entre el puerto USB del ordenador y el diseño. Los diferentes parámetros de las señales de salida son enviados desde un PC conectado a la tarjeta de FPGAs mediante dicho puerto. La tarjeta Atlys, tal y como se puede ver en la documentación del fabricante (http:/www.digilentinc.com), posee un puerto USB ( Figura 4) que comunica el PC con la FPGA a través de un driver de Cypress (CY7C68013A). Este driver se encarga de transformar los datos enviados con un protocolo USB a un protocolo EPP (Enhanced Parallel Port). Se trata de un protocolo paralelo que opera casi a la velocidad del bus ISA y ofrece un incremento de hasta 10 veces la velocidad de transmisión sobre un puerto paralelo convencional. Figura 4 Comunicación PC- CY7C68013A-FPGA. El protocolo EPP permite realizar comunicaciones paralelo con velocidades hasta 2 Mbyte/s. Para ello emplea un único bus DATA (Figura 5) para realizar transferencias de datos y de direcciones. Utilizando dos líneas adicionales, ASTRB (address strobe) y DSTRB (data strobe), para discernir entre ellos: ASTRB activa a nivel bajo indica que está teniendo lugar una transferencia de direcciones y DSTRB se utiliza para indicar que la transferencia en curso es de datos. Además, se dispone de la línea PWRITE (Write enable) para seleccionar el sentido (lectura o escritura) de la transferencia de datos: un nivel alto para la lectura y un nivel bajo para la escritura. Por otro lado, el puerto PWAIT, generado por el periférico, permite prolongar los ciclos de acceso insertando estados de espera. Para esta práctica no es necesario prolongar los ciclos de acceso. CY7C68013A FPGA Tarjeta Atlys EPP USB http://www.digilentinc.com)/ 6 Figura 5 Señales empleadas en el protocolo EPP. Un ciclo de lectura (Figura 6) se realiza cuando el PC quiere acceder al contenido de una posición del periférico, en este caso la FPGA, especificada por el valor indicado por el bus DATA (Dirección en la Figura 6). El ciclo se divide en dos partes: escritura de la dirección y lectura del dato. El ciclo de escritura de la dirección se inicia cuando PWRITE pasa a nivel bajo, continuando con un nivel bajo en ASTBR, a lo que el periférico responde con un nivel alto en PWAIT. Durante el nivel bajo de ASTBR se proporciona la dirección del periférico a la que se quiere acceder. El ciclo de escritura de la dirección finaliza cuando ASTBR pasa a nivel alto, instante que puede utilizar el periférico para leer el valor de la dirección. Si el periférico desea introducir estados de espera mantendrá PWAIT a nivel alto, en caso contrario la lleva a nivel bajo. A continuación se realiza el ciclo de lectura del dato, en el que es el periférico el que proporciona el dato, el cual debe estar estable antes de que se produzca el flanco de subida de DSTRB. El periférico puede utilizar el flanco de bajada de esta señal para poner el dato en el puerto DATA. Figura 6 Ciclo de lectura del protocolo EPP. Un ciclo de escritura (Figura 7) es aquel que realiza el PC para escribir un dato en una posición del periférico. En este caso, se realizan dos ciclos de escritura: de dirección y de dato. En la primera parte del ciclo se procede a escribir la dirección, de forma similar al de la Figura 6 y en la segunda parte del ciclo se procede a escribir un dato. En ella, la señal PWRITE se mantiene a nivel bajo, a la vez que el PC pone el dato a escribir en el periférico en DATA. El periférico puede utilizar el flanco de subida de DSTRB para leer el dato. CY7C68013A CABLE USB ASTRB DSTRB DATA PWRITE PWAIT WAIT DSTRB ASTRB WRITE DATA[7:0] Dirección Dato 7 Figura 7 Ciclo de escritura del protocolo EPP. De acuerdo con el diagrama de bloques de la Figura 3, la declaración de la entidad cnt_epp. Se muestra en la Figura 8. entity cnt_epp is port ( CLK : in std_logic; RST : in std_logic; ASTRB : in std_logic; DSTRB : in std_logic; DATA : inout std_logic_vector(7 downto 0); PWRITE : in std_logic; PWAIT : out std_logic; DATO_RD : in std_logic_vector(7 downto 0); CE_RD : out std_logic; DIR : out std_logic_vector (7 downto 0); DIR_VLD : out std_logic; DATO : out std_logic_vector (7 downto 0); DATO_VLD : out std_logic); end ; Figura 8 Declaración de la entidad cnt_epp. El funcionamiento de los puertos, a parte de los implicados en el protocolo EPP, de la Figura 8 es: DIR. Valor de la dirección de un ciclo de acceso. DIR_VLD. Indica con un nivel alto y durante un periodo de la señal CLK que en DIR se encuentra la dirección de un ciclo de lectura o escritura. DATO. Valor del dato correspondiente a un ciclo de escritura. DATO_VLD. Indica con un nivel alto y durante un periodo de la señal CLK que en DATO hay un dato válido de un ciclo de escritura. DATO_RD. Dato de entrada a ser leído en un ciclo de lectura. CE_RD. Señal de habilitación que permanece a nivel bajo el mismo tiempo que la señal DSTRB durante un ciclo de lectura. En la Figura 9 se puede ver un cronograma detallado de la activación de los diferentes puertos de la entidad cnt_epp, tanto para un ciclo de lectura como de escritura. WAIT DSTRB ASTRB WRITE Dirección DatoDATA[7:0] 8 Figura 9. Cronogramas de funcionamiento del protocolo EPP. En esta práctica, todos los ciclos que se realizarán serán de escritura. Sin embargo, la entidad cnt_epp debe realizar la decodificación tanto de los ciclos de escritura como los de lectura. 5. Entidad cnt_DAC. La entidad cnt_dac es la encargada de proporcionar las señales de control de los dos DAC121S101 de la placa PmodDA1, los cuales van a proporcionan las tensiones de salida Vo1 y Vo2 a partir de los datos almacenados en las memorias dual port. El DAC121S101 es un convertidor digital analógico de 12 bits con una interface serie que acepta diferentes protocolos (SPI™, QSPI, MICROWIRE). Para ello utiliza tres líneas de control: Din para introducir los bits del dato a convertir y SCLK y SYNC que sincronizan dicha transferencia. Para una correcta operación, la transferencia de datos debe cumplir el cronograma de la Figura 10, nótese como en la entrada DIN se proporciona un nuevo valor coincidiendo con el flanco de subida de SCLK. Las señales mostradas en el cronograma de la Figura 10 deben cumplir los tiempos mostrados en la Tabla 1. Figura 10 Cronograma de funcionamiento del DAC121S101. CICLO DE ESCRITURA CICLO DE LECTURA 9 Tabla 1. Valores límites de los tiempos de la Figura 10. Como se puede extraer de la Figura 10 el DAC recibe 16 bits: 12 del dato, más 4 (los de mayor peso) de control (Figura 11). Para esta práctica todos los bits de control deben ser 0. Figura 11 Trama de datos a enviar al DAC. El valor de la tensión V que proporciona el DAC121S101 viene dado por: 4096 3.3*DATO V donde DATO se corresponde con el dato binario de 12 bits introducido en el DAC. Junto con este enunciado se proporciona el archivo DAC121S101.pdf donde se puede encontrar una descripción más detalla del funcionamiento del conversor. La entidad cnt_adc se debe diseñar de forma que cada vez que se activa (nivel alto) DATO_OK se inicia el proceso de transferencia de los datos DATO1 y DATO2 a los DACs. Cuando DATO_OK pasa a nivel bajo se generan las señales SYNC, SCLK y DIN. Una vez que se han transferido todos los bits de los datos, el proceso se para hasta una nueva activación de DATO_OK. La declaración de la entidad cnt_dac se muestra en la Figura 12 . 10 entity cnt_dac is port ( CLK : in std_logic; RST : in std_logic; DATO1 : in std_logic_vector(11 downto 0); DATO2 : in std_logic_vector(11 downto 0); DATO_OK : in std_logic; SYNC : out std_logic; SCLK : out std_logic; D1 : out std_logic; D2 : out std_logic); end cnt_dac; Figura 12 Declaración de la entidad cnt_dac. El tiempo invertido en convertir un dato digital en una tensión analógica será igual al periodo de la señal SYNC, que es igual al de DATO_OK. Para que el diseño sea más sencillo se va a establecer para SCLK una frecuencia contante, fijando sus tiempos de nivel bajo (tL) y alto (tH) a 20 ns, valor mínimo que se puede conseguir, cumpliendo las especificaciones de la Tabla 1 con una señal CLK de frecuencia 100 MHz. El tiempo tSYNC vendrá determinado por la frecuencia de la señal que se quiere obtener. Teniendo en cuenta que el valor mínimo de tSYNC es de 20 ns, el tiempo mínimo para digitalizar un dato será: 𝑇𝐷𝑚𝑖𝑛 = 16(𝑇𝐿𝑚𝑖𝑛 + 𝑇𝐻𝑚𝑖𝑛) + 𝑇𝑆𝑌𝑁𝐶𝑚𝑖𝑛 = 16(20 𝑛𝑠 + 20 𝑛𝑠) + 20 𝑛𝑠 = 660 𝑛𝑠 Considerando que un periodo de una señal está formado por 256 muestras, la mayor frecuencia que se puede conseguir para las señales Vo1 y Vo2 será: 𝑓𝑚𝑎𝑥 = 1 256 ∗ 660 𝑛𝑠 = 5.92 𝐾𝐻𝑧 6. Memoria dual port. La memoria dual por será la encargada de almacenar un periodo de cada una de las señales a generar. Esta memoria tendrá una organización de 256x 12 bits, teniendo un puerto de sólo escritura y otro se sólo lectura. Tanto los ciclos de escritura como los de lectura son síncronos, utilizando la señal CLK para tal fin. Su declaración es la mostrada en la Figura 13, siendo la funcionalidad de cada uno de los puertos, la siguiente: DIN. Bus de datos correspondiente al puerto de solo escritura. ADDR_IN. Bus de dirección del puerto de sólo escritura. WE. Señal de validación de la operación de escritura. Es activa a nivel alto. DOUT. Bus de datos correspondientes al puerto de solo lectura. ADDR_OUT. Bus de dirección del puerto de sólo lectura. entity dpram_mem is port ( DIN : in std_logic_vector(11 downto 0); ADDR_IN : in std_logic_vector(7 downto 0); WE : in std_logic; CLK : in std_logic; RST : in std_logic; ADDR_OUT : in std_logic_vector(7 downto 0); DOUT : out std_logic_vector(11 downto 0)); end entity; Figura 13. Declaración de la entidad dpram_mem. 11 En la Figura 14 se muestra un cronograma de funcionamiento de la entidad dpram_men. Figura 14. Ciclos de acceso al módulo dual port. 7. Controlador de la memoria dual port Este módulo es el encargado de escribir en las memorias dual port del diseño la información que se envía a través del puerto paralelo (EPP). Dependiendo de la dirección seleccionada, el dato se almacenará en una u otra memoria. Hay que tener en cuenta que los datos que se envían desde el puerto EPP tienen un tamaño de 8 bits mientras que el dato de la memoria es de 12 bits. En consecuencia, se necesitan dos ciclos de escritura para proporcionar dicho dato. Así los 8 bits del dato correspondientes al primer ciclo de escritura se corresponden con los 8 bits de menor peso (bits 7-0) del dato de la memoria y los 4 bits de menor peso del dato descrito en el segundo ciclo se corresponde con los 4 bits de mayor peso del dato a introducir en la memoria (bits 11-8). Además hay que tener en cuenta las siguientes consideraciones de diseño. Un dato de 12 bits se proporciona con dos ciclos de escritura consecutivos en la misma dirección. El dato sólo será escrito en la memoria si se han recibido los 12 bits con dos ciclos consecutivos de escritura. A medida que se van enviando datos con la misma dirección, se irán almacenando en posiciones consecutivas. Una vez almacenado un dato en la última posición de memoria (FFHEX), si se envían datos manteniendo la misma dirección, estos se irán almacenado desde la primera posición (00HEX) y en posiciones consecutivas. Cuando se realiza un ciclo de escritura en una dirección diferente al anterior ciclo se entiende que el dato se corresponde con los 8 bits menos significativos de la posición 0 de la memoria que corresponde con dicha dirección. Esto es válido, siempre y cuando esta dirección se corresponda con una de las dos utilizadas en este diseño: A1HEX y A2 HEX. Las memorias se pueden escribir parcialmente. En la memoria dual port 1 se escribirán los datos cuya dirección es A1 HEX y en la dual port 2 los correspondientes a la dirección A2HEX. En la Figura 15 se muestra un cronograma de funcionamiento del bloque controlador de las memorias dual port. Figura 15. Cronograma de funcionamiento del bloque controlador de las memorias dual port. 12 En la Figura 16 se muestra la declaración de la entidad cnt_dpram que controla la gestión de las memorias dual port. entity cnt_dpram is port ( CLK : in std_logic; RST : in std_logic; DIR : in std_logic_vector (7 downto 0); DIR_VLD : in std_logic; DATO : in std_logic_vector (7 downto 0); DATO_VLD : in std_logic; ADDRESS : out std_logic_vector(7 downto 0); DATA : out std_logic_vector(11 downto 0); WE_DP1 : out std_logic; WE_DP2 : out std_logic); end cnt_dpram; Figura 16. Declaración de la entidad cnt_dpram. 8. Generador de la dirección de las memorias dual port. La entidad gen_dir se encarga de generar las direcciones de los puertos de sólo lectura de las memorias dual port. El ritmo al que cambian estas direcciones es proporcional al valor del dato seleccionado desde el puerto paralelo al escribir en la dirección F0HEX (Figura 3). Para modelar el funcionamiento de la entidad gen_dir se va a utilizar la estructura que se muestra en la Figura 17. En ella, VALOR_FREC se corresponde con el último dato escrito en la dirección F0HEX. Figura 17 Diagrama de bloques de la entidad gen_dir. El conjunto registro-sumador-truncador(T) modelan el generador de direcciones, en el que la frecuencia a las que estas se incrementan, viene dada por: CLKf N FRECVALOR f 162* _ Donde fCLK representa la frecuencia de reloj de la señal de reloj (CLK) del diseño (100 MHz). El factor de división del prescaler (N) es igual al número mínimo de ciclos de reloj que se tarda en digitalizar un dato. Este valor, como se ha visto con anterioridad, sería 66: 64 para transmitir los 16 bits del dato y dos para llevar SYNC a nivel alto. Si bien se van a utilizar 4 pulsos de reloj para garantizar la temporización; así, se tendrá N=68. Para informar al módulo controlador de los DACS de que hay un nuevo dato a digitalizar, la entidad gen_dir proporciona la salida DATA_OK. Esta señal está retardada, con respecto a la dirección de la ADDR_OUT Q CE + T16168 8D CLK VALOR_FREC 16 Sistema secuencial DATO_OK Prescaler (N) CNT 13 memoria dual port (ADDR_OUT) un periodo de CLK, para compensar el tiempo de acceso de la memoria (Figura 18). Figura 18. Retardo en la activación de DATO_OK. En la se muestra la declaración de la entidad gen_dir. entity gen_dir is port ( CLK : in std_logic; RST : in std_logic; DIR : in std_logic_vector (7 downto 0); DIR_VLD : in std_logic; DATO : in std_logic_vector (7 downto 0); DATO_VLD : in std_logic; ADDR_OUT : out std_logic_vector(7 downto 0); DATO_OK : out std_logic); end gen_dir; Figura 19 Declaración de la entidad gen_dir. 9. Entidad dcm Las FPGAs de la familia Spartan 6 dispone de 4 bloques para el control de todos los aspectos relacionados con la frecuencia, la fase y el skew de la red de relojes de la FPGA. La FPGA recibe una señal de reloj externo de frecuencia 100 MHz. Sin embargo, con objeto de optimizar el funcionamiento del sistema y evitar al máximo problemas de forma y skew en la señal de reloj global del sistema, se propone el uso de un bloque DCM de los 4 disponibles. Por tanto, este elemento tendrá como entrada una señal (RELOJ) de 100 MHz y sacará una señal bien conformada de igual frecuencia (CLK). Esta entidad se creará con la herramienta CORE Generator del sistema de desarrollo ISE y tendrá una declaración similar a la mostrada en la Figura 19. entity dcm is port (-- Clock in ports CLK_IN : in std_logic; -- Clock out ports CLK_OUT : out std_logic; -- Status and control signals RESET : in std_logic ); end dcm; Figura 19 Declaración de la entidad dcm. 14 10. Información adicional. Formando parte del conjunto de archivos que se entregan con la práctica se encuentran los archivos que contienen las entidades definidas en la Figura 3, excepto la entidad dcm. Estos se deberán completar para obtener el funcionamiento deseado. Si bien, bajo ningún concepto se podrán modificar ni el número ni el nombre de sus puertos. En el archivo gen_funciones.vhd, en el que se modela la entidad gen_funciones, se realizará la interconexión de los componentes de la Figura 3. 11. Consideraciones de diseño. A la hora de codificar el diseño se aconseja el uso de EMACS ya que su código, mayoritariamente, está libre de errores y ayuda a una mejor comprensión del mismo. No abusar en los niveles de anidación if-else. Su implementación es complicada y además infiere muchos recursos y penaliza de forma considerable la frecuencia máxima de reloj. Con idea de optimizar el diseño, es importante analizar los resultados de los informes de síntesis e implementación. Estos aportan muchas veces información sobre señales que no se usan, señales no conectadas, etc. No vale la excusa: “la simulación funcional va perfectamente”, ya que sentencias como por ejemplo wait for 10 ns no tiene una traducción sintetizable. Por tanto para validar el diseño se recomienda sintetizar cada módulo por separado, realizar un test-bench de cada uno de ellos y realizar simulaciones funcionales y temporales de todo por separado. El diseño debe funcionar obligatoriamente a 100 MHz, sin embargo uno de los índices de mayor bondad de un diseño, además de obviamente gastar el menor número de recursos internos, es la máxima frecuencia de reloj. Esto se logra empleando mayoritariamente sistemas secuenciales los cuales son gobernados con una señale de reloj como máximo. El diseño hace uso de la señal del oscilador de la placa Atlys cuya frecuencia de 100 MHz. El nombre de todas las señales de reloj de los bloques secuenciales utilizados en el diseño deberá ser CLK. Todos los elementos secuenciales modelados deben ser activos en el flanco de subida de la señal CLK. Se debe verificar que en el diseño no se infieran latchs. 15 12. Desarrollo de la práctica. Con el desarrollo de la práctica se pretenden abordar tanto aspectos de modelado en VHDL para síntesis como para simulación. Para ello se ha dividido en una serie de apartados de dificultad progresiva que llevan a la consecución del diseño final. Para cada uno de los apartados se indica la nota máxima que aporta (sobre un total de 10 puntos), pudiéndose modificar dicha nota a la baja en función de la consecución de los diferentes subapartados. Es importante tener en cuenta que la memoria de la práctica deberá incluir no sólo los resultados de la misma sino también los pasos que se han llevado a cabo para su desarrollo. En este sentido, para cada uno de los apartados y subapartados se especifica claramente, qué detalles se deberán incluir en la memoria. De este modo, cada párrafo marcado con el símbolo (*) indica que se deberá generar una entrada en la memoria incluyendo en la misma lo que se pide. Asimismo, se deberá incluir en la memoria, la referencia que aparece después del símbolo anteriormente mencionado. Apartado 1. Diseño del controlador del puerto paralelo (EPP). (1.5 puntos) En este apartado el alumno deberá llevar a cabo la especificación en VHDL del módulo que realiza el control del bus EPP (entidad cnt_epp) para su posterior simulación, síntesis, e implementación. La consecución de este apartado deberá responder a las siguientes cuestiones: 1.1.- Comprobación de la funcionalidad del controlador del puerto paralelo. (1 punto) El alumno deberá modelar y simular funcionalmente la entidad cnt_epp para comprobar que funciona correctamente creando el correspondiente test bench (cnt_epp_tb.vhd). Para poder simular esta entidad se proporciona la entidad epp_device que se encarga de modelar el funcionamiento de un puerto EPP, la cual deberá ser completada por los alumnos. Esta es una entidad que se va a utilizar sólo en simulación con lo que se puede emplear cualquier construcción VHDL sin restricciones. La declaración de la entidad epp_device se muestra en la Figura 20. La Figura 21 muestra la conexión entre los distintos modelos dentro del banco de pruebas cnt_epp_tb.vhd. entity epp_device is port ( DATA : inout std_logic_vector(7 downto 0); PWRITE : out std_logic; DSTRB : out std_logic; ASTRB : out std_logic; PWAIT : in std_logic); end epp_device; Figura 20. Declaración de la entidad epp_device. Figura 21. Conexiones a establecer en el test bench cnt_epp_tb. cnt_epp AS TB DS TB DATA P WRITE PWAIT CLK RST DATO_RD(7:0) CE _RD DIR_VLD DATO_VLD DIR DATO epp_device ASTB DSTB DATA PWRITE PWAIT cnt_epp_tb 16 En la entidad epp_device, para modelar los ciclos de acceso (lectura/ escritura), se utiliza el procedure epp_cycle cuya declaración se muestra en la Figura 22. Donde address se corresponde con la dirección sobre la que se realiza el ciclo y data_io se corresponde con el dato a leer o escribir en dicho ciclo y con r_w el tipo de operación a realizar: r para la lectura y w para la escritura. En la Figura 23 se muestra un cronograma de funcionamiento del puerto EPP. procedure epp_cycle ( address : in std_logic_vector(7 downto 0); data_io : inout std_logic_vector(7 downto 0); r_w : in character) is Figura 22. Declaración del procedure epp_cycle que modela los ciclos de acceso con el protocolo EPP. En el archivo epp_device.vhd, que se proporciona con este enunciado se han declarado las señales y constantes que se muestran en la Figura 23: clk_epp. Señal de reloj interna que sincroniza la activación de las diferentes señales. T_clk. Periodo de la señal clk_epp. N. Número de periodos clk_epp que están a nivel bajo las señales DSTRB y ASTRB. read_value. Se corresponde con el dato leído en un ciclo de lectura. dir_frec. Dirección utilizada para seleccionar la frecuencia de las tensiones de salida. dir_dpram1. Dirección asignada para los datos correspondientes a la tensión Vo1. dir_dpram2. Dirección asignada para los datos correspondientes a la tensión Vo2. signal clk_epp : std_logic := '0'; -- Internal clock signal constant T_clk : time := 100 ns; -- Internal clock period. . constant N : natural := 10; -- Length EPP cicle signal read_value : std_logic_vector(7 downto 0) := (others => '0'); constant dir_frec : std_logic_vector( 7 downto 0) := x"F0"; constant dir_dpram1 : std_logic_vector( 7 downto 0) := x"A1"; constant dir_dpram2 : std_logic_vector( 7 downto 0) := x"A2"; Figura 23 señales y contantes declaradas en el archivo epp_device.vhd. En la Figura 24 se muestra como se activan las diferentes señales del puerto EPP sincronizadas con la señal clk_epp para un ciclo de escritura. Para el de lectura son similares. Figura 24. Temporización de un ciclo de escritura realizado por la entidad epp_device. En la memoria de la práctica se deberá añadir los siguientes puntos: (*)1.1.1.- Código VHDL de la entidad cnt_epp y del banco de pruebas utilizado en su simulación. También se debe proporcionar el código de la entidad epp_device. (*)1.1.2- Razonamiento de por qué se ha adoptado la solución presentada. 17 (*)1.1.3.- Pantallazo de simulación donde se refleje que la entidad cnt_epp funciona correctamente. Para ello se realizarán tres ciclos de escritura, uno en cada uno de las direcciones que se van a utilizar en el diseño (dir_frec, dir_dpram1 y dir_dpram2) y una operación de lectura en la dirección a elegir por el alumno. 1.2.- Simulación temporal del controlador del puerto paralelo . (0.5 puntos). Con el objetivo de comprobar las características temporales del controlador del puerto EPP, se debe llevar a cabo la síntesis y la implementación de la misma. El alumno debe tener en cuenta que la simulación temporal requiere más tiempo de simulación ya que se utiliza un modelo estructural del circuito junto con los retardos generados por las herramientas de implementación. En la memoria de la práctica se deberá añadir los siguientes datos: (*)1.2.1.- Tabla donde se incluya los recursos utilizados para la implementación del controlador del puerto EPP. Los datos anteriores serán extraídos del informe de síntesis. La tabla 2 muestra un ejemplo. Tabla 2. Recursos utilizados Slice Logic Utilization Number of Slice Registers 0 out of 54,576 0% Number of Slice LUTs 4 out of 27,288 1% Number used as logic 4 out of 27,288 1% Number using O6 output only 0 Number using O5 output only 0 Number using O5 and O6 4 Number used as ROM 0 Number used as Memory 0 out of 6,408 0% (*)1.2.2.- Medida del retardo entre el flanco activo de la señal de reloj y la activación de los puertos DIR_VLD y DATO_VLD. Se debe mostrar el resultado a través de pantallazos de simulación utilizando, para ello, dos cursores. (*)1.2.3.- Pantallazo de simulación donde se refleje el que la entidad cnt_epp funciona correctamente. Apartado 2. Descarga en placa del controlador del puerto paralelo. (1 puntos) En este apartado, el alumno deberá comprobar el funcionamiento del control del puerto EPP en la placa de pruebas. Para la consecución de este objetivo se deberá tener en cuenta los siguientes pasos: 18 2.1.- Verificación práctica de la funcionalidad del controlador del puerto paralelo. (0.5 puntos) El alumno deberá especificar el modelo top_system1 cuya entidad se muestra en la Figura 25 y su estructura se muestra en la Figura 26. entity top_system1 is port( CLK : in std_logic; RST : in std_logic; ASTRB : in std_logic; DSTRB : in std_logic; DATA : inout std_logic_vector(7 downto 0); PWRITE : in std_logic; PWAIT : out std_logic; SWITCHES_I : in std_logic_vector(7 downto 0); PSH_BUTTON:in std_logic; LEDS_O : out std_logic_vector (7 downto 0)); end top_system1; Figura 25. Declaración de la entidad top_system1. Figura 26. Sistema empleado para verificar el controlador del bus paralelo. La arquitectura del top_system1 incluye el componente cnt_epp y otros elementos adiciones que permitirán, a través del puerto EPP, leer el estado de los switches de la placa y sacar información por los leds en ella presentes. En la Figura 26 se muestra como se utilizan sendos registros (FF D) para registrar la dirección y el dato escrito. Los dos bloque marcados con ?, deben ser diseñados por el alumno teniendo en cuenta que: El bloque controlado con la señal PSH_BUTTON permite seleccionar que información se visualiza en los LEDS de forma que con un nivel bajo se selecciona la dirección registrada y con un alto el dato registrado. (100 MHz) CABLE USB ASTRB DSTRB DATA PWRITE PWAIT top_system1 ATLYS DRIVER CY7C68013A cnt_epp CLK RST DATO_RD(7:0) CE_RD DIR_VLD DATO_VLD DIR DATO Q CE CLK RST D FF D Q CE CLK RST D FF D DIR_REG DATO_REG LEDS_O RST PSH_BUTTON SWITCHES_I CLK 19 El bloque al que tiene conectado los 8 switches de la placa (puerto SWITCHES_I) deberá llevarlos a la entrada DATO_RD del componente cnt_epp cuando se realice un ciclo de lectura en la posición 32HEX. Para comprobar que el modelo funciona se deberá llevar a cabo la descarga en placa. En los ficheros que se adjuntan a la práctica se incluye el fichero top_system1.ucf que contiene las restricciones asociadas a la asignación de los puertos de la entidad top_system1 con los pines de la FPGA. La Figura 27 muestra el contenido del fichero top_system1.ucf. NET "CLK" LOC = "L15"; # onBoard USB controller NET "ASTRB" LOC = "B9"; NET "DSTRB" LOC = "A9"; NET "PWRITE" LOC = "C15"; NET "PWAIT" LOC = "F13"; NET "DATA<0>" LOC = "A2"; NET "DATA<1>" LOC = "D6"; NET "DATA<2>" LOC = "C6"; NET "DATA<3>" LOC = "B3"; NET "DATA<4>" LOC = "A3"; NET "DATA<5>" LOC = "B4"; NET "DATA<6>" LOC = "A4"; NET "DATA<7>" LOC = "C5"; # onBoard Pushbuttons NET "PSH_BUTTON" LOC = "F5"; NET "RST" LOC = "N4"; # onBoard LEDS NET "LEDS_O<0>" LOC = "U18"; NET "LEDS_O<1>" LOC = "M14"; NET "LEDS_O<2>" LOC = "N14"; NET "LEDS_O<3>" LOC = "L14"; NET "LEDS_O<4>" LOC = "M13"; NET "LEDS_O<5>" LOC = "D4"; NET "LEDS_O<6>" LOC = "P16"; NET "LEDS_O<7>" LOC = "N12"; # onBoard SWITCHES NET "SWITCHES_I<0>" LOC = "A10"; NET "SWITCHES_I<1>" LOC = "D14"; NET "SWITCHES_I<2>" LOC = "C14"; NET "SWITCHES_I<3>" LOC = "P15"; NET "SWITCHES_I<4>" LOC = "P12"; NET "SWITCHES_I<5>" LOC = "R5"; NET "SWITCHES_I<6>" LOC = "T5"; NET "SWITCHES_I<7>" LOC = "E4"; Figura 27. Contenido del fichero top_system1.ucf. En la memoria de la práctica se deberá añadir los siguientes datos: (*)2.1.1.- Especificación en VHDL de los modelos top_system1 y el correspondiente banco de pruebas top_sytem1_tb. (*)2.1.2.- Pantallazos de la simulación funcional de los modelos anteriores donde se demuestre que funcionan correctamente. (*)2.1.3.- Pantallazos de la simulación temporal de los modelos anteriores donde se demuestre que funcionan correctamente. En este caso se deberá añadir una tabla donde se reflejen los recursos utilizados en su implementación (ver Tabla 2). 20 2.2.- Descarga en placa de la entidad top_system1. (0.5 puntos) En este punto el alumno deberá descargar en placa la entidad top_system1. Los datos de entrada al diseño top_system1 se suministrarán a través del entorno mostrado en la Figura 28. Figura 28.Entorno para leer y escribir datos al díselo top_sytem1. En la memoria de la práctica se deberá añadir los siguientes puntos: (*)2.2.1.- Pantallazos como el de la Figura 28 donde se refleje que la entidad top_system1 correctamente para las distintas operaciones. Para que este apartado sea considerado cómo válido, el alumno deberá mostrar al profesor que la descarga en placa funciona correctamente. Apartado 3. Diseño del controlador de los DACs . (1 puntos) En este apartado el alumno deberá especificar un módulo VHDL que implemente el sistema correspondiente al controlador de los DACs (entidad cnt_dac ). Este apartado se estructura en los siguientes subapartados. 3.1.- Simulación funcional del controlador de los DACs. (0.75 puntos) En este apartado se deberá realizar la simulación funcional de la entidad cnt_adc, realizando el correspondiente test bench. Para ello, junto con el enunciado de esta práctica se proporciona en el archivo DAC121S101.vhd en el que se modela el funcionamiento de dicho DAC. Este componente deberá ser utilizado por duplicado, ya que la entidad cnt_dac realiza el control de los dos DAC121S101 presentes en la placa PmodDAC1 que se va a conectar a la tarjeta Atlys. Así el test bench tendrá la estructura mostrada en la Figura 29. 21 Figura 29 estructura del test bench utilizado para simular la entidad cnt_adc. En la memoria de la práctica se deberá añadir los siguientes datos: (*)3.1.1.- Código VHDL del módulo de control de los DACs y del banco de pruebas utilizado en su simulación. (*)3.1.2- Razonamiento de por qué se ha adoptado la solución presentada. (*)3.1.3.- Pantallazo de simulación funcional donde se refleje que le mencionado circuito funciona correctamente. Para ello en el banco de pruebas deberá incluir los estímulos necesarios para comprobar que para todas las operaciones el módulo funciona correctamente. 3.2.- Simulación temporal del controlador de los DACs. (0.25 puntos) En este punto se llevará a cabo la simulación temporal del modelo VHD creado. En la memoria de la práctica se deberá añadir los siguientes puntos: (*)3.2.1.- Tabla donde se incluyan los recursos utilizados para la implementación (ver tabla 2). (*)3.2.2.- Pantallazo de simulación donde se refleje que el controlador de los DACs funciona correctamente. Apartado 4. Modelado de la memoria dual port. (0.75 puntos) En este apartado el alumno deberá analizar el módulo VHDL que implemente la memoria dual port (entidad dpram_mem). Este apartado se estructura en los siguientes subapartados. 4.1.- Simulación funcional la memoria dual port. (0.5 puntos) En este apartado se deberá realizar la simulación funcional de la entidad dpram_mem para comprobar que funciona correctamente de forma individual. En la memoria de la práctica se deberá añadir los siguientes datos: (*)4.1.1.- Código VHDL del módulo y del banco de pruebas utilizado en la simulación. (*)4.1.2- Estudio detallado del funcionamiento de la memoria dual port (*)4.1.3.- Pantallazo de simulación donde se refleje que el mencionado circuito funciona correctamente. Para ello en el banco de pruebas deberá incluir los estímulos necesarios para comprobar que el módulo funciona correctamente. V OUT DAC121S101 S YNC SCLK DIN DATO_OK DATO2 DATO1 RS T cnt_dac SYNC SCLK D1 D2 CLK Vo1 V OUT DAC121S101 S YNC SCLK DIN Vo2 22 4.2.- Simulación temporal del módulo la memoria dual port. (0.25 puntos) En este punto se llevará a cabo la simulación temporal de la entidad dpram_mem. En la memoria de la práctica se deberá añadir los siguientes puntos: (*)4.2.1.- Tabla donde se incluyan los recursos utilizados para la implementación (ver tabla 2). (*)4.2.2.- Pantallazo de simulación donde se refleje que el módulo funciona correctamente. Apartado 5. Implementación del controlador de las memorias dual port (2.5 puntos) En este apartado el alumno deberá especificar un módulo VHDL que implemente el controlador de las memorias dual port (entidad cnt_dpram). Este apartado se estructura en los siguientes subapartados. 5.1.- Simulación funcional del controlador de la memoria dual port. (1.5 punto) En este apartado se deberá realizar la simulación funcional para comprobar que el mencionado módulo funciona correctamente de forma individual. En el banco de pruebas utilizado se deberá utilizar un procedimiento (procedure) para generar las señales DIR, DIR_VLD, DATO y DATO_VLD. En la memoria de la práctica se deberá añadir los siguientes datos: (*)5.1.1.- Código VHDL del módulo y del banco de pruebas utilizado en la simulación. (*)5.1.2- Razonamiento de por qué se ha adoptado la solución presentada. (*)5.1.3.- Pantallazo de simulación donde se refleje que el mencionado circuito funciona correctamente. Para ello en el banco de pruebas deberá incluir los estímulos necesarios para comprobar que el módulo funciona correctamente. 5.2.- Simulación temporal del controlador de las memorias dual port. (0.5 puntos) En este punto se llevará a cabo la simulación temporal del controlador de las memorias dual port. En la memoria de la práctica se deberá añadir los siguientes puntos: (*)5.2.1.- Tabla donde se incluyan los recursos utilizados para la implementación (ver tabla 2). (*)5.2.2.- Pantallazo de simulación donde se refleje que el módulo de representación funciona correctamente. Apartado 6. Implementación del generador de la dirección de las memorias dual port (0.75 puntos) En este apartado el alumno deberá especificar un módulo VHDL que implemente la entidad gen_dir. Este apartado se estructura en los siguientes subapartados. 23 6.1.- Simulación funcional del generador de la dirección de las memorias dual port . (0.5 punto) En este apartado se deberá realizar la simulación funcional para comprobar que el mencionado módulo funciona correctamente de forma individual. En el banco de pruebas utilizado deberá utilizar el procedimiento (procedure) utilizado en la simulación del controlador de la memoria dual port. En la memoria de la práctica se deberá añadir los siguientes datos: (*)6.1.1.- Código VHDL del módulo y del banco de pruebas utilizado en la simulación. (*)6.1.2- Razonamiento de por qué se ha adoptado la solución presentada. (*)6.1.3.- Pantallazo de simulación donde se refleje que el mencionado circuito funciona correctamente. Para ello en el banco de pruebas deberá incluir los estímulos necesarios para comprobar que el módulo funciona correctamente. 6.2.- Simulación temporal del generador de la dirección de las memorias dual port . (0.25 puntos) En este punto se llevará a cabo la simulación temporal del generador de la dirección de las memorias dual port. En la memoria de la práctica se deberá añadir los siguientes puntos: (*)6.2.1.- Tabla donde se incluyan los recursos utilizados para la implementación (ver tabla 2). (*)6.2.2.- Pantallazo de simulación donde se refleje que el módulo de representación funciona correctamente. Apartado 7. Implementación del diseño completo (2.5 puntos) En este apartado el alumno deberá especificar el módulo VHDL que implemente el diseño completo de esta práctica (entidad gen_funciones). Este apartado se estructura en los siguientes subapartados. 7.1.- Simulación funcional de la entidad gen_funciones. (1 punto) En este apartado se deberá realizar la simulación funcional para comprobar que el diseño final funciona correctamente. Para esta simulación se proporcionan sendos archivos de datos Vo1.dat y Vo2.dat que contienen un periodo completo de dos señales en formato hexadecimal de 4 dígitos. Estos archivos deberán ser leídos por el módulo de simulación del puerto EPP (entidad epp_device1) para ser almacenados en la memoria dual port. La entidad epp_device1 se debe crear a partir de la entidad cnt_epp. En la memoria de la práctica se deberá añadir los siguientes datos: (*)7.1.1.- Código VHDL del banco de pruebas utilizado para su simulación. La entidad gen_funciones se proporciona con el enunciado. (*)7.1.2.- Pantallazo de simulación donde se refleje que el mencionado circuito funciona correctamente. Para ello en el banco de pruebas deberá incluir los estímulos necesarios para comprobar que el módulo funciona correctamente. 24 7.2.- Simulación temporal de la entidad gen_funciones. (0.5 puntos) En este punto se llevará a cabo la simulación temporal de todo el diseño. En la memoria de la práctica se deberá añadir los siguientes
Compartir