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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

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

3 \, y: v* g$ t/ K4 r8 g* F) V- c3 \; O% d: y; h
1、同样新建工程
6 L2 I' p9 l. j" p0 f, E. a& F+ y- m+ V" w7 r
2、本实验要实现的功能是进行4位无符号数的加减运算,板子上电之后进行复位操作,
" h+ h8 ~  A& F# p5 {      当最右边的按键按下时,进行加法操作,如果最高位有进位的话,那么蜂鸣器就会响,否则蜂鸣器不响,当然本实验中加法操作的进位为1,所以蜂鸣器会响,同时加法操作的和会在最右边的数码管上面显示;; i+ t7 C7 h# J/ i- j: m, }
      当最左边的按键按下时,会进行减法操作,如果最高位有借位的话,那么蜂鸣器就会响,否则蜂鸣器不响,当然本实验中减法操作的借位为0,所以蜂鸣器不会响,同时减法操作的差会在最左边的数码管上面显示;3 ~  C4 L0 p% I, z+ Y
      本实验的代码如下:& V- L, U3 c2 J' ?) e5 C& O
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);
' ~0 j2 q( t1 D$ k
0 y2 H9 t( o0 winput clk;
" T9 R( p/ B4 ~  P1 Ginput Key4,Key3,Key2,Key1;: X; x( M" p' g
output wire DS_EN4,DS_EN3,DS_EN2,DS_EN1;
) g3 u- I, l3 N+ D( joutput wire DS_A,DS_B,DS_C,DS_D,DS_E,DS_F,DS_G,DS_DP;  }% f4 s! ]. |% l  @: A5 Q, W
output wire BP1;
8 m9 d: M6 N8 p9 e9 H/ Q* R- N
+ ^: m$ O( O# f: owire [3:0]Key;8 Q- H. b, N5 }! i$ |+ J
wire [3:0]wei;
& i# y/ Z* o  Y% N5 z2 O, [wire [7:0]duan;
$ L$ ]+ K7 Q* ~. lreg [3:0]wei_r;
$ X, r7 [8 `& V+ N* j! m+ E1 Oreg [7:0]duan_r;9 p: @# g( n5 x1 R, y
reg [1:0]SELE;
/ N( H- c$ h- a4 u, k* |/ hwire [3:0]SUM;
3 r4 c5 P4 U% I! G) jwire C;1 N0 d: |' Y( t* a, R" y

$ t/ T  v9 [5 M6 @1 K$ k( Wparameter   B=4'b1011," V' X5 H0 _" w3 q3 N& v
    A=4'b0111;6 e: v2 o6 n# x6 }: o# S8 V
; M9 I* s2 A9 a2 E
assign Key={Key4,Key1,Key2,Key3};
6 G+ \- k% y. D3 N6 Uassign {DS_EN1,DS_EN2,DS_EN3,DS_EN4}=wei;//低电平选中对应数码管2 u1 M# g  d. X
assign {DS_DP,DS_G,DS_F,DS_E,DS_D,DS_C,DS_B,DS_A}=duan; //数码管共阴极
4 i8 ~0 K' |1 I/ ]; a! _8 X% r! G2 }! Z/ C
always @(Key)0 g7 G% \4 Y& E$ C7 K# X
begin1 i8 c+ g2 W! Y+ y$ C1 o0 j. M
  if(Key==4'b1101)//按下左数第三个按键时,进行复位操作
# C1 m% o3 f8 G1 u9 i   begin7 M  q; z' ^3 T6 z& v) Z
    wei_r<=4'b1111;
; U; P* h% u. y6 @* [    SELE<=2'b00;! m& V6 G# S9 d
   end
: ^$ Y6 a: t3 N- b3 h0 t  else if(Key==4'b1110)
+ N+ r% e4 H9 ^9 N   begin/ m- h9 l2 n5 \4 s; Y' \% R
    SELE<=2'b01;//此时进行加法运算
& f. S7 N5 P# l& n    wei_r<=4'b1110;//最右边的数码管亮$ j4 o' s% P8 w* [3 W; Y' X
   end
) \6 ?7 ~0 y; o! v% f( n& y2 n, X  else if(Key==4'b0111); n& X) U  u2 R! u! z- V
   begin% x3 F% u1 J: m. R) k
    SELE<=2'b10;//此时进行减法运算. ]7 u5 e" [+ v; F7 i, V
    wei_r<=4'b0111;//最左边的数码管亮
; D9 Z  E4 p% G   end
0 S+ H' e4 y! h; v* ?end
( `: p' `+ x0 Z
8 n7 M4 W% w5 J8 T# m& @' [& {adder_sub as(A,B,SELE,SUM,C);//如果为加法运算,那么结果应该为10010,即蜂鸣器会响,并且最右边数码管显示2;
! @/ U/ u4 H/ u4 B8 `, O  j1 _4 A           //如果为减法运算,那么结果应该为00100,即蜂鸣器不会响,并且最左边数码管显示4. u( ^7 ^" D. D0 E  ^  l: D

9 [/ v, s" a+ J6 Z% \0 C+ H5 u+ Tchar_7seg HEX(SUM,duan);//把加减运算的结果显示在对应数码管上
- P0 K+ ?5 Y, l7 ^/ d" f  K4 T5 ]0 m1 y" h- i; N" _  h
assign wei=wei_r;2 S$ c( H# J- B7 P% j8 s8 p
assign BP1=(!C);, N7 m) V; p3 d% i
+ x3 m: W3 b* `9 b' }/ S
endmodule
) @3 m3 m+ x9 v% K' y2 ?/ i6 J+ o% o3 q8 D+ r  P4 C

