5230|7

523

帖子

235

TA的资源

版主

楼主
 

【FPGA(cyclone4)第二期 】1、 AD芯片TLC549调试 [复制链接]

看了KDY TLC549的福利贴,就开始了自己的TLC549的调试过程,不是很顺利,中间遇到了个小问题,花掉了一天时间才找到问题,,不过最终终于调试好了,实现了采集数据的数码管四位显示,现在分享下代码。
TLC549.zip (7.74 MB, 下载次数: 15, 售价: 1 分芯积分)



方法一:
module TLC549
(
input sys_clk,
input sys_rstn,

output AD_Cs,
output AD_Clk,
input  AD_In,
output reg [7:0] Data_Out
);
           

reg[6:0] Count;
reg En_Count;
always @(posedge sys_clk or negedge sys_rstn)
begin
  if(!sys_rstn)
  begin
      Count <= 7'b0;
  end
  else if(Count==7'd50)
        Count <= 7'd0;
  else if(En_Count)
      Count <= Count+1'b1;
  else
        Count <=7'd0;
end

reg [5:0] i;
reg AD_Cs_r;
reg AD_Clk_r;
reg [7:0] Data_Out_r;
always@(posedge sys_clk or negedge sys_rstn)
    if(!sys_rstn)
        begin
            i<=6'd0;
            AD_Cs_r<=1'b1;
            AD_Clk_r<=1'b0;
            Data_Out_r<=8'd0;
            En_Count<=1'b0;
        end
    else
        case(i)
            0,1,2,3:
            if(Count==7'd50) begin En_Count<=1'b0;i<=i+1'b1;end
            else begin En_Count<=1'b1;AD_Cs_r<=1'b0;end
            4,6,8,10,12,14,16,18:
            if(Count==7'd50) begin En_Count<=1'b0;i<=i+1'b1;end
            else if(Count==7'd25) Data_Out_r<={Data_Out_r[6:0],AD_In};
            else begin En_Count<=1'b1;AD_Clk_r<=1'b1;end
            5,7,9,11,13,15,17,19:
            if(Count==7'd50) begin En_Count<=1'b0;i<=i+1'b1;end
            else begin En_Count<=1'b1;AD_Clk_r<=1'b0;end
            20:
            if(Count==7'd50) begin En_Count<=1'b0;i<=i+1'b1;end
            else begin En_Count<=1'b1;AD_Cs_r<=1'b1;end
            default:
            if(Count==7'd50) begin En_Count<=1'b0;i<=i+1'b1;end
            else begin En_Count<=1'b1;Data_Out<=Data_Out_r;end
        endcase
   
assign AD_Clk=AD_Clk_r;
assign AD_Cs=AD_Cs_r;

endmodule

查看本帖全部内容,请登录或者注册
此帖出自FPGA/CPLD论坛

最新回复

很是喜欢了。  详情 回复 发表于 2013-10-16 22:15

赞赏

2

查看全部赞赏

点赞 关注
 

回复
举报

523

帖子

235

TA的资源

版主

沙发
 

【FPGA(cyclone4)第二期 】2、 AD芯片TLC549调试

紧跟上贴,分享下第二个程序,按照KDY的说法,第一个程序有点C化。

TLC549方法二.zip (7.71 MB, 下载次数: 10, 售价: 1 分芯积分) 当/CS变为低电平后,TLC549芯片被选中,同时前次转换结果的最高有效位MSB(A7)自DATA OUT端输出,接着要求自I/O CLOCK端输入8个外部时钟信号,前7个I/O CLOCK信号的作用,是配合TLC549输出前次转换结果的A6-A0 7位,并为本次转换做准备:在第4个I/O CLOCK信号由高至低的跳变之后,片内采样/保持电路对输入模拟量采样开始,第8个I/O  CLOCK信号的下降沿使片内采样/保持电路进入保持状态并启动A/D开始转换。转换时间为36个系统时钟周期,/CS保持高电平,或者I/O CLOCK时钟端保持36个系统时钟周期的低电平. 由此可见,在自TLC549的I/O CLOCK端输入8个外部时钟信号期间需要完成以下工作:读入前次A/D转换结果;对本次转换的输入模拟信号采样并保持;启动本次A/D转换开始。

方法二:
module TLC549 (
                    input sys_clk,
                    input sys_rstn,
                    input  AD_In,
                    output AD_Cs,
                    output AD_Clk,
                    output clk_display,
                    output reg [7:0] Data_Out                  
               );

// clk=50MHz , AD_CLK_r = 1MHz              
reg  AD_CLK_r;
reg[5:0] Count;

always @(posedge sys_clk or negedge sys_rstn)
begin
  if(!sys_rstn)
  begin
      Count <= 6'b0;
      AD_CLK_r <= 1'b0;
  end
  else if(Count < 6'd50)
        Count <= Count+1'b1;
  else
    begin
      Count <= 6'd0;
      AD_CLK_r <= ~AD_CLK_r;
    end
end

assign clk_display = AD_CLK_r;

reg[4:0] COUNTER;
always @(posedge AD_CLK_r or negedge sys_rstn)
begin
    if(!sys_rstn) COUNTER <= 1'b0;
    else COUNTER <= COUNTER+1'b1;
end

assign AD_Cs = (COUNTER <= 5'd9)? 1'b0 : 1'b1;
assign AD_Clk =  (COUNTER >= 5'd2 && COUNTER <= 5'd9)? AD_CLK_r : 1'b0;

reg[7:0] Data_Out_r;
reg [5:0] i;

always @(negedge AD_CLK_r )
begin
  if(COUNTER >= 5'd2 && COUNTER <= 5'd9)  
     begin
       Data_Out_r<={Data_Out_r[6:0],AD_In};
     end
  else  Data_Out <= Data_Out_r;
end

endmodule



此帖出自FPGA/CPLD论坛

赞赏

4

查看全部赞赏

 
 

回复

579

帖子

0

TA的资源

五彩晶圆(初级)

板凳
 
改进的非常到位
完美!
此帖出自FPGA/CPLD论坛

点评

版主,可是我个人觉得第一个程序更好理解一些,C化的程序有什么缺点吗?:puzzle:  详情 回复 发表于 2013-9-26 15:31
个人签名Net:Wxeda.taobao.com
QQ:1035868547
Blog:https://home.eeworld.com.cn/space-uid-390804.html
 
 
 

回复

5970

帖子

8

TA的资源

版主

4
 
  不错 不错!
此帖出自FPGA/CPLD论坛

点评

:handshake  详情 回复 发表于 2013-9-26 15:32
个人签名生活就是油盐酱醋再加一点糖,快活就是一天到晚乐呵呵的忙
===================================
做一个简单的人,踏实而务实,不沉溺幻想,不庸人自扰
 
 
 

回复

523

帖子

235

TA的资源

版主

5
 

回复 板凳kdy 的帖子

版主,可是我个人觉得第一个程序更好理解一些,C化的程序有什么缺点吗?
此帖出自FPGA/CPLD论坛

点评

kdy
缺点有: 1、逻辑关系清晰,但是变量关系复杂,难以直观看出RTL结构 2、综合器综合效率打折扣 3、通常会影响最终最高运行时钟频率 C中你是沿着别人的路走(指令集),怎么写都无法跳出框外,运行速度固定,(同  详情 回复 发表于 2013-9-26 22:30
 
 
 

回复

523

帖子

235

TA的资源

版主

6
 

回复 4楼chenzhufly 的帖子

此帖出自FPGA/CPLD论坛
 
 
 

回复

579

帖子

0

TA的资源

五彩晶圆(初级)

7
 

回复 5楼wsdymg 的帖子

缺点有:
1、逻辑关系清晰,但是变量关系复杂,难以直观看出RTL结构
2、综合器综合效率打折扣
3、通常会影响最终最高运行时钟频率
C中你是沿着别人的路走(指令集),怎么写都无法跳出框外,运行速度固定,(同样的指令)
FPGA你是在构造一个特定结构,速度和复杂度由你决定,你无法看出构造会有风险。
比如:a=a+1;b=b+10;在C中是一样的,但在fpga中一般来说前者是计数器,后者是加法器;
有时实际情况可能还要复杂,后者是位宽不同的加法器.......

[ 本帖最后由 kdy 于 2013-9-26 22:34 编辑 ]
此帖出自FPGA/CPLD论坛
个人签名Net:Wxeda.taobao.com
QQ:1035868547
Blog:https://home.eeworld.com.cn/space-uid-390804.html
 
 
 

回复

52

帖子

0

TA的资源

一粒金砂(初级)

8
 
很是喜欢了。
此帖出自FPGA/CPLD论坛
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条
ADI 中国30周年,与你一起走过的那些精彩瞬间!
即日起-4月30日,阅读资料,您可以参与ADI真爱粉大考验,同时为ADI中国30周年送上祝福!我们将从参与者中随机抽取精美礼品送出!

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

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

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

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

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