|
本帖最后由 atom100 于 2015-3-4 23:07 编辑
用altera的CPLD MAX3000A 系列的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 [23:0]PANA_LINK,
output [23:0]PANA_SPEED,
output [5:0]PANB_LINK,
output [5:0]PANB_SPEED
);
//
reg [1:0]led_data_r;
reg [1:0]led_clk_r;
reg [6:0]data_cnt;
//
reg [23:0]PANA_LINK_r;
reg [23:0]PANA_SPEED_r;
reg [6:0]PANB_LINK_r;
reg [6:0]PANB_SPEED_r;
//
always @(posedge cpld_clk )
begin
led_data_r[1] <= led_data_r[0];
led_data_r[0] <= led_data;
led_clk_r[1] <= led_clk_r[0];
led_clk_r[0] <= 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[1] & ~led_data_r[0])
data_cnt <= 7'd0;
else if(~led_clk_r[1] & led_clk_r[0])
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[0] <= led_data_r[0];
7'd1: PANB_LINK_r[0] <= led_data_r[0];
.
.
.
.
.
.
default:;
endcase
end
assign PANA_LINK[0] <= PANA_LINK_r[0] ;
assign PANB_LINK[0] <= PANB_LINK_r[0] ;
.
.
.
endmodule
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|