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

除法器的verilog简单实现

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-6-5 15:20 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
引言' [; f) w+ T3 c& E
两年前,我写过一个简单的除法器,当时由于时间问题,只实现了一个简单的逻辑电路,但是实际中大多都是时序的,所以后面给出了修改意见,但是并没有进行进一步的测试,最近发现那个简单的除法器引起了很多讨论,本小节就做一个终结。6 f' a& [+ A" `# \: F' L7 A

3 R' k4 @" o' n- N, W& C  c$ l6 A& k/ j/ t

& Y# Y, t- i* m4 o2 x8 b1,RTL编码
( ^5 T% j) t5 Q9 t6 M# ?" @9 Oa,div_rill.v
! x8 D% {( D; }4 |7 u% Q, J6 V( V/ H

3 @1 C1 y: \* S/ X/*
3 J+ D$ x! E% R" r( f1 Y  Y" t* module:div_rill# X1 I3 U" o! c/ D4 D/ [
* file name:div_rill.v
* g% g7 ~  [- ?3 d; o6 W6 e! B* syn:yes
( @: Q8 Z( {4 _$ u5 }0 J6 Y* author:rill! `2 @$ T! b& r' M% m) ~% c2 C, f! D
* date:2014-04-10
: K4 m4 s* R5 [0 _8 W*/" f& u1 E% f( m

7 O9 k6 k5 f: T5 ^8 O2 X( c$ d$ E( m$ w
module div_rill
& X; y, x2 O! [  m: A(" z0 @4 ]4 b/ Z% t8 w
input clk,
0 o  s1 ?7 k1 g2 z- minput rst,
! c; T' N1 Z* c3 Y4 h% p4 z: `
# P! d) e2 X$ Tinput enable,! j4 _6 `$ c4 p8 d8 X* }
input [31:0] a,
. X7 ]' D$ N9 M* Tinput [31:0] b,& U! W. y" ^: G+ w* ?
6 Y3 M- P/ @/ U/ ~: ]
output reg [31:0] yshang,
) D- A; S* x1 poutput reg [31:0] yyushu,
3 q8 S8 Q( X% l' R0 S: t7 L
$ r+ ^$ ^; p5 y0 |4 Q) o) L! t4 Xoutput reg done0 N/ p1 I$ n  j, T9 F3 y
);" x# |) Y& _5 A! ~. w; Q5 u

5 v) \4 `6 ~) Z1 T' dreg[31:0] tempa;: z$ U- E' ~: T0 j" W: g
reg[31:0] tempb;2 I6 u8 m1 V! _: n/ L* f2 V
reg[63:0] temp_a;
# a& Q, _( z* j0 l9 y* Dreg[63:0] temp_b;
+ k1 c' Q. a3 v% G' Y
1 h; y& [. p' }2 S; ^: [( \6 E5 treg [5:0] status;
# H" y3 v; Z" R6 d) I; h# Oparameter s_idle =         6'b000000;! I* j2 O. n- ?
parameter s_init =         6'b000001;
; _+ f6 Z9 i. y. z8 Sparameter s_calc1 = 6'b000010;7 t  x& W# x" X. H
parameter s_calc2 = 6'b000100;+ e" a! O; ]: f
parameter s_done =         6'b001000;, v# g: {2 Q3 L$ O/ _( G
9 \3 L- i" Q* V% D% h4 [; J  n' H4 J

# V0 Y+ c7 b6 R: f: \% ]. v4 Oreg [31:0] i;; l1 b" m3 ~" Q* m+ Q; E4 g

9 v& q6 y' B) T% V  M5 v+ Malways @(posedge clk)* p* U" E# h% w7 P
begin+ f) S( E2 u2 y7 A4 r' }) A4 w) E
        if(rst)4 q) q- W2 z. F$ M$ U6 b' m; B5 A
                begin) n' f7 E% N2 f5 R/ A1 O
                        i <= 32'h0;( H7 W: o7 e0 S+ D
                        tempa <= 32'h1;8 O+ d  L9 T2 b* \7 h3 Z; h1 ^
                        tempb <= 32'h1;; a: r7 O. ^# {% p7 q! l3 ^0 O
                        yshang <= 32'h1;
* ]1 W) E4 f* b8 t( c0 t# y                        yyushu <= 32'h1;: K# k, u/ h& v" D% p4 _  E& b
                        done <= 1'b0;, w5 W: A  W+ }
                        status <= s_idle;& N) _. @* R& Z" g5 ]. v# C! W
                end
( Y" r: H9 E( S$ M# M! v  T        else
, t/ Q7 s5 p, y) H5 c3 I8 Q7 z                begin$ k2 k9 s' p3 P/ C8 f( z! @* g" E2 W
                        case (status)
" V% e1 |# H. Z9 ^' W                        s_idle:" O$ K+ F1 C5 m, X8 L8 Z2 E
                                begin9 D2 w. j, `& K8 D+ t, z3 I
                                        if(enable)
