用户工具

站点工具


niosii_基于内部ram建立第一个软核

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

后一修订版
前一修订版
niosii_基于内部ram建立第一个软核 [2019/11/29 10:19]
zhangzheng 创建
niosii_基于内部ram建立第一个软核 [2022/03/22 10:30] (当前版本)
sean
行 1: 行 1:
-[[http://www.cnblogs.com/xiaomagee/p/5669092.html]]+ 
 +|  **银杏科技有限公司旗下技术文档发布平台** ​ |||| 
 +|技术支持电话|**0379-69926675-801**||| 
 +|技术支持邮件|Gingko@vip.163.com||| 
 +^  版本 ​ ^  日期 ​ ^  作者 ​ ^  修改内容 ​ ^ 
 +|  V1.0  |  2020-07-03 ​ |  gingko ​ |  初次建立 ​ |  
 + 
 +===== 实验十八:基于内部RAM建立第一个软核 ===== 
 + 
 +==== 一、 实验目的与意义 ==== 
 + 
 +  - 掌握NiosII软核建立和使用方法。 
 +  - 掌握QuartusII的使用方法。 
 +==== 二、 实验设备及平台 ==== 
 + 
 +  - iCore4 双核心板[[https://item.taobao.com/item.htm?​spm=a1z10.1-c-s.w4004-22598974120.15.5923532fsFrHiE&​id=551864196684|点击购买]]。 
 +  - Blaster(或相同功能)仿真器[[https:​//item.taobao.com/​item.htm?​id=554869837940|点击购买]]。 
 +  - JLINK(或相同功能)仿真器。 
 +  - Micro USB线缆。 
 +  - Quartus开发平台。 
 +  - 电脑一台。 
 +==== 三、 实验步骤 ==== 
 + 
 +1、打开QuartusII新建工程。 
 +{{ :​icore4:​icore4_fpga_18_1.png?​direct |图18-1}} 
 +2、按下图填写工程信息。然后点击Next。 
 +{{ :​icore4:​icore4_fpga_18_2.png?​direct |图18-2}} 
 +3、直接点击Next 
 +{{ :​icore4:​icore4_fpga_18_3.png?​direct |图18-3}} 
 +4、选择芯片系列和型号,CycloneIV E,​封装为FBGA,引脚数为484,速度等级为8,芯片具体型号选择为EP4CE15F23C8。如下图,然后点击Next。 
 +{{ :​icore4:​icore4_fpga_18_4.png?​direct |图18-4}} 
 +5、按下图选择仿真工具,然后Next。 
 +{{ :​icore4:​icore4_fpga_18_5.png?​direct |图18-5}} 
 +6、这一步显示新建工程的一些信息摘要,点击Finish完成。 
 +{{ :​icore4:​icore4_fpga_18_6.png?​direct |图18-6}} 
 +7、至此一个新的工程就建立好了,但工程是空的,还需加入文件,接下来来建立顶层设计文件。 
 +{{ :​icore4:​icore4_fpga_18_7.png?​direct |图18-7}} 
 +8、点击菜单栏->​New。 
 +{{ :​icore4:​icore4_fpga_18_8.png?​direct |图18-8}} 
 +9、在弹出的对话窗中选择Block Diagram/​Schematic File,​然后点击OK。 
 +{{ :​icore4:​icore4_fpga_18_9.png?​direct |图18-9}} 
 +10、在QuartusII主界面中出现Block1.bdf文件,如下图。 
 +{{ :​icore4:​icore4_fpga_18_10.png?​direct |图18-10}} 
 +11、点击Save As保存。 
 +{{ :​icore4:​icore4_fpga_18_11.png?​direct |图18-11}} 
 +12、使用默认名字保存即可。 
 +{{ :​icore4:​icore4_fpga_18_12.png?​direct |图18-12}} 
 +至此,QuartusII工程和顶层设计文件都已建立完成,接着设计nios软核。 
 + 
 +13、点击菜单栏中的Tool->​Qsys。 
 +{{ :​icore4:​icore4_fpga_18_13.png?​direct |图18-13}} 
 +14、弹出以下窗口。 
 +{{ :​icore4:​icore4_fpga_18_14.png?​direct |图18-14}} 
 +15、接下来添加IP核,在左边的Library里,选择Embeded Pocessors->​Nios II Processor,​点击Add…添加。 
 +{{ :​icore4:​icore4_fpga_18_15.png?​direct |图18-15}} 
 +16、选择Nois II/​f,​点击Finish。 
 +{{ :​icore4:​icore4_fpga_18_16.png?​direct |图18-16}} 
 +17、在左边的Library里,选择Menories and Memory Controllers->​On-Chip->​On-Chip Memory,​点击Add…添加。 
 +{{ :​icore4:​icore4_fpga_18_17.png?​direct |图18-17}} 
 +18、将Total memory size 设为10240,然后点击Finish。 
 +{{ :​icore4:​icore4_fpga_18_18.png?​direct |图18-18}} 
 +19、在左边Library里,选择Peripherals->​Debug and Performance->​System ID Peripheral,​点击Add…添加。 
 +{{ :​icore4:​icore4_fpga_18_19.png?​direct |图18-19}} 
 +20、修改下图中System ID的数字,System ID的数字可以任意设置,默认值为0,本例改为1234,然后点击Finish。 
 +{{ :​icore4:​icore4_fpga_18_20.png?​direct |图18-20}} 
 +21、在左边Library里,选择Peripherals->​Microcontroller Peripherals->​PIO(Parallel I/​O),​点击Add…添加。 
 +{{ :​icore4:​icore4_fpga_18_21.png?​direct |图18-21}} 
 +22、将下图的Width(1-32 bits)中8改为1,本例只用一个IO口,在Direction中选择output。 
 +{{ :​icore4:​icore4_fpga_18_22.png?​direct |图18-22}} 
 +23、至此,IP核添加完毕,添加过的IP核都显示在窗中,如下。 
 +{{ :​icore4:​icore4_fpga_18_23.png?​direct |图18-23}} 
 +24、右击pio_o,点击Rename修改名字,改为led。 
 +{{ :​icore4:​icore4_fpga_18_24.png?​direct |图18-24}} 
 +25、在led下的external_connection后面,点击Double-click to,​并修改为fpga_led,​修改后如下图: 
 +{{ :​icore4:​icore4_fpga_18_25.png?​direct |图18-25}} 
 +26、双击clk_0进入下面界面,将时钟更改为25M,​然后点击finish。 
 +{{ :​icore4:​icore4_fpga_18_26.png?​direct |图18-26}} 
 +27、接下来是IP核的时钟线、信号线的连接,在nios中,只需将时钟和clk_0的时钟连接,右击nios2_qsys_0下的clk,​在第一项nios_qsys_0.clk Connection中点击选中clk_0.clk,​选中之后查阅时可发现在其前有对号,如下图: 
 +{{ :​icore4:​icore4_fpga_18_27.png?​direct |图18-27}} 
 +{{ :​icore4:​icore4_fpga_18_28.png?​direct |图18-28}} 
 +28、按照上述方法将onchipmemory、sysid、led三个模块的时钟线与clk_0连接,连接后如图所示: 
 +{{ :​icore4:​icore4_fpga_18_29.png?​direct |图18-29}} 
 +29、在onchipmemory中,信号线(s1)需要和nios的数据线、指令线都连接,如下图所示。 
 +{{ :​icore4:​icore4_fpga_18_30.png?​direct |图18-30}} 
 +30、在sysid中,信号线(control)和nios的数据线连接,如下图所示。 
 +{{ :​icore4:​icore4_fpga_18_31.png?​direct |图18-31}} 
 +31、在led中,信号线(s1)需要和nois的数据线连接,如下图。 
 +{{ :​icore4:​icore4_fpga_18_32.png?​direct |图18-32}} 
 +32、连线完毕后,修改Nios内核,双击nios2_qsys_0,弹出如下界面,按照下图红框内容修改,然后点击Finish。 
 +{{ :​icore4:​icore4_fpga_18_33.png?​direct |图18-33}} 
 +33、在菜单里选择System->​Creat Global Reset Net Work,​连接复位线。 
 +{{ :​icore4:​icore4_fpga_18_34.png?​direct |图18-34}} 
 +34、在菜单栏里选择system->​Assign Base Addresses,​分配基地址。 
 +{{ :​icore4:​icore4_fpga_18_35.png?​direct |图18-35}} 
 +35、至此如果没有错误,左下角将显示0个错误,0个警告。 
 +{{ :​icore4:​icore4_fpga_18_36.png?​direct |图18-36}} 
 +36、在菜单栏里选择File->​Save As 保存,保存到工程所在的文件中,命名为ledcore。 
 +{{ :​icore4:​icore4_fpga_18_37.png?​direct |图18-37}} 
 +{{ :​icore4:​icore4_fpga_18_38.png?​direct |图18-38}} 
 +37、在菜单栏里选择Generate->​Generate。 
 +{{ :​icore4:​icore4_fpga_18_39.png?​direct |图18-39}} 
 +38、点击Generate进行编译。 
 +{{ :​icore4:​icore4_fpga_18_40.png?​direct |图18-40}} 
 +39、编译完成后,点击close即可。 
 +{{ :​icore4:​icore4_fpga_18_41.png?​direct |图18-41}} 
 +40、关闭内核Qsys窗口,在建立的顶层文件led.bdf的空白处双击。 
 +{{ :​icore4:​icore4_fpga_18_42.png?​direct |图18-42}} 
 +41、弹出如下窗口,选择在Qsys中生成ledcore,​然后点击OK。 
 +{{ :​icore4:​icore4_fpga_18_43.png?​direct |图18-43}} 
 +42、拖动鼠标至合适位置,单击左键放置。 
 +{{ :​icore4:​icore4_fpga_18_44.png?​direct |图18-44}} 
 +43、再次双击顶层文件led.bdf的空白处,​在弹出的下面窗口中,​在name下方输入VCC,​点击OK。 
 +{{ :​icore4:​icore4_fpga_18_45.png?​direct |图18-45}} 
 +44、把VCC放在ledcore的rest_rest_n引脚附近,​并连线(把VCC和rest_rest_n连接将鼠标放在引脚处.会自动出现连线标志),​然后右击选择Generate Pins For Sysmblen Ports自动生成管脚,​如下图:​ 
 +{{ :​icore4:​icore4_fpga_18_46.png?​direct |图18-46}} 
 +45、生成管脚,​如下图所示:​ 
 +{{ :​icore4:​icore4_fpga_18_47.png?​direct |图18-47}} 
 +46、双击ledcore的input管脚,​将名字修改为CLK_25M,​点击OK;​然后用同样的方法将output管脚的名字改为FPGA_LEDB,​修改后如下图所示: 
 +{{ :​icore4:​icore4_fpga_18_48.png?​direct |图18-48}} 
 +47、点击Assignment,​选择Device。 
 +{{ :​icore4:​icore4_fpga_18_49.png?​direct |图18-49}} 
 +48、弹出如下界面,点击Device and Pin Options... 
 +{{ :​icore4:​icore4_fpga_18_50.png?​direct |图18-50}} 
 +49、点击左边分类栏中的Unused Pins,在右边下拉菜单里选择As input tri_stated。 
 +{{ :​icore4:​icore4_fpga_18_51.png?​direct |图18-51}} 
 +50、点击左边分类栏中的Dual-Purpose pins,在右边的Vaule各下拉菜单中,都选择Used as reguar I/​O,点击OK。 
 +{{ :​icore4:​icore4_fpga_18_52.png?​direct |图18-52}} 
 +51、会到主界面,点击Assignment,选择Setting。 
 +{{ :​icore4:​icore4_fpga_18_53.png?​direct |图18-53}} 
 +52、点击Files,在ledcore->​synthesis找到ledcore.qip文件,再点击Add添加。 
 +{{ :​icore4:​icore4_fpga_18_54.png?​direct |图18-54}} 
 +53、文件添加完成后,为输入时钟CLK_25M和输出管脚FPGA_LEDB分配引脚,​回到QuartusII主界面保存,然后编译至此,​Nois软核建立完成,并下载到FPGA。 
 +{{ :​icore4:​icore4_fpga_18_55.png?​direct |图18-55}} 
 +54、打开Nios软件选择正确路径(与QuartusII路径相同)点击OK。 
 +{{ :​icore4:​icore4_fpga_18_56.png?​direct |图18-56}} 
 +{{ :​icore4:​icore4_fpga_18_57.png?​direct |图18-57}} 
 +55、进入Nois主界面后,按下图所示建立新的工程模板。 
 +{{ :​icore4:​icore4_fpga_18_58.png?​direct |图18-58}} 
 +56、点击下图红框处,打开内核(即刚才生成的ledcore.sopcinfo文件)。 
 +{{ :​icore4:​icore4_fpga_18_59.png?​direct |图18-59}} 
 +57、在Projict Name中,给工程命名为led,在Template一栏中选择Hello word small,点击finish。 
 +{{ :​icore4:​icore4_fpga_18_60.png?​direct |图18-60}} 
 +58、在新建工程led中找到hello_world.c,右键选择rename。 
 +{{ :​icore4:​icore4_fpga_18_61.png?​direct |图18-61}} 
 +59、命名为main.c,点击OK。 
 +{{ :​icore4:​icore4_fpga_18_62.png?​direct |图18-62}} 
 +60、双击main.c将其打开,删除原有内容,并输入以下内容: 
 +<code c> 
 +/* 
 +* FILE                                : main.c 
 +* DESCRIPTION ​                        : This file is main files. 
 +* Author ​                             : XiaomaGee@Gmail.com 
 +* Copyright ​                          : 
 +
 +* History 
 +* -------------------- 
 +* Rev                                  : 0.00 
 +* Date                                 : 09/​05/​2012 
 +
 +* create. 
 +* -------------------- 
 +*/ 
 +//​-----------------Include files-------------------------//​ 
 + 
 + 
 +#include "​stdio.h"​ 
 +#include "​unistd.h"​ 
 +#include "​system.h"​ 
 + 
 +//​-----------------define-------------------------------//​ 
 +#define _LED 
 + 
 + typedef ​ struct { 
 + volatile ​ unsigned ​ long  int DATA; 
 + volatile ​ unsigned ​ long  int DIRECTION;​ 
 + volatile ​ unsigned ​ long  int INTERRUPT_MASK;​ 
 + volatile ​ unsigned ​ long  int EDGE_CAPTURE;​ 
 + }PIO_T; 
 + 
 + #​ifdef _LED 
 + #​define LED ((PIO_T ​ *)(LED_BASE|1<<​31)) 
 + #​endif 
 +//​-----------------Function------------------------------//​ 
 + 
 + 
 +int main() 
 +
 + LED->​DIRECTION = 1; 
 +        while (1) { 
 +           ​LED->​DATA = 1; 
 +                   ​usleep(500000);​ 
 +                   ​LED->​DATA = 0; 
 +                   ​usleep(500000);​ 
 +       } 
 + 
 +      return 0; 
 + 
 +
 +</​code>​ 
 +61、编写完成后如下图所示: 
 +{{ :​icore4:​icore4_fpga_18_63.png?​direct |图18-63}} 
 +62、点击保存,然后编译led工程,右击led,选择build project。 
 +{{ :​icore4:​icore4_fpga_18_64.png?​direct |图18-64}} 
 +{{ :​icore4:​icore4_fpga_18_65.png?​direct |图18-65}} 
 +63、右击led选择Run As->​3NiosII Hardware。 
 +{{ :​icore4:​icore4_fpga_18_66.png?​direct |图18-66}} 
 +64、可能出现以下窗口,在Target Connection中点击Refresh Connection。 
 +{{ :​icore4:​icore4_fpga_18_67.png?​direct |图18-67}} 
 +65、点击Run运行成功后iCore4板子上有led闪烁现象。 
 +{{ :​icore4:​icore4_fpga_18_68.png?​direct |图18-68}} 
 +==== 四、 实验现象 ==== 
 +  * iCore4板子上蓝色led闪烁 
 + 
niosii_基于内部ram建立第一个软核.1574993993.txt.gz · 最后更改: 2019/11/29 10:19 由 zhangzheng