|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
4 R& F. w* @: e5 ?! r4 W! \
; O6 ` c+ l2 N( c4 N
DAC0832是常用的8位DA转换芯片,建立时间为1us,用verilog硬件描述语言控制如下:
0 L' v, M) {( k//name : ADC_0832
% {, Q% p6 g5 V//author : qin wei he;) f. ]; A, u- U" H; t2 ]$ M
//date :2011.04.30;# G0 R# U4 Q9 ~
//function:( B! r/ M* L; [
" Y$ v3 S+ W: Y9 @
module DAC_0832(6 W4 x3 j0 P5 c! V) t w
input clk, //外部时钟输入50M
2 T `& z6 a" y( ]8 ]9 X. b input reset, //复位6 a% Q6 E' d* H7 b& L9 r
input[7:0]data_in, //8位数据输入
8 V6 {+ K& u7 Z; q: L; l input EN, //使能,只保持一个时钟周期 d( m" t4 N; J# Y' K# R
output reg CS,//DA0832片选信号
$ _4 o5 t* {% S% e7 O( O- m output reg WR, //读入信号
0 L& U! w6 S: F3 s9 Y: A- r output reg[7:0] data);//8位数据输出
; K, q3 l! Y4 w/ t- R) _( r; Z6 L* q' `- X
reg[7:0]data_in_reg;
* g a5 `2 }& `6 U3 xalways @(posedge clk or negedge reset)//判断使能信号,锁存输入数据) Q, g7 t! u' N6 [, D& u5 ~
if( ! reset ) data_in_reg<=0;
; x( Z! n H( K1 t# V/ | else if(EN) data_in_reg <= data_in_reg;+ k6 ?* `1 M6 M5 I9 ^2 f$ V$ p
else data_in_reg <= data_in_reg;
9 \3 ^$ m4 @% C8 D 3 G% M$ g0 V* D! t" X5 k2 T' h
reg[2:0]cnt1;% H& L. l+ \3 P% y3 W9 ?6 y
always @(posedge clk or negedge reset)////100NS计数+ Y e v) E; D5 D" v* K+ d
if( ! reset ) cnt1 <= 3'b0;+ |& Q: G/ o1 F& B- l1 K8 E" A
else begin- X' G* y; J6 _
if(cnt1 == 3'd5) cnt1 <= 0;
4 W7 \# c- b7 R else cnt1 <= cnt1+ 1'b1;
+ t. E9 g# W. x6 r4 Y end
0 ?; @: W( g" R' X' Dreg[3:0]cnt2;
/ S6 K, i+ x$ k7 s" ealways @(posedge clk or negedge reset)2 u* L. M( K W" p) C6 R
if( ! reset ) cnt2 <= 4'b0;
/ E* ?$ L$ z0 k% Q' x3 N else begin9 o% N" p+ v4 @" W- }- {
if(cnt2== 4'd11) cnt2 <= 3'b0;
( j) B1 k$ ~8 V; Y( M else if(cnt1 == 3'd5) cnt2 <= cnt2 + 1'b1;* i' f/ i/ w% J. z& I) d
else cnt2 <= cnt2;; \% }5 H7 R. H2 n# N
end0 i" j! U* \6 R, I
always @(posedge clk or negedge reset)* ?! v; _' P/ Q2 H, F0 d
if( ! reset ) begin& N/ C7 k8 S0 L9 R% \# `. Z7 B
CS<=1'b1;, r% s; x0 ?1 S3 T- @
WR <=1'b1;
* _+ [3 C3 f ]& ?1 _/ m' L data<=8'b0;
7 C$ [: P- Y% n- y( z% _ end L6 }5 o! S/ |' X; q9 b3 r
" Y% J R/ r6 n/ X1 x$ R else begin
7 g' @, b, t- o case ( cnt2 )
- |5 Z, X3 K% x. w8 C 1,2,3,4,5,6,7,8, : begin CS <= 1'b0;end
+ G8 D6 [+ ?& O$ `$ w/ P" I( W default : CS <= 1'b1;
) `$ `' D5 @5 z- o# X8 f) y endcase
9 s! B, V) p8 a3 M 6 j9 D: Q9 G) H3 B! h. W0 |5 z$ H
case (cnt2)
, J" D, ]) }+ K& g3 j 2,3,4,5,6,7 : begin WR <= 1'b0;end
8 W. p" c+ Z0 x; Y default : WR <= 1'b1;; y: `8 y- |3 \
endcase
2 W/ F7 P, W3 g9 i1 i % ?2 w1 B# l" V$ y
case (cnt2)
, }9 l8 c" W% o1 o 1 : data <= data_in_reg;
2 W: e! a! s, J: T default : ;5 P$ K0 { a5 b$ e
endcase8 M8 r( b7 ?( z( Q1 F
end
% M: ~% {. t/ r4 b2 ^8 V" ?endmodule
' R" h, R% B& i5 m8 w3 {7 d9 x4 f% \ t t' _9 K
|
|