电子设计自动化课程教案.doc
电子设计自动化课程教案Teach09教学课题电子系统设计实践教学学时4 学时第 9、10 次课 共 10 次课教学目标应知使用IP Core进行电子设计的方法应会掌握电子系统各个模块及整个系统的设计思想教学重点DDS设计教学难点FIR滤波器的设计教学方法1 基于实用的目的,介绍用VHDL设计不同类型有限状态机的方法,同时考虑EDA工具和设计实现中许多必须重点关注的问题2 本次课重点突出讲解一般有限状态机的设计。 内容概要1. 直接数字合成器(DDS)设计【例9-1】- DDSC: DDS主模块library IEEE;use IEEE.STD_LOGIC_1164.all;use IEEE.STD_LOGIC_UNSIGNED.all;use ieee.std_logic_arith.all;library lpm; - Altera LPMuse lpm.lpm_components.all;entity ddsc is - DDS主模块 generic( freq_width : integer := 32; - 输入频率字位宽 phase_width : integer := 12; - 输入相位字位宽 adder_width : integer := 32; - 累加器位宽 romad_width : integer := 10; - 正弦ROM表地址位宽 内容概要rom_d_width : integer := 10); - 正弦ROM表数据位宽 port( clk : in std_logic; - DDS合成时钟 freqin : in std_logic_vector (freq_width-1 downto 0); - 频率字输入 phasein : in std_logic_vector(phase_width-1 downto 0); - 相位字输入 ddsout : out std_logic_vector(rom_d_width-1 downto 0); - DDS输出end entity ddsc;architecture behave of ddsc is signal acc : std_logic_vector(adder_width-1 downto 0); signal phaseadd: std_logic_vector(phase_width-1 downto 0); signal romaddr : std_logic_vector(romad_width-1 downto 0); signal freqw : std_logic_vector(freq_width-1 downto 0); signal phasew : std_logic_vector(phase_width-1 downto 0);begin process (clk) begin if(clk'event and clk = '1') then freqw <= freqin; - 频率字输入同步 phasew <= phasein; - 相位字输入同步 acc <= acc + freqw; - 相位累加器 end if; end process;phaseadd <= acc(adder_width-1 downto adder_width-phase_width) + phasew; romaddr <= phaseadd(phase_width-1 downto phase_width-romad_width);- sinromi_rom : lpm_rom - LPM_rom调用GENERIC MAP ( LPM_WIDTH => rom_d_width, LPM_WIDTHAD => romad_width, LPM_ADDRESS_CONTROL => "UNREGISTERED", LPM_OUTDATA => "REGISTERED", LPM_FILE => "sin_rom.mif" )- 指向rom文件 PORT MAP ( outclock => clk,address => romaddr,q => ddsout );end architecture behave;下面是产生SIN ROM数据值的C程序:#include <stdio.h>#include "math.h"main()int i;float s;for(i=0;i<1024;i+) s = sin(atan(1)*8*i/1024); printf("%d : %d;n",i,(int)(s+1)*1023/2); 内容概要2. 使用IP Core设计FIR滤波器直接型FIR滤波器结构课堂讨论1 如何实现其它波形的输出,如何实现频率、相位的控制?教学后记