SOPC系统设计实例

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SOPC系统设计实例
SOPC系统设计实例 (1)
1 SOPC系统设计流程 (1)
2 SOPC 系统设计实例 (2)
1.建立工程 (3)
2.建立顶层设计文件 (10)
3.用SOPC Builder建立一个新的SOPC硬件系统 (12)
4.向系统中添加Nios II处理器 (14)
5.添加片上存储器 (20)
6.添加JTAG UART (22)
7.添加定时器 (24)
8.添加自定义组件七段数码管控制器 (25)
9.自动设置基地址 (34)
10.加入System ID模块 (34)
11.生成系统 (35)
12.例化Nios II处理器 (37)
13.导入引脚分配 (38)
14.编译并下载设计 (40)
15.启动Nios II IDE (41)
16.建立新工程 (41)
17.修改系统库属性 (45)
18.修改代码 (46)
19.编译并运行工程 (48)
1 SOPC系统设计流程
SOPC系统的设计流程如图1所示。

设计者首先根据任务要求决定系统需求,然后用SOPC Builder建立自己的SOPC系统,完成这项工作之后,硬件工程师和软件工程师可以开始协同工作。

硬件工程师首先建立一个顶层设计文件,将生成的SOPC系统例化,并设置引脚分配,时序要求及其他设计约束,,然后编译硬件设计并将FPGA设计下载到目标板中。

在硬件工程师工作的同时,软件工程师可以用Nios II IDE开发应用软件,并在Nios II IDE中使用Nios II 指令仿真器(ISS)运行并调试软件,等硬件工程师把硬件设计下载到目标板中之后,软件工程师将可执行软件下载到目标板上的Nios II 系统中,并在目标板上运行调试软件,如果发现软件设计不满足设计要求,则再改进硬件和软件的设计。

图1 SOPC系统设计流程
2 SOPC 系统设计实例
用SOPC系统在DE2平台上实现一个计数器。

先在DE2平台上建立SOPC 系统的硬件,这个系统包括一个NIos II/s 嵌入式处理器、存储器、一个JTAG UART及一个定时器,一个ID模块。

另外,我们将加入一个自定义组件,实现
对DE2平台上七段数码管的控制。

1.建立工程
启动Quartus II软件,用New>New Project Wizard…菜单在Quartus II中新建一个工程,本例中将工程的工作目录设定在G:\DE2 ,工程的名称为niosii,如图4所示,如果是希望使用自己已有的工程,则点击图4中所示的Using Existing Project Setting按钮,,但是在本例中不需要添加已有工程的配置。

按下next后,器件中选择EP2C35F672C6,向导完成后的汇总界面如图8所示。

图2 Quartus II 启动界面
图3
图4
图5
图6
图7
图8
图9
2.建立顶层设计文件
建立工程之后,需要为工程建立一个顶层设计文件,这个设计文件的名称应该与工程的名称完全一致,设计文件可以是Quartus II允许的各种设计输入格式的文件,如V erilog HDL、VHDL、AHDL及原理图设计文件等。

在本例中使用原理图设计文件。

用File>New菜单建立一个新文件,选择Block Diagram/Schematic File文件,
文件名称与工程名称保持一致,为niosii。

保存新建的文件。

图10
图11
3.用SOPC Builder建立一个新的SOPC硬件系统
图13所示,输入新系统的名称为nios_ii_system,当然也可以输入其他名称,但是应该注意,所有的名称中都不能出现空格。

Target HDL选项可以选择V erilog,也可以选择VHDL,这里选择V erilog。

按OK按钮,进入到SOPC Builder的主界
面,如图15所示。

图13
图14
图15
4.向系统中添加Nios II处理器
在SOPC Builder左侧的组件列表中,选择Nios II Processor,,按鼠标右键,在弹出的菜单中选择Add New Nios II Processor , 显示如图17所示的Nios II处理器的配置界面。

