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、下载,成功