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

转——ZRtech Altera CycloneIV FPGA开发板——4位数的乘法运算

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
转——ZRtech Altera CycloneIV FPGA开发板——4位数的乘法运算
# _; [6 `. C3 Y; Q2 P7 G
1、新建工程
: G& Z2 _% R4 l# v7 t" H' S" i& z8 A
2、本实验实现的功能是:4位数的乘法运算,对于运算结果,成绩的低四位数显示在左数第四个数码管上,高四位显示在左数第三个数码管上。由于本实验中两个乘数分别为1011和0111,所以乘积就为:01001101,所以左数第四个数码管上显示d,左数第三个数码管上显示4,由于数码管段选的复用,所以数码管以1s的间隔交替显示。乘法器如下:该图中,对乘法器中的各个加法器进行了编号处理。% D; @' y( r# P
" }5 u6 N* |* b2 i
程序如下:
' g! ^0 N) `: z  Z4 Z7 q4 V1 hmodule multiplication(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);
& n$ I. Q8 ]6 B& W; h. e
% f2 x% b( V& ~input clk;
3 F2 T: F4 {5 c+ u4 \6 S# i9 kinput Key4,Key3,Key2,Key1;
2 A( Y; i9 N9 i% q; w- M# `6 Moutput wire DS_EN4,DS_EN3,DS_EN2,DS_EN1;
7 i' v7 G0 ]$ X0 V8 j. b9 c# zoutput wire DS_A,DS_B,DS_C,DS_D,DS_E,DS_F,DS_G,DS_DP;
% a) M0 r& ~2 e+ T
2 [3 ^$ e0 S8 T8 Uwire [3:0]Key;1 [, w- H. q8 s' t8 b2 m- h
wire [3:0]wei;2 J; \# h& [0 L3 ~: g
wire [7:0]duan;7 A+ g/ h# \* Q  w9 q2 O
reg [3:0]wei_r;$ \1 P  X4 c! S) j
reg [7:0]duan_r;
# g; B! B" R# ~& g& @  Hwire Cout1,Cout2,Cout3,Cout4,Cout5,Cout6,Cout7,Cout8,Cout9,Cout10,Cout11,Cout12;//图中各加法器的进位6 C: n* R, Z* M$ U5 Y; b8 y6 @! o( {
wire Sout1,Sout2,Sout3,Sout4,Sout5,Sout6,Sout7,Sout8,Sout9,Sout10,Sout11,Sout12;//图中各加法器的和" \' G! }5 a" P% U3 P& Y
wire [7:0]P;
# e  e8 x# ~1 \- swire clk_1k,clk_1s;
+ A; _( ]( o/ p7 z. p
! a# ^6 x- X$ ?9 }* x% Cparameter   B=4'b1011,
9 D" G0 ]9 g$ B# d; l$ }$ u# p    A=4'b0111;
' V) Z+ r6 q/ c3 e" ?! l
3 w" V: C- b& C9 bassign Key={Key4,Key1,Key2,Key3};
$ L; c3 w' s# e2 [2 E5 Dassign {DS_EN1,DS_EN2,DS_EN3,DS_EN4}=wei;//低电平选中对应数码管
4 d4 w; w" A4 M* D9 a; M6 Wassign {DS_DP,DS_G,DS_F,DS_E,DS_D,DS_C,DS_B,DS_A}=duan; //数码管共阴极
; b) y: p- ^8 X3 W8 h7 e" z8 p2 y
fp_k fp_1k(clk,clk_1k);8 j3 |0 o$ E3 t# p8 P
fp_s fp_1s(clk_1k,clk_1s);- @$ W# Q: h" Y; V; M
, R7 w$ z: @, A5 b( e; H. C2 Y  Z; @
//乘法器) z' ]. P* c) S9 r5 P! B
assign P[0]=A[0]&B[0]; //P0  d8 B& \) L1 B. y# \
adder_1bit add1(0,(A[1]&B[0]),(A[0]&B[1]),P[1],Cout1); //P1
2 ]! I* C# I$ F. I, ?adder_1bit add2(Cout1,(A[2]&B[0]),(A[1]&B[1]),Sout2,Cout2); //P22 M$ h: J/ o9 [( e$ s7 M
adder_1bit add3(0,Sout2,(A[0]&B[2]),P[2],Cout3); //P2
7 q$ G' r+ L' g( q( N8 nadder_1bit add4(Cout2,(A[3]&B[0]),(A[2]&B[1]),Sout4,Cout4); //P38 S; q" u- J) D/ i$ l1 {7 o1 C3 {
adder_1bit add5(Cout3,Sout4,(A[1]&B[2]),Sout5,Cout5); //P3
# \  l# V% F1 f+ \  v  A' Aadder_1bit add6(0,Sout5,(A[0]&B[3]),P[3],Cout6); //P3+ R4 B; L2 X! ^! W7 _
adder_1bit add7(Cout4,Cin,(A[3]&B[1]),Sout7,Cout7); //P4
8 c; Z' L1 h9 r% X, ^adder_1bit add8(Cout5,Sout7,(A[2]&B[2]),Sout8,Cout8); //P4$ ^' w' x  T& o9 X6 x$ x
adder_1bit add9(Cout6,Sout8,(A[1]&B[3]),P[4],Cout9); //P4
) V- F' s$ K( ^/ a* k5 ]& tadder_1bit add10(Cout8,Cout7,(A[3]&B[2]),Sout10,Cout10); //P5
' G. t( w2 \+ E* E5 iadder_1bit add11(Cout9,Sout10,(A[2]&B[3]),P[5],Cout11); //P5
5 c6 i4 v, S# Iadder_1bit add12(Cout11,Cout10,(A[3]&B[3]),P[6],Cout12); //P6
" {2 T1 B; {4 z! j7 N9 iassign P[7]=Cout12; //P7
& ^8 g6 ~+ ]9 C6 L1 R' {+ W" x8 ^# j3 V- w
initial
$ q( S( G" x4 W, ibegin
0 b2 v- j! j$ r$ N# d4 c0 d( J* F  //Key<=4'b1111;9 E' X* r. Z3 D* d. F1 C) h
  wei_r<=4'b1111;' y4 Q. C8 _' I4 E+ D
end
1 }/ |9 L7 M# H& b0 o* S
- z: a( ^* D& o* x7 {$ oalways @(posedge clk_1s)3 y# S7 h: f; @( r
begin& l+ Y1 t% z1 M5 N: i: H: x$ a
  //if(Key==4'b1110)//按下最右边的那个个按键时,进行复位操作8 [1 t- z; o1 L! M2 }
   //begin
! b' D( n1 f: E! M    //wei_r<=4'b1111;3 V- I2 H$ V: M6 \( Y( r
   //end* j! B1 k# E: R2 D( y9 ]
  if(wei_r==4'b1111)9 v* g) Y" i9 z; u& F% H! e# Y
   begin' _; D1 L% E% Z* o& H6 D! t( B8 c
    wei_r<=4'b1110; //左数第四个数码管亮- q5 d; g/ N6 a# g
   end  z6 T$ M! Q$ i5 L% x& f
  else if(wei_r==4'b1110)
5 \$ E2 h( D8 a* N! Y! b   begin# V2 T; C. d# s5 n1 G4 M
    wei_r<=4'b1101; //左数第三个数码管亮) }1 T% x7 g3 ~3 {( S
   end/ S) _4 T7 i; J/ [7 \' k
  else if(wei_r==4'b1101)# P; T8 Y3 p1 }- P0 t
   begin
: {$ g: L3 t5 S" J    wei_r<=4'b1110; //左数第四个数码管亮& S, z9 H3 l$ A; M' Z
   end; b$ h- b( w  b* m) q$ {
end, A& t8 L0 e- z/ g7 Y( b+ L( r

9 b6 J/ ~8 o4 J. xalways @(clk_1k)
5 q1 L7 n* X( {( d5 i) ?; `begin! Q; q' [  A, q3 _  X' o4 P1 a+ g
  if(wei_r==4'b1110) //左数第四个数码管亮,并且显示乘积数的低四位  e: Q# a# a  _' k: F
   begin8 o2 l# [, P! Q) ]2 H; H
   case(P[3:0])  w- D5 x' a0 n, O
    4'b0000: duan_r=7'b00111111;& ~' i2 D9 p# }! J( h7 r
    4'b0001: duan_r=7'b00000110;/ H- ?4 L- S9 u% H7 a( _8 Y, D$ }
    4'b0010: duan_r=7'b01011011;
5 _: {+ M, e2 Z0 f/ R! u- k9 }4 X    4'b0011: duan_r=7'b01001111;) i8 q; S% ]5 X/ I! d5 z9 ~% M) N
    4'b0100: duan_r=7'b01100110;
/ S% O" ^4 t! ]5 }. X1 c    4'b0101: duan_r=7'b01101101;
( e" N( w( k& T7 N$ w    4'b0110: duan_r=7'b01111101;
" f' c6 G# t% s' Y# l    4'b0111: duan_r=7'b00000111;2 i# {' i9 B: c# a
    4'b1000: duan_r=7'b01111111;
' p/ _" \( N' X. n& P2 Q; Q    4'b1001: duan_r=7'b01101111;) h0 }7 x/ [. L" y) a
    4'b1010: duan_r=7'b01110111;
# z9 f% i" a3 v' H. C    4'b1011: duan_r=7'b01111100;( |2 B" n( x  Z
    4'b1100: duan_r=7'b00111001;
3 z( Z2 Y; E4 S8 T/ [6 E" q' t- o7 F, F    4'b1101: duan_r=7'b01011110;
6 w0 U# T# L; t, X, F" s! c% J    4'b1110: duan_r=7'b01111001;
% [9 ^& Y# c% |+ ]- ^( }: I    4'b1111: duan_r=7'b01110001;
5 a9 b% B' e) H6 \    default: duan_r=7'b00000000;& f' A" Y9 A; t/ k; P; k: G: F% [
   endcase
. A! n+ G$ s3 F   end9 K7 p9 c  M4 _) }# H# ?* M& n- G' c
  else if(wei_r==4'b1101) //左数第三个数码管亮,并且显示乘积数的高四位
0 q/ ]; [- w4 \$ e   begin
# [4 m: ]! _; Q4 v" }   case(P[7:4])& U/ o! D7 D; u- [; Q( s
    4'b0000: duan_r=7'b00111111;
# I4 _8 c7 Z- m5 J, E0 r& f    4'b0001: duan_r=7'b00000110;
, g2 y% i9 u1 I9 A, [    4'b0010: duan_r=7'b01011011;
  L2 ~1 ^. K8 }    4'b0011: duan_r=7'b01001111;. r* k0 o- P1 B' S# v
    4'b0100: duan_r=7'b01100110;+ A. X: c% A7 B1 E! d
    4'b0101: duan_r=7'b01101101;
+ j/ k5 v, A6 q    4'b0110: duan_r=7'b01111101;
# e1 V( e# s; E! @  s+ n. D1 v8 g    4'b0111: duan_r=7'b00000111;
; z2 v4 {  B1 r2 @4 b    4'b1000: duan_r=7'b01111111;5 Q& C: I8 h" _, Y4 `) l
    4'b1001: duan_r=7'b01101111;
8 K, F7 }) Z- Y5 j    4'b1010: duan_r=7'b01110111;8 f  [% i  A! A8 L! t
    4'b1011: duan_r=7'b01111100;
7 s5 o# o# p! t6 u    4'b1100: duan_r=7'b00111001;
0 [2 v* h& J: J% H" ~    4'b1101: duan_r=7'b01011110;
! S, j& P( P1 i: w' e! R( _    4'b1110: duan_r=7'b01111001;
* u( ^& V8 c8 S2 f* ?    4'b1111: duan_r=7'b01110001;
; `+ B, @: `4 W. o6 O8 v    default: duan_r=7'b00000000;
6 e: n. H% Q9 [   endcase
  j9 Y% e1 C2 B- W, b- i4 u1 l   end
2 f9 ~: P! H/ C5 \- vend
# I1 a7 p# Z+ Z+ K& u  w9 v9 x+ c) t* t8 h4 j0 o
assign wei=wei_r;
* {# ^: \2 Z+ G/ ?7 }9 x; i. Eassign duan=duan_r;! j$ y4 s3 M% F5 h! n
endmodule
; R% B6 w: X5 |) W
) V$ ]  h) g$ ?2 s, q4 o& B//分频48M-----1k/ w2 R3 g4 f% S  p% x! v
module fp_k(clk,clk_1k);
0 }% Z( L, l0 ?8 i/ w& Y0 y( u, Dinput clk;
2 O% ~% U" |7 M( routput reg clk_1k;( [. X: }6 {7 w- J: m& W
reg [31:0]cout;' ]  p. \) S# ?( t0 t$ l7 t
//reg clk_en;
7 r5 Y: ]  t+ Z- {  }8 u: ainitial
) t- L, s0 P- A  z8 kbegin8 y; k8 ?$ [( `6 h
  cout<=32'd0;( W' @. ~1 ~3 ?$ s' H7 y  f
  clk_1k<=1'd0;  Q( o: V& G: m) B
end% A  r, Y7 ^8 k
always @(posedge clk); }+ ~7 i4 k: @
begin. |2 ~3 G8 V" x* j) j& H$ b. q% |
  if(cout==32'd24000)* o3 z6 U& b6 R3 S
   begin
( ^0 _/ T7 h6 l. _    cout<=32'd0;
6 s9 H' D1 X9 T8 A5 m8 M    clk_1k<=~clk_1k;
0 y  @! W& @& Z' F; }0 U$ I1 M   end& n) T7 g4 N5 X! }
  else7 b9 C9 a. l- I& @
   begin
- E8 i8 c7 A8 Y! {0 {$ N9 V    cout<=cout+1;
& t! K/ B7 \6 d  k- O* d5 U: V   end) G6 R2 P* \+ |& \) {: O$ _
  //clk_1s<=clk_en;
, }$ P; N( a$ P  Y7 T' [- mend4 s8 \, j( w( d" D. |  \  N! X/ g9 q9 _
/ j% C  S( |7 D" ^5 Q7 v
endmodule
, t3 Z' N% g% P2 Y$ S4 ?3 q, U//分频1k-----1s& u" P/ o1 s7 S! ]' a2 p% t% ?( w" G
module fp_s(clk_1k,clk_1s);
, g+ h. c! N( p- I8 D+ s! Finput clk_1k;' o. f3 C4 s  R$ P" n
output reg clk_1s;% E& n7 D8 n2 x) g" [( y7 h0 z- I
reg [10:0]cout;
& V; M# U7 R  x) j//reg clk_en;
% m9 U6 B; y8 q! Ninitial
, \! ~, y8 k! \# o8 jbegin/ O8 F- B7 V- U8 v
  cout<=10'd0;1 Z" O, Q+ l4 Y2 i4 t: Z* v9 S
  clk_1s<=1'd0;  D, C3 P, p: i. S& ~, t
end
6 m5 O+ q( v2 I' M% _) Oalways @(posedge clk_1k)
( Q. ]0 Y( x6 T( x7 \begin
% l3 t* M0 p) u' s& ~  if(cout==10'd500)
# V1 M0 a% S) S- K   begin# T3 I0 \3 p0 q! K+ {
    cout<=10'd0;9 m) J7 p4 C# A
    clk_1s<=~clk_1s;  ^; @& Q. r4 D) X- C/ {8 }  E
   end2 a4 |$ d! c) k5 I; x
  else5 K1 n8 ?3 I/ a3 I
   begin
; G$ z, n+ W( {. `& `+ c/ H1 H3 [" {6 K    cout<=cout+1; # ~8 M+ N1 {$ Z/ f
   end' E3 p# D3 Q. z6 b# l$ ?
  //clk_1s<=clk_en;5 d/ a/ K1 V! v! b$ C& A1 Q
end  W0 _6 [/ b4 r
' e+ ^; F  a, \0 V3 T5 x
endmodule
: a6 J  k/ f# b* \9 J6 ?4 e
8 L7 N0 J, T7 E) R6 G; F//1bit_adder- L4 l& X) G/ j* H
module adder_1bit(Cin,A,B,S,Cout);/ A/ ?) d, T, l/ B
input Cin;; J- h" ^' E! ~
input A,B;' [3 `# l9 {# L6 }
output S;1 a' j9 L' a% O3 w3 G0 C: X5 ~) x/ k
output Cout;
- p$ \2 ?9 G2 ~4 u" Y* wassign S=A^B^Cin;
/ l8 l/ C! C' e5 w' Hassign Cout=(A&B)|(A&Cin)|(Cin&B);1 i8 F& j, ^8 j9 G$ G& P
endmodule2 }: G) j' m3 {2 r9 s2 w+ }

% \; s. O, f- M$ W4 Y" ?0 }! u3、实验结果7 ~! g2 e9 B9 X' q1 @" o; s5 Y/ c
$ K1 X. B3 _4 a+ n) m2 `+ {
乘积的低四位
3 M9 g7 W. c5 G, k5 V* L# H; }- k ' b' F) A, I) i) q9 w
乘积的高四位
' q; N2 \) K' ~: F% c7 W9 S
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-9 07:40 , Processed in 0.171875 second(s), 23 queries , Gzip On.

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

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

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