选择Nios II/s作为本设计的处理器按下Next按钮,设置处理器的指令缓存和紧密耦合指令存储器,如图18所示,选择指令缓存为2 K字节,不使用紧密耦合指令存储器。

按下Next 按钮,设置JTAG调试模块,JTAG调试模块分为四个级别,每个级别的功能不同,占用的逻辑资源也不相同,在本设计中选择占用逻辑资源最少的级别Level 1,如图21所示
按下Next按钮可以添加自定义指令,在本例中不添加自定义指令,按Finish
按钮结束Nios II控制器的设置。

图16
图17
图18
图19
图20
图21
图22
图23
5.添加片上存储器
在SOPC Builder主界面左侧的组件列表Memory组中,选中On-Chip Memory(RAM or ROM),按鼠标右键,在弹出的菜单中选择Add New On-Chip Memory(RAM or ROM),显示如图25所示的片上存储器的配置界面。

选择存储类型为RAM,存储器宽度为32位,总内存尺寸为40 K字节。

单击Finish 按钮完成片上存储器的配置。

图24
图25
图26
图27
6.添加JTAG UART
在SOPC Builder主界面左侧的组件列表中,选择JTAG UART,按鼠标右键,在弹出的菜单中选择Add New JTAG UART,显示如图28所示的JTAG UART配置
界面。

按照默认设置,配置不作改变,单击Finish按钮完成JTAG UART 的设置。

图28
图29
7.添加定时器
在SOPC Builder主界面左侧组件列表中选中Interval Timer ,按鼠标右键,在弹出的菜单中选择Add New Interval Time,显示如图30所示的定时器配置界面。

按照默认的设置。

配置不作改变,即可生成一个初始周期为1ms 的定时器,单
击Finish 按钮完成定时器的设置。

图30
8.添加自定义组件七段数码管控制器
先在Quartus II中建立两个V erilog 文件,作为七段数码管显示驱动的控制器,一个是SEG7_LUT.V,如代码代码1所示,另一个是SEG7_LUT_8.V,代码如代码2所示。

SEG7_LUT.V是一个查找表,完成七段码显示的译码。

当输入iDIG 在0x0~0xF之间变化时,输出oSEG的七段码也发生相应的变化,并在数码管上显示iDIG的值。

SEG7_LUT_8.V,对SEG7_LUT.V进行了8次例化,分别对应于七段数码管HEX0~HEX7。

在SEG7_LUT_8.V中,对输入/输出信号的定义不是按Avalon总线从端口标
准信号来定义的。

将这两个文件保存在G:\DE2\SEG7_LUT_8\hdl目录中。

代码1 SEG7_LUT.V
代码2 SEG7_LUT_8.V
返回SOPC Builder中,用File>New Component菜单添加新组件,如图31
所示
按Next按钮进入设计文件的添加界面,如图32所示。

可以添加HDL文本文件,也可以添加综合之后的文件,按Add HDL File… 按钮,选择
G:\DE2\SEG7_LUT_8\hdl,在HDL File列表中出现了SEG7_LUT_8.V和
SEG7_LUT.V及它们的相关的信息,组件编译器导入并综合SEG7_LUT_8.V和SEG7_LUT.V,等待一段时间后,组件编译器完成文件的导入及综合,并提示文件综合成功。

此时在组建编辑器下部的信息栏中,提示有两个错误,一个指出Avalon总线从端口没有clk信号,另一个指出Avalon总线从端口没有读/写信号,这是由于V erilog文件中的输入/输出信号定义与Avalon总线标准信号不一致造成的。

如果文件综合不成功,则按提示重新修改SEG7_LUT_8.V和SEG7_LUT.V 文件。

按Next按钮,设置输入/输出信号,使七段数码管控制器的输入/输出信号与Avalon总线信号匹配。

如图33 所示,组件编译器列出了所有的输入/输出信号,通过改变信号类型可实现信号匹配。

将iDIG的信号类型改为writedata,将iWR
的信号类型改为write,将iCLK的信号类型改为clk,将iRST_N的信号类型改为reset_n,其他的信号保持原来的export不变。

