1、实验8WAV音频播放器实验:WAV音频播放一、实验目的:1. 进一步了解SD卡的读写,播放SD卡上的WAV格式音频文件;2. 掌握Altera公司提供的“AUDIO_IF”“SEGS_IF”两个ip模块;3. 熟悉与本工程有关的顶层文件(.v)和C文件(.c)。二、实验步骤:(一)工程的初建:新建“demo_WAVplayer”工程鼠标左键双击桌面上的“Quartus ”快捷方式图标,耐心等待片刻,即可启动 “Quartus”设计页面,如图8-1所示。在“Quartus”设计页面内,鼠标左键单击File New Project Wizard,弹出“New Project Wizard:intr
2、oduction”,如图8-2所示。鼠标左键单击“next”按钮跳过此页,进入“New Project Wizard: Directory, Name, Top-level entity”页面:“the working directory for this project”(工程路径)可以任意填写,例如:“E:demodemo_WAVplayer”。“the name of this project”(工程名字)填写为“demo_wav”。“the name of the top-level design entity for this project”(工程顶层实体名称)会自动与工程名字相同
3、,也为“demo_wav”。如图8-3所示,这里需要注意:编写顶层文件时注意这个名字。鼠标左键单击“next”按钮,会弹出如图8-4所示的问句。鼠标左键单击“是”按钮,进入“Add Files page 2 of 5”页,如图8-5所示。这里还没有建立任何文档,再加上后面可以添加,故鼠标左键单击“next”按钮。鼠标左键单击“Next”按钮后进入“Family & Device Settings page 3 of 5”页面。在“Family & Device Settings page 3 of 5”页面:“Device family”栏里的“family”选择“Cyclone II”;“A
4、vailable devices”栏里选择“EP2C70F896C6”器件,其它为缺省设置,如图8-6所示。鼠标左键单击“Finish”按钮,完成工程的初建。新建的“Quartus -E:/demo/demo_WAVplayer/demo_wav-demo_wav”工程页面如图8-7所示。在“Quartus -E:/demo/demo_WAVplayer/demo_wav-demo_wav”工程页面,“entity”栏下,可以看到“Cyclone : EP2C70F896C6”和工程名字“demo_wav”。如果“entity”栏下可以看到的不是“Cyclone : EP2C70F896C6”
5、,比如是“Stratix : AUTO”的话,请用鼠标左键双击“Stratix : AUTO”, 或者光标指着“Stratix :AUTO”然后鼠标单击右键,在下拉菜单里点击“settings”,两种方法都能使“Settings-demo_wav”的设置页弹出,在“Device”中,可以重新设置成如图8-6所示。初建的“Quartus -E:/demo/demo_WAVplayer/demo_wavt-demo_wav”工程页面,会自动保存在路径“E:demodemo_WAVplayer”下。任何时候想要完成工程后续设计,可以再次打开此路径下的工程文件夹“demo_WAVplayer”,如图8
6、-8所示。鼠标左键双击带有蓝色“Quartus”图标的“demo_wav”文件,就可以打开“Quartus -E:/demo/demo_WAVplayer/demo_wavt-demo_wav”工程页面。(二)拷贝ip到工程文件夹“demo_WAVplayer”里在“Quartus -E:/demo/demo_WAVplayer/demo_wav-demo_wav”工程页面内,鼠标左键单击“open”按钮弹出“打开”对话框。在“打开”对话框的“查找范围”里,找到路径为“D:/SOPC实验资料/WAVplayer资料” 中的ip核文件夹,把此ip核文件夹拷贝到路径“E:demodemo_WAVp
7、layer”下,然后关闭“打开”对话框,如图8-9所示。 “SOPC Builder”工具判断ip核模式正确的话,会自动把此ip核加到共用库中。(三)利用“SOPC Builder”工具初建硬件系统在“Quartus -E:/demo/demo_WAVplayer/demo_wav-demo_wav”工程页面,鼠标左键单击Tools SOPC Builder,弹出“Create New System”对话框。在“Create New System”对话框里:“System Name”项后输入“nios0”;“Target HDL”项一般选择“Verilog”;如图8-10所示。鼠标左键单击“O
8、K”按钮,完成硬件系统的初建。“Target HDL”项一般选择“Verilog”,表示“SOPC Builder”会将你稍后所配置的IP核,以Verilog表示,若你熟悉VHDL,也可以选择VHDL。这里的设定不是限制了日后只能用Verilog或VHDL写代码,因为Quartus II本来就允许Verilog与VHDL混合編程,也就是说Verilog的module可以使用VHDL的entity,VHDL的entity可以使用Verilog的module,最后都能顺利编译。配置此工程硬件系统的“SOPC Builder”工具页面如图8-11所示,由于已经把ip拷贝到工程文件夹“demo_WAV
9、player”中,“SOPC Builder”工具页面的“System Contents”栏里“Component Library”下,可以看到增加了“Terasic Technologies Inc.”,此目录下面有两个新IP硬件核“AUDIO_IF”和“SEG7_IF”。在“SOPC Builder”工具页面,添加的硬件会在默认空白区出现,并且可以修改、删除,在默认空白区还显示硬件的主从连接。这里需要注意:如果配置硬件的过程中暂停设计,关闭“SOPC Builder”工具页面会弹出一个问句,如图8-12所示。鼠标左键单击“Save”按钮,建立的硬件系统信息就保存到路径“E:/demo/de
10、mo_WAVplayer”下的文件“nios0.sopc”中。如果需要再次打开此工程的“SOPC Builder”工具页面重续硬件配置的话,可以先打开“Quartus -E:/demo/demo_WAVplayer/demo_wav-demo_wav”工程页面(方法如图8-8所示),鼠标左键单击工程页面的“open”按钮弹出“打开”页面。在“查找范围”找到路径“E:demodemo_WAVplayer”下的“nios0.sopc”文件,鼠标左键双击 “nios0.sopc” 文件即可打开本工程的“SOPC Builder”工具页面。(四)配置硬件1. 定义时钟(clock)确认“SOPC Bu
11、ilder”工具页面的“Target / Device Family”是“Cyclone II”。在如图8-13所示的“Clock Settings”栏里可以看到50.0MHz,代表Nios II CPU在DE28-70可以运行在50.0MHz,但这时CPU降频在跑,正常情況下,Nios II CPU在DE28-70可以运行100.0MHz,所以可以用PLL将clk倍频成100.0Mhz。2添加用来保存“Nios”程序的片上存储器(On-Chip Memory)“On Chip Memory”在FPGA芯片内,是DE2-70上所有存储器中存储量最小,但是速度最快的存储器。在“SOPC Buil
12、der”工具页面,鼠标左键单击System Contents Component Library Memories and Memory Controllers On Chip On Chip Memory(RAM or ROM) Add 。弹出“on chip memory”设置页面,如图8-14所示。在“on chip memory”设置页面:“Total Memory Size”设置为80960;其他为缺省设置,鼠标左键单击“Finish”按钮。不用管状态框里的错误,添加 Nios处理器后会自动消失。“Total memory size”与能使用的M4K存储器数量、FPGA、Nios I
13、I CPU和Megafunction(如fcfifo)都会影响“On8-chip Memory”的size,本教程使用 80k。“On Chip Memory”会在“SOPC Builder”工具页面默认空白区有显示如图8-15所示。如果想修改“On Chip Memory”的设置,可以左键双击硬件名称,会重新弹出如图18-14所示的设置页面。对于其他硬件来说,方法类似。把“onchip_memory2_0”改成“onchip_mem”。3添加Nios II/s处理器(Nios Processor)在“SOPC Builder”工具页面,鼠标左键单击System ContentsCompone
14、nt LibraryNios II Processor Add,弹出“Nios Processor”设置页面。在“Nios Processor”设置页面:设置Nios II/f处理器, “Reset Vector”、“Exception Vector”都选择“on chip memory” ,如图8-16所示。鼠标左键单击“Finish”按钮,把“cpu_0”改成“cpu”。4添加调试接口(JTAGUART)在“SOPC Builder”工具页面,鼠标左键单击System ContentsComponent LibraryInterface Protocols Serial JTAG UART
15、 Add,弹出“JTAG UART”设置页,如图8-17所示。使用缺省设置,鼠标左键单击 “Finish”按钮。把“jtag_uart_0”改成“jtag_uart”。JTAG UART是PC与SOPC进行序列传输的一种方式,也是Nios II CPU标准的输出/输入设备。如printf()通过JTAG UART,经过USB Blaster将输出结果显示在PC的Nios II EDS上的console,scanf()通过USB Blaster经过JTAG UART将输入传给SOPC。5添加两个内部定时器(Interval Timer)在“SOPC Builder”工具页面,鼠标左键单击Syst
16、em ContentsComponent LibraryPeripherals Microcontroller Peripherals Interval Timer Add,弹出“Interval Timer”设置页,按照图8-18所示设置,鼠标左键单击“Finish”按钮。把“timer_0”改成“timer”。按照相同的方法再增添一个“timer_1”,把名字改写成“timer_stamp”。6添加系统ID(System ID)在“SOPC Builder”工程页面,鼠标左键单击System ContentsComponent LibraryPeripherals Debug and Pe
17、rformance System ID PeripheralAdd,弹出“System ID peripheral”设置页面,如图8-19所示。使用缺省设置,鼠标左键单击“Finish”按钮。把“sysid_0”的名称改为“sysid”。“SOPC Builder”会使用System ID为每个系统提供识别符号,Nios II EDS可以识别符号防止使用者往FPGA上烧录了与“.ptf”不符合的“.sof”。7添加红绿两色LED连接PIO在“SOPC Builder”工具页面,鼠标左键单击System ContentsComponent LibraryPeripheralsMicrocontr
18、oller Peripherals PIO(Parallel I/O) Add。弹出“PIO(Parallel I/O)”多项设置页面。 “Width”设置成18位输出方式,其他使用缺省值,如图8-20所示。鼠标左键单击“Finish”按钮,将名称改为“pio_red_led”。按照同样方法,设置“Width”为8位输出方式,其他使用缺省值,将名字改为“pio_green_led”8添加栓扣和按键开关输入PIO在“SOPC Builder”工程页面,鼠标左键单击System ContentsComponent LibraryPeripherals Microcontroller Periphe
19、rals PIO(Parallel I/O) Add,弹出“PIO(Parallel I/O)”多项设置页面。默认进入“Parameter Settings”的“Basic Settings”设置页面,如图8-21所示。在此页设置:“Width”为 4; “Direction” 为 input。鼠标左键单击图8-21所示页面的“input options”,进入“input options”设置页面。在“input options”设置页面:“Edge capture register”栏的 “Sychronously Capture” 前打勾,选择 “Falling edge”;在“Inte
20、rrupt”栏“Generate IRQ” 前打勾,然后选中 “Edge”。如图8-22所示,然后鼠标左键单击“Finish”按钮,将名称改为“pio_button”。这里需要注意:一定要选中“Edge”方式产生中断,否则按键按下后会连续不断地产生中断,导致CPU死锁。在“SOPC Builder”工程页面,鼠标左键单击System ContentsComponent LibraryPeripherals Microcontroller Peripherals PIO(Parallel I/O) Add,弹出“PIO(Parallel I/O)”多项设置页面。默认进入“Parameter Se
21、ttings”的“Basic Settings”设置页面,如图8-23所示。在此页设置:“Width”为 18; “Direction” 为 input;其他为默认值,将该硬件的名称改为“pio_switch”。9添加PLL本实验需要三个时钟:(1) 100MHz的C0,用于系统硬件;(2) 100MHz的C1,用于“sdram”;(3) 18.518MHz的C2 ,用于“AUDIO”。这里需要注意:用于“sdram”的c1的“Clock phase shift”设置为“-65ps”。在“SOPC Builder”工具页面,鼠标左键单击System ContentsComponent Libr
22、ary PLL PLL Add。在弹出的对话框里,鼠标左键单击“Launch Alteras ALTPLL MegaWizard”,使按钮周框内侧出现虚方框,如图8-24所示。鼠标左键单击“next”按钮,进入ALTPLL多项设置页面。默认进入的页面是: 1 parameter settings栏的“General / Modes”设置页,显示为: 1 parameter settings为深兰色背景,“General / Modes”为General / Modes 。如图8-25左上角所示,此页缺省设置。鼠标左键单击 2 output clocks栏,默认转换到“c0-Core/Exter
23、nal output clocks”的设置页面,如图8-26所示。在“c0-Core/External output clocks”的设置页面: 2 output clocks为深兰色背景,“clk c0”为clk c0。“clk c0”各参数按照图8-26所示页面设置。 鼠标左键单击2 output clocks栏下的“clk c1”,进入“c1-Core/External output clocks”的设置页,页面显示: 2 output clocks为深兰色背景,“clk c1”为clk c1,如图8-27左上角所示。“clk c1”的设置按照图8-27所示。 鼠标左键单击2 outpu
24、t clocks栏下的“clk c2”,进入“c2-Core/External output clocks”的设置页,此时页面里显示: 2 output clocks为深兰色背景,“clk c2”为clk c2,如图8-28所示。“clk c2”按照图8-28所示设置。鼠标左键单击“Finish”按钮,并且单击所经过的所有页面的“Finish”按钮。设置了PLL后,在本工程硬件系统的“SOPC Builder”工具页面,“Clock Settings” 栏下:“clk_0”改成“clk_50”;“pll_0_c0” 改名为“pll_ c0_cpu”;“pll_0_c1”,改名为“pll_ c1
25、_memory”;“pll_0_c2”,改名字为“pll_ c2_audio”;如图8-29所示。10添加SDRAM控制器 DE270多媒体开发板上有两片容量为4M*16*4比特的SDRAM(IS42S16160B)。在“SOPC Builder”工具页面,鼠标左键单击System ContentsComponent Library Memories and Memory Controllers SDRAM SDRAM Controller Add。进入“SDRAM Controller”的多项设置页面,默认进入“Parameter Settings”的 Memory Profile 设置页,
26、此页面的设置严格按照如图8-30所示。图8-30所示页面完成后,鼠标左键单击“Timing”,进入Timing 设置页面。严格按照如图8-31所示设置各参数,设置完成后,鼠标左键单击“Finish”按钮。 把名称改为“sdram_u1”。按照上面同样方法、同样参数再添加一个SDRAM控制器,把名称改为 “sdram_u2”。11. 添加LCD显示驱动(Character LCD)在“SOPC Builder”工具页面,鼠标左键单击System ContentsComponent Library Peripherals Display Character LCD Add,弹出“Character
27、 LCD”设置页面,缺省设置,鼠标左键单击“Finish”,把名字改为“lcd”。12. 添加两个“i2c”PIO在“SOPC Builder”工程页面,鼠标左键单击System ContentsComponent LibraryPeripherals Microcontroller Peripherals PIO(Parallel I/O) Add,弹出“PIO(Parallel I/O)”多项设置页面。“Width”设置成1位输出方式,其他使用缺省值,如图8-32所示。鼠标左键单击“Finish”按钮,将该硬件的名称改为“i2c_sclk”。在“SOPC Builder”工程页面,鼠标左键
28、单击System ContentsComponent LibraryPeripherals Microcontroller Peripherals PIO(Parallel I/O) Add,弹出“PIO(Parallel I/O)”多项设置页面。“Width”设置成“1” ;“Direction”选择为“Bidirectional(tristate) ports”;其他为缺省值,如图8-33所示,将名称改为“i2c_sdat”。13. 添加七段显示驱动(SEG7_IF)在“SOPC Builder”工具页面,鼠标左键单击System ContentsComponent LibraryTera
29、sic Technologies Inc SEG7_IFAdd,弹出“SEG7_IF”设置页,全部缺省设置,鼠标左键单击“Finish”,该硬件名字改为“SEG7”。14. 添加音频连接(AUDIO_IF)在“SOPC Builder”工具页面,鼠标左键单击System ContentsComponent LibraryTerasic Technologies Inc AUDIO_IFAdd,弹出“AUDIO_IF”设置页,全部缺省设置,鼠标左键单击“Finish”,该硬件名字改为“AUDIO”。15添加SD卡所用PIODE2-70多媒体开发板上,SD卡没有控制器,只需设置四个PIO即可。(1
30、) 添加“sd_clk”在“SOPC Builder”工具页面,鼠标左键单击Component Library Peripherals Microcontroller Peripherals PIO(Parallel I/O) Add,弹出“PIO(Parallel I/O)”多项设置页面,默认进入“Parameter Settings”的“Basic Settings”设置页面。在“Basic Settings”设置页面:“Width”设为 1;“Direction”设置为 “output ports only”;其它参数使用缺省值,如图8-34所示。将名字改为“sd_clk”。(2) 添加
31、“sd_cmd”、“sd_dat”和“sd_dat3”在“SOPC Builder”工具页面,鼠标左键单击Component Library Peripherals Microcontroller Peripherals PIO(Parallel I/O) Add,弹出“PIO(Parallel I/O)”多项设置页面,默认进入“Parameter Settings”的“Basic Settings”设置页面。在“Basic Settings”设置页面:“Width”设为 1;“Direction”设置为 “Bidrectional(tristate) ports”,如图8-35所示。鼠标左键单击“input options”,进入“input options”设置页面。在“input options”设置页面:“Edge capture register”栏的 “Sychronously Capture” 前打勾,选择 “either edge”
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1