DE-10 Standard HPS SOC和FPGA联合使用例程

DE-10 Standard HPS SOC和FPGA联合使用例程,第1张

在开始本教程之前,请注意演示项目准备需要以下内容:

在Intel SoC FPGA中,HPS逻辑与FPGA结构通过AXI(Advanced eXtensible Interface)桥进行连接。为了实现HPS逻辑与FPGA 结构的通信,需要通过使用Intel系统集成工具Qsys添加HPS组件来进行系统设计。从HPS组件的AXI主端口,HPS可以访问那些连接到AXI主端口的内存映射从端口。

HPS包含以下HPS-FPGA AXI桥

下图显示了FPGA结构和L3与HPS互连的AXI桥的框图。每个主(M)接口和从(S)接口显示其数据宽度。括号中标注了每个互连的时钟域。

HPS-to-FPGA桥由3级(L3)主开关控制,轻量级控制HPS-to-FPGA桥由L3从外围从开关控制。

FPGA-to-HPS桥接控制L3主开关,允许任何在FPGA结构的主实现(implemented)去访问在HPS中大多数从实现。

所有三个桥都包含全局程序员视图GPV寄存器。GPV寄存器控制网桥的行为。通过轻量级的HPS-to-FPGA桥访问可以所有三个桥的GPV寄存器。

这个例程向用户介绍了如何使用HPS/ARM与FPGA进行通信。这个与DE10-Standard板上ARM C程序配套的GHRD工程,演示了HPS/ARM程序如何控制连接到FPGA部分的红色LED。

术语GHRD是黄金硬件参考设计(Golden Hardware Reference Design)的简称。友晶科技为DE10-Standard开发板提供的GRD项目位于CD文件夹中: CD-ROM\Demonstration\SOC_FPGA\ DE10_Standard_GHRD。

本项目由以下组成部分组成:

MPU所看到的SoC FPGA部分的系统外围设备的内存映射从轻量级的HPS-to-FPGA到FPGA的基础地址0xFF20_0000开始。MPU可以通过Qsys中的地址偏移来访问这些外围设备。用户可以打开GHRD项目与Quartus II软件。然后打开soc_system。qsys文件与qsys工具。下图列出了连接到轻量级HPS-to-FPGA的外围设备的地址映射。

这些外设的所有Avalon引出信号( Avalon Conduit signals)都连接到DE10-Standard板上SoC FPGA的I/O引脚,如图所示

在实际的应用过程中,友晶科技提供的DE10_Standard_GHRD工程并不是十分契合我们的开发需要,这可能包括外围设备的冗余和不足。下面为了实现本教程开篇所定的目标,我们需要根据DE10_Standard_GHRD工程进行修改。其中友晶科技提供的DE10_Standard_GHRD工程实现的是LEDR0通过闪烁模拟板子的心跳, LEDR1-9 按照一定频率进行左移右移循环闪烁60次;我们的目标是LEDR0通过闪烁模拟板子的心跳, LEDR1-8 按照一定频率进行左移右移循环闪烁60次, LEDR9 在LEDR1-8的每一次循环后闪烁一次。可以看出,我们只需要将DE10_Standard_GHRD工程中的LEDR9的设计进行更改就可以打到我们的目的。下面正式开始更改 *** 作。

新建文件夹: E:\work\Quartus\My_GHRD ,然后将DE10_Standard_GHRD工程目中的一下文件复制到工程目录下:

因为其中的文件DE10_Standard_GHRD.v后面将会被指定为顶层文件,所以需要将其更改为与工程名My_GHRD相同的My_GHRD.v文件,同时为了与工程名保持协调,我们也将文件DE10_Standard_GHRD.sdc更改为与工程名My_GHRD相同的My_GHRD.sdc。最终工程目录文件夹如下图所示:

首先,建立一个名为:My_GHRD的工程。打开软件Quartus Prime Standard Edition,点击:File→New Project Wizard…,进入工程创建引导界面。

点击引导界面下方的:Next,进入Directory, Name, Top-Level Entity设置界面。