5 x, T* t! [+ }" O% j- \+ N' ?                                                begin
0 t# Y0 H9 D' R5 r                                                        tempa <= a;
) N$ d. i) ]+ R7 H3 u                                                        tempb <= b;
7 f: [: N9 O8 \$ g# c: P* E  K                                                       
5 T( q! n3 Y. B% P) w+ Y4 t8 z! X                                                        status <= s_init;' F$ m/ Z  S% m- A) d2 o' _4 q$ E
                                                end
/ J7 c; a$ U! ~" G: h5 z  l- D                                        else
+ d1 L; y4 F* c                                                begin" v: ?4 v" T1 [9 E. ^$ p; Z
                                                        i <= 32'h0;' e: d4 ?0 @2 q$ b* w
                                                        tempa <= 32'h1;
7 C+ y  Q  E4 ~# J* d                                                        tempb <= 32'h1;  A, a# J  T- n- U
                                                        yshang <= 32'h1;
8 ]6 h' _" a0 a7 K$ a" V                                                        yyushu <= 32'h1;
# [/ L! F) Z6 M% J: Y                                                        done <= 1'b0;9 B6 F! T* [: L% R" u* _
                                                        9 g  T, v) l  C0 q( X) \' H' v0 ]
                                                        status <= s_idle;
1 j/ K( v, N0 I- ]                                                end9 \# I6 a; F& f) |
                                end& L4 \) \% p, ^* I% i, [% `: R
                               
6 r, g6 d. e5 R4 W4 i1 \                        s_init:. a1 I# w8 `) X0 X% w# M
                                begin+ _9 J) ~+ W' y9 D9 R
                                        temp_a = {32'h00000000,tempa};, r6 x4 {9 H1 ^4 H/ B
                                        temp_b = {tempb,32'h00000000};
; X. `  V1 o# M! `' C' j: R                                        9 F4 ]0 ^& _& |4 X
                                        status <= s_calc1;
8 r) G7 w0 z* [$ p- q$ Z                                end# L4 t; \' N5 k" s( j
                               
4 Y; b/ _" \1 t) Z6 _- `: `5 V2 [                        s_calc1:
) {4 y5 x$ r4 y# H8 X9 m$ L* x                                begin1 N. t; E8 d  l. x) [+ ?
                                        if(i < 32)2 C, M. ?# l  [7 W3 _: }
                                                begin
; m$ T; t& U" b. L                                                        temp_a = {temp_a[62:0],1'b0};% h' ?, T2 h7 S, P
                                                        8 ?) T9 f# L& ]. C) W
                                                        status <= s_calc2;0 ^) r7 T7 ~8 @) W( J5 U
                                                end& E' p; J4 K# y% b8 j# I$ W8 Y
                                        else. w# b- x: }( _9 b
                                                begin
& |5 B' q! |& N                                                        status <= s_done;
' q& `: |$ m' g3 a( p# f3 F                                                end* n2 `) t0 d4 Z( W2 e& Q
                                       
# R$ T7 X0 H" t/ W                                end% j0 [- B  r2 |* w, ^- q
                                  Q* Q) [+ T' E% H
                        s_calc2:
" h5 Q/ ?5 M& T                                begin
' J. c  j  p7 ~, q5 z                                        if(temp_a[63:32] >= tempb)
# R% W" o8 K0 n- b) d                                                begin
/ B  F. E) q8 S2 z0 o/ |                                                        temp_a = temp_a - temp_b + 1'b1;
: `+ ~% r: ~1 g                                                end, b" n- Y6 t: h
                                        else
0 q! u( h. d" @: H6 Z5 e                                                begin
0 j, j, Q, m) k3 |; n- |$ x                                                        temp_a = temp_a;
" R$ Y4 D( u$ F5 `( Y! }8 C! h2 Y                                                end
9 h8 Y# n/ u" d0 w& W* f                                        i <= i + 1'b1;          t  q, D% l* X; n$ R  Q8 |
                                        status <= s_calc1;
3 R, ]& Y* X0 n: S) H                                end
# o2 r' n9 v, q; J$ K5 J                        * \  D( Y; U: q5 _$ @( g8 K( c
                        s_done:1 ]) }3 v( N6 n8 G3 K2 G: A
                                begin
/ I7 q# k$ l4 v+ B+ ^% T' |1 }                                        yshang <= temp_a[31:0];* q8 a- v: Y3 R3 R6 B0 l9 ?% W" l
                                        yyushu <= temp_a[63:32];$ G( j* B6 W: C7 z
                                        done <= 1'b1;
) B5 C! |% _4 w7 S* r                                       
% H: |  }. @2 v! g4 q- S                                        status <= s_idle;  n, |6 v7 X* ?. }5 e& w: ^  ]
                                end" p  a- }, C  c0 `- }; L- Z: ^+ y
                        & P) c- {- ~# O2 A
                        default:' g: s. |, W" p1 [6 }" `  J
                                begin
" P* ~2 w5 e& N" e1 n7 D                                        status <= s_idle;# {, O) \* C3 G2 h* m& g& I
                                end& |" W% w/ Q: Q8 W
                        endcase
$ Q; _- r8 Q6 i- q3 L                end2 k* @( m' k: M2 h5 c$ o7 V
) l2 @( r2 L3 b6 p
end1 H+ ]0 a. A" [% B
8 y0 ~/ r/ y- [) U2 l; C
% n# Q# b5 S& `9 Y
endmodule
* p1 ^2 B+ B, r  M  L
  g2 U5 }, U3 {: q/ v3 o* Y  w) i
) t2 J. d/ ?; X+ D* g/*************** EOF ******************/6 o7 @# A6 G9 ?3 c/ L5 d9 B" r

