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

除法器的verilog简单实现

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
引言3 d, l8 @* K8 m) m! Z$ g
两年前,我写过一个简单的除法器,当时由于时间问题,只实现了一个简单的逻辑电路,但是实际中大多都是时序的,所以后面给出了修改意见,但是并没有进行进一步的测试,最近发现那个简单的除法器引起了很多讨论,本小节就做一个终结。
# C- }" C$ }! {& a0 M/ H0 T6 w& a
% K' O- j) d) X* W. d- i

" e! g/ |3 Q7 V6 Z; \# y1,RTL编码- v9 |: Y- ]5 e5 R2 ~$ i7 Z
a,div_rill.v0 R/ P$ B" H& e& p0 v/ T7 j

! f7 ~! n! g! s" \! o1 m- u7 I
# q. H/ n$ |6 Q% Y3 _2 M2 S/*( b* }; ]9 K5 J" M0 U. D
* module:div_rill
& B* w& c  r$ v; h% o" e* file name:div_rill.v
& c2 b% U* h* e( e( c7 `* syn:yes
% e! i# i* _/ W) E* author:rill0 r0 b  r! G  N4 O! ?- q' y# l1 }
* date:2014-04-10
* [  S4 u/ s. P, F5 q; _*/4 }& |' ]/ @8 x# `5 a

- F7 e% ^  h" m" H9 w+ a. c+ u) D; [3 t6 ~0 i0 {. a  h
module div_rill( ?" h5 ?' s5 K" f- r& w
(/ y9 v" Y1 l4 b2 D5 m
input clk,
! W. m( @. {$ z: Einput rst,
. d  c- @# L7 g. u& A9 p% j1 i8 A- p; w$ l* Z9 @
input enable,+ ]0 g* [0 K9 ]) x3 M  C) P
input [31:0] a, 2 b- {1 g% f3 l- N$ y! A8 n
input [31:0] b,. ?, u6 Q/ d6 Q/ m- L

2 u& S/ U6 M' y% g3 Woutput reg [31:0] yshang,/ Q5 J4 C- B5 ]
output reg [31:0] yyushu,
3 ]4 ^8 D% D  A8 [8 O1 f' U! f7 o  S' w' f
output reg done
8 |9 T5 @8 V* q1 V' x1 m);
3 [7 `. ]9 P5 f! N' V. f( T/ K- Z( }# h; x" z
reg[31:0] tempa;) g1 |6 N- v! V( ?4 P
reg[31:0] tempb;% N0 k. a. }, G- L
reg[63:0] temp_a;
  h- U2 `9 b; X" S6 |reg[63:0] temp_b;7 A! {: F/ H% A! P* p% u

3 H% ~. {6 b0 q2 ]6 M% Hreg [5:0] status;+ G1 Z& O; d- I( B/ e" Q" S0 i
parameter s_idle =         6'b000000;
7 k! o. B' V( _6 `parameter s_init =         6'b000001;5 I- ~# X9 d+ @9 w& G
parameter s_calc1 = 6'b000010;# n3 l3 V0 F9 i1 G1 |" r5 B
parameter s_calc2 = 6'b000100;$ l6 ^: c% y' o" W4 g
parameter s_done =         6'b001000;
6 O1 m" P4 _2 m4 p& M( E5 c2 j* Z
! n2 j5 \' u! L6 ]7 D: A5 @9 l) j8 M' `/ h! H
reg [31:0] i;
8 R. y- q/ s8 t/ W
7 Z0 ]( m! N( C& P, w$ |always @(posedge clk)* D0 a& f; ~- f( ~
begin% T, O& y9 v9 H" ^6 _' x; z. }* _
        if(rst)
: ~: P3 K: f* T+ p  B0 K                begin4 A' n1 J. e: u" D$ r
                        i <= 32'h0;. D% u1 |; e( ?* z! H1 R$ \+ r
                        tempa <= 32'h1;) E! A7 H* D) G5 _" r
                        tempb <= 32'h1;
1 n3 h% a& u  b9 z2 j  a. I                        yshang <= 32'h1;
, M% F' ?+ k# \4 D) M                        yyushu <= 32'h1;  S7 a: m9 v: u
                        done <= 1'b0;
: A) t: w) r; x6 j0 T. b+ Y                        status <= s_idle;: C- C$ |1 S1 j1 B0 O+ _8 [7 N
                end, M1 X' Z3 I5 a
        else
7 X( _* i, ]9 `( t' y" D, {8 e. Q                begin
: Z4 n9 N5 q& Q$ l& \0 _                        case (status)
; U! @: A! J! i# C                        s_idle:9 }( U8 h) j+ p+ g' p, J
                                begin
  Q+ ]2 x9 q2 c5 M  O3 Q" m* X                                        if(enable)
! C% r9 \  V# w9 ?3 W/ q# [1 _                                                begin
+ i+ u2 x4 m: u                                                        tempa <= a;
3 L2 _5 T# t1 b6 a( r/ C                                                        tempb <= b;7 `& C! r, k1 b# m7 k1 ~0 M
                                                        ! t" {' ~# W% o* O) ~* t9 K
                                                        status <= s_init;* w2 N+ c0 e# ~
                                                end( c( E9 d& z7 Y% o9 Z3 X- V8 f
                                        else
% Q. d- L* U" @  Q0 d, ~0 i4 z                                                begin
2 X' Z: R- f- B. n+ i$ Q                                                        i <= 32'h0;
5 k5 Q) i* j( G$ ?+ P2 r# H                                                        tempa <= 32'h1;$ B; v) a  B9 S
                                                        tempb <= 32'h1;& V4 f  Z- z) z& w5 Z* t6 m
                                                        yshang <= 32'h1;
. w+ f+ H5 }* f7 _( y% u( r                                                        yyushu <= 32'h1;" k9 I, \6 z; r' m2 n3 Y
                                                        done <= 1'b0;8 K8 q# _5 r: E! |7 @1 h& o
                                                        5 ~4 |8 m$ q( r* s& _
                                                        status <= s_idle;$ S$ ]( F* {' Q, K8 `9 z
                                                end
3 Y- z7 k% I) P* Y$ o' v                                end
+ r6 ^8 k8 o9 Y, w                                0 R9 ^$ |/ }9 G6 L( u& C
                        s_init:
1 {3 _4 d( V& [1 b1 y/ ?7 {) Z                                begin; i- y; a* p! k, Y. `4 E* P
                                        temp_a = {32'h00000000,tempa};
# l0 u  _6 K- {7 \                                        temp_b = {tempb,32'h00000000};* @# W1 _7 W9 j
                                        " P) Q; A7 q3 }8 D7 P; H
                                        status <= s_calc1;
! p8 d5 A: n% U  s( d. z5 `. E3 M                                end
% o) W8 Q8 s* G                               
; {& L& I! Q+ b4 b% J                        s_calc1:
# ]* N# v4 a( ?0 X) [6 b$ T                                begin, T7 o8 L- ]; g" D; U
                                        if(i < 32)5 ]+ Y! ~8 `& {, A1 k7 c
                                                begin. `! ?) V+ ~: ^! _% C1 F
                                                        temp_a = {temp_a[62:0],1'b0};7 X  N+ S2 E3 [$ I) N, l
                                                       
3 Q1 _" x8 G0 j/ B# S4 }. b/ ^                                                        status <= s_calc2;! ^: s) S3 Q' W* X
                                                end; F2 e3 @% N9 b5 c& R2 t
                                        else
8 G# J' B5 j( l2 x2 X# ~                                                begin
6 N* ?7 P( W7 G5 L  W8 j                                                        status <= s_done;
6 u+ P) U0 R8 S% L6 Y. R8 C2 k" U) ?                                                end
. D2 p/ T+ N' L" {) o5 p3 C                                       
# P% m3 L/ k9 D/ I' L- B                                end: C: l" s+ C6 F% |- k, w. d3 d3 n
                               
+ n" {. I' a9 f# q7 J- [                        s_calc2:
2 v1 k! z1 ~. R* {" O) w1 I                                begin$ ^! T& `: u* y  U* I) K7 c% r
                                        if(temp_a[63:32] >= tempb)  C7 N- l! J. @% u) f" N+ d
                                                begin( m" ]0 w4 I7 M8 N  p4 I! q  M
                                                        temp_a = temp_a - temp_b + 1'b1;
7 r- m  {- R' e8 f, _# E                                                end
. w1 q; P) {' A) _4 ?2 c                                        else( {2 {* E( A* }4 _5 |
                                                begin
" `  A; k, v: {                                                        temp_a = temp_a;
, V; \& ^6 a3 \9 ]# _- }                                                end, ~, l7 ^8 r7 K7 t0 u  U
                                        i <= i + 1'b1;       
9 U8 X* H0 z  y                                        status <= s_calc1;
: @, P& s/ v0 U5 ^) v                                end
, {+ {) {3 ?% D) R8 o' \5 x8 o% p                       
2 L7 k; s9 B' J( |+ B                        s_done:/ E& ~7 {( O- X& u1 j3 U2 w
                                begin
& }; o1 _: @4 [5 \" _1 Y: G                                        yshang <= temp_a[31:0];
; m" j2 o7 k7 W5 `; G$ v                                        yyushu <= temp_a[63:32];
7 H5 I2 Q- N' Y. w. j* e7 S                                        done <= 1'b1;
6 I. \' b, g9 A4 k4 I                                        ! o" ~5 |0 Y# O& n
                                        status <= s_idle;9 P% W% V7 h7 B! b
                                end
/ {" s0 `. H2 n' h& V                       
& J. J  H& S  f3 [# J/ ]0 O                        default:, j& ~2 i# I6 r( t- W
                                begin* n! b' d8 d. u8 `- Z0 S+ R
                                        status <= s_idle;( F* z+ T3 z: k/ W
                                end
( y! c6 a! x% s6 \# b0 P7 B: j                        endcase
" f4 U! }; v1 x                end2 {3 k: f( f  [/ [+ h4 N0 {
$ k/ u( L& `7 e
end
/ ^1 Q8 Q3 {  d$ ]5 M
- v4 ^- q9 y9 B2 B: x0 J# x
9 _3 o9 G& i/ o  |: k$ X" A+ |endmodule9 G/ P' W! t9 \  ~2 j

! N/ B9 N: z2 l9 c' o$ g; G8 v( g
$ c3 s* M( e; x# F2 Y0 A  _) s/*************** EOF ******************/
4 b6 z3 o3 ]  M" D( X
" L' U0 ?. j- |- R* L+ _! J" Q$ P+ T$ b6 W7 h. [) ^

+ z% \) I  i6 y* b  [, L1 p9 q3 h% k. }3 c* A# r
b,div_rill_tb.v
, M* ^( k% a) j% q8 j7 Z* d" \8 x8 c! `& y/ e: v

9 ^6 J) H& }3 |5 q6 p/*: B8 l1 W4 f/ l; j# Z* V) x7 Z
* module:div_rill_tb
0 L$ L. ]. w( g2 F" }* file name:div_rill_tb.v% a; f5 ~* ?& \
* syn:no" ~: Z5 O. F5 |0 k( m: X7 u5 g& f9 R
* author:rill( r3 Y% k) Y! z" ]/ R9 m$ H
* date:2014-04-10
) y: R$ }' S5 T- U+ o/ U) H( p7 H*/+ O1 V) m5 q6 Z$ I6 o. n) R( |
, L0 A! l9 q( y; w; K  ?; N

; B4 e- x$ ^" |7 M' u2 b4 h" ``timescale 1ns/1ns5 K+ u; \3 D& U! A
7 S3 ~) p8 ~/ T, L
module div_rill_tb;
) f% T( _' J+ E! n  U& f4 A. E! @- I. v0 U2 W  [3 c
reg clk;  R8 F, \0 \' q5 ^$ k3 b8 W0 |3 e
reg rst;
* l6 q' _4 \+ }reg enable;) N, C! Q& c' N" R% ^

- g. o: [* O5 [6 W* u+ ]2 Mreg [31:0] a;
7 v) m) Z/ J1 X: h* _  `reg [31:0] b;
' E( O& m3 t- u) w. `. D+ Ewire [31:0] yshang;' F8 v% }, q5 t
wire [31:0] yyushu;3 d0 |7 I' ?# _* O, }" a
- Z& b6 {8 `9 w& Y  h0 `$ r& G8 z
wire done;
6 f" I# g6 @) S7 ?5 H) O
, N' Z& z! o0 X6 [initial
* p6 }* h2 _( }5 e6 Bbegin
0 W/ _, T7 b& W9 M- S! t. w+ D/ g        clk = 0;4 g+ A4 E6 z3 ?* e9 I3 ?6 b. U
       
- s# ^$ \9 W# p% L9 ], t        #10: R# S) t( T& C3 i
        rst = 1;. E9 ~: W, Z9 H% S
        #20
- b6 y3 e4 U7 w2 s0 r        rst = 0;
( {, g1 f+ p8 F! \$ |- \& o       
% D+ V7 d" r$ W+ U' N8 ], \        #15
% z' k2 O4 L! F  p) s, Q        enable =1;
" n) c0 [+ E+ _& E& @        a = 2;//$random()%10000;$ v; T4 A  ~3 C: {& c3 Y# o
        b = 7;//$random()%1000;7 _1 h8 R. g1 \8 L+ x
        #104 z' S' x9 K' ~/ k* a0 K' n! S
        enable =0;4 I1 i4 w  v& A6 e
        5 O) v8 A1 e! B* [- L7 W
        #1000) d9 x0 Y% F- f$ T. _3 T, z  g
        enable =1;0 T5 T# c: v7 v  [! n
        a = 7;//$random()%1000;
& s) A- P9 |) e0 B: m3 e- Q        b = 2;//$random()%100;) o9 L% k1 K  H  m
        #10& H" {! m8 s1 {/ K& O
        enable =0;
& o! |- a" z8 h        : x% ^# `" t3 k1 F& [' N
        #1000. U2 Y1 s- c4 `
        enable =1;
# l# R$ W# C+ `( ]8 l        a = 7;//$random()%100;
& J. m0 J2 Z, v& }, I8 {5 u        b = 7;//$random()%10;        " j3 l; u4 a* {# ^( ?
        #105 e% o; q) j# I' K! x/ U
        enable =0;
& N# I' f7 N# ?3 U8 r- }3 Y       
, K' w" ?: g9 V! t7 E6 i        #1000 $stop;
0 l; h5 i* B: V3 Dend
3 s% u. C1 r. Y+ \" Y/ O% N& ]- A  g" {- a
always # 5 clk = ~clk;. f1 F, y9 Y2 b9 h9 t# A
0 Z; o+ f  w7 O, z. r/ {$ k7 H, K
div_rill DIV_RILL
% T9 j2 a( {! Z( p6 U(
, e1 g4 \/ J6 a  V2 r6 _.clk (clk),
1 W! d! _$ L& C; h3 S" }.rst (rst),
; k# T: B! v, L( R. c/ q1 t
, u% a7 o: T0 c5 O" b.enable (enable),; ?7 }' c% C3 S/ c2 e% n
.a (a), ; |! u/ y  b/ p
.b (b),* H" I& X2 |5 I$ i2 v8 F. v- ^6 ]& x8 n

  d+ w+ l( x* i9 J3 d.yshang (yshang)," W% h! O, e4 u6 r
.yyushu (yyushu),
3 q) s( B$ l- _6 p; k( {/ w  L' c- u
.done (done)/ r$ Y9 ?% v6 E
);' Y5 \3 d& C; S' f: p
& r! e# ~# j5 Q# }' C" \/ N7 t
endmodule. X& r  o. @/ G0 y$ O& \! n
/******** EOF ******************/
# X7 S- p+ S- m1 w2 a2 q4 ^+ {+ W4 e8 V7 Y2 Y: R1 T
2 G$ ~% Y. Z( _( K, L8 j/ i

* f% _6 \8 z( h' u& v1 m0 C
8 u+ M2 T$ `+ {; }, f% s2,,验证结果
3 v5 c- L/ T# x  D
. \4 w. c" V& ]! Y8 e
' b& d( m* @5 C: c7 Q+ J- Z2 I6 M5 A: G$ O+ C. B' m
7 O0 s. q. ]1 {! o; a" E1 A
/ ?5 M. p2 r; H

3 _! m: D- D7 v- I- z" |
: d7 f% t& b1 f/ ^
: t& E0 K, [; W, X* c; N. `

该用户从未签到

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

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

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

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