NIOS II 11:自定义IP,自定义IP调用

1、以创建ADC128S022为例。当然这个可以直接使用SPI的IP核。

ADC128s022里边程序对外主要包含开始转换信号、转换完成信号,数据等

 

2、通过前期学习我们知道一个IP要有自己的基地址,里边有很多可控的寄存器本质上都是有地址的。所以有个信号adress

    另外需要一个片选信号,来使能当前IP核:select

     时钟信号:CLKxie

   复位信号:RST_N

写使能信号:WRITE——N

写入数据:WDATA

 

中断请求信号:irq

读数据端口:Rdata

3、新建工程,在工程下建立一个名为ip的文件夹,这样会主动找到这个自定义ip,在里边新建一个verilog文件。将此文件作为顶层文件

4、而里边调用的程序,为原写好了的


完成后编译,

5、打开qsys,file---new comment

添加文件点分析报错了,暂时不用管

点击下图红圈位置,更改类型为conduit

点击add  interface。之后把irq拖拽过去。并把irq信号类型改为irq

把as_adress拖拽过去

复位错误更改如下

还有个错误,不知道十个啥,也没找到export选项,不知道为啥。应该是版本不同了,由于我需要四个对外端口,所以生成了四个conduit,每个自己改下名字,变成如下,不再报错

 

注意中断一定和as绑定起来

点击finish能看到我们的ip核保存路径

6、现在我们写好了一个ip,但是怎么拿到其他工程使用呢

把刚才生成的.tcl文件,复制到我们之前写的.c文件夹内。

 

之后打开.tcl文件。

上边的路径改成

 

后边再用只需要把下边文件夹拷贝就可以了

7、把这个文件夹拷贝到上次做实验的sdram那个工程里边,如下

如果打开看不到,请在qsys中加入路径如下。在qsys内的tools---option里边添加

8、打开qsys,添加ip核并连线如下

 

9、修改顶层verilog如下,之后编译,管脚例化,全编译。

 

module SDRAMTEST
(
    CLK_50M,
    RST_N,
    LEDOUT,    
    sdram_clk,
    sdram_addr,
    sdram_ba,
    sdram_cas_n,
    sdram_cke,
    sdram_cs_n,
    sdram_dq,
    sdram_dqm,
    sdram_ras_n,
    sdram_we_n,
    uart_0_rxd,
    uart_0_txd,
    adc_cs_n,
    adc_din,
    adc_dout,
    adc_sclk
);

    input             CLK_50M;
    input                    RST_N;
    output    [7:0]       LEDOUT;
    output                sdram_clk;
    output    [12:0]    sdram_addr;
    output    [1:0]        sdram_ba;
    output                sdram_cas_n;
    output                sdram_cke;
    output                sdram_cs_n;
    inout        [15:0]    sdram_dq;
    output    [1:0]        sdram_dqm;
    output                sdram_ras_n;
    output                sdram_we_n;
    input                    uart_0_rxd;
    output                uart_0_txd;
    output                adc_cs_n;
    output                adc_din;
    input                    adc_dout;
    output                adc_sclk;

mysys u0 (
    .clk_clk                     (CLK_50M),
    .pio_led_export              (LEDOUT),
    .reset_reset_n               (RST_N),
    .sdram_clk_clk               (sdram_clk),
    .sdram_addr                  (sdram_addr),
    .sdram_ba                    (sdram_ba),
    .sdram_cas_n                 (sdram_cas_n),
    .sdram_cke                   (sdram_cke),
    .sdram_cs_n                  (sdram_cs_n),
    .sdram_dq                    (sdram_dq),
    .sdram_dqm                   (sdram_dqm),
    .sdram_ras_n                 (sdram_ras_n),
    .sdram_we_n                  (sdram_we_n),
    .uart_0_rxd                  (uart_0_rxd),
    .uart_0_txd                  (uart_0_txd),
    .adc_cs_n_writeresponsevalid_n(adc_cs_n),
    .adc_din_writeresponsevalid_n    (adc_din),
    .adc_dout_beginbursttransfer    (adc_dout),
    .adc_sclk_writeresponsevalid_n(adc_sclk)
    );

endmodule

 

 

 

10、打开elipse

首先删掉里边的,重新导入。之后修改bsp路径。clean,之后生成

此时打开system.h文件,能看到我们自己生成的IP核

 

11、由于是自己创建的ip核,没有现成的函数可用了。将

#include <system.h>
#include <io.h>

这两个加入。

12、如下程序

 

13、下载,成功

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值