米客-显示驱动专家

一个CLK用错,导致纠结了几天

0
阅读(2715)

搞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
);

想着是可以行,但没考虑相对时序和延时,用全局时钟去控制,结果就可以了。