基于Nios-II与Verilog实现流水灯

基于Nios-II实现流水灯

1.新建项目,选择芯片

在这里插入图片描述

2.osys设计

2.1 进入Tools -> Platform Designer

在这里插入图片描述
进入后,首先点击File -> Save ,保存为Kernel.qsys。

2.2 设置时钟主频

这里设置为50MHz,与所选芯片的时钟保持一致。
在这里插入图片描述

2.3 添加Nios-II Processor并设置

左边的IP Catalog中,选择Nios-II Processor,并点击Add添加。
在这里插入图片描述
在 Nios Core 栏中选择 Nios II/f 选项,其他保持默认选项,如下图所示
在这里插入图片描述
在”Caches and Memory Interfaces”标签栏中保持默认设置(Instruction Cache 选择
4Kbytes)。
在这里插入图片描述
在”Advanced Features”标签栏中保持默认设置,
在”MMU and MPU Settings”标签栏中保持默认设置,
在”JTAG Debug Module”标签栏中保持默认设置(注意勾选 Include JTAG Debug),
点击 Finish 回到 PD 界面。
将 nios2_qsys_0 重命名为 cpu,点击”Rename”即可重新命名,操作完成后如下图所示。
在这里插入图片描述
将 cpu 的 clk 和 reset 分别与系统时钟 clk_0 的 clk 和 clk_reset 相连,如图所示。
在这里插入图片描述

2.4 添加JTAG并配置

左边选择JTAG_UART_Intel_FPGA_IP,点击Add。
在这里插入图片描述
右键重命名为uart,并按图进行时钟线,复位线,数据线的连接:
在这里插入图片描述
同时还要连接中断
在这里插入图片描述

2.5 添加RAM

选择On-Chip Memory (RAM or ROM) Intel FPGA,点击Add加入。
在这里插入图片描述
更改名字并连线
在这里插入图片描述

2.6 添加PIO

在这里插入图片描述
连接clk,reset,s1并导出输出端口:
在这里插入图片描述
这里将输出命名为out_led
在这里插入图片描述

2.7 添加System ID Peripheral

在这里插入图片描述
进行连接
在这里插入图片描述

2.8 其他设置

基地址分配:点击 PD 主界面菜单栏中的”System”下的”Assign Base Addresses”。
在这里插入图片描述
分配中断号:在”IRQ”标签栏下点选”Avalon_jtag_slave”和 IRQ 的连接点就会为”jtag_uart”核添加一个值为 0 的中断号。
在这里插入图片描述
指定 NIos II 的复位和异常地址:从”System Contents”标签栏
双击建立好的 cpu 进入 Nios II Processor 的配置界面,配置 Reset Vector 和 Exception Vector 为””onchip_ram.s1”,点击 Finish。

点击 Qsys 主界面菜单栏中的”System”下的”Create Global Reset Network”。完成后会自动连接所有复位端口。

生成HDL
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
原理图:
在这里插入图片描述

3.Quartus设计

3.1 添加原理图文件

返回到Quartus页面,新建原理图文件:
在这里插入图片描述
双击空白处,加入生成的bsf文件:
在这里插入图片描述
右键生成IO端口
在这里插入图片描述
将管脚”inclk0”改名为 clock,管脚”reset_reset_n”改名为 reset_n,管脚 out_led_export[7…0]改为 out_led[7…0]
在这里插入图片描述

3.2芯片引脚设置

(1)菜单里选择 Assignments-device,然后如下图所示点击 Device pin options。
(2)进行 unused pin 设置,可能会收到外部信号的干扰,将未用引脚设置为 As input tri-stated。
在这里插入图片描述

3.3编译

回到 Quartus II 主界面后编译项目。如下图所示,编译成功后,点击 OK 完成。
在这里插入图片描述
点击下图所指快捷键进入 Pin Planner 界面,按照开发板提供的管脚名称分配针脚,下图所示:
在这里插入图片描述
完成后再次编译

4.软件部分设计

4.1.启动 Nios II SBT

tool->Nios II Software Build Tools for Eclipse
在这里插入图片描述
出现 Nios II SBT for Eclipse 主界面
在这里插入图片描述

4.2创建工程

建立新工程
在这里插入图片描述
在”SOPC Information File name”窗口中选择 kernel.sopcinfo 文件,以便将生成硬件配置信息和软件应用关联,CPU 栏会自动选择”CPU,点击finish
在这里插入图片描述
出现问题
在这里插入图片描述
回到Platform Designer,将on-chip ram的指令线也连上
在这里插入图片描述