修改过程中,下部信息栏中的信息也会相应的改变,如果匹配结果满足Avalon总线规范对信号的要求,则会显示
Component “SEG7_LUT_8.V”is OK。

按Next 按钮,还可以添加Avalon从接口和用户自定义软件,本例中不需要添加这两项内容。

将向导最后一步的Component Group栏的内容修改为DE2 User Logic,作为组件的名称,如图35所示,以后加入的新组件都可以放在这个组里,也可以选择其他的组件名称,默认的组件名称是Unknown Group。

按Finish按钮,组件编辑器会提示是否保存组件,按OK按钮生成组件,并返回SOPC Builder
界面,此时在组件列表中增加了一个的组DE2 User Logic,该组中有一个组件SEG7_LUT_8,如图37所示。

选中组件列表中的SEG7_LUT_8.V,按住鼠标右键,在弹出的菜单中选择Add New SEG7_LUT_8.V。

图31
图32
图33
图34
图35
图36
图37
图38
9.自动设置基地址
至此已经添加了所有需要的组件,SOPC Builder根据组件添加的顺序以及各组件需要的地址范围,自动为各组件分配了地址,系统中的组件信息如图38所示
用System>Auto Assign Base Addresses菜单,即可自动设置地址,自动设置地址之后的系统组件的信息如图39所示
图39
10.加入System ID模块
如果需要,可以在系统中加入System ID,为自己的系统添加独一无二的ID 号。

在SOPC Builder组件列表中选中System ID Peripheral,按鼠标右键,在弹出的菜单中选择Add New System ID Peripheral,即可添加System ID,每个Nios II系统只能添加一个唯一的ID。

添加System ID模块(sysid)之后的系统模块信息列表如图41所示。

图40
图41
11.生成系统
按Next 按钮转入系统生成页,按Generate按钮开始生成Nios II系统。

根据系统规模的不同,生成系统所需要的时间也不一样。

在生成系统的过程中,屏幕上会提示相关的信息,生成系统的工作完成之后,显示SYSTEM GENERA TION
COMPLETED。

按Exit按钮可退出SOPC Builder,返回Quartus II,也可不退出
SOPC Builder,直接切换到Quartus II软件继续后面的工作。

图42
图43
图44
12.例化Nios II处理器
在Quartus II软件中,可修改文件niosii.bdf。

用鼠标左键双击niosii.bdf文件窗口中的空白处,弹出Symbol选择对话框,刚刚生成的Nios II系统在Project 组中。

展开Project组,如图45所示,选中nios_ii_system,单击OK按钮,在niosii.bdf窗口中放置nios_ii_system模块,实现对Nios II系统的例化。

参照图46完成原理图设计,图中用CLOCK_50作为系统的时钟输入,SW[0]作为复位
信号输入,Nios II的输出分别连接到HEX0~HEX7上。

图45
图46
13.引脚分配
接下来需要为设计分配引脚,可以在引脚规划器Pin Planner中手动分配引脚,按照提示导入引脚分配。

图47
图48
图49
50
图51
图52
14.编译并下载设计
用Processing>Start Compilation或者是快捷键启动编译过程,完成编译后的Quartus II界面如图50所示,从图中可以看出这个工程在FPGA上所占用的资源。

将编译后的pof文件下载到DE2平台上的FPGA中,完成硬件设计。

用JTAG模式配置FPGA的步骤如下:
(1)用USB连接电脑的USB口与DE2平台的J9,打开DE2平台的电源。

(2)将SW19置于RUN位置。

(3)在Quartus II中用Tools>Programmer菜单或者工具按钮打开如图52所示的窗口。

(4)如果显示没有硬件,则单击Hardware Setup…按钮,打开硬件设置窗口,如图所示。

(5)双击USB Blaster ,然后单击Close按钮,完成硬件设置。

