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

除法器的verilog简单实现

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
引言+ m+ T- \+ c8 t$ X& ?4 ?8 \
两年前,我写过一个简单的除法器,当时由于时间问题,只实现了一个简单的逻辑电路,但是实际中大多都是时序的,所以后面给出了修改意见,但是并没有进行进一步的测试,最近发现那个简单的除法器引起了很多讨论,本小节就做一个终结。: U# S4 S0 s; i
3 z$ \5 y+ E4 n4 q) Q
8 ^5 v7 T" U: k& \4 d$ `
7 \1 n2 v+ ^5 N2 N2 u5 I* N$ X1 B
1,RTL编码
$ ~, U5 l8 C0 W" s* _6 Ua,div_rill.v
' x, @! n, i$ T3 n. Y
- b/ y: M  |3 k- V4 y0 f9 Y" ^0 E4 L  ^- L& c3 c
/*& J7 A7 C! D1 y8 P1 w2 R+ {7 F
* module:div_rill
& ?* s) X# H7 I5 S, I- B* file name:div_rill.v
' J5 b1 ^! m5 Q( ]- |. G- h* syn:yes
/ k5 b7 _3 i0 i, H; N- `! X* author:rill
. t, N2 x7 y% ^6 H  L* date:2014-04-102 n1 r9 z/ z" C# H9 F8 \, E) f: ^
*/+ c7 x" ?& I: v1 ]9 ~