4.3修改程序

在 hell_word.c 里修改流水灯控制程序。

#include "system.h"
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"
const alt_u8
led_data[8]={0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};
int main (void)
{
 int count=0;
 alt_u8 led;
 volatile int i;
 while (1)
 { if (count==7)
 {count=0;}
 else
 {count++;}
 led=led_data[count];
 IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE, led);
 i = 0;
 while (i<500000)
 i++;
 }
 return 0;
}

编译工程
右键单击项目名称,在弹出的菜单中选择 Build Project
在这里插入图片描述

5.运行项目

启动 Quartus Prime Programmer并将sof文件烧录到板子
运行/调式程序
在这里插入图片描述
配置 Run Configurations,转到”Target Connection”标签栏,点击右侧的 Refresh Connections 将 USB-Blaster 加入
在这里插入图片描述
Apply 后,Run。下载完成后,可以看见 Console 里打印信息“hello from Nios
II!”(第一段代码实现)
在这里插入图片描述
流水灯实现:

video_20240508_164138

基于Verilog实现流水灯

1.Verilog代码撰写

module led #(parameter TIME_1_5s=75_000_000)(
    input             clk,
    input             rst_n,
    output  reg [3:0] led
);
    //parameter TIME_1_5s=75_000_000;
    reg [2:0] cnt;
    reg [26:0] cnt_1;
    wire add_cnt1;  
    wire end_cnt1;  
    wire add_cnt;
    wire end_cnt;
    always @(posedge clk or negedge rst_n)begin
        if(!rst_n)begin
            cnt_1<=27'b0;
        end
        else if(add_cnt1)begin                   
            if(end_cnt1)begin                    
                cnt_1<=1'b0;                        
            end
            else begin
                cnt_1<=cnt_1+1'b1;                  
            end
        end
        else begin
            cnt_1<=cnt_1;                        
        end
    end
    assign add_cnt1=1'b1;
    assign end_cnt1=add_cnt1&&cnt_1 ==TIME_1_5s-1;
 //   always @(posedge clk or negedge rst_n)begin
 //       if(!rst_n)begin
 //           led<=4'b0001;
 //       end
 //       else if(end_cnt1)begin
 //           led<={led[2:0],led[3]};
 //       end
 //       else begin
 //           led<=led;
 //       end
 //   end
    always @(posedge clk or negedge rst_n)begin
        if(!rst_n)begin
            cnt<=1'b0;
        end
        else if(add_cnt)begin
            if(end_cnt)begin
                cnt<=1'b0;
            end
            else begin
                cnt<=cnt+1'b1;
            end
        end
        else begin
            cnt<=cnt;
        end
    end
    assign add_cnt=end_cnt1;
    assign end_cnt=add_cnt&&cnt==7;
    always @(posedge clk or negedge rst_n)begin
        if(!rst_n)begin
            led<=4'b1111;
        end
        else begin
            if(cnt==3'b000)begin
                led<=4'b0001;
            end
            else if(cnt==3'b001)begin
                led<=4'b0011;
            end
            else if(cnt==3'b010)begin
                led<=4'b0111;
            end
            else if(cnt==3'b011)begin
                led<=4'b1111;
            end
            else if(cnt==3'b100)begin
                led<=4'b1110;
            end
            else if(cnt==3'b101)begin
                led<=4'b1100;
            end
            else if(cnt==3'b110)begin
                led<=4'b1000;
            end
            else if(cnt==3'b111)begin
                led<=4'b0000;
            end
            else begin
                led<=4'b1111;
            end
        end
    end
endmodule

2.引脚绑定

在这里插入图片描述

3.烧录,运行

结果

video_20240508_170124

总结

本次实验通过实践收获了以下几个要点:

了解掌握了nios基本原理及作用
了解掌握了nios的简单使用方法及流程
掌握了eclips进行nios的编程
解决了编译NIOS2出现错误:make:[.mk] Error 1 或者 make: *** [*.elf] Error 1 解决方法见参考
学习 Quartus Prime 、Platform Designer、Nios II SBT 的基本操作;
初步了解 SOPC 的开发流程,基本掌握 Nios II 软核的定制方法;
掌握 Nios II 软件的开发流程,软件的基本调式方法

并了解到nios与verilog之间的区别

  • 16
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值