这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
niosii_基于内部ram建立第一个软核 [2020/07/03 11:48] zgf |
niosii_基于内部ram建立第一个软核 [2022/03/22 10:30] (当前版本) sean |
||
---|---|---|---|
行 3: | 行 3: | ||
|技术支持电话|**0379-69926675-801**||| | |技术支持电话|**0379-69926675-801**||| | ||
|技术支持邮件|Gingko@vip.163.com||| | |技术支持邮件|Gingko@vip.163.com||| | ||
- | |技术论坛|http://www.eeschool.org||| | ||
^ 版本 ^ 日期 ^ 作者 ^ 修改内容 ^ | ^ 版本 ^ 日期 ^ 作者 ^ 修改内容 ^ | ||
| V1.0 | 2020-07-03 | gingko | 初次建立 | | | V1.0 | 2020-07-03 | gingko | 初次建立 | | ||
行 44: | 行 43: | ||
{{ :icore4:icore4_fpga_18_10.png?direct |图18-10}} | {{ :icore4:icore4_fpga_18_10.png?direct |图18-10}} | ||
11、点击Save As保存。 | 11、点击Save As保存。 | ||
- | {{ :icore4:icore4_fpga_18_11.png?direct |图18-12}} | + | {{ :icore4:icore4_fpga_18_11.png?direct |图18-11}} |
12、使用默认名字保存即可。 | 12、使用默认名字保存即可。 | ||
- | {{ :icore4:icore4_fpga_18_13.png?direct |图18-14}} | + | {{ :icore4:icore4_fpga_18_12.png?direct |图18-12}} |
至此,QuartusII工程和顶层设计文件都已建立完成,接着设计nios软核。 | 至此,QuartusII工程和顶层设计文件都已建立完成,接着设计nios软核。 | ||
13、点击菜单栏中的Tool->Qsys。 | 13、点击菜单栏中的Tool->Qsys。 | ||
- | {{ :icore4:icore4_fpga_18_15.png?direct |图18-16}} | + | {{ :icore4:icore4_fpga_18_13.png?direct |图18-13}} |
14、弹出以下窗口。 | 14、弹出以下窗口。 | ||
- | {{ :icore4:icore4_fpga_18_17.png?direct |图18-17}} | + | {{ :icore4:icore4_fpga_18_14.png?direct |图18-14}} |
15、接下来添加IP核,在左边的Library里,选择Embeded Pocessors->Nios II Processor,点击Add…添加。 | 15、接下来添加IP核,在左边的Library里,选择Embeded Pocessors->Nios II Processor,点击Add…添加。 | ||
- | {{ :icore4:icore4_fpga_18_18.png?direct |图18-18}} | + | {{ :icore4:icore4_fpga_18_15.png?direct |图18-15}} |
16、选择Nois II/f,点击Finish。 | 16、选择Nois II/f,点击Finish。 | ||
- | {{ :icore4:icore4_fpga_18_19.png?direct |图18-19}} | + | {{ :icore4:icore4_fpga_18_16.png?direct |图18-16}} |
17、在左边的Library里,选择Menories and Memory Controllers->On-Chip->On-Chip Memory,点击Add…添加。 | 17、在左边的Library里,选择Menories and Memory Controllers->On-Chip->On-Chip Memory,点击Add…添加。 | ||
- | {{ :icore4:icore4_fpga_18_20.png?direct |图18-20}} | + | {{ :icore4:icore4_fpga_18_17.png?direct |图18-17}} |
18、将Total memory size 设为10240,然后点击Finish。 | 18、将Total memory size 设为10240,然后点击Finish。 | ||
- | {{ :icore4:icore4_fpga_18_21.png?direct |图18-21}} | + | {{ :icore4:icore4_fpga_18_18.png?direct |图18-18}} |
19、在左边Library里,选择Peripherals->Debug and Performance->System ID Peripheral,点击Add…添加。 | 19、在左边Library里,选择Peripherals->Debug and Performance->System ID Peripheral,点击Add…添加。 | ||
- | {{ :icore4:icore4_fpga_18_22.png?direct |图18-22}} | + | {{ :icore4:icore4_fpga_18_19.png?direct |图18-19}} |
20、修改下图中System ID的数字,System ID的数字可以任意设置,默认值为0,本例改为1234,然后点击Finish。 | 20、修改下图中System ID的数字,System ID的数字可以任意设置,默认值为0,本例改为1234,然后点击Finish。 | ||
- | {{ :icore4:icore4_fpga_18_23.png?direct |图18-23}} | + | {{ :icore4:icore4_fpga_18_20.png?direct |图18-20}} |
21、在左边Library里,选择Peripherals->Microcontroller Peripherals->PIO(Parallel I/O),点击Add…添加。 | 21、在左边Library里,选择Peripherals->Microcontroller Peripherals->PIO(Parallel I/O),点击Add…添加。 | ||
- | {{ :icore4:icore4_fpga_18_24.png?direct |图18-24}} | + | {{ :icore4:icore4_fpga_18_21.png?direct |图18-21}} |
22、将下图的Width(1-32 bits)中8改为1,本例只用一个IO口,在Direction中选择output。 | 22、将下图的Width(1-32 bits)中8改为1,本例只用一个IO口,在Direction中选择output。 | ||
- | {{ :icore4:icore4_fpga_18_25.png?direct |图18-25}} | + | {{ :icore4:icore4_fpga_18_22.png?direct |图18-22}} |
23、至此,IP核添加完毕,添加过的IP核都显示在窗中,如下。 | 23、至此,IP核添加完毕,添加过的IP核都显示在窗中,如下。 | ||
- | {{ :icore4:icore4_fpga_18_26.png?direct |图18-26}} | + | {{ :icore4:icore4_fpga_18_23.png?direct |图18-23}} |
24、右击pio_o,点击Rename修改名字,改为led。 | 24、右击pio_o,点击Rename修改名字,改为led。 | ||
- | {{ :icore4:icore4_fpga_18_27.png?direct |图18-27}} | + | {{ :icore4:icore4_fpga_18_24.png?direct |图18-24}} |
25、在led下的external_connection后面,点击Double-click to,并修改为fpga_led,修改后如下图: | 25、在led下的external_connection后面,点击Double-click to,并修改为fpga_led,修改后如下图: | ||
- | {{ :icore4:icore4_fpga_18_28.png?direct |图18-28}} | + | {{ :icore4:icore4_fpga_18_25.png?direct |图18-25}} |
26、双击clk_0进入下面界面,将时钟更改为25M,然后点击finish。 | 26、双击clk_0进入下面界面,将时钟更改为25M,然后点击finish。 | ||
- | {{ :icore4:icore4_fpga_18_29.png?direct |图18-29}} | + | {{ :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,选中之后查阅时可发现在其前有对号,如下图: | 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}} | {{ :icore4:icore4_fpga_18_30.png?direct |图18-30}} | ||
+ | 30、在sysid中,信号线(control)和nios的数据线连接,如下图所示。 | ||
{{ :icore4:icore4_fpga_18_31.png?direct |图18-31}} | {{ :icore4:icore4_fpga_18_31.png?direct |图18-31}} | ||
- | 28、按照上述方法将onchipmemory、sysid、led三个模块的时钟线与clk_0连接,连接后如图所示: | + | 31、在led中,信号线(s1)需要和nois的数据线连接,如下图。 |
{{ :icore4:icore4_fpga_18_32.png?direct |图18-32}} | {{ :icore4:icore4_fpga_18_32.png?direct |图18-32}} | ||
- | 29、在onchipmemory中,信号线(s1)需要和nios的数据线、指令线都连接,如下图所示。 | + | 32、连线完毕后,修改Nios内核,双击nios2_qsys_0,弹出如下界面,按照下图红框内容修改,然后点击Finish。 |
{{ :icore4:icore4_fpga_18_33.png?direct |图18-33}} | {{ :icore4:icore4_fpga_18_33.png?direct |图18-33}} | ||
- | 30、在sysid中,信号线(control)和nios的数据线连接,如下图所示。 | + | 33、在菜单里选择System->Creat Global Reset Net Work,连接复位线。 |
{{ :icore4:icore4_fpga_18_34.png?direct |图18-34}} | {{ :icore4:icore4_fpga_18_34.png?direct |图18-34}} | ||
- | 31、在led中,信号线(s1)需要和nois的数据线连接,如下图。 | + | 34、在菜单栏里选择system->Assign Base Addresses,分配基地址。 |
{{ :icore4:icore4_fpga_18_35.png?direct |图18-35}} | {{ :icore4:icore4_fpga_18_35.png?direct |图18-35}} | ||
- | 32、连线完毕后,修改Nios内核,双击nios2_qsys_0,弹出如下界面,按照下图红框内容修改,然后点击Finish。 | + | 35、至此如果没有错误,左下角将显示0个错误,0个警告。 |
{{ :icore4:icore4_fpga_18_36.png?direct |图18-36}} | {{ :icore4:icore4_fpga_18_36.png?direct |图18-36}} | ||
- | 33、在菜单里选择System->Creat Global Reset Net Work,连接复位线。 | + | 36、在菜单栏里选择File->Save As 保存,保存到工程所在的文件中,命名为ledcore。 |
{{ :icore4:icore4_fpga_18_37.png?direct |图18-37}} | {{ :icore4:icore4_fpga_18_37.png?direct |图18-37}} | ||
- | 34、在菜单栏里选择system->Assign Base Addresses,分配基地址。 | ||
{{ :icore4:icore4_fpga_18_38.png?direct |图18-38}} | {{ :icore4:icore4_fpga_18_38.png?direct |图18-38}} | ||
- | 35、至此如果没有错误,左下角将显示0个错误,0个警告。 | + | 37、在菜单栏里选择Generate->Generate。 |
{{ :icore4:icore4_fpga_18_39.png?direct |图18-39}} | {{ :icore4:icore4_fpga_18_39.png?direct |图18-39}} | ||
- | 36、在菜单栏里选择File->Save As 保存,保存到工程所在的文件中,命名为ledcore。 | + | 38、点击Generate进行编译。 |
{{ :icore4:icore4_fpga_18_40.png?direct |图18-40}} | {{ :icore4:icore4_fpga_18_40.png?direct |图18-40}} | ||
+ | 39、编译完成后,点击close即可。 | ||
{{ :icore4:icore4_fpga_18_41.png?direct |图18-41}} | {{ :icore4:icore4_fpga_18_41.png?direct |图18-41}} | ||
- | 37、在菜单栏里选择Generate->Generate。 | + | 40、关闭内核Qsys窗口,在建立的顶层文件led.bdf的空白处双击。 |
{{ :icore4:icore4_fpga_18_42.png?direct |图18-42}} | {{ :icore4:icore4_fpga_18_42.png?direct |图18-42}} | ||
- | 38、点击Generate进行编译。 | + | 41、弹出如下窗口,选择在Qsys中生成ledcore,然后点击OK。 |
{{ :icore4:icore4_fpga_18_43.png?direct |图18-43}} | {{ :icore4:icore4_fpga_18_43.png?direct |图18-43}} | ||
- | 39、编译完成后,点击close即可。 | + | 42、拖动鼠标至合适位置,单击左键放置。 |
{{ :icore4:icore4_fpga_18_44.png?direct |图18-44}} | {{ :icore4:icore4_fpga_18_44.png?direct |图18-44}} | ||
- | 40、关闭内核Qsys窗口,在建立的顶层文件led.bdf的空白处双击。 | + | 43、再次双击顶层文件led.bdf的空白处,在弹出的下面窗口中,在name下方输入VCC,点击OK。 |
{{ :icore4:icore4_fpga_18_45.png?direct |图18-45}} | {{ :icore4:icore4_fpga_18_45.png?direct |图18-45}} | ||
- | 41、弹出如下窗口,选择在Qsys中生成ledcore,然后点击OK。 | + | 44、把VCC放在ledcore的rest_rest_n引脚附近,并连线(把VCC和rest_rest_n连接将鼠标放在引脚处.会自动出现连线标志),然后右击选择Generate Pins For Sysmblen Ports自动生成管脚,如下图: |
{{ :icore4:icore4_fpga_18_46.png?direct |图18-46}} | {{ :icore4:icore4_fpga_18_46.png?direct |图18-46}} | ||
- | 42、拖动鼠标至合适位置,单击左键放置。 | + | 45、生成管脚,如下图所示: |
{{ :icore4:icore4_fpga_18_47.png?direct |图18-47}} | {{ :icore4:icore4_fpga_18_47.png?direct |图18-47}} | ||
- | 43、再次双击顶层文件led.bdf的空白处,在弹出的下面窗口中,在name下方输入VCC,点击OK。 | + | 46、双击ledcore的input管脚,将名字修改为CLK_25M,点击OK;然后用同样的方法将output管脚的名字改为FPGA_LEDB,修改后如下图所示: |
{{ :icore4:icore4_fpga_18_48.png?direct |图18-48}} | {{ :icore4:icore4_fpga_18_48.png?direct |图18-48}} | ||
- | 44、把VCC放在ledcore的rest_rest_n引脚附近,并连线(把VCC和rest_rest_n连接将鼠标放在引脚处.会自动出现连线标志),然后右击选择Generate Pins For Sysmblen Ports自动生成管脚,如下图: | + | 47、点击Assignment,选择Device。 |
{{ :icore4:icore4_fpga_18_49.png?direct |图18-49}} | {{ :icore4:icore4_fpga_18_49.png?direct |图18-49}} | ||
- | 45、生成管脚,如下图所示: | + | 48、弹出如下界面,点击Device and Pin Options... |
{{ :icore4:icore4_fpga_18_50.png?direct |图18-50}} | {{ :icore4:icore4_fpga_18_50.png?direct |图18-50}} | ||
- | 46、双击ledcore的input管脚,将名字修改为CLK_25M,点击OK;然后用同样的方法将output管脚的名字改为FPGA_LEDB,修改后如下图所示: | + | 49、点击左边分类栏中的Unused Pins,在右边下拉菜单里选择As input tri_stated。 |
{{ :icore4:icore4_fpga_18_51.png?direct |图18-51}} | {{ :icore4:icore4_fpga_18_51.png?direct |图18-51}} | ||
- | 47、点击Assignment,选择Device。 | + | 50、点击左边分类栏中的Dual-Purpose pins,在右边的Vaule各下拉菜单中,都选择Used as reguar I/O,点击OK。 |
{{ :icore4:icore4_fpga_18_52.png?direct |图18-52}} | {{ :icore4:icore4_fpga_18_52.png?direct |图18-52}} | ||
- | 48、弹出如下界面,点击Device and Pin Options... | + | 51、会到主界面,点击Assignment,选择Setting。 |
{{ :icore4:icore4_fpga_18_53.png?direct |图18-53}} | {{ :icore4:icore4_fpga_18_53.png?direct |图18-53}} | ||
- | 49、点击左边分类栏中的Unused Pins,在右边下拉菜单里选择As input tri_stated。 | + | 52、点击Files,在ledcore->synthesis找到ledcore.qip文件,再点击Add添加。 |
{{ :icore4:icore4_fpga_18_54.png?direct |图18-54}} | {{ :icore4:icore4_fpga_18_54.png?direct |图18-54}} | ||
- | 50、点击左边分类栏中的Dual-Purpose pins,在右边的Vaule各下拉菜单中,都选择Used as reguar I/O,点击OK。 | + | 53、文件添加完成后,为输入时钟CLK_25M和输出管脚FPGA_LEDB分配引脚,回到QuartusII主界面保存,然后编译至此,Nois软核建立完成,并下载到FPGA。 |
{{ :icore4:icore4_fpga_18_55.png?direct |图18-55}} | {{ :icore4:icore4_fpga_18_55.png?direct |图18-55}} | ||
- | 51、会到主界面,点击Assignment,选择Setting。 | + | 54、打开Nios软件选择正确路径(与QuartusII路径相同)点击OK。 |
{{ :icore4:icore4_fpga_18_56.png?direct |图18-56}} | {{ :icore4:icore4_fpga_18_56.png?direct |图18-56}} | ||
- | 52、点击Files,在ledcore->synthesis找到ledcore.qip文件,再点击Add添加。 | ||
{{ :icore4:icore4_fpga_18_57.png?direct |图18-57}} | {{ :icore4:icore4_fpga_18_57.png?direct |图18-57}} | ||
- | 53、文件添加完成后,为输入时钟CLK_25M和输出管脚FPGA_LEDB分配引脚,回到QuartusII主界面保存,然后编译至此,Nois软核建立完成,并下载到FPGA。 | + | 55、进入Nois主界面后,按下图所示建立新的工程模板。 |
{{ :icore4:icore4_fpga_18_58.png?direct |图18-58}} | {{ :icore4:icore4_fpga_18_58.png?direct |图18-58}} | ||
- | 54、打开Nios软件选择正确路径(与QuartusII路径相同)点击OK。 | + | 56、点击下图红框处,打开内核(即刚才生成的ledcore.sopcinfo文件)。 |
{{ :icore4:icore4_fpga_18_59.png?direct |图18-59}} | {{ :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}} | {{ :icore4:icore4_fpga_18_60.png?direct |图18-60}} | ||
- | 55、进入Nois主界面后,按下图所示建立新的工程模板。 | + | 58、在新建工程led中找到hello_world.c,右键选择rename。 |
{{ :icore4:icore4_fpga_18_61.png?direct |图18-61}} | {{ :icore4:icore4_fpga_18_61.png?direct |图18-61}} | ||
- | 56、点击下图红框处,打开内核(即刚才生成的ledcore.sopcinfo文件)。 | + | 59、命名为main.c,点击OK。 |
{{ :icore4:icore4_fpga_18_62.png?direct |图18-62}} | {{ :icore4:icore4_fpga_18_62.png?direct |图18-62}} | ||
- | 57、在Projict Name中,给工程命名为led,在Template一栏中选择Hello word small,点击finish。 | ||
- | {{ :icore4:icore4_fpga_18_63.png?direct |图18-63}} | ||
- | 58、在新建工程led中找到hello_world.c,右键选择rename。 | ||
- | {{ :icore4:icore4_fpga_18_64.png?direct |图18-64}} | ||
- | 59、命名为main.c,点击OK。 | ||
- | {{ :icore4:icore4_fpga_18_65.png?direct |图18-65}} | ||
60、双击main.c将其打开,删除原有内容,并输入以下内容: | 60、双击main.c将其打开,删除原有内容,并输入以下内容: | ||
<code c> | <code c> | ||
行 200: | 行 199: | ||
</code> | </code> | ||
61、编写完成后如下图所示: | 61、编写完成后如下图所示: | ||
- | {{ :icore4:icore4_fpga_18_66.png?direct |图18-66}} | + | {{ :icore4:icore4_fpga_18_63.png?direct |图18-63}} |
62、点击保存,然后编译led工程,右击led,选择build project。 | 62、点击保存,然后编译led工程,右击led,选择build project。 | ||
- | {{ :icore4:icore4_fpga_18_67.png?direct |图18-67}} | + | {{ :icore4:icore4_fpga_18_64.png?direct |图18-64}} |
- | {{ :icore4:icore4_fpga_18_68.png?direct |图18-68}} | + | {{ :icore4:icore4_fpga_18_65.png?direct |图18-65}} |
63、右击led选择Run As->3NiosII Hardware。 | 63、右击led选择Run As->3NiosII Hardware。 | ||
- | {{ :icore4:icore4_fpga_18_69.png?direct |图18-69}} | + | {{ :icore4:icore4_fpga_18_66.png?direct |图18-66}} |
64、可能出现以下窗口,在Target Connection中点击Refresh Connection。 | 64、可能出现以下窗口,在Target Connection中点击Refresh Connection。 | ||
- | {{ :icore4:icore4_fpga_18_70.png?direct |图18-70}} | + | {{ :icore4:icore4_fpga_18_67.png?direct |图18-67}} |
65、点击Run运行成功后iCore4板子上有led闪烁现象。 | 65、点击Run运行成功后iCore4板子上有led闪烁现象。 | ||
- | {{ :icore4:icore4_fpga_18_71.png?direct |图18-71}} | + | {{ :icore4:icore4_fpga_18_68.png?direct |图18-68}} |
==== 四、 实验现象 ==== | ==== 四、 实验现象 ==== | ||
* iCore4板子上蓝色led闪烁 | * iCore4板子上蓝色led闪烁 | ||