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

除法器的verilog简单实现

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
引言+ `1 w6 h, k1 l
两年前,我写过一个简单的除法器,当时由于时间问题,只实现了一个简单的逻辑电路,但是实际中大多都是时序的,所以后面给出了修改意见,但是并没有进行进一步的测试,最近发现那个简单的除法器引起了很多讨论,本小节就做一个终结。/ S  N' P( J+ P2 E; A! i

7 d/ {! y3 N" @" W) p
$ M! q* Y: S' b: a) E9 f' W* C
5 `4 S' R9 L  a1,RTL编码
  K7 h* ?* U3 q" q! Va,div_rill.v4 T( w( O3 v2 F$ T: K& X9 }  g4 s% E7 L

0 B2 h( g$ s4 p
/ D4 X0 W5 U. _8 n3 o" N" J; m7 [$ v/*
, ^4 b' V2 A- _# j* module:div_rill
- E& q) v9 F& }2 ^9 I. U* file name:div_rill.v
5 s" K( Q. g/ g# @5 p0 l  b, Z1 d* syn:yes  N. f* D! H7 p! W
* author:rill* X$ \+ k* c- o9 w# l
* date:2014-04-104 Q* p) d5 J, t  K- y
*/
& D4 h: p; i5 \
# |) \( t& D( U  D5 s5 a2 J( X4 I! F5 Y/ _- w& W
module div_rill
1 d4 Y: e! Y& T1 T2 d/ M8 p7 ]3 r(
! v0 p) t0 z' Z/ i* M1 cinput clk,
3 N! M% _2 w7 b0 U7 w3 `/ binput rst,
8 t! d" ]* i8 k8 O' ]' v' @$ z0 j& S. }4 I
input enable,) N& z$ f6 d7 W  n3 G
input [31:0] a,
* S4 d$ y" M& X# A7 a8 [input [31:0] b,  l; f' M! z1 D* |3 B8 v4 _+ Q

9 d: ~) E. s# c& X( }. e* poutput reg [31:0] yshang,
; _$ v$ L1 E; ?% c) ?+ @; Xoutput reg [31:0] yyushu,
# e' R- K' }0 _# e4 s5 @" z7 i& L: L/ f+ y+ w
output reg done! Z/ A9 f1 b7 L# Z# h9 Q
);- q5 E0 w4 e- t' ^+ a( f8 C# o

) \; ]1 W" q% U7 U) h2 j# Q, @4 Y5 p" Hreg[31:0] tempa;, V5 e3 b+ b% m! G
reg[31:0] tempb;
' }; Y! k% d' H- x1 ~9 ~3 ureg[63:0] temp_a;
# Q% A. Z; e: N8 freg[63:0] temp_b;& @0 r# ^2 ^  T/ J8 l

% Q% S, T( \& l' E6 n+ Zreg [5:0] status;
- K7 o& R9 l: ^# r' K3 oparameter s_idle =         6'b000000;
' s0 H, W9 E8 Y, n% a% L- W8 @parameter s_init =         6'b000001;
( j- `) {* n2 @/ q+ C9 p* Z0 aparameter s_calc1 = 6'b000010;+ R0 e- B6 h: ?! [+ w4 r0 n
parameter s_calc2 = 6'b000100;
7 x) X, j$ N* H" x# Dparameter s_done =         6'b001000;5 n) w) u  Y2 q$ A' D* k* l+ l
! e7 q+ S+ I; m: Z
# D, a8 h9 K9 q
reg [31:0] i;- t7 i, G) t, c+ m+ m" O

' w7 v$ P$ X, _- [: L- U9 o9 q" ealways @(posedge clk)
/ g+ W1 B3 l0 y6 C/ ~& Z. Fbegin2 Y1 |' y- M# k8 `
        if(rst)
8 V7 W6 L1 B6 h$ L8 _                begin
3 V# g  S1 I+ y# D, \% M                        i <= 32'h0;1 `1 D4 J9 K) t$ ^7 Y" V4 h
                        tempa <= 32'h1;
* ]2 V* O  l) f                        tempb <= 32'h1;4 A0 d) t% W/ A& `6 m! R& X1 \
                        yshang <= 32'h1;: P; m5 S8 F; P* t
                        yyushu <= 32'h1;
