NIOS II 12:自定义IP总结

一、自定义IP核顶层avalon总线接口程序包含内容

1、接口

      a,:全局 接口:时钟、复位:clk,reset_n

      b:avalon mm slave接口:

                                           地址 as_adress 

                                           片选:as_chipselect/as_chipselect_n

                                            写请求:as_write/as_write_n

                                            写数据:as_writedata

                                            读请求:as_read/as_read_n

                                           读数据:as_read

                                            等待信号:as_writerequest/as_writerequest_n

                                            数据有效信号:as_data_valid

                                            中断请求信号:irq/irq_n

     c:导出信号:导出到nios系统顶层,分配给外设的IO,或连接到qsys以外的逻辑

 

2、 内部寄存器和xian'wang4定义

  数据寄存器(读/写)

 状态寄存器(运行状态,数据状态等)

 控制寄存器

 中断寄存器

 用户自定义寄存器

3、  寄存器的独写:如何通过avalon总线进行寄存器独写

 a:   如下:片选、写有效、地址满足,写入数据
    always@(posedge clk or negedge reset_n)
    if(!reset_n)
        channel <= 3'd0;
    else if(as_chipselect && as_write && (as_adress==1))
        channel <= as_writedata[2:0];

b:如下:片选,写有效,地址对应,则控制信号为1 
    always@(posedge clk or negedge reset_n)
    if(!reset_n)
        control <= 1'd0;
    else if(as_chipselect && as_write && (as_adress==3))
        control <= 1'b1;            
    else
        control <= 1'd0;

c:如下:读寄存器根据片选、读有效、根据不同地址,读不同内容

//读寄存器        
    always@(posedge clk or negedge reset_n)
    if(!reset_n)
        as_readdata <= 16'd0;
    else if(as_chipselect && as_read)begin
        case(as_adress)
        0:as_readdata<={4'b0,data};
        1:as_readdata<={13'b0,channel};
        2:as_readdata<={8'b0,freqsclk};
        4:as_readdata<={15'b0,irqmask};
        5:as_readdata<={14'b0,status};    
        default:as_readdata <= 16'd0;
        endcase
    end    

4、用户对寄存器赋值:为了符合avalon总线写的

    //状态寄存器0位    
    always@(posedge clk or negedge reset_n)
    if(!reset_n)
        status[0] <= 1'd0;
    else if(Conv_Done)
        status[0] <= 1'd1;        
    else if(as_chipselect && as_read && (as_adress==0))
        status[0] <= 1'd0;    
            
    //状态寄存器1位    
    always@(posedge clk or negedge reset_n)
    if(!reset_n)
        status[1] <= 1'd0;
    else if(ADC_State)
        status[1] <= 1'd1;        
    else
        status[1] <= 1'd0;    

二、步骤

建立完外设接口程序和avalon接口程序以后,先将这两个程序建立一个工程,编译,看有没有错误。

之后进入qsys,新建一个ip,写名字,加入两个文件,点击分析看没有错误继续。

进入端口配置界面,要有端口如下

时钟

复位

avalon mm slave

对外io接口

并给每个时钟指定时钟和复位。

中断一定要绑定在avalon分组上

三、生成tcl文件不和。v文件在一个目录内,为了方便后续使用,将tcl文件移动到。v文件夹内,并修改tcl文件内的路径,将相对路径去掉,只留下文件名即可。

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值