8 I" S7 \% l: P7 l' }, o/ q. Z3 u1 J& i8 E: @3 [& D9 y
module div_rill
* q6 u  L( s& o& V2 r7 s(  `/ w9 g) V* Z' H. @
input clk,
% T7 t3 a! ]/ V) V+ B; k! Z) Dinput rst,4 l& D+ F/ q0 _& F! u0 O0 d
/ b2 ^9 X! V1 ?# z* l4 H
input enable," d+ Z8 q1 f1 n- M$ Y
input [31:0] a,
0 B% T; s: z' U% A# `$ A( h' Z8 Ninput [31:0] b,
" Y4 R0 W  B0 u- E- H* F3 J0 c9 o
output reg [31:0] yshang,% x( O. `# L* [) g/ J/ k% Q
output reg [31:0] yyushu,! w. `# [9 V7 S' y+ t& I" p

+ l; H9 `7 s, B) C8 J* A$ [' Qoutput reg done
1 ~3 M- U# G& b- w$ m+ B);. \# O+ ?1 y( v; a
# ^  v( w$ c' Q  s
reg[31:0] tempa;, J# M5 i9 w1 e5 s$ y4 O  D" @
reg[31:0] tempb;- e2 P1 }' d( k$ p  @" {/ B
reg[63:0] temp_a;  g7 C" K8 n' S: l8 f
reg[63:0] temp_b;
, I9 c) X  I8 Y7 ], @1 U& `5 r
% s2 f* [3 x5 d- a+ Y- g2 Jreg [5:0] status;" B+ l1 L1 _4 F5 d# K" \  p8 y
parameter s_idle =         6'b000000;
; e- M2 c% n" V" R6 v! lparameter s_init =         6'b000001;/ H0 R* t& A8 D
parameter s_calc1 = 6'b000010;% P% x- k& u, i9 q' S
parameter s_calc2 = 6'b000100;) k6 y+ r& \9 V
parameter s_done =         6'b001000;
) Z4 }7 F, W/ T* f) b- w, R
) S( B1 y5 @4 D" h# j+ U$ R2 v4 ~+ x* }0 W* Y6 \
reg [31:0] i;
5 b9 X# p: M; i; \9 h: p8 o  `
3 t- r) O8 J7 o# Z1 l* n$ b$ Y7 aalways @(posedge clk)7 s# Q$ }8 U3 `4 p+ l
begin
* ~2 V7 G: R1 {. ?$ a        if(rst)
" x& `& @3 Y* g4 D, m1 `                begin+ X$ `/ Z7 u$ S- M( ?
                        i <= 32'h0;
0 E; d6 p7 v; p* ?* Z- C6 w                        tempa <= 32'h1;
0 s7 d. o0 @- E                        tempb <= 32'h1;1 ^2 T/ J  h; ?! F$ O* E
                        yshang <= 32'h1;5 q- `# F2 v% e2 b. ?' @/ [0 ^: x* X
                        yyushu <= 32'h1;
1 K" q* J/ ^- f! x! J+ X                        done <= 1'b0;
. n$ v2 U/ R7 S+ f                        status <= s_idle;  p) }/ B, l# n9 s% m- U
                end
! l+ v. e9 I9 ~5 p        else
0 r8 U4 d1 z/ r+ E9 @" V                begin& p4 y$ [1 j6 ^0 q1 P: L7 T5 O* L% [
                        case (status)' s) R; B+ _4 A' C( _( d
                        s_idle:
$ g! [  B* U3 C                                begin
4 x2 H2 G" c( s5 \8 W                                        if(enable)
3 D- \1 M! O2 j( E3 u0 f- ]. L                                                begin
  b+ m, }/ K" e4 F                                                        tempa <= a;( S- j+ q, Q; I! U
                                                        tempb <= b;4 f% K0 n7 T+ x9 r
                                                       
( P0 O' |2 k  y2 Z1 Z4 O                                                        status <= s_init;, W7 s# |7 e. s) i& R
                                                end: j9 y: @: K1 O" r- m, T
                                        else
1 ~, M7 }9 U- ]                                                begin
3 N7 t3 t! G( {# `7 N0 L. w                                                        i <= 32'h0;9 {* d# ~6 H% B) G
                                                        tempa <= 32'h1;
. \6 l1 F& p4 |: C, H9 W, ~; j                                                        tempb <= 32'h1;
5 n) K, Y, {8 R( A; K                                                        yshang <= 32'h1;6 F7 ~0 h2 \( O8 u" ], b4 P* Y
                                                        yyushu <= 32'h1;8 v6 H1 a3 H9 L6 n9 C4 m. `
                                                        done <= 1'b0;7 [2 b4 |- A. M, A: u8 V, H3 k. u% T8 u
                                                       
; O9 y4 e4 K& e3 L6 O9 `                                                        status <= s_idle;* p9 _* E# D! a# M
                                                end
( y9 K9 `$ Y& ]1 C) t                                end. P0 r$ U; V- a# w5 I9 Q# ]
                                * J: w# m' x$ x3 r4 ]9 x3 R
                        s_init:
4 K: b3 J8 z% q* G% {- |                                begin* K2 X& {! ^9 c; w+ a. B
                                        temp_a = {32'h00000000,tempa};* S+ V2 I" s0 s9 w
                                        temp_b = {tempb,32'h00000000};/ E8 ^# @; M1 U
                                        6 i+ ?9 Y3 Q+ O3 y$ ^# D- ?7 |
                                        status <= s_calc1;1 q* v' t0 L# B2 N% x1 O' A
                                end
. P9 _" Y, W# I4 O                                & |, }0 x2 C: u1 _. Y0 I# G
                        s_calc1:7 [. D2 W. v) V0 j, a2 s0 P$ C
                                begin9 T/ W7 P! m- c( A
                                        if(i < 32)3 y$ T* Q+ o' `: a0 l
                                                begin
1 a1 g& K) e# u$ J+ A* A                                                        temp_a = {temp_a[62:0],1'b0};, g3 q2 Y$ `' ~$ D! O
                                                       
' U( X3 q9 D5 R# W; |8 F                                                        status <= s_calc2;8 T8 h3 `- t7 |! R! H" s
                                                end
9 |0 q& z7 @* h                                        else
; H* l1 Q& F( V& S# `( Z                                                begin& z: n$ B4 H; n2 Y5 A8 ~% O; I
                                                        status <= s_done;
1 n: P4 g& ?. u' t0 p                                                end$ g: N0 c+ f7 C4 r: x
                                       
7 O4 {0 ?* Z  H: f                                end
& e& _/ j1 \/ o% o                                , f+ y2 t8 S1 x. _: p' M
                        s_calc2:& C  r5 F  ^( q* {3 z' t! G7 y
                                begin
/ i! F2 E, U# W2 g                                        if(temp_a[63:32] >= tempb)
. r% k5 N: W) \& C                                                begin% ?6 {2 n& U% @! n: k; p
                                                        temp_a = temp_a - temp_b + 1'b1;
  n* p( ]" ?1 ~# C% g                                                end
2 j' ]. `( a3 G& F/ [4 J8 Y, T7 [                                        else
) R! G3 c. H# v1 |                                                begin
) k$ x- i. o; n5 Z0 J. h                                                        temp_a = temp_a;2 X  s9 D- o! g2 h9 F. \; N
                                                end
) [/ d7 L9 F8 U( h; ]                                        i <= i + 1'b1;       
. j7 \, t' F4 k' K7 h, E# H% U                                        status <= s_calc1;
! N! p# {& ^, W' w& Q                                end% ?: ?4 V+ g4 Q; N
                        0 P2 ^$ g: n) ^# _  |
                        s_done:, ~9 g8 S) W( i% r: k# ~0 j8 X3 K
                                begin
" x5 @0 s% C, a' x, T9 R  B4 h                                        yshang <= temp_a[31:0];
: a3 B7 p# M& s4 Q                                        yyushu <= temp_a[63:32];0 X6 ~; A  O- x: w# i/ `
                                        done <= 1'b1;
& k$ p2 X$ N: _  Y                                        / c. D7 [- |! T$ b, u9 k" w
                                        status <= s_idle;
4 i, P( y0 m& P, M# I1 I$ Z                                end
6 R( M( i* v9 \8 r2 v) G9 K: u( ~                        3 m6 D, _& e4 o8 E5 `9 i. K9 M; ^) V
                        default:
- ?4 H" h- @) o4 {9 h                                begin( a/ a1 q+ ]) A, ~% j' H- s2 T8 N% R
                                        status <= s_idle;
: ^+ W. `- R; }                                end8 G4 Q% o4 V8 @2 v- t+ t  \
                        endcase9 }+ z; ?5 f4 l1 k; l$ D2 t1 D
                end
/ f5 q9 b! M! ^# h4 N1 l9 Z4 v& }* H0 R$ a- T
end5 \, C! h1 p- Z' i% M* c# L/ Q

. f$ F' c: O& O5 ^! V& M0 B! @0 ?. \7 H" H! o& ?
endmodule
3 b5 {# s8 B8 Z' p! ?
8 `, a. s7 ?2 g) c6 X& v/ \) O# x( {2 M- R& k9 X
/*************** EOF ******************/
1 F6 p  b2 N; p( }) R& S
3 M. W( f; [$ `8 x* y9 n" m+ V( W' ~; H6 `2 n+ z% g" ]- r. {

# M, B6 |; C; p- M
$ n4 x- ]. b; t0 R% bb,div_rill_tb.v  K7 a% n; F& t/ l/ Q2 k

: m' u% ]- m6 e7 v# m" _% X* B* _) A9 t/ m7 S; l1 V
/*! e6 e3 r$ G: C  z1 C2 L4 @
* module:div_rill_tb  c2 c$ x* M7 f" V& s
* file name:div_rill_tb.v, R( q- R7 [5 o2 W% _2 p
* syn:no; U$ n3 y' y% ^1 z3 L1 b, i
* author:rill
9 U' I1 ], ]! P7 Z: s0 F  U* date:2014-04-10& w$ h8 ?9 z) a
*/
& x' Y, C+ L+ B3 U/ i+ t0 C7 [: [3 z) W, ~$ f3 y

0 T* ]& v9 K7 e! Z0 b`timescale 1ns/1ns8 w5 v. A" T7 C! M4 \: k6 Q
1 N# W- a% j8 C' z5 z9 Y
module div_rill_tb;
. n, K3 b, S3 S! c/ V& b$ r) G$ w& l. O) H- `6 y8 F
reg clk;5 \8 z+ b: `  A7 W" R
reg rst;
% f4 g' I9 t. @reg enable;0 e( t; J/ {: s% c* t$ e/ W7 l

; a" a- p! T; N8 jreg [31:0] a;! ?1 \$ ~, C; R. u) m, Y0 c
reg [31:0] b;
5 ~' ~9 G+ i1 Awire [31:0] yshang;
7 I) d. _' {0 b8 E, K9 Swire [31:0] yyushu;
8 X% z; P6 o% [  r9 H3 }8 m  n9 s1 |! m
wire done;! e" r. w. t6 K/ [* c# A1 _
/ ?/ E' w& ?# u) j9 ~
initial
4 @* {/ _" u, p( k' `' K7 S5 tbegin9 @4 T5 d7 J6 J+ z
        clk = 0;
2 E4 A9 W' o3 S1 e        & w+ R1 ~* M; }- m+ E3 C; o- H
        #10
# j1 X5 m' ~$ i2 e' D* P$ x        rst = 1;, a! x, y5 g$ ^& u1 I- w! Y1 e
        #20& a! Q4 w# {9 t' [
        rst = 0;- `1 B/ S( H! A7 {* k
        ) I" |$ f( K" G
        #150 ?& N2 h2 b( h' f
        enable =1;
9 r( b- p/ p' b9 }" Y: W7 l5 q        a = 2;//$random()%10000;% ^  w7 V  ]) X* R
        b = 7;//$random()%1000;
& w  {$ }; s, |" A        #10* K3 p; e7 p+ G1 i$ b0 G# _) G
        enable =0;5 _3 m0 G( F) e; l$ O+ C
       
4 U3 U" W4 N. S( r        #1000
2 S/ x, n8 ^- J! E        enable =1;4 S6 B' i( ~. Z. {& p* ]
        a = 7;//$random()%1000;
9 M8 j( P( m% G% t1 X8 k        b = 2;//$random()%100;
" u8 ~1 ?- u" M: _' T        #10
9 E+ \8 Z( _2 |" r0 x        enable =0;
: k% |& m, g4 \       
3 r' u: q1 f3 I4 Y! i( v' v( o# \1 I( ~        #1000: u& T9 M" Y  E* h: r" k
        enable =1;
5 |& \% h# E' |. G# ~        a = 7;//$random()%100;
; \/ r& l. ~0 P9 B7 [, x  u7 M) R        b = 7;//$random()%10;        ) D5 E# g7 [' U  P# L2 g" z
        #10! j' r+ j5 C- v- a
        enable =0;. v9 C6 t7 `9 [) O# a$ H. r
       
- k3 y$ K- j0 o! g5 S) Y        #1000 $stop;. o! x+ C5 |  R: B2 y+ Q
end6 m1 N  v* ]3 L- o& K: o1 X8 E$ w

' P1 Q/ y6 B. ?5 j" A+ z0 Walways # 5 clk = ~clk;9 I: L9 I' U% V% K# q$ q
' m& }7 f. C$ F. ~: H5 w
div_rill DIV_RILL* W" T9 q/ A. N: Q
(
4 Z' c" ]8 a1 E0 q.clk (clk),
- t5 n# [/ @* q8 o.rst (rst),
, s0 d8 @* x- O: H/ j! j
) K" M- z9 n% I* U8 o.enable (enable),
% [6 j0 J; P# p4 `7 W* L.a (a),
- B2 \. F! {; }) g  ~$ {1 V; j+ X4 k.b (b),( j7 u* [1 W! k8 k- `$ l$ G

6 D$ }8 R  @! K. U7 f1 j, S: r.yshang (yshang),
- z& V, m; C4 g+ Z.yyushu (yyushu),' J% c" I4 o, B) r3 \- j) B* \5 E
* _( Q1 W" s2 \8 l
.done (done)( i1 W) r8 f& x2 R) W8 w7 I, d
);
. W+ p  s, ~; k1 [% c* n8 R, `+ T
endmodule- G1 M& i1 z8 l2 X% s/ s1 [5 B
/******** EOF ******************/8 {/ p3 {0 h" {: ^
+ k# x. b" ?$ t9 I
* F2 E2 G( f4 @
2 q6 l) M/ K% F9 V( _/ T, A+ a
  h! l! n: W; r' Q- b
2,,验证结果# l$ P: u0 g! v' |/ T
- B! T: H" T; A6 {

; V0 M+ J( `, r9 s0 L& P9 O! J  n3 {9 w( Q+ x9 ^" F

9 @3 B/ e1 j+ L) J7 [  U4 g) O. W" R$ i! P; V2 D) S1 Q

" ^4 g1 B9 R& y' g" c2 |* X8 S2 M1 H! m8 A: z4 I
9 y! k5 u' S9 U) [

该用户从未签到

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 20:04 , Processed in 0.187500 second(s), 26 queries , Gzip On.

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

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

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