打印

求助,有人用过AD7924吗,用veirlog写过这个片子的时序

[复制链接]
1780|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sulianghe|  楼主 | 2013-9-11 11:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 sulianghe 于 2013-10-10 10:54 编辑

如题


上传的程序

module AD7924(
              clk,
              rst,
              dout,
              din,
              cs,
              sclk,
              AD_data,
              data,
              data_1,
              data_2,
              data_3,
              data_4,
              clk0
              );


input   clk;
input   rst;

output  sclk;
output  cs;

output  dout;

output  [11:0]  AD_data;

output  [15:0]  data;

output  [11:0]  data_1,data_2,data_3,data_4;

input   din;

reg     dout;

reg   [15:0]  data;

reg   [11:0]  data_1,data_2,data_3,data_4;

reg sclk;

reg  [5:0]  div_cnt ;
reg    clk0;

output  clk0;

always@(posedge clk or negedge rst)
if(!rst)
begin
   div_cnt <= 0;
   clk0 <= 0;
end
else
begin
     if(div_cnt < 25)
     begin
        div_cnt <= div_cnt + 1;
        clk0 <= clk0;
     end
     else
     begin
        div_cnt <= 0;
        clk0 <= ~clk0;
     end
end

PLL U1(
        .inclk0(clk),
        .c0(AD_clk)
        );


reg   [5:0]  cnt;
reg          cs;

reg    [11:0] AD_data;
reg    [3:0]  state;
reg    [1:0]  address;
reg    [4:0]  i;
reg    [15:0] control;
reg    [4:0]  delay;

always@(posedge AD_clk or negedge rst)
if(!rst)
begin
    cs <= 1;
    sclk <= 0;
    address <= 0;
    i <= 15;
    state <= 0;
    data <= 0;
    control <= {4'b1000,2'b00,10'b11_0000_0000};
end
else
case(state)
0:
  begin
      sclk <= 1;
      cs <= 0;
      state <= 1;
      address <= address + 1'b1;
      case(address)
      2'b00:
          control <= 16'h8330;
      2'b01:
          control <= 16'h8730;
      2'b10:
          control <= 16'h8B30;
      2'b11:
          control <= 16'h8F30;
      endcase
  end
1:
  begin
    sclk <= 1;
    state <= 2;  
  end
2:
  begin
    dout <= control[15];
    control <= (control<<1);
    state <= 3;
  end
3:
  begin
    sclk <= 0;
    state <= 4;
  end
4:
  begin
    data <= (data<<1);   
    data[0] <= din;
        if(i > 0)
    begin   
       i <= i - 1;
       state <= 1;
    end   
    else
    begin
         i <= 15;
         state <= 5;
     end
  end
5:
  begin
     sclk <= 1;
     cs <= 1;
     AD_data <= data[11:0];
     state <= 0;
     case(data[13:12])
     2'b00:
          data_1 <= AD_data;
     2'b01:   
          data_2 <= AD_data;
     2'b10:   
          data_3 <= AD_data;
     2'b11:   
          data_4 <= AD_data;
     endcase
  end
default:
  begin
     sclk <= 1;
     state <= 0;
     cs <= 1;
  end
endcase  

endmodule
//
//
//




相关帖子

沙发
sulianghe|  楼主 | 2013-9-16 15:28 | 只看该作者
本帖最后由 sulianghe 于 2013-9-16 15:29 编辑

:L没人回答啊,还是靠自己搞定了,给大家参考下吧

使用特权

评论回复
板凳
张博强| | 2013-9-16 16:11 | 只看该作者
快啊,我等着参考呢

使用特权

评论回复
地板
GoldSunMonkey| | 2013-9-17 20:52 | 只看该作者
sulianghe 发表于 2013-9-16 15:28
没人回答啊,还是靠自己搞定了,给大家参考下吧

快来参考啊

使用特权

评论回复
5
张博强| | 2013-9-22 15:38 | 只看该作者
sulianghe 发表于 2013-9-16 15:28
没人回答啊,还是靠自己搞定了,给大家参考下吧

楼主,可否参考一下你的程序?

使用特权

评论回复
6
sulianghe|  楼主 | 2013-10-10 11:21 | 只看该作者
GoldSunMonkey 发表于 2013-9-17 20:52
快来参考啊

参考一下吧

使用特权

评论回复
7
sulianghe|  楼主 | 2013-10-10 11:22 | 只看该作者
张博强 发表于 2013-9-16 16:11
快啊,我等着参考呢

时钟是20M,通过PLL分频的,参考下吧

使用特权

评论回复
8
张博强| | 2013-10-11 16:54 | 只看该作者
sulianghe 发表于 2013-10-10 11:22
时钟是20M,通过PLL分频的,参考下吧

3q

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

137

帖子

0

粉丝