altera的CPLD MAX3000A 接收i2c数据,混乱
本帖最后由 atom100 于 2015-3-4 23:07 编辑用altera的CPLDMAX3000A系列的EPM3128ATC100-10接收i2c数据,cpld 不需要回应,只检测接收数据,
功能:按i2c时序 接收led_data上的数据,cpld不需要 发送ACK信号,led_clk是i2c的时钟
时序如下
下面代码 有什么问题?我用modelsim仿真没有问题,但放到MAX3000A系列的EPM3128ATC100-10上运行,接收到的数据总是混乱的 ?我刚用CPLD ,搞不懂
哪位给指教下 ,cpld_clk的输入时钟是25Mhz
module led(
input cpld_clk,
input rst_n,
input led_data,
input led_clk,
output PANA_LINK,
output PANA_SPEED,
output PANB_LINK,
output PANB_SPEED
);
//
reg led_data_r;
reg led_clk_r;
reg data_cnt;
//
reg PANA_LINK_r;
reg PANA_SPEED_r;
reg PANB_LINK_r;
reg PANB_SPEED_r;
//
always @(posedge cpld_clk )
begin
led_data_r <= led_data_r;
led_data_r <= led_data;
led_clk_r <= led_clk_r;
led_clk_r <= led_clk;
end
//
always @(posedge cpld_clk or negedge rst_n)
if(!rst_n)
data_cnt <= 7'd0;
else if(led_clk & led_data_r & ~led_data_r)
data_cnt <= 7'd0;
else if(~led_clk_r & led_clk_r)
data_cnt <= data_cnt + 7'd1;
always @(posedge cpld_clk or negedge rst_n)
if(!rst_n)
PANA_LINK_r <= 24'hffffff;
else
begin
case(data_cnt)
7'd0: PANA_LINK_r <= led_data_r;
7'd1: PANB_LINK_r <= led_data_r;
.
.
.
.
.
.
default:;
endcase
end
assign PANA_LINK <= PANA_LINK_r ;
assign PANB_LINK <= PANB_LINK_r ;
.
.
.
endmodule
你需要对CLK,DATA时钟都要做下降沿处理,I2C开始是CLK高电平,DAT下降沿,看上边代码你没有对DAT引脚做下降沿检测处理 {:smile:}{:smile:}{:smile:}{:smile:}{:smile:}
页:
[1]