点击右侧按钮:…选择你的工程目录 E:/work/Quartus/My_GHRD 。之后设置工程名: My_GHRD 。此时软件将自动把顶层设计entity name设置为工程名: My_GHRD 。继续点击:Next,进入Project Type设置界面。

在Project Type界面选择:Empty Project选项,继续点击:Next,进入Add Files设置界面。

在Add Files设置界面,点击右侧按钮:…,添加工程目录下的文件:My_GHRD.v和soc_system.qsys以及文件夹hps_isw_handoff和ip下的所有文件进入工程。

然后点击:Next,进入Family, Device &Board Settings设置界面。

在Family, Device &Board Settings设置界面,我们要设置我们所用的SoC FPGA型号:5CSXFC6D6F31C6N。为了能够快速锁定我们要选择的SoC FPGA型号,我们可以点击:Device下拉列表,选择:Cyclone V SX Extended Features,以缩小选型范围。

然后,选择Available devices下的5CSXFC6D6F31C6。继续点击:Next,进入EDA Tool Settings设置界面。

在EDA Tool Settings设置界面下,我们保留默认设置。之后点击:Fnish,完成工程创建,退出工程创建引导界面。

由于我们需要在DE10_Standard_GHRD工程的基础上更改Qsys的设计来实现对LEDR9的单独控制,所以我们需要在Qsys中添加一个1位的PIO端口来实现对LEDR9的控制,同时需要将原来用于同时控制LEDR0-9的10位PIO端口的改为9位的PIO端口。

依次点击:Tools→Qsys,启动Qsys,之后选中要打开的soc_system.qsys文件。

此时将d出“ PIO(Parallel I/O) ”设置界面。将PIO的数据宽度Width设置为:1,数据输入输出方向Direction设置为:Output。最后点击右下角的Finish按钮退出设置。

现在,新的Qsys设计中将会出现我们新添加的PIO端口pio_0,我们可以对其进行重命名。光标移动到在端口名pio_0处,右键选择“Rename”,重命名为:led_pio9。点击空白处保存命名。

之后我们需要对led_pio9组件的信号进行连接,将光标放置到下图中led_pio9组件中clk信号所在行的白点处,点击后可以将led_pio9组件中clk信号与clk_0组件的clk信号进行连接,可以表示为:led_pio9.clk—clk_0.clk。使用类似的 *** 作,将led_pio9组件的其它信号分别与其它组件进行如下连接,最终的连接关系如下:

如下图:

其中led_pio9有一个信号led_pio9.external_connection需要进行对外引出。光标置于信号led_pio9.external_connection处右击选择:Connections:led_pio9.external_connection→Export as: led_pio9_external_connection。

到此,添加一个1位的PIO端口led_pio9的 *** 作已经完成。

接下来需要将原来控制LEDR0-9的数据宽度为10位的PIO端口led_pio更改为只用控制LEDR0-8的数据宽度为9位的PIO端口led_pio。双击组件led_pio,将数据宽度Width(1-32 bits)设置为:9,关闭Parameters窗口将自动保存更改。

现在,我们要为我们新添加的PIO端口led_pio9分配基地址,同时更新Qsys设计中其它组件的基地址。依次点击:System→Assign Base Addresses。

可以看出,至此,我们需要在Qsys设计中做的更改已经完成了。现在,只要重新生成相应的HDL文件,更新Qsys设计就可以结束Qsys部分的设计了。但是后面对工程编译时软件将会输出错误提示:

Error (10228): Verilog HDL error at soc_system_sysid_qsys.v(34): module “soc_system_sysid_qsys” cannot be declared more than once。

更令人遗憾的是,目前本人还没有找到解决上述错误信息的办法。有一个无奈的办法就是:将Qsys设计中的soc_system_sysid_qsys组件删除。这不会影响Qsys设计的功能,关于该组件功能的详细介绍,读者可以自行查找,此处不再赘述。

