1.4.4配置模块设计思路
该模块主要功能是将配置表中的数据读出,并对读出的数据进行解析,识别读写属性,根据读写属性,产生读写使能;识别寄存器地址和写数据,并将其分离。 由于配置表文件不可综合,因此无法通过例化获取,可以通过以下语句进行调用:
该模块产生的读使能、写使能、寄存器地址和写数据,都会送给下游SCCB接口模块,而SCCB接口属于单总线接口。不能同时读写,因此,该模块在对配置表进行读取的时候,需要读取两次,先进行写,然后在进行读,该操作由计数器控制,如下图所示:
读写计数器rw_cnt:该计数器表示读写阶段,数第一个表示处于写数据阶段,数第二个表示处于读数据阶段。加一条件为(flag && rdy),表示按下配置开始按键,并且下游模块准备好的时候就加一;结束条件为数两个,只需要区分读阶段和写阶段,因此数两个即可,数完就清零。 待配置的寄存器共有164个,因此需要一个寄存器计数器来对它进行计数,如下图所示:
寄存器计数器reg_cnt:该计数器主要对需要配置的寄存器个数进行计数。加一条件问end_rw_cnt,由于一个寄存器需要读写两个阶段,所以为读写计数器的结束条件;结束条件为数164个,需要配置的寄存器共164个,数完就清零。 下面介绍一下该模块的其他信号设计思路:
配置指示信号flag:该信号初始状态为0,表示还没有开始配置;当接收到开始配置使能信号config_en的时候,变为1,表示开始进入配置状态;当配置完成之后,也就是寄存器计数器数完了,便退出配置状态,因此该信号从高变低的条件为end_reg_cnt。 配置完成指示信号cmos_en:当该信号为高电平时,表示摄像头的寄存器已经经过最少一次配置了。初始状态为0,表示没有配置过;变1的条件为end_reg_cnt,也就是寄存器全部配置完一次之后,便置为高电平。
寄存器写数据wdata:初始状态为0,之后,直接取从配置表读出的add_wdata的低8位。
寄存器地址addr:初始状态位0,之后,直接取add_wdata的第8到第15位即可。
写使能wr_en:一个寄存器需要读和写两个阶段,先进行写,然后在读,add_wdata的第16位表示写属性。所以该信号从0变1的条件为(add_rw_cnt && rw_cnt==0 && add_wdata[16])。
读使能rd_en:写之后,在进行读,add_wdata的第17位指示读属性,因此读使能拉高的条件位(add_rw_cnt && rw_cnt==1 && add_wdata[17])。
1.4.5参考代码
1.5 SCCB接口模块设计
1.5.1接口信号
|