搞FPGA只能最近才算得上是,因为之前只是玩玩,现在公司遇到预研发项目,采用FPGA驱动非标准的Oled,
Oled用SPI驱动寄存器进行配置,时序上需要分开发数据,为此做了控制时序。
先发送部分控制命令过去后,在进行批量的数据发送,只需要控制好发送个数即可,然后就在这出问题,
顶层文件
module spi_data_select
(
input CLK,//spi CLK
input start,// Start SPI MODE
input start_ps,// send ps control word
input [15:0]spi_data_ps,//ps ps word data 16 bit
input start_rom_sig,// rom data start signal
output reg [7:0] read_spi_addr, //test read rom address
output spi_done_sig,//spi done signal
output SPI_CS,//SPI CS
output SPI_SCLK, //SPI SCLK
output SPI_DATA //SPI DATA MOSI
);
包涵的内部模块,1个是SPI 批量数据存放,1个是SPI控制
SPI_ROM U1
(
// .Read_START(Read_START),
.Read_ADDR(read_spi_addr),// SPI ROM ADDRESS
.Read_CLK(CLK), //刚开始 使用 SPI_DONE作为读取ROM数据的时钟,结果一直在读第一个数据
//.Read_OVER(Read_OVER),
.Read_DATA(Read_DATA) // SPI DATA
);
spi_control U2
(
.CLK(CLK), //48M
.Start_Sig(SPI_START),
.Done_Sig(SPI_DONE),
.SPI_Data(SPI_DATA_IN), //
.SPI_CS(SPI_CS), //SPI CS
.SPI_SCLK(SPI_SCLK), //SPI SCLK
.SPI_DATA(SPI_DATA) //SPI DATA MOSI
);
想着是可以行,但没考虑相对时序和延时,用全局时钟去控制,结果就可以了。