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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

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

- u8 Q) D; z, D- K
! e/ J! Q0 h- p: o9 e- @) x1、同样新建工程
! @. R% x' W! F8 L+ S6 k5 U3 x# i( R/ l6 v- Q5 D: k
2、本实验要实现的功能是进行4位无符号数的加减运算,板子上电之后进行复位操作,
+ t$ {/ c( D/ F8 p' P* u, e      当最右边的按键按下时,进行加法操作,如果最高位有进位的话,那么蜂鸣器就会响,否则蜂鸣器不响,当然本实验中加法操作的进位为1,所以蜂鸣器会响,同时加法操作的和会在最右边的数码管上面显示;! w5 L7 M3 ^: s" x! ^" w
      当最左边的按键按下时,会进行减法操作,如果最高位有借位的话,那么蜂鸣器就会响,否则蜂鸣器不响,当然本实验中减法操作的借位为0,所以蜂鸣器不会响,同时减法操作的差会在最左边的数码管上面显示;
' C5 L  B$ ?/ X9 q- b# Y      本实验的代码如下:! C2 N: A. H  q
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);/ T  [) y) W& D1 p2 G  J$ N( o6 A

  _! }! A0 ^2 R$ B/ z% Finput clk;
9 G+ k- d9 ^: L' cinput Key4,Key3,Key2,Key1;
9 e5 A! s6 o4 \4 joutput wire DS_EN4,DS_EN3,DS_EN2,DS_EN1;
% y5 R! `  {( {; D; s, qoutput wire DS_A,DS_B,DS_C,DS_D,DS_E,DS_F,DS_G,DS_DP;
" _2 W& F, P! P5 ~. t+ poutput wire BP1;6 o9 T4 ^0 G0 Z( @3 D$ r

; p3 ]1 r' J, Q1 ewire [3:0]Key;% I5 z) h0 V( L' u
wire [3:0]wei;. x9 b: A6 R8 i
wire [7:0]duan;
) P* {- Q8 R! c1 Ereg [3:0]wei_r;
$ v, M% `/ t9 x/ z3 y0 K+ |reg [7:0]duan_r;1 a( F0 m; I4 ~; i
reg [1:0]SELE;
5 b2 @& l8 ?1 Nwire [3:0]SUM;
- z4 L6 O' e# S, A" {wire C;4 U3 g, [/ _& f9 i' B9 f9 e  r( @* h
4 A' w- {! d7 P# ^  b; K# C
parameter   B=4'b1011,
) R- l, a" @! e( W3 W5 Z    A=4'b0111;5 k7 J0 s1 O1 f( r% X; K8 ^, ~
1 j7 D% j5 S8 Y3 E6 s6 h. r* l1 N
assign Key={Key4,Key1,Key2,Key3};
9 s# |3 W- O$ H; a) _' g" _assign {DS_EN1,DS_EN2,DS_EN3,DS_EN4}=wei;//低电平选中对应数码管
- w: K/ K: Z8 m; @( xassign {DS_DP,DS_G,DS_F,DS_E,DS_D,DS_C,DS_B,DS_A}=duan; //数码管共阴极
1 b. r6 v* A( m6 w6 f% r
# z, i1 ^; e. \, u" ~4 yalways @(Key)
* b7 a0 s9 y  c( S3 s( ]begin
, }5 O: d  w3 `$ A0 Y  if(Key==4'b1101)//按下左数第三个按键时,进行复位操作  o4 `1 s4 t. ~$ w2 @
   begin
) N, _- p8 B2 |. _3 h    wei_r<=4'b1111;% [1 e" t6 U$ `" J0 o  V
    SELE<=2'b00;
/ J/ P, `& L( i6 y   end
6 _, ^- P/ }  h, q6 F  else if(Key==4'b1110)7 x5 ^# _  @9 G$ z8 D. _
   begin/ |' A# F8 H' x% W
    SELE<=2'b01;//此时进行加法运算) P4 x+ N6 ^& U, e. N0 p+ W9 T
    wei_r<=4'b1110;//最右边的数码管亮, d6 k6 Y0 ~4 \4 [
   end
6 o$ a8 O! N' g. B, T, b  else if(Key==4'b0111)0 `. h& M0 k' q/ ^4 X' m/ p
   begin( @) \+ O+ J2 R/ V# K+ x
    SELE<=2'b10;//此时进行减法运算
! a: _8 Z; i; p( ?! N' f! M    wei_r<=4'b0111;//最左边的数码管亮
( D& J3 f& u  b8 Q   end
- d! M  A, V9 b" y1 ~9 @& W0 c0 b- Oend0 N3 p1 v7 I% K  ?" V7 u4 O1 P& y
! M: T( Z$ `$ B& X6 i
adder_sub as(A,B,SELE,SUM,C);//如果为加法运算,那么结果应该为10010,即蜂鸣器会响,并且最右边数码管显示2;
* t8 F6 y( V) C& P7 p           //如果为减法运算,那么结果应该为00100,即蜂鸣器不会响,并且最左边数码管显示40 [: m' l; [3 U) V

) B8 K) T9 n- [char_7seg HEX(SUM,duan);//把加减运算的结果显示在对应数码管上
4 @$ V5 A* q- ^# O, b6 t) G3 K
+ C9 ~- R: ^* B" K# `8 e' Passign wei=wei_r;
0 @+ i8 s6 I0 R- ~# lassign BP1=(!C);
9 M# j7 y2 s; l. H; z6 E7 i, M
1 u+ }1 A+ o- U/ ~endmodule6 T2 O7 J6 Q! I$ K/ T: T# S2 w& d

% W; n& M9 Z- C% l; I: j* H) M
) f# M/ Y5 b' o# F
# d5 ~" q- N4 j5 o* S/ Q//4bit_unsigned_adder
3 V: h: w# K) x% [6 W: \( jmodule adder_sub(A,B,SELE,SUM,C);
3 M% N3 U/ M1 m3 I4 \9 G
! v. }1 @5 f) L& oinput [3:0] A,B;, _! {' i/ D5 F/ z
input [1:0]SELE;
, A9 g9 l1 @1 ?  {; o- t5 ]6 poutput reg[3:0] SUM;- K8 b3 J- h; y7 Y$ Z. ~
output wire C; 0 L2 g* ~0 S4 M$ ?+ y: ^# ~' @: {
2 P3 X3 S2 g4 \9 T) j. u
reg [3:0] c; # I9 g4 J+ P8 Z1 r- g6 Q! d& v" t. f
" I$ J6 U; m) q% P
always @(SELE)
5 {% @2 V/ Q8 S: i  vbegin
' P1 E6 H0 ]8 D8 y+ P( O" t3 V# O  if(SELE==2'b01)//进行加法运算
& c+ m) j# x0 C, d( r8 n   begin1 s" _! [; i& P" p7 h: B) n3 @
    SUM[0] <= A[0]^B[0]^0;//初始进位为0
