atom100 发表于 2015-3-4 22:53:05

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

yuyu87 发表于 2015-3-5 08:24:20

你需要对CLK,DATA时钟都要做下降沿处理,I2C开始是CLK高电平,DAT下降沿,看上边代码你没有对DAT引脚做下降沿检测处理

zhoulei123 发表于 2015-3-5 11:21:37

{:smile:}{:smile:}{:smile:}{:smile:}{:smile:}
页: [1]
查看完整版本: altera的CPLD MAX3000A 接收i2c数据,混乱