找回密码
 注册
关于网站域名变更的通知
查看: 185|回复: 1
打印 上一主题 下一主题

FPGA访问MCP3201的程序

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-5-20 07:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
FPGA访问MCP3201的程序
$ ]1 q/ X8 p; H, U, C6 k
3 n" f  C7 [: l' X8 O& W
根据前面对MCP3201芯片硬件和时序研究,设计如下FPGA 程序访问MCP3201
, J) p; p5 R6 d$ p5 N! ulibrary ieee;
3 H8 I+ }# S& M" R1 O; b% kuse ieee.std_logic_1164.all; 0 H: _9 C$ J. S5 u% q# T' K  ?
use ieee.std_logic_arith.all;, n, r6 h+ L. y! J/ F0 ]" _
use ieee.std_logic_signed.all;# T8 F# |4 I' M! j8 C/ U% e/ H
entity get_ad_mcp3201 is+ s3 Y9 s* {, P" _
port
4 V% q9 t5 D% Q% G; C( ?    (4 B: U$ e( K5 K7 P. r; k
      clk: in std_logic;    --------系统时钟20MHZ
0 Z7 M- Q  x& o+ V7 k/ `      rst: in std_logic;    --------低电平复位
& ^3 Y5 r8 [# ^# w+ M      mcp3201_ncs: out std_logic;
1 ?5 N# i% D/ k/ a# u      mcp3201_clk: out std_logic;
/ m/ M$ c& d; t$ S6 t0 m' |8 M8 }4 Q      mcp3201_dout:in  std_logic;9 _6 m4 G) A9 b9 h* u$ Z
      mcp3201_ad_data: out std_logic_vector(11 downto 0)
2 x5 O& \" d# m  S     );
# M# X; F+ ^/ s1 y7 h0 A& T1 Eend get_ad_mcp3201;  ^" k: z0 c, H* m1 h
architecture arch_get_ad_mcp3201 of get_ad_mcp3201 is
( f! [: H7 R0 ?  R& X" {+ ~signal state : std_logic_vector(3 downto 0);/ |; Y2 ?1 f/ ~0 [. B0 h
signal clk_400k:std_logic;$ @2 L- k% _6 x& j) x
signal cnt: std_logic_vector(5 downto 0);
  m' i% a3 V! Ssignal data_reg: std_logic_vector(11 downto 0);( ^( Z$ }; D3 Q! J0 x6 x
signal clk_period_num: std_logic_vector(4 downto 0);2 W: o/ u; i: M7 ?. P8 {
begin) m2 D' A( H2 I5 T" \$ S! U; i  `
process(clk,rst)
8 S8 Q$ K0 o7 K2 ]begin
3 Z! Q' ]/ @5 x- j6 j' B, u, y0 d  p4 zif (rst='0') then
' Z# U/ d- N& H/ W0 C1 ^  clk_400k<='0';* y" G6 F/ p) H3 n( m
  cnt<=(others=>'0');* D0 q( ^7 r/ D: k$ s9 x
elsif clk'event and clk='1' then
; r9 P' c+ ^! T  if (cnt="000000") then
9 u" D0 o+ c5 n% z7 t2 n# \7 }      cnt<="110001"; ---495 h* O* }  t9 l2 ?: I+ P9 v& }
      clk_400k<='1';
0 t; H0 J. M1 q8 C! s2 w: y  else% E) z/ w5 T8 N) c1 \- f
      cnt<=cnt-"000001";
7 H( x" ]& z8 f4 T4 E  end if;
; \# f. U3 e6 eend if;  o$ }4 }8 t1 @  k6 e+ p# `
end process;9 P" y6 s. q- E8 [2 P
process(clk,rst)
; \5 ?0 c* X2 x: B& vbegin( s. ]+ q- E$ Z. ?4 ^; z
if (rst='0') then
9 _: N) O: j/ @; n, b  mcp3201_ncs<='1';, d" k# v* r  Y; i, S
  mcp3201_clk<='0';) v6 }( m6 H- l7 z* _
  mcp3201_ad_data<=(others=>'0');
$ {# Q8 K1 f) b# M( s. p  clk_period_num<=(others=>'0');
" f( {. l$ N/ n) J* z: ^  data_reg<=(others=>'0');  
4 W$ f6 \8 K% J4 l4 `8 q7 M  state<=x"0";1 X  k. w- f1 R# D4 c
elsif clk'event and clk='1' then
- D$ H$ K. S4 x  if (clk_400k='1') then
9 B6 Q  q( B( I3 T0 a! Y       if (state=x"0") then, [9 L: y- ]% Z. |& [. d5 d
            mcp3201_ncs<='1';
' @  G2 q( N/ m/ B            state<=x"1";
8 f3 c6 z6 {% M       elsif (state=x"1") then  L+ u8 V! }! i5 X* i
            mcp3201_ncs<='0';
% @8 e+ A& A; W            mcp3201_clk<='0';8 a  K$ |! M6 t
             state<=x"2";
$ ^) z8 w; ?) V+ N( x( F1 H       elsif (state=x"2") then
  w+ {$ }, t  O: r/ B. n# H  G2 M            mcp3201_clk<='1';
0 O# I$ a5 Y! g  K            if (clk_period_num="01110") then+ t' P- b. z9 Q  J! G
                  clk_period_num<=(others=>'0');
3 G% d" u* D8 N8 i0 t  r$ y1 C                   state<=x"3";
* D" L2 o5 Y3 J            else; c( j# V& q9 @. W  l& [8 o
                  clk_period_num<=clk_period_num+"00001";
- K* |0 T( N* ^. g, @                   state<=x"1";
) x! d) e: \9 ?3 }+ c1 T            end if;- `* O% q7 B! K3 ]0 u6 S
            if  (clk_period_num>="00011") then
! `# z# x' }6 k1 o                  data_reg<=data_reg(11 downto 1) & mcp3201_dout;
* ~0 z- A9 [) ?! z+ `, E            end if;! x; F  j+ g% x/ e/ Q3 d3 A- ]
                    " K# v+ J- |  g5 R' v6 L+ Y! _
       elsif (state=x"3") then
; j. g) U* ]1 m! G5 i  w            mcp3201_ncs<='1';
' j# U8 P4 b7 m            state<=x"0";
2 q8 ?+ B  N  O            mcp3201_ad_data<=data_reg;+ B( i5 q( m% S6 p# y1 P  i, h, V% s
       else; T0 q) W) t: P9 t: {+ A# j6 j* ~$ C
            mcp3201_ncs<='1';
, R' N" ?  [4 K( ~* v. c            state<=x"0";
0 n0 t, A7 ?: [7 t/ S% e7 L       end if ;2 w0 \7 N9 l# a% s) R! G7 L
end if;/ b! v+ p2 U6 k, [7 R! U
end if;
: v3 e6 s5 D7 e9 x; P1 h' _$ ?end process;' H; v. v! T6 R6 _# D8 i
end arch_get_ad_mcp3201;
9 Y5 `  Z- i/ t
7 ?8 E2 F4 g/ G2 z2 \

该用户从未签到

2#
发表于 2019-5-20 18:07 | 只看该作者
有代码可太好了啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-9 17:47 , Processed in 0.140625 second(s), 24 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表