(6)此时已经在文件的列表中了,如果没有则单击Add File…按钮,添加该文件,这个文件是编译器产生的数据文件,包含了FPGA的配置数据。

确认Device项列出的是EP2C35F672,选中Program/Configure选项。

(7)单击Start按钮,开始编程,编程结束后,DE2板上的发光二极管GOOD 变亮。

如果Quartus II提示错误,则检查电源及连接电缆。

15.启动Nios II IDE
可以从Window系统的开始菜单中启动Nios II IDE,也可以从SOPC Builder 中的生成页面启动Nios II IDE提示选择Nios II IDE的工作空间(Workspace), Nios II IDE将工程文件保存在一个目录中,这个目录叫做工作空间。

在本例中选择目录G:\DE2作为Nios II IDE的工作空间。

16.建立新工程
在Nios II IDE中用File>New>Project…菜单启动工程向导,新建工程向导的对话框如图53所示,选择C/C++Application,按Next按钮进入下一步,新工程配置界面如图54所示。

我们先利用已有的模板建立一个新工程,在Select Project Template中选择Count Binary,工程名称自动变为count_binary_0,也可以改为其他的名称,注意工程名字中不能出现空格。

Nios II IDE的任务是为Nios II 软核处理器提供软件开发环境,因此必须选择一个目标硬件。

在Select Target Hardware中单击Browse…按钮,选择SOPC Builder System为
G:\DE2\nios_ii_system.ptf 。

按下Next按钮为工程选择系统库,如55所示,选中Creat a new system library named:项,按Finish按钮自动生成工程,建立新工程之后的Nios II IDE的界面如图56所示。

图53
图54
图55
图56
17.修改系统库属性
新建的工程实际上包含两个工程,即count_binary_0及count_binary_0_syslib,前面是用户工程,后面是Nios II IDE在Nios II 硬件系统上自动完成的系统库,用户最好不要去修改它。

在C/C++ Project窗口中选中工程count_binary_0,按右键并在弹出的菜单中选中System Library Properties,显示如图所示的界面,在这个界面中可以修改系统库count_binary_0_syslib的属性。

取消Clean Exit选项,
选中Small C Library选项,按OK按钮返回Nios II IDE。

图57
18.修改代码
新工程是参照模板count_binary建立的,工程中已经有完整的代码,因此可以直接工作。

如果要在七段数码管上显示计数器的当前值,则需要对程序稍加修改。

先展开C/C++ Projec窗口的工程count_binary_0,然后展开count_binary.c,如图所示,用鼠标双击count_sevenseg,定位子程序count_sevenseg()的位置,
然后将count_sevenseg()改变成如代码3所示的代码,保存文件count_binary.c。

图58
代码3 在七段数码管上显示计数值的子程序。

Static viod count_sevenseg()
{
IOWR(SEG7_LUT_8_0_BASE,0,count);
}
同样展开count_binary.h,从包含的头文件中删除文件
altera_avalon_pio_regs.h,然后加入头文件io.h,最后保存文件count_binary.h。

图59
图60
19.编译并运行工程
在C/C++ Project窗口中选中count_binary_0,按右键并从弹出的菜单中选择Builder Project,Nios II IDE开始编译工程count_binary_0。

编译完成以后,检查DE2平台与电脑的连线,并确保前面设计的硬件电路已经下载到FPGA中,且DE2平台上的SW19置于RUN位置。

在C/C++ Project窗口中选中count_binary_0,按右键并从弹出的菜单中选择Run as菜单下的Nios II Hardware,Nios II IDE先检查是否需要重新编译,如果不需要重新编译则开始在DE2平台上的Nios II 处理器中运行程序。

程序运行成功时的Nios II IDE的界面如图所示,首先在控制台窗口(Console)中出现欢迎信息,然后从0x00开始计数,并将计数值输出到控制台窗口,同时在DE2平台上的七段数码管的HEX1和HEX0上显示当前
的计数值。

计数到达0x FF。

图61
图62
图63。

相关文档
最新文档