【发布时间】:2015-12-22 02:50:50
【问题描述】:
当我实现一个 I2C 从设备时,这里显示了一个问题。我的sda 是一个输入端口。在时间164ns,即图中红圈区域,从机将ack=1写入sda。之后,测试台将数据写入sda,从SRAM 读取sda。
但是,似乎红色圈出的区域也被SRAM读取,这使得SRAM在蓝色表示的区域的MSB中显示为1。在实践中,SRAM 应该从红圈区域之后的区域读取。导致此错误的原因可能是什么?
部分代码如下所示
READ_DATA:begin
addr_x<=addr_x;
ROM<=DATA_IN_ROM;
SRAM[SRAM_LEN-cnt]<=sda;
end
READ_ADDR: begin // rw<=rw;
SRAM<=SRAM;
ROM<=DATA_IN_ROM;
addr_x[REG_LEN-cnt-1]<=sda;
cnt<=cnt+1;
sda_reg<=sda_reg;
sda_vid<=sda_vid;
freeze_cnt<= freeze_cnt;
freeze<=freeze;
rwcnt<=rwcnt;
end
【问题讨论】:
-
请按“在此处输入图片描述”查看图片
-
ROM<=DATA_IN_ROM;是什么意思?似乎您正在根据cnt值逐位填充SRAM,那么cnt值增量在哪里?你能再贴一些代码吗? -
READ_ADDR: 开始 // rw
-
假设您正在推断寄存器(基于您使用
<=,因为没有足够的代码知道),您不需要任何signal<=signal;语句。
标签: verilog