3621|3

6

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

利用iiC对芯片寄存器配置,仿真有问题,望高手指点 [复制链接]

////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////
module iic(rst,clk,outdata,scl,sda,rst_out);

input rst;
input clk;
output outdata;
output scl;
inout sda;
output rst_out;   //the rst bit of the 371

//////////////////////////////////////////////////e
reg rst_out_r;

reg[7:0] j;
reg sense_r;

reg[7:0] reg_add_tmp;
reg[7:0] indata;
reg read_or_write;

parameter cap_config=8'b0000_0000;
parameter int_config1= 8'b1100_0100;
parameter int_config2=8'b0000_1001;
parameter ctrl_config= 8'b0000_0001;

assign rst_out = rst_out_r;
////////////////////////////////////////////
wire ack_out;

reg[9:0] cnt_10us;
reg[7:0] add1;
reg[7:0] add2;

always @ (posedge clk or negedge rst)
begin
 if(!rst) cnt_10us <= 5'd0;
 else cnt_10us <= cnt_10us+1'b1;
end

always@( ack_out or  rst)
begin 
 if(!rst)
 begin
  rst_out_r<=1'b0;
  read_or_write<=1'b0;
  add1<=8'd4;
  add2<=8'd46;
  indata<=cap_config;
  sense_r<=1'b0;
  j<=8'd2;
  reg_add_tmp<=8'b0000_0110;//?
 end
 
 else if(cnt_10us==10'd500) rst_out_r<=1'b1;
 else if((j<=8'd5)&&(j>=8'd2))
  begin
   read_or_write<=0;
   reg_add_tmp<=add1+j;
   indata<=cap_config;
  end
 else if((j<=8'd13)&&(j>=8'd6))
  begin
   read_or_write<=0;
   reg_add_tmp<=add1+j;
   if((j%8'd2)==0)    
    indata<=int_config1;
    else indata<=int_config2;
  end
 else if(j==8'd14)
  begin
   read_or_write<=0;
   reg_add_tmp<=8'd1;
   indata<=ctrl_config;
  end
 else if(j==8'd15)
  begin
   read_or_write<=0;
   reg_add_tmp<=8'd0;
   indata<=ctrl_config;
  end
 else if((j>=8'd16)&&(j<=8'd23))
  begin
   read_or_write<=1;
   reg_add_tmp<=add2+j;     
  end  
 else j<=8'd16; 
 j<=j+8'd1; 
 sense_r<=~sense_r;
end

///////////////////////////////////////////
reg[4:0] k;
reg outdata_r;
always @ (posedge clk or negedge rst)
begin
 if(!rst)outdata_r<=0;
 else
  for(k=0;k<=7;k=k+1)
   begin
    outdata_r<=read_data[k];
   if(k==8) k<=0;
   end
end
assign outdata = outdata_r;

wire[8:0] read_data;
//////////////////////////////////////////
iic_com  iic_com(     .read_or_write(read_or_write),
       .reg_add(reg_add_tmp),
       .write_data(indata),
       .clk(clk),       
       .rst(rst),
       .scl(scl),
       .sda(sda), 
       .ack_out(ack_out),
       .outdata(read_data)              
       );
endmodule  

未命名.jpg (37.21 KB, 下载次数: 1)

仿真波形如图所示。

仿真波形如图所示。
此帖出自FPGA/CPLD论坛

最新回复

给你一点提示, 注意在SDA 数据线在双向操作的正确方法. 还有仿真对INOUT正确操作方法!  详情 回复 发表于 2011-3-16 08:37
点赞 关注
 

回复
举报

6

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

顶一个,在线等

顶一个,在线等
此帖出自FPGA/CPLD论坛
 
 

回复

6

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

iic_com 模块代码如下

iic_com代码

iic_com.zip

1.93 KB, 下载次数: 7

iic_com模块

此帖出自FPGA/CPLD论坛
 
 
 

回复

6892

帖子

0

TA的资源

五彩晶圆(高级)

4
 

给你一点提示, 注意在SDA 数据线在双向操作的正确方法. 还有仿真对INOUT正确操作方法!

此帖出自FPGA/CPLD论坛
个人签名一个为理想不懈前进的人,一个永不言败人!
http://shop57496282.taobao.com/
欢迎光临网上店铺!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表