; E' Z/ Z# J0 ^4 M4 f; ~
9 T5 s0 b8 B# O//4bit_unsigned_adder
+ ^& i. e, ~" l0 T6 K4 [2 o- @; @9 x5 Umodule adder_sub(A,B,SELE,SUM,C);
* u0 m, h2 Y& u* m; ]
. u* G0 z' I6 Y( [: \& _  Qinput [3:0] A,B;+ m6 P) v. J* U
input [1:0]SELE;
5 |$ d3 o) F% m- e2 b+ joutput reg[3:0] SUM;
& f' n6 Q6 D2 g2 U- Xoutput wire C; : A' f* @3 D8 L( A' K
5 V6 P, U7 c0 N( k
reg [3:0] c; ( O. T5 B4 e9 f; y4 j8 L

' R+ s( I  T5 r* C2 C" Jalways @(SELE)
! n/ ?) P9 b3 @# i5 Wbegin! P: G& _/ `7 t- e
  if(SELE==2'b01)//进行加法运算; w7 M- F- C5 u: ^; x
   begin
9 Q( j6 G' f+ \& _/ y2 r6 Z    SUM[0] <= A[0]^B[0]^0;//初始进位为0 ( E- F. n1 A( W7 _: @# o
    c[0] <= (A[0] & B[0])|(B[0] & 0)|(A[0] & 0);
- g$ ~  b) a/ R    SUM[1] <= A[1]^B[1]^c[0]; ( m. P6 J0 V. u( N
    c[1] <= (A[1] & B[1])|(B[1] & c[0])|(A[1] & c[0]);
5 r- I+ ?1 h: z& Z( f$ |2 _! y    SUM[2] <= A[2]^B[2]^ c[1];
5 K5 E" a% i3 i" N5 m& a4 f6 D    c[2] <= (A[2] & B[2])|(B[2] & c[1])|(A[2] & c[1]);0 Y- t9 B) {4 s& m
    SUM[3] <= A[3]^B[3]^ c[2];
6 r* r2 G5 @* K8 Q2 j9 g) L    c[3] <= (A[3] & B[3])|(B[3] & c[2])|(A[3] & c[2]); 9 S. O& J# `; P6 U# A, s& |6 `& I
   end1 W8 Q, Q- [$ ], L2 R3 y
  else if(SELE==2'b10)//进行减法运算
8 k8 n/ ~+ }+ B2 W   begin/ Y1 Q2 {4 ~8 \( r$ Q9 ^: G
    SUM[0] <=((A[0]^B[0])&1)|((~A[0])&(~B[0])&0);//初始借位为0
5 ~9 K- b& }1 D/ {( V    c[0] <= (A[0] & (~B[0]))|((~B[0]) & 0)|(A[0] & 0);
' q( M* U: R0 m/ z    SUM[1] <= ((A[1]^B[1])&(~c[0]))|((~A[1])&(~B[1])&c[0]); 4 |  G4 h2 D5 u7 G$ e* T
    c[1] <= (A[1] & (~B[1]))|((~B[1]) & c[0])|(A[0] & c[0]);
8 _5 w+ ]8 j- W8 ?; [8 i( \0 f  g    SUM[2] <= ((A[2]^B[2])&(~c[1]))|((~A[2])&(~B[2])&c[1]); + k- |2 b7 U- U" V; \7 W/ K
    c[2] <= (A[2] & (~B[2]))|((~B[2]) & c[1])|(A[2] & c[1]); 0 ~0 ?+ T- ^9 I- A
    SUM[3] <= ((A[3]^B[3])&(~c[2]))|((~A[3])&(~B[3])&c[2]);
) Q. s0 W. x8 @, y; K    c[3] <= (A[3] & (~B[3]))|((~B[3]) & c[2])|(A[3] & c[2]);  ; x1 Y, F# F5 q/ z, e
   end
9 h% i1 _( x7 V$ x# S6 i  yend8 b/ w- [1 D: X- S& d# W8 [
0 g5 ~9 r  z( I( M2 U
assign C=c[3];
7 f+ I; L4 G6 n1 Y' ]/ D: H, b5 ]' [! r
& z; }9 e6 U+ T2 Q" h8 Nendmodule
0 [9 @" n. o* Z
4 L% r! Q7 N; ^( N//HEX) z4 m! k+ ~! f3 J4 o$ J& s
module char_7seg(S,HEX);0 ^$ A4 R' U0 p! w9 d( k& E

# @3 i8 A. J# W- U  Binput [3:0]S; 6 N1 j9 R3 F$ I1 |2 S; [, q' f7 i
output reg [7:0]HEX;6 j5 m! |' \# E0 O6 Y
4 K$ X' O2 Y, Y4 S
always @(S)
7 v3 c$ ?; f- @/ E9 obegin
) r- j4 `- [# n5 u. ]7 g# L% b8 O  case(S)% M- t- I5 q2 e8 W* p/ g9 e
   4'b0000: HEX=7'b00111111;  D. o3 f  a: Z* k
   4'b0001: HEX=7'b00000110;
, U( N2 I% J% s% j- Z5 A   4'b0010: HEX=7'b01011011;% i; o1 d5 a+ ]7 s' H: T
   4'b0011: HEX=7'b01001111;/ z. P, N1 t6 g5 z8 E
   4'b0100: HEX=7'b01100110;2 z1 d2 C( l+ o2 D0 Q2 {1 p
   4'b0101: HEX=7'b01101101;% [/ [0 C% q* J* q
   4'b0110: HEX=7'b01111101;  C5 v. S* G/ L+ A" W: t* c
   4'b0111: HEX=7'b00000111;' t+ S8 u# y# k- l
   4'b1000: HEX=7'b01111111;" A& J* a& g3 @! a" K& l9 L! t
   4'b1001: HEX=7'b01101111;* E! F* i$ f* }8 Y
   4'b1010: HEX=7'b01110111;/ U' x+ y3 z1 m& y& o/ y$ `
   4'b1011: HEX=7'b01111100;
# J. k% l1 V, P: K. B   4'b1100: HEX=7'b00111001;' p. d0 a8 m) l+ o$ \# ?
   4'b1101: HEX=7'b01011110;
. t0 Y1 \% v* |8 S( h   4'b1110: HEX=7'b01111001;. @" _& K, W7 X- o
   4'b1111: HEX=7'b01110001;6 n2 H7 {" i2 G
   default: HEX=7'b00000000;& P6 A0 r8 Q, K' `; k
  endcase
0 t- N# j/ R; ?$ B- tend
' v) z- }$ c, O
0 L+ q5 G5 D2 Iendmodule
! }8 f- B9 @9 ~( z% `' Y4 K" D2 q. {$ L* E% ?
3、本实验的结果如下:2 r3 m: e' Y) T: w" V" t& E

+ l8 Y; i& s, M4 ~0 M9 X; `7 m上图对应复位之后的数码管上面的显示结果
: A  V. z' \# V* B: w 2 i# |$ W" z: F3 p; S
上图对应加法操作的显示结果,并且此时蜂鸣器也在响,说明有进位产生
7 h  p* ^1 W. |" Z4 J- v- l* H6 A- D 2 q: |! T  y3 P- `3 o/ |+ \
上图对应减法操作的显示结果,并且此时蜂鸣器不响,说明没有借位的产生" f/ E5 k" ?  M+ C; m' T# o

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-2 19:29 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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