|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
& J) Q0 x: I1 u8 X0 g
5 s0 y5 T1 c+ T& J! o2 G$ VDAC0832是常用的8位DA转换芯片,建立时间为1us,用verilog硬件描述语言控制如下:- d( b& T% z4 o E0 O! Q% G$ H
//name : ADC_0832
* ]& T. U2 ]( h0 E/ d9 L2 G$ z5 {8 a//author : qin wei he;
( `* z; v9 o. e8 K) K& }//date :2011.04.30;
4 T: j5 ?& J% m6 X e Q//function:
- a% |4 i' r2 K: l- \: ~: f7 V6 y' a7 l$ W
module DAC_0832(2 t9 \" }# a4 e* \( ^6 a) ?
input clk, //外部时钟输入50M4 u" h+ s' W2 N; [6 ^& p
input reset, //复位% E7 p; ]/ `% B! t1 _
input[7:0]data_in, //8位数据输入' O0 `/ b# O3 h
input EN, //使能,只保持一个时钟周期
' ], T& f! [ l, L5 A8 e output reg CS,//DA0832片选信号
( b3 A* F: X% d* g4 D4 Z4 ` output reg WR, //读入信号
6 c0 q) ` F/ ` output reg[7:0] data);//8位数据输出
: h& D V/ `( s& i) d& g7 G \" P* i/ `8 e" e# G8 J1 S6 c
reg[7:0]data_in_reg;
" v# ^! f5 N) yalways @(posedge clk or negedge reset)//判断使能信号,锁存输入数据
5 ^6 x7 O1 v. H$ U# o& ` if( ! reset ) data_in_reg<=0;! V, o( C. [" J& {1 Q
else if(EN) data_in_reg <= data_in_reg;$ m& @: R2 J/ h2 L5 G
else data_in_reg <= data_in_reg;! n/ F& ~8 {$ L7 O
U7 ?% l8 ^! K' {; \, E# `reg[2:0]cnt1;9 z2 Z- i w8 h2 Z8 n
always @(posedge clk or negedge reset)////100NS计数
$ [ t+ I2 L9 s' O6 B" v4 W; F if( ! reset ) cnt1 <= 3'b0;# b3 _2 D- Y5 Q6 t: V
else begin
9 A+ \% S( Q! d- w9 e if(cnt1 == 3'd5) cnt1 <= 0;& W8 ?% P8 c; e7 v) a" J5 p
else cnt1 <= cnt1+ 1'b1;5 O3 g# ?8 m$ }: g) E& [
end
( H. Y3 B" ]1 a, ?# J* _reg[3:0]cnt2;0 Q4 X7 | @( N+ }4 M
always @(posedge clk or negedge reset)
2 f; M0 I" B, O- U6 D' f5 ` if( ! reset ) cnt2 <= 4'b0;4 M' O6 D6 {9 k$ t; W' C7 A3 w6 o" C
else begin
- H9 i7 R+ `' }( Y/ w, A if(cnt2== 4'd11) cnt2 <= 3'b0;; P6 P7 G: l8 I+ i
else if(cnt1 == 3'd5) cnt2 <= cnt2 + 1'b1;
/ N; V) M0 v) ~ @2 S0 o else cnt2 <= cnt2;
3 K$ q* E' J: C- x end
3 r+ e" E0 g2 \always @(posedge clk or negedge reset)/ P7 [) E5 D t* d& R* i2 T
if( ! reset ) begin/ E' M$ f# ~' z; Q5 w
CS<=1'b1;) G1 e9 s7 A# `! c T. {
WR <=1'b1;0 c5 B6 b5 P6 D& I! c
data<=8'b0;; z1 W: h* c4 D3 Y( u7 R
end
1 [' [' x$ [8 v, e( i& s( A
* c+ u+ G8 i8 \& B+ P) U5 Y else begin/ l0 a" } R' V# R4 f- _) x1 V
case ( cnt2 )
6 y7 w4 {4 A0 Z/ T 1,2,3,4,5,6,7,8, : begin CS <= 1'b0;end( Y: S6 y6 N) x& Y6 Z9 b- c' p
default : CS <= 1'b1;/ e' ^/ X5 H* r
endcase( q0 e" R$ [" Z
- p$ R+ l! G. e5 F- |
case (cnt2)
5 n- h* a* o5 ~" u) b1 f 2,3,4,5,6,7 : begin WR <= 1'b0;end+ Y6 m- l e& h: ?
default : WR <= 1'b1;
. o4 X: m4 Y" Q9 H5 i4 w N* _ endcase
7 U0 I3 ?. T; O2 t7 w1 X3 u; D. B
% c" g) H. q$ E# s case (cnt2)
5 K* ]# b0 Y. J9 |- N$ V: l7 Z6 N 1 : data <= data_in_reg;7 j* [% \/ n w% g, u
default : ;
6 p' g. j4 g! w, A* H9 N& e/ R endcase6 Q$ [4 e. l# ^( z% V
end0 H0 I2 Q; }- M/ Q' X
endmodule: J. ~% }0 A; C% ~% z8 d
b5 u# W d8 Q/ l( ~# Z8 Y
|
|