7 H& Y3 Y: O8 O5 `. R+ r                        done <= 1'b0;- L1 H! f7 E1 W& J
                        status <= s_idle;
2 O" C' R+ R2 ^) n' ~( B+ |                end
& u* U1 J$ L4 [        else
1 i. C, }6 m4 j# k) ^                begin
' {) m" U) p+ Y* ]                        case (status)9 O+ s, y8 o5 w: w0 l  d- c5 D( J
                        s_idle:
, r7 F, b/ D8 J) P                                begin7 H+ i/ r, a/ _$ ]. U% e4 {
                                        if(enable)4 U' @3 \5 t" g! s( Y7 D1 J5 A7 N
                                                begin9 A' m) J( I( w! G3 R
                                                        tempa <= a;
# I2 T1 v  |9 U$ j; U! i7 v; Z% B2 C5 V                                                        tempb <= b;* b4 U& s  x- C1 b
                                                       
  I5 R  ^3 ~* z! B                                                        status <= s_init;6 m  }0 d7 f* d$ h0 U, I
                                                end
6 J# v4 ]! M2 Y1 r% |) {; I6 ~1 t" v                                        else0 M; b" e$ n# H. k+ X8 n
                                                begin
2 T! b- s: a5 v- t7 @- b                                                        i <= 32'h0;! u% u, N( L4 I1 u& |0 z3 G/ n
                                                        tempa <= 32'h1;
8 f  y2 b# x( _  M5 \0 d                                                        tempb <= 32'h1;
" l3 O2 @+ a/ ?                                                        yshang <= 32'h1;- U( D+ Y1 G1 \
                                                        yyushu <= 32'h1;
; I/ n5 w1 K8 D8 |7 {                                                        done <= 1'b0;9 W$ N# y: |, T& s4 A
                                                        " G" C5 l. p: b9 Z) ]) x
                                                        status <= s_idle;: c* S* A2 s" P/ V1 f; f( g
                                                end
8 T  g' d8 H9 ?$ X# |# X4 i' |                                end
7 M- K" p3 `; Z! n8 Q% d( M                               
! E; h$ p; D: D2 ]4 E                        s_init:& B  }3 w+ I" j. M+ k
                                begin