删除soc_system_sysid_qsys组件的办法是:将soc_system_sysid_qsys组件sysid_qsys的Use列方框中的“√”去掉。

之后进行Qsys设计中的文件生成工作。点击右下角的Generate HDL…按钮。

在d出的“Generation”窗口中,确认Output Directory下Path所指定的生成文件的输出目录在工程目录下。然后点击Generate按钮。

接下来会d出“Save System Completed”窗口,点击右下角的Close按钮。

接下来会d出的“Generate”窗口,等待几分钟,文件生成工作完成后,右下角的“Close”按钮会高亮显示。此时,点击“Close”按钮。

最后,又会退回到Qsys设计页面,点击右下角的Finish按钮,退出Qsys设计。

在返回Quartus Prime Standard Edition主界面后,会提示我们把更新后的.qip和.sip文件重新手动添加到工程中来。点击提示窗口右下角的Close按钮。

现在,我们来手动添加更新后的.qip和.sip文件。右击Project Navigator窗口中工程名:My_GHRD。点击Settings…选项。

接下来会d出Category界面,点击右侧的…按钮。

此时会d出Select File界面,在指定的目录下找到生成的soc_system.qip文件并选中,然后点击右下角的“打开”按钮。

最后,可以在返回的Catagory界面中可以看到生成的soc_system.qip文件已经被成功添加到工程中。

在上述界面中可以看到文件:hps_reset_bb.qip和hps_reset_bb.v,这一组文件的定义了模块:hps_reset。但是,由于 文件:hps_reset.qip和hps_reset.v这一组文件同样也定义了模块:hps_reset,所以hps_reset_bb.qip和hps_reset_bb.v的加入会导致模块:hps_reset的重复定义。

现在我们需要将文件:hps_reset_bb.qip和hps_reset_bb.v进行移除。选中文件:hps_reset_bb.qip和hps_reset_bb.v,点击右侧的Remove按钮移除文件。最后,点击右下角的OK按钮退出该界面。

至此,工程My_GHRD中Qsys部分的设计已经完成。接下来我们需要对工程中的硬件描述文件.v文件进行修改。其实,我们在DE10_Standard_GHRD工程的基础上只用对My_GHRD中顶层实体文件My_GHRD.v中各个模块的引脚及其连接关系进行描述即可。

在此之前,我们先指定我们的顶层实体文件My_GHRD.v。点击Project Navigator窗口中Hierachy按钮,会d出下拉列表,我们点击File选项。

找到工程中的My_GHRD.v,右击选择Set as Top-Level Entity。

我们双击Project Navigator窗口中工程名My_GHRD,此时软件将会打开工程的顶层实体文件My_GHRD.v

对顶层实体文件My_GHRD.v的修改主要有以下各处:

第一,顶层实体模块的命名须与工程名My_GHRD保持一致。

第二,在模块soc_system u0中对新引出的PIO端口led_pio9_external_connection_export进行声明。可以发现,我们声明端口led_pio9_external_connection_export的同时需要为其指定一个wire类型的变量进行连接。对照led_pio_external_connection_export连接到wire类型的变量fpga_led_internal上,我们新定义了一个wire类型的变量fpga_led9_internal与端口led_pio9_external_connection_export进行连接。当然,wire类型的变量fpga_led9_internal可以理解为是一条导线,它的一端接到了模块soc_system u0中对新引出的PIO端口led_pio9_external_connection_export上,两外一端也是要为它连接适当的端口的。我们新增端口led_pio9_external_connection_export的目的就是能够对LED灯LEDR9进行控制,所以,不难想到,wire类型的变量fpga_led9_internal另一端一定是要连接到端口LEDR[9]上面的。这样,总体的更改就是下面这样的:

现在,我们可以对工程My_GHRD进行编译 *** 作。首先是进行工程的分析与综合,依次点击:Processing→Start→Start Analysis &Synthesis。

工程的分析综合通过后,主界面中左侧的Tasks窗口下的Analysis &Synthesis栏前面会展示一个绿色的“√”,后面会显示分析综合所用的时间。

