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

转——ZRtech Altera CycloneIV FPGA开发板——4位无符号数的加减运算

[复制链接]

该用户从未签到

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

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

该用户从未签到

2#
发表于 2019-4-26 18:44 | 只看该作者
很棒的资料 谢谢楼主分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-31 18:44 , Processed in 0.109375 second(s), 24 queries , Gzip On.

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

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

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