& |; e. f' L& F+ L                                        temp_a = {32'h00000000,tempa};$ ~0 s2 i; r- y5 @4 d3 l
                                        temp_b = {tempb,32'h00000000};
7 N9 o  A; |+ b! Z# d2 l                                        $ n- U$ Z$ q- Y
                                        status <= s_calc1;
+ X  x" b7 H% C3 I' p                                end
" O7 E+ p# D) N7 g                               
# f0 r# `7 @: F' s/ h9 T7 ?2 s6 `                        s_calc1:
; [; @* k2 I2 ^  k7 p! q* Z                                begin5 j( t: {# k; f" G" ?& I
                                        if(i < 32)
) I! g$ G& m! X3 _- l                                                begin/ S9 R( Q; D% X. C, l- O
                                                        temp_a = {temp_a[62:0],1'b0};
6 `3 q: S% Y' u- J( ]                                                        7 c! E# s1 y( P3 _5 b& Y: _
                                                        status <= s_calc2;
8 q. \) n  X7 `& m                                                end9 H! x' q- h; a5 [% q
                                        else$ d8 `+ K! l* ]9 F* n4 z! Y3 Y, S* o+ l
                                                begin- C1 Q4 F3 p% l' P9 h+ w+ T
                                                        status <= s_done;
6 I+ p' `1 D) T: x' U                                                end
: E9 ?2 H, B- t1 N7 o  ^2 E0 k# u                                        : W+ C( D& E+ @" \$ I* p
                                end; {# z/ ~) q; f$ ]5 P: t( k9 P: |
                               
9 q( |' g, D) [4 F+ m                        s_calc2:8 t: `; ?0 P2 \3 y
                                begin
# e, `; S# m% K3 ?4 ]8 H                                        if(temp_a[63:32] >= tempb)
9 ]- F# x& \" R( H* C                                                begin
1 J5 v0 Q4 A1 U                                                        temp_a = temp_a - temp_b + 1'b1;2 m. {& |( E8 ~- M. m
                                                end* Z' O" p( c; L4 c$ ]
                                        else8 E& z$ m" w# P  H7 I2 P- M( @
                                                begin. l5 O' f! B6 t3 s3 L
                                                        temp_a = temp_a;+ {( {+ E, N4 L' g6 J" B5 z
                                                end  t1 O  T. Y( F8 l6 d
                                        i <= i + 1'b1;       
6 |- Q( g  d# C/ w% o) l                                        status <= s_calc1;
; l0 _* _/ \6 Y( D$ x8 i) i                                end9 \) X) A; F( \& B
                       
" u2 @  ^2 b7 w: y+ `& t5 a                        s_done:
* y* o; A  O0 T) p# O- O                                begin) _! z) i; M9 \1 _- ?
                                        yshang <= temp_a[31:0];4 v: N6 s' r( W& E$ y
                                        yyushu <= temp_a[63:32];" i) R, K  B/ x, U7 q: s" W
                                        done <= 1'b1;0 \$ U/ Y! t% I0 ~* {
                                       
' D7 D4 P3 K+ v4 m, `. ?                                        status <= s_idle;: {4 t6 p7 R3 o: f: l: g
                                end
0 L! ^( \3 a9 |2 {5 q4 K                       
' ~6 x: h% Y* E* k* ~                        default:6 G4 I+ j4 ~$ l9 S7 l* c
                                begin
, ^  S9 c; Z+ r% s% f9 Y  p' v                                        status <= s_idle;# f/ t/ }0 K" B5 e
                                end
5 W, Z$ G9 }  P! Z- L* M! @+ H$ A# W8 ]                        endcase1 \1 Q) a+ f* Q0 z! N# R
                end
3 P- }$ W! X" K( I# P. G
' C) Q# I0 O0 c. f1 G/ {+ Dend
5 X) W) h' P# e: D9 d& {/ v. D
+ N- }8 d3 s3 o" G2 |" B( |4 f2 N, q& e$ \1 U3 Z
endmodule; \; F& W& \' @/ ~  u/ H
( {" Q. g* n4 P" u/ h
9 v: @- d, K4 j1 T
/*************** EOF ******************/
  A. w& S4 ^9 n, T
  @9 w/ ]6 g0 H4 P5 _$ e! q6 |+ Y2 N8 k7 _* l& F
1 |+ u( m" c2 |  s

8 ], \; B4 o4 K. M" M$ o* Cb,div_rill_tb.v4 v5 P( P) X/ j0 ]6 p3 E
0 x) a. k: K8 Z% W  h

9 _. U7 s. Q6 t5 o* h1 I/*
  ~, V; i* F& [9 ~* module:div_rill_tb
: W3 Q% `$ [* a3 W* file name:div_rill_tb.v
$ T' B2 x8 E2 C' K* syn:no! f2 D. l" G9 z( Q& c( b% a
* author:rill( t9 V5 K* R- D; f
* date:2014-04-10
( w9 X& W, {" q+ }# O. d# r*/
; a1 ~  Y" ?( s% h9 \2 j! t6 o* S: R
/ @( Z8 a" O3 r, u+ t# u
`timescale 1ns/1ns
3 t5 E7 Q9 x, ~+ l! p
' ^: s# l. Y  R) O" }/ h! b' P% {+ umodule div_rill_tb;) w/ s' F; x' |6 D
/ k( K$ S+ x* U' H. U
reg clk;3 z2 N5 ]* Y. C
reg rst;
3 v4 t; X* O+ I5 mreg enable;% ]0 `6 I- l6 V$ K0 r# x# V1 r9 v! r

4 s! F$ L4 j6 l( greg [31:0] a;
- A. B3 x# U* S* yreg [31:0] b;( E; e2 f, E0 ^, C  Q' p
wire [31:0] yshang;4 y6 |8 J3 o% `
wire [31:0] yyushu;
6 F$ D/ I  \& L) p% ]! o
+ A) C6 \5 ?( g# z/ Bwire done;
( w: l/ b9 i2 d" i/ M. K. L4 Z& G4 A3 c& n
initial
. W# i  l" @1 V# F9 Ibegin! G$ q' c8 }) h" v6 r( R
        clk = 0;
; L& D' |) u  D% _( k. Q) b        5 r1 B# H; m' o1 u
        #10
) G# Q1 y* i1 J        rst = 1;
+ O: X6 d  [* j) L        #20
5 e- T; s; |1 J        rst = 0;. e9 @0 W' E6 a9 d- N
        6 ~2 N$ }/ [* V& q
        #15
$ D- Z( ~( u3 e6 O2 @/ B5 I* m        enable =1;
& I. z: s& D: V& A# J# r) K        a = 2;//$random()%10000;% {# B% {# w- ^9 @# k+ }9 N0 H; R
        b = 7;//$random()%1000;
9 b2 V7 C& U1 D* l# ^6 F        #10
0 k2 J) O6 [; s; w; U- z( d5 {- |        enable =0;
# P# x1 i- W) d% E2 T        - C" M: I) @7 Q2 N5 z) x
        #1000
) ]) _, x7 L$ K4 K! k5 `& q/ O        enable =1;9 M; A7 H3 N) |
        a = 7;//$random()%1000;
6 ?. Q9 Z' f) o1 ]$ d        b = 2;//$random()%100;; o! G% }2 s2 e" @- o% T
        #10( C* s& U# P1 q- r$ n- [
        enable =0;
5 `- v* ?$ M* s- F2 r, p        1 m9 `5 t. |. K( F+ p: P
        #1000
$ U1 B& c3 `" L, B2 L5 H        enable =1;
. \; _; G7 f  x4 k1 ~. Z; e8 E( Q        a = 7;//$random()%100;" n! }$ T/ Y& j1 h5 X7 q6 F- Q' E
        b = 7;//$random()%10;        ; _) u. [0 V2 Y2 ]3 u  y/ }
        #10; W6 N% J! ?; s$ J7 B3 S. l; k
        enable =0;8 m& \  c( H* E3 ~' ~
        3 Y6 q$ ~3 k$ j  u" H3 z
        #1000 $stop;
" x5 ~) \3 g  [& z2 gend
. p/ w/ Q7 @% u5 y0 T9 h" M, m! D8 `# {" j8 A* o& }4 ^; h. Q; W
always # 5 clk = ~clk;
- \% o: b' u. r2 c* ]4 [
# t; s( \" _+ i2 K" X7 Fdiv_rill DIV_RILL
* B9 T8 r: Y$ z! }(# I$ I2 G3 U! E: S: U# r
.clk (clk),3 ~8 }0 k/ {$ `$ ?0 j# t
.rst (rst),
* |* i  r! g$ {7 @# U5 s* b- `" B: ?7 _. k9 _' \" k& _
.enable (enable),
8 a+ o+ d! g/ I2 H1 d.a (a), * K' Q" r$ {4 j' E6 r% ]% J
.b (b),/ r) }* H' y# a9 z; ~

" Q8 n5 z0 g9 b4 J# b.yshang (yshang),
/ t5 `3 B6 l. U9 y" Z9 d; q4 d.yyushu (yyushu),
8 X4 g; ]. T4 ~2 z# X; B6 s% I& @
.done (done)2 U0 K. B3 d7 c9 s
);
* t6 z- ^. N7 u+ L) X: w; i! [) U% r# S. ~
endmodule
9 u+ s' R9 g$ G! p7 ^/******** EOF ******************/
1 O, W, n% Y% u. U' L* Z! O
7 b  V9 Y3 v) k" i- H
- _( f) G# o% f) `2 U* p& z* R9 U0 L3 t6 Q2 O8 e2 ]  N5 A6 y

9 K0 I& r; Y5 ^. e2,,验证结果
1 t( d* ]0 p$ n: F7 V3 L) K/ q" V9 d, g; ]3 W" T
/ U! y. ]- M1 U9 h3 B& \

! z* ~7 _+ _& q8 h! d# D: A- {' j* F+ Y5 V# ~4 ^4 y% I

$ Z  Z* ^. T+ a1 q7 `" `" n
6 t0 e6 u0 d, T0 ]
4 K+ R- x5 B! \& Q6 S. @- O
3 j( }! D3 ^* e9 V& ?- u. j/ I/ z

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-1 03:13 , Processed in 0.093750 second(s), 26 queries , Gzip On.

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

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

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