. W) o0 _% D, Q( R% z    c[0] <= (A[0] & B[0])|(B[0] & 0)|(A[0] & 0); . P$ d+ ^3 f5 B8 A/ p- Y! {
    SUM[1] <= A[1]^B[1]^c[0];   ~: E3 Q4 \% u) E* E+ A) \9 ^" l& G
    c[1] <= (A[1] & B[1])|(B[1] & c[0])|(A[1] & c[0]);
* H4 J5 l9 a$ U  ?. c1 D    SUM[2] <= A[2]^B[2]^ c[1]; . U! N7 J( e" T: b
    c[2] <= (A[2] & B[2])|(B[2] & c[1])|(A[2] & c[1]);
+ a+ x. ~$ e, O0 a, Z* P7 \    SUM[3] <= A[3]^B[3]^ c[2]; * g$ \3 f( S) r8 {" b/ {: J" a8 [
    c[3] <= (A[3] & B[3])|(B[3] & c[2])|(A[3] & c[2]); 1 e4 u, q7 T3 s$ J; h
   end( r8 F1 _! s/ {3 I8 ?) j! V
  else if(SELE==2'b10)//进行减法运算9 ?. i* Q* \* m; u5 G8 X
   begin  \$ ~* `, J# ~. I4 J5 u
    SUM[0] <=((A[0]^B[0])&1)|((~A[0])&(~B[0])&0);//初始借位为0
2 ?% n* \% y) Z    c[0] <= (A[0] & (~B[0]))|((~B[0]) & 0)|(A[0] & 0);
* u# |) v  g: D! [& n    SUM[1] <= ((A[1]^B[1])&(~c[0]))|((~A[1])&(~B[1])&c[0]);
4 K4 e# G/ i( Q4 C- g4 J& }    c[1] <= (A[1] & (~B[1]))|((~B[1]) & c[0])|(A[0] & c[0]); " x7 J3 x4 K4 t4 I6 y0 U+ R
    SUM[2] <= ((A[2]^B[2])&(~c[1]))|((~A[2])&(~B[2])&c[1]);
) b2 ~( Y5 _9 L" E. m- W    c[2] <= (A[2] & (~B[2]))|((~B[2]) & c[1])|(A[2] & c[1]);
0 A& i$ q4 Q+ f, L    SUM[3] <= ((A[3]^B[3])&(~c[2]))|((~A[3])&(~B[3])&c[2]);
. h: d3 W% v5 k5 j    c[3] <= (A[3] & (~B[3]))|((~B[3]) & c[2])|(A[3] & c[2]);  " Y& b% s3 Y5 ^. E1 F# }
   end
4 l8 w2 K0 {. S* p' `2 f+ rend( |) g- b- s8 @! j+ x

; G- @4 v; a3 ^' h6 gassign C=c[3];/ D* i* m, O- Y$ y
( G0 v0 B; ^7 D& Y  k4 f% @
endmodule" q% Y. `. _6 M$ Q, i/ _% K

( i5 z4 K# _8 V& A* ~//HEX1 _. \: L8 V! i5 i8 D. a9 U
module char_7seg(S,HEX);5 v# B7 i( E) W1 B

5 U: B( [& P2 g9 S7 c, g, o; N5 rinput [3:0]S; & ]3 d8 K  X9 e' f/ {
output reg [7:0]HEX;. Z& M) L8 ?3 x! D

5 Z$ t! J. j" [" s+ yalways @(S)$ N! H" T: R. c3 K
begin
- Z3 E/ m" V- e  case(S)
- Q/ C9 U5 A9 t1 K( V) t8 C   4'b0000: HEX=7'b00111111;$ M" ?0 J1 x( x8 z  ?' `
   4'b0001: HEX=7'b00000110;4 _: n& d1 n" _- |- h8 S# L. g
   4'b0010: HEX=7'b01011011;
  h# O  G; g# [   4'b0011: HEX=7'b01001111;
% ^! \' q1 j5 }( b4 V- w   4'b0100: HEX=7'b01100110;
7 U) m! x8 T! h) o! E9 r   4'b0101: HEX=7'b01101101;3 G* w% h9 n& s
   4'b0110: HEX=7'b01111101;
* o+ L& H0 Y( u   4'b0111: HEX=7'b00000111;
& Y$ f$ Y5 [: B7 Z- P# v: N7 S   4'b1000: HEX=7'b01111111;
; i. c) V7 J! _5 E   4'b1001: HEX=7'b01101111;
/ {( ?1 o, u2 S% I   4'b1010: HEX=7'b01110111;
7 [0 Z" F5 D! R0 c   4'b1011: HEX=7'b01111100;
( I; P! Z* x& A   4'b1100: HEX=7'b00111001;: D4 [' u* H; ]3 V2 j2 _0 [7 k$ G
   4'b1101: HEX=7'b01011110;
# K' {4 l4 k1 d( A: m- t4 y- L   4'b1110: HEX=7'b01111001;# i4 _  }  B8 O) N  `7 T0 o" A
   4'b1111: HEX=7'b01110001;% Y1 Y( c7 @/ r, T9 Q+ n4 f
   default: HEX=7'b00000000;
$ ~& i6 X/ ?; s8 o  endcase5 n  v7 {- X! i, @9 d
end( h3 r: _4 P* h0 Y& z7 w/ [4 F5 |8 Y5 C

+ z! p+ ?: J0 j0 P2 V/ h/ ?# I- {+ jendmodule
* V* j( y& R7 a( ?  L6 c8 v% W& G: Y+ P+ g
3、本实验的结果如下:
! B8 O2 e+ }* Z3 x& N * {$ q% e( t; I% z. {
上图对应复位之后的数码管上面的显示结果
4 \5 I: Y, Q% a" x, @- @3 o4 g, ]
# Y! W$ F, _+ t; j! p上图对应加法操作的显示结果,并且此时蜂鸣器也在响,说明有进位产生0 V4 _3 R7 R9 Y( ^% K( V$ s
( S, g/ Z" d6 U- ~, C. y
上图对应减法操作的显示结果,并且此时蜂鸣器不响,说明没有借位的产生
- x: ]5 h2 g- ^" V$ q

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-9 05:34 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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