i2c总线verilog从机代码求答疑
时间:10-02
整理:3721RD
点击:
主机和从机只有sda和scl相连。现在我设定好的主机那边传来的scl是:
always @(negedge clk)
scl=~scl;
也就是错开相位、2倍分频。
从机这边
always
scl_r<=scl;
现在从机这边我需要一个同步的时钟,求教大神,怎么对scl信号实现加倍频率、再调整回相位。
调整相位我应该可以做到。就是不知道怎么倍频。大神帮我!
谢谢
always @(negedge clk)
scl=~scl;
也就是错开相位、2倍分频。
从机这边
always
scl_r<=scl;
现在从机这边我需要一个同步的时钟,求教大神,怎么对scl信号实现加倍频率、再调整回相位。
调整相位我应该可以做到。就是不知道怎么倍频。大神帮我!
谢谢
没那么麻烦, 直接建一个 MB 系统 I2C 很容易做
啊大神,又是你。我是初学者。求告知mb系统是啥?
另外麻烦归麻烦,是否有办法可以倍频?
标题
要么找个高频时钟进来,不行就异步设计。
软核microblaze上有i2c的外设接口,一般用更高频率的时钟来采样也可以。
他的从机只有2根线外接。scl和sda。能不能说说怎么异步?
I2C速度不是很快,可以通过延迟来控制相位
因为I2C时钟频率一般是从几十到几百KHz (比如10khz~400khz),不知您的scl时钟频率是多少。
假设master产生的SCL 是100khz。
再假设slave 的系统时钟sys_clk是25mhz(就是比SCL的频率高出多个数量级)
1,那么,就可以把 SCL 输入到sys_clk 时钟域中的flip-flop 数据输入端,采用3级flip-flops
2,然后采用与非门就可以获取到SCL的上升沿下降沿。
3,在用sys_clk中的计数器产生延时采样触发信号,作为采集SDA 的flip-flop的使能