上面分析综合成功后,下一步需要进行Fitter(Place &Route),这里进行的是关于FPGA内部的布局布线 *** 作。在此之前我们需要对我们模块中设计的输入输出引脚进行引脚分配。引脚分配的方法有很多种,读者可以自行学习。这里由于我们定义了大量的引脚,而且我们有现成的DE10_Standard_GHRD工程可以利用,我们只需将该工程里面的引脚分配信息转移进入我们的My_GHRD工程就可以了。

我们现在打开DE10_Standard_GHRD工程。进入工程后,我们点击:Assignments→Pin Planner,进入引脚分配界面。

在该界面下,点击:File→Export…。

之后会d出Export窗口。我们需要选择我们要导出的文件格式为:.tcl。

然后,点击右下角的Export按钮。

最后,依次点击引脚分配界面和DE10_Standard_GHRD工程界面右上角的关闭按钮,退出DE10_Standard_GHRD工程。

我们现在已经得到了我们需要的引脚分配文件DE10_Standard_GHRD.tcl,现在我们需要把它从DE10_Standard_GHRD工程目录下复制到My_GHRD工程目录下。为了与My_GHRD工程名保持一致,将其改名为:My_GHRD.tcl。

接下来,我们需要利用得到的引脚分配文件My_GHRD.tcl对工程My_GHRD中的引脚进行分配。点击:Tools→Tcl Scripts…。

在d出的Tcl Scripts窗口下,点击右侧的Add to Project…按钮。

在d出的Add to Project窗口下,选中我们的引脚分配文件My_GHRD.tcl,并点击右下角的打开按钮。

此时,软件又自动退回到Tcl Scripts窗口下。在Libraries栏中找到我们的引脚分配文件My_GHRD.tcl,点击下方的Run按钮来加载我们的引脚分配文件。

在后面d出的界面中点击OK按钮,退回到Tcl Scripts窗口。

最后点击到Tcl Scripts窗口下方的Close按钮退出到Tcl Scripts窗口,回到工程主界面。

此时,点击主界面的:Assignments→Pin Planner进入引脚分配界面。

在引脚分配界面中,可以看到,引脚大部分已经被分配完成,未分配的引脚暂时不用担心它们,我们还没有用到。

现在,我们开始对工程进行布局布线。点击:Processing→Start→Start Fitter。

工程的布局布线通过后,主界面中左侧的Tasks窗口下的Fitter(Place &Route)栏前面会展示一个绿色的“√”,后面会显示布局布线所用的时间。

到此,基本上我们可以判断在逻辑上我们的设计已经没有问题了,接下来我们是可以进行工程的全编译了。但是,在实际的应用设计中我们还要考虑对信号的时序进行约束,尤其是具有 SDRAM DDR3这种高速存取器件的设计中。对于时序约束,我们可以利用DE10_Standard_GHRD工程中的时序约束文件:DE10_Standard_GHRD.sdc。同样的,将其复制到My_GHRD工程目录下,改名为:My_GHRD.sdc。

将时序约束文件添加进入工程,右击Project Navigator窗口下的工程名:My_GHRD,点击:Setting…按钮。

接下来会d出Category界面,点击右侧的…按钮。

此时会d出Select File界面,进入工程主目录下,点击右下角的文件类型选择按钮,选中:Script Files( * .tcl .sdc .pdc*.qip)一项。

下找到时序约束文件My_GHRD.sdc并选中,然后点击右下角的“打开”按钮。

最后,可以在返回的Catagory界面中可以看到时序约束文件:My_GHRD.sdc文件已经被成功添加到工程中。依次点击右下角的Apply按钮和OK按钮退出该界面。

此时已经回到工程主界面,我们可以进行工程的全编译了。点击Processing→Start Compilation。

本节将介绍如何设计一个ARM C程序来控制PIO控制器led_pio。SoC EDS用于编译C项目。为了让ARM程序控制PIO组件led_pio,我们需要led_pio地址。使用Linux内置驱动程序’ /dev/mem '和mmap system-call可以将led_pio组件的物理基址映射到Linux应用软件可以直接访问的虚拟地址。

