|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
转——ZRtech Altera CycloneIV FPGA开发板——4位无符号数的加减运算 & |* z: l! Y, I p$ Q$ `3 Y. ?1 [
& Q" ^8 \# f& Q5 b5 l) M: J, r j2 s1、同样新建工程' J1 d) y' ]1 a: M: E( X+ C
, [! B; N: h! A7 o
2、本实验要实现的功能是进行4位无符号数的加减运算,板子上电之后进行复位操作,
7 ]! f- B( e9 Y; u! x# X5 K 当最右边的按键按下时,进行加法操作,如果最高位有进位的话,那么蜂鸣器就会响,否则蜂鸣器不响,当然本实验中加法操作的进位为1,所以蜂鸣器会响,同时加法操作的和会在最右边的数码管上面显示;
- C5 r/ h. y1 s4 V( J 当最左边的按键按下时,会进行减法操作,如果最高位有借位的话,那么蜂鸣器就会响,否则蜂鸣器不响,当然本实验中减法操作的借位为0,所以蜂鸣器不会响,同时减法操作的差会在最左边的数码管上面显示;! f4 M$ f2 H c w" n: g1 O: n
本实验的代码如下:
/ x1 i% A& i; e" ^module binary_to_decimal(clk,Key4,Key3,Key2,Key1,DS_EN4,DS_EN3,DS_EN2,DS_EN1,DS_A,DS_B,DS_C,DS_D,DS_E,DS_F,DS_G,DS_DP,BP1);! p6 J; x0 _8 _* |3 _
9 K, z7 |' d' R% ~* Y5 G0 x& Rinput clk;
( L# K: X% P, c, y( `4 [! \input Key4,Key3,Key2,Key1;
5 ^) @0 l# D; ]( T- n* T- \output wire DS_EN4,DS_EN3,DS_EN2,DS_EN1;
, {7 n/ e9 {0 e0 X, ?3 ]* Voutput wire DS_A,DS_B,DS_C,DS_D,DS_E,DS_F,DS_G,DS_DP;
" b- v! d0 h) N; ~2 z/ A( Moutput wire BP1;* P% U" R. o! A, `( p
( T, A4 n0 k. A/ \, qwire [3:0]Key;
$ ]5 O6 J8 ]0 G6 r- g# cwire [3:0]wei;
- P; A' D6 M8 t2 H. ?$ f8 Nwire [7:0]duan;
6 H% ], C# U) k) J* zreg [3:0]wei_r;
6 I7 f* z b$ qreg [7:0]duan_r;: A2 K; m" }: d& `3 [0 c& J- a3 U
reg [1:0]SELE;
; O' s, \+ J% \6 Z- Z2 Rwire [3:0]SUM;
+ S* F, o4 u I4 x7 w4 g9 iwire C;3 e* U6 L7 _, Z) o
: |" h8 p% `4 D
parameter B=4'b1011,! P4 L4 D0 {" D
A=4'b0111;6 A' W! S' W3 {3 H" W: y+ A, x
2 b% y- U$ [# j1 D4 m8 @) ~
assign Key={Key4,Key1,Key2,Key3};- z1 H5 D3 r: O
assign {DS_EN1,DS_EN2,DS_EN3,DS_EN4}=wei;//低电平选中对应数码管
6 a; D/ u$ m6 ~, ?assign {DS_DP,DS_G,DS_F,DS_E,DS_D,DS_C,DS_B,DS_A}=duan; //数码管共阴极
" F( G6 z# m2 N* ?5 b% H9 |- \+ r8 C# ~# I0 d! o! S
always @(Key)
3 k. M( K0 c) A6 S7 Vbegin
. L; Q" L5 C* A; J if(Key==4'b1101)//按下左数第三个按键时,进行复位操作
' {. E+ `; }9 E( l begin
+ U5 Q9 t- j0 k: e% `+ G wei_r<=4'b1111;
4 Q. d" ~" Y! W0 G& m SELE<=2'b00;
$ @, Q" X( Y) c! M end+ j% Z4 h" _4 i2 Z
else if(Key==4'b1110)
) i& p/ p& C3 F3 |/ o- T begin# C9 o% F. _" D4 O0 p; C/ U
SELE<=2'b01;//此时进行加法运算" y: Y6 u# Z w2 E* j/ m, ~
wei_r<=4'b1110;//最右边的数码管亮
; \- G$ ]2 `2 ], z end& N( ]. W6 ^6 X
else if(Key==4'b0111)$ W3 p3 _: f; E/ s
begin/ m' I7 v* `) {2 d+ ^
SELE<=2'b10;//此时进行减法运算+ y- O& R5 W h5 N. D; ]
wei_r<=4'b0111;//最左边的数码管亮: L0 E% b! w) n/ v5 |/ R
end1 `" y5 q# i+ s" [
end0 n2 I& @0 Z8 h4 T
( Q* n+ K" O& Z E: v! E& ?% S5 G( f
adder_sub as(A,B,SELE,SUM,C);//如果为加法运算,那么结果应该为10010,即蜂鸣器会响,并且最右边数码管显示2;+ D! q" w4 D6 W5 E2 X1 y
//如果为减法运算,那么结果应该为00100,即蜂鸣器不会响,并且最左边数码管显示4: s. B: q$ q) s
2 Y9 G7 P. a$ D! ^! Achar_7seg HEX(SUM,duan);//把加减运算的结果显示在对应数码管上
8 T* H, A$ |% N l! t1 |# D* \6 D; v3 l2 w) T
assign wei=wei_r;! y9 e. t2 N4 J4 u; T. ^
assign BP1=(!C);
( F4 L$ }5 f' z7 a/ w {, p' q, u3 K, p* Y
endmodule
+ P0 k7 f7 E4 _. ^) h z* H y- n4 J' o, y5 Z3 E0 d$ C o/ Q; a
6 d" n5 f* L. l+ G: R5 b8 G$ ]( Y% d+ P7 g4 M8 I
//4bit_unsigned_adder" U4 e0 G" k; I- A, G
module adder_sub(A,B,SELE,SUM,C);
0 b5 n+ r) r* q1 S
6 Q5 a6 I" u9 k/ g; J0 ninput [3:0] A,B;
- d' y1 E, W4 F1 q; u* y' W" X7 }input [1:0]SELE; 7 f/ U/ L _& O: ]6 A6 g& v
output reg[3:0] SUM;9 M! @2 s6 m/ U: W6 u$ V
output wire C;
; x$ N- ]3 k% x: z8 c
# J7 P4 i% |1 m# F6 p Kreg [3:0] c; S2 R; Z! e* b+ o" B( K0 ]
; p/ m( t) X. ?: `" oalways @(SELE)- t0 h4 y y S1 B& S% |/ E1 t6 R
begin" G, D, A( \0 e u. I: V- B
if(SELE==2'b01)//进行加法运算
* M% L5 v9 T% r7 W' C. e begin
& K8 L0 S3 e$ U; @& Y" c SUM[0] <= A[0]^B[0]^0;//初始进位为0
0 P: c' Y# r+ `3 Z& K/ G1 ]2 C c[0] <= (A[0] & B[0])|(B[0] & 0)|(A[0] & 0); $ ]/ ]6 K" R, b4 d6 x
SUM[1] <= A[1]^B[1]^c[0]; 8 @, A( M3 S. Y5 F+ I# b
c[1] <= (A[1] & B[1])|(B[1] & c[0])|(A[1] & c[0]);
0 y" w% c# U* @ SUM[2] <= A[2]^B[2]^ c[1]; - ~# a4 Q5 A) {% Q/ G8 y
c[2] <= (A[2] & B[2])|(B[2] & c[1])|(A[2] & c[1]);
6 h7 Z9 n6 x" r7 u4 k6 q5 H) x SUM[3] <= A[3]^B[3]^ c[2]; 1 U$ K. d" k& ], p. J
c[3] <= (A[3] & B[3])|(B[3] & c[2])|(A[3] & c[2]); ! V4 X% Z5 Y' f6 k4 @
end
, A, F+ }/ w2 A8 [ else if(SELE==2'b10)//进行减法运算
- K" ~6 }/ L5 E9 L" e0 B begin* e# ~9 X/ }' I3 w$ o: y3 w
SUM[0] <=((A[0]^B[0])&1)|((~A[0])&(~B[0])&0);//初始借位为0
" \5 z* T7 {, c% l; U c[0] <= (A[0] & (~B[0]))|((~B[0]) & 0)|(A[0] & 0);
1 e& R7 q" {! k3 Q, p' N. O/ } SUM[1] <= ((A[1]^B[1])&(~c[0]))|((~A[1])&(~B[1])&c[0]); # A6 @/ Y3 w0 _' p
c[1] <= (A[1] & (~B[1]))|((~B[1]) & c[0])|(A[0] & c[0]); ' A$ c& `- P) {: D- |9 ~
SUM[2] <= ((A[2]^B[2])&(~c[1]))|((~A[2])&(~B[2])&c[1]); 5 R/ U- t0 K) `* G" h: z
c[2] <= (A[2] & (~B[2]))|((~B[2]) & c[1])|(A[2] & c[1]); 0 `& A0 x/ J; e, {
SUM[3] <= ((A[3]^B[3])&(~c[2]))|((~A[3])&(~B[3])&c[2]); : O- J: z. ^) r% X- `" y2 E
c[3] <= (A[3] & (~B[3]))|((~B[3]) & c[2])|(A[3] & c[2]);
) X2 ?* K: ^" X. ?7 ?( k h% Y end
1 w# |6 c) M; ?4 J O& send
' F( u4 u4 q& r& ?7 {
+ w' _" @3 N" |0 M/ U: T4 t; yassign C=c[3];; K% p: V& [* l" s" `2 ~6 ~% z0 c5 m
; w% ^" M8 \/ d/ c4 \
endmodule4 C# R r) ]0 `7 T! H4 Q
2 f% _8 s! }* e8 o//HEX
4 U* f$ p, [% Kmodule char_7seg(S,HEX);8 t; `3 ~) S/ M4 D, M; P+ Z( f
7 J* D4 _: E; R
input [3:0]S;
! S0 J6 o' G. H' w2 \: Soutput reg [7:0]HEX;$ ]/ F2 W l& A* u: E, ]% c# i8 i8 f
7 h0 i/ H% g- t) J, A
always @(S)
+ w9 ?( f( F* z# D/ w) | D9 \; \/ \1 bbegin
6 p4 R- d: d& c+ b- | case(S): [- J, ^" S7 C6 ^& Q6 d* i
4'b0000: HEX=7'b00111111;
- f) Q/ S" q6 H* x2 ] 4'b0001: HEX=7'b00000110;
# b5 W6 e2 K$ L1 c& E 4'b0010: HEX=7'b01011011;
4 h- ~# d0 g6 ?6 h+ v- M9 K 4'b0011: HEX=7'b01001111;
% a* |- o# \) f5 f$ C3 ? G9 g 4'b0100: HEX=7'b01100110;
& ?- n! x7 N2 v 4'b0101: HEX=7'b01101101;; e" u, b( J) r$ h$ k1 P+ r
4'b0110: HEX=7'b01111101;
& v9 {/ x! k8 |: U; S! L 4'b0111: HEX=7'b00000111;
8 |7 {/ c; ]( }% z 4'b1000: HEX=7'b01111111;5 l' B8 f+ }5 N% e, u- w/ s
4'b1001: HEX=7'b01101111;
. R- N8 |5 C5 b! z 4'b1010: HEX=7'b01110111;
# b( t: T: b% ]& _2 k 4'b1011: HEX=7'b01111100;& M% K4 d* u N# |4 r6 c
4'b1100: HEX=7'b00111001;
0 v2 c& B; k# I( [! F5 v. g R 4'b1101: HEX=7'b01011110;- l! n. J9 D% p9 w7 c7 Y% E6 ^/ B
4'b1110: HEX=7'b01111001;
, ~6 s E _$ x5 M" g( w# p; O9 C 4'b1111: HEX=7'b01110001;
! U2 R0 ?7 x% }+ h8 z2 Z% v default: HEX=7'b00000000;
* K5 V. j: J) E p9 H7 }0 l8 x endcase' v5 u2 q! O/ o& |, t
end% n3 G2 v, e3 V- v! l
1 z* U$ _# x) l" Lendmodule/ X$ z1 S/ ?. m; Q
7 Y/ Z; t& r+ R& [, w* c3、本实验的结果如下:6 R& z# H2 ?9 K" Q
5 R- L- Y) S: u( B0 H) f% `上图对应复位之后的数码管上面的显示结果
_" m2 J9 ?9 S2 F0 o8 U& r $ w* n$ Q/ R l9 F% f
上图对应加法操作的显示结果,并且此时蜂鸣器也在响,说明有进位产生' Y) D5 R2 C7 ^# T
$ ?' a6 f2 x' m8 m$ a2 G* {上图对应减法操作的显示结果,并且此时蜂鸣器不响,说明没有借位的产生
7 |% ~" C+ n2 a1 |+ O |
|