7 N# f9 y$ r. t
4 J/ _/ Y7 R8 l
7 }( k) E+ F% N) P+ ]! O2 S& T; @( B
+ p) t4 q' {+ b$ r- _b,div_rill_tb.v
# n% R- M# E, B5 A5 F; l1 M
: v- n0 `: ^% ~6 q' ~# Y
# m( t, I% @$ h' F) F; Z- U' f& ~/*
4 w1 }, J% E* Q+ b) K% B* module:div_rill_tb
: d& `) a3 Z; K5 J/ e( b( m* file name:div_rill_tb.v
0 K2 k1 J0 r$ k/ ^4 c* syn:no% K8 R( ^: c9 V; i3 f2 p
* author:rill
- g; _: F$ A( A& D2 V5 F4 s: a) b3 s: H/ x* date:2014-04-10! I( I6 E" F1 A# t+ ?2 o, k
*/* U6 T2 T3 o0 @9 I% d! A

* l" i. M0 s; z4 G, c& J0 A& i
% P! ^3 _1 U0 a2 C4 D( @: u0 {`timescale 1ns/1ns
' n, r  v4 k0 G; C# B0 }& s: J: w, v$ Y7 o$ o6 k
module div_rill_tb;
# U1 x) D& ]0 ^5 x- n, ^" ^$ n" V* A+ \* m
reg clk;
8 w( W% u8 L* f: E# t  a* z  {5 u1 greg rst;
( f3 t+ d  ~& R* m- jreg enable;$ u- K( L6 d. k! J  V5 I
" i! x$ \4 \7 e0 \: i% A
reg [31:0] a;4 X6 s' Q" F5 M: ?
reg [31:0] b;
$ Q' n: j& E! b6 Ewire [31:0] yshang;
' K3 N* @! w- Z  b+ N4 _( rwire [31:0] yyushu;: D( f% u+ ~" M1 @! w" ~  ~

3 \/ k* |1 Q# F! E/ P3 Nwire done;6 u6 d: d% F3 ~5 j
" ?8 c5 \: w" W
initial0 U+ N4 u1 ]1 {) Z
begin
2 t. g! p: ]- i* F/ S5 h        clk = 0;
9 B5 I, G( E* Z  E: Z" J  k        2 k- A4 t/ v/ q% b
        #10! v# U$ Q4 l1 _: v# U0 T
        rst = 1;
% ~  E0 a0 z. `' r! s        #20" n  U, v: C2 X; y0 v
        rst = 0;
4 f  a* H  _) |9 e! ?       
" m' r: Y6 O) Y$ j) j4 F) V        #15
- q3 c: z' w) v5 X        enable =1;8 N, Y1 b/ f5 C
        a = 2;//$random()%10000;
9 {+ G% [+ {0 t        b = 7;//$random()%1000;# W6 k+ E! [2 `# z: M  ^
        #10- }, Q" \& R, b
        enable =0;
% q0 n) u6 K- M       
% Q( n( k0 z4 S# J# I        #1000: l0 O; u6 }! y& q( c3 l  ^
        enable =1;% X2 W& {# p4 \/ Y
        a = 7;//$random()%1000;$ @9 W! J" x4 l8 N9 @: V. s1 W
        b = 2;//$random()%100;
$ s' i$ l! _4 @1 M        #10" f9 u/ \9 \! u8 U+ n
        enable =0;% d/ S8 v, t/ m" L6 B2 b/ K, V) x
        ) D9 q5 y1 `  F( F, B
        #1000& a' |+ [* i0 U3 `! n3 H" ~
        enable =1;. W) }# C) X( ?4 d$ |1 L
        a = 7;//$random()%100;
$ t# p! p8 Q) T. L        b = 7;//$random()%10;        . L6 M7 X) y% ^3 m' W/ {- T; \
        #10
" y9 b$ h# D/ u) C        enable =0;
5 Y8 a/ O1 A9 Y% t       
! z! \( ^0 V6 p0 p# s        #1000 $stop;
/ q' K# q1 _1 A3 ~) ~, zend
1 w) N/ V% \6 ?; B1 |" \/ X! H0 m3 a* k6 u" O2 {1 u, c
always # 5 clk = ~clk;
5 x+ [5 Y, _5 M8 {. U' r, f
" u! }) m$ _* J/ D( jdiv_rill DIV_RILL/ M+ d$ I& r) U5 }0 m8 j/ G
(" C( p6 S& w9 w: K) i0 B' @) {
.clk (clk),9 B. z; i0 O* \* r- [6 K% C
.rst (rst),2 A/ n+ i0 m8 K" X2 `  }

8 x) W$ f2 @, u, J.enable (enable),
8 C* @7 M0 l2 i0 e6 q.a (a), 5 s5 a8 o! h/ G' [+ c  h+ f
.b (b),
2 H, A2 \; n( [  [' C
" ?; }2 B; z& J% b6 E8 s8 e2 p.yshang (yshang),
4 n0 X$ ]" _" |% X.yyushu (yyushu),
  p1 c# O0 ~5 m$ `% `1 ]) s
7 t9 B1 N8 e4 O0 \! z/ Q- e.done (done)
1 g) {' C4 b9 y" d  T6 s6 @);
+ q7 P: f9 K+ c: b! a
5 _! L% H! c& ^endmodule
& t1 d- q9 c7 V0 S4 D/******** EOF ******************/$ z! C  Q0 {8 \' l# H
1 C3 D0 b* P3 q. K

0 e' `2 ?8 b/ m1 d
* T% O. j/ P! a' i3 r' ^/ J! ]' U7 p: G1 O' x) p% n- B
2,,验证结果, H: ^* `  f/ O  d
* v" X  F" g, a7 c. Y

$ C7 g4 q6 v9 T) G7 d; r
9 q9 P- u, r/ v0 g: W! T+ Q! G0 H% h7 l  K0 t) E

) d4 L# T) X1 I7 [- ~- ^* y
* J! N1 W6 T8 I6 D" N3 b* {+ l- v; z8 n

+ ?  {& u/ @) |1 Q+ G. l  K

该用户从未签到

2#
发表于 2020-6-5 16:22 | 只看该作者
除法器的verilog简单实现

该用户从未签到

3#
发表于 2020-6-8 17:03 | 只看该作者
除法器的verilog简单实现
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-25 17:54 , Processed in 0.187500 second(s), 26 queries , Gzip On.

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

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

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