ARM C程序需要led_pio的组件信息,因为程序会尝试控制组件。这部分将会描述如何使用一个给定的Linux shell批处理文件将Qsys HPS信息提取到一个头文件中,这个头文件稍后将包含在C程序中。

上面提到的批处理文件名为:generate_hps_qsys_header.sh。它与DE10_Standard_GHRD工程位于同一个文件夹中。现在,我们要为工程My_GHRD生成头文件。首先,从DE10_Standard_GHRD工程目录下复制文件:generate_hps_qsys_header.sh到My_GHRD工程目录下。

接下来,使用记事本打开批处理文件:generate_hps_qsys_header.sh,确认文件中红线标注的路径下有应用程序:sopc-create-header-files.exe。其中,路径:/cygdrive/d/…表示D盘…。如果该路径下没有上述应用程序,读者需自行更改其中的路径。

注意,如果后面在SoC EDS命令shell中运行generate_hps_qsys_header.sh时,提示出现错误。(其实这个错误当时解决后忘记进行记录,好像是提示执行文件sopc-create-header-files的过程中sopcinfo2swinfo还是swinfo2

一、HPS教育

HPS是科学史和科学哲学(History of Science and Philosophy of Science)的英文缩写,随着科学社会学的发展和科学社会学与科学教育的特殊关系,科学教育家将科学社会学也纳入HPS教育当中,HPS就变为科学史、科学哲学和科学社会学(History Philosophy and Sociology of Science),其主要内容是:把科学史、科学哲学、科学社会学的有关内容纳入到科学课程中, 以期提高科学教育的质量。HPS教育的根本目的是理解科学本质。

二、HPS教学模式

HPS教学模式是由孟克和奥斯本所提出的,这一教学模式实施的基本前提是:所学的课题必须是科学史上某一科学家曾经研究的自然现象。这一模式的教学程序包括6个环节:①演示现象;②引出观念;③学习历史;④设计实验;⑤呈现科学观念和实验检验;⑥总结与评价。

HPS教学模式是提升学生科学素养的有效手段,因此在教学中我们亟需将这种教学模式应用于生物教学。

HPS教育可以在人文的背景下构建生物教学。HPS生物教育是从科学史、科学哲学、科学社会学的角度讲述生物学科知识,为自然学科增加了人文气息,学生不仅学到生物知识,更重要的是感受到科学知识背后永恒的人文精神和科学素养,实现人文教育与科技教育的统一,达到人文教育与科技教育的平衡。

  三、HPS在生物教学中的价值

1.HPS教育可以提高学生对生物知识的理解。将HPS教育应用到生物教学中必然涉及到生物的基本概念、基本原理,但是HPS教育的优势不在于传授给学生生物知识,而在于传授给学生生物知识(生物概念,各种假设和理论等)的来龙去脉。

2.HPS教育有利于科学的生物方法的培养和生物思想的熏陶。

生物史展示了生物思想和理论体系的产生及演变过程,呈现给我们的是一幅辉煌的、静态的生物科学的画卷,因此学生学到的不仅是各种生物结论,还有这些结论产生的背景和条件,让学生受到生物思想的熏陶。生物的发展都是伴随着科学研究方法的进步,因此在讲述生物思想和理论的演变及进步的时候,就会向学生展示科学的方法,从而培养学生科学的方法。

四、教学案例

事实上,高中生物知识中很多可以采用HPS教育方式。

1.细胞学说的建立;

2.酶的发现;

3.光合作用的发现;

4.生长素的发现;

5.遗传物质的发现。

附:光合作用的发现过程的教学案例(来自于网络)

光合作用是生命世界最重要的生理活动,光合作用的实质是物质的转变和能量的转变。人们对光合作用的发现过程,就是对光合作用中物质和能量变化的本质的探究过程。光合作用的教学过程可以按HPS教学模式进行如下教学设计。

1.演示现象

教师通过多媒体展示植物的光合作示意图,教师设疑:什么叫光合作用?光合作用的本质与机制是什么?在学生观察图片回答问题的基础上,教师进一步设问:植物生长的养料究竟是从哪里来的?植物为什么能清新空气?光合作用中的氧气是从哪里产生的?什么时候产生的?从而引出问题,促使学生产生探究的强烈欲望。

2.引出概念

教师引导学生就上述有关光合作用问题说出自己的看法。例如,笔者曾运用访谈法收集到学生有关光合作用的想法有:

①植物白天进行光合作用,吸收二氧化碳,放出氧气;晚上进行呼吸作用,吸收氧气,放出二氧化碳,所以植物白天不会吸收氧气。

②植物的气孔白天关闭,晚上开放,因为植物白天需要吸收二氧化碳,晚上则不需要。

③因为土壤中养分不足,所以植物才需要讲行光合作用。

④梢物讲行光合作用时除了吸收太阳的光外,还吸收太阳的热。

⑤用塑料袋套住植物,袋内会产生雾气,这些雾气是二氧化碳。

⑥用塑料袋套住植物,就不能进行光合作用,因为前者夺走了阳光。

3.学习历史

首先,给学生介绍科学史中几个著名的实验。如范·海尔蒙特证明植物生长是从水中获得养料的实验;萨克斯证明绿叶在光合作用中产生淀粉的实验;恩吉尔曼用水绵和好氧细菌证明氧气是由叶绿体释放出来的,叶绿体是绿色植物光合作用的场所的实验;鲁宾和卡门利用同位素标记法证明光合作用释放的氧全部来自水的实验。教学中,要让学生理解这些实验的原理和目的,以及科学家在实验设计上巧妙之处。如萨克斯在实验前把绿色叶片放在暗处几小时,目的是什么?恩吉尔曼将载有水绵和好氧细菌的临时装片放在没有空气的黑暗环境中的目的是什么?进行黑暗(局部光照)和曝光的对比实验的目的是什么?鲁宾和卡门利用同位素标记法的原理是什么等等。

其次,引导学生讨论并归纳这些科学家关于光合作用的探究讨程。如下表:

4.设计实验

引导学生自己设计买验,证明自己的观点和科学家的观点。如设计实验证明光合作用的原料之一是二氧化碳;证明光合作用需要光和叶绿体;证明光合作用的产物主要是淀粉;证明光合作用释放氧气等。

5.呈示科学观念和实验检验

教师引导学生读书,或由教师讲解光合作用过程,使学生进一步明确光合作用过程中物质和能量变化的本质。如果学生还有自己的观点与当前的科学概念不一致,就需要引导学生自己设计实验检验。例如,学生认为植物白天进行光合作用,吸收二氧化碳,放出氧气;晚上进行呼吸作用,吸收氧气,放出二氧化碳,所以植物白天不会吸收氧气,放出二氧化碳。为了消除学生这一错误概念,可以让学生做测量绿色植物(白天)有氧呼吸释放二氧化碳的实验。将新鲜绿叶放入锥形瓶内,瓶内注水并用弯管与盛有溴代麝香草酚蓝试剂(BTB)的试管相连接。通过观察学生发现,瓶内产生的气体进人BTB试剂内,试剂逐渐由蓝色变成红黄色,这是由于绿叶通过呼吸作用产生二氧化碳进人试剂的结果。从而使学生认识到绿色植物白天也能进行呼吸作用。

6.总结与评价

引导学生总结归纳:光合作用的要点是什么?有关光合作用还有什么问题?特别是要引导学生进一步讨论科学家关于光合作用的探究过程的内容、方法的历史意义与局限性,如范·海尔蒙特实验的局限性是什么?萨克斯的实验有没有需要改进的地方?如何改进?鲁宾和卡门的实验在前两位科学家的时代能不能进行?为什么?仅仅通过上述的几个实验能否揭示光合作用的机制?等。通过对上述问题的讨论,有利于学生更深人地理解科学的探究本质。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11582604.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存