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

除法器的verilog简单实现

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
引言0 D. {' @9 G5 q
两年前,我写过一个简单的除法器,当时由于时间问题,只实现了一个简单的逻辑电路,但是实际中大多都是时序的,所以后面给出了修改意见,但是并没有进行进一步的测试,最近发现那个简单的除法器引起了很多讨论,本小节就做一个终结。# S4 v& L8 W  N: U

2 u; g9 w9 ~1 {5 B4 w" F6 t6 V/ @, X2 ?3 [( ~- \
" l  |4 V1 ^4 C4 r
1,RTL编码" A4 Q1 [, j# C% h
a,div_rill.v
% h  d7 y9 k/ p# o4 B" E5 L5 T* Z2 x6 _+ A; z! X  k' G
8 V5 ]  `3 I; l" G- z- ^+ ?
/*( A0 O9 P' K& Z+ p) v5 d
* module:div_rill
2 A" O1 p- T( L. }1 B; l" c* file name:div_rill.v1 u/ d0 E6 S: n" k
* syn:yes
% o4 }! Z4 V$ L  n& T) M2 o- ~, x* author:rill0 a" y0 F8 @& n/ V  _
* date:2014-04-10& K2 K) j" @( W7 J1 ~3 g9 [" F- h
*/# y7 l8 v( M4 H) N& S% g

+ h# ?; e) M. [' r6 K
+ T3 i  r3 t6 U' Tmodule div_rill
% U! S7 S5 J6 y/ _# |* G8 M(
+ r0 J* {4 J' \3 K( |input clk,' _1 a9 B# M7 B$ X- F& B
input rst,% T" ~8 @: z3 |: p' E6 d" p9 o

  i$ v% O8 o' X+ M% E6 V+ U) k1 Qinput enable,* t- R1 u& E3 m8 A) d% q
input [31:0] a,
2 f/ w1 d: }3 ], ainput [31:0] b,
+ \8 }8 _* p) f4 Q2 D
2 @& R3 K" y0 S. c, F4 Q% F8 y) X2 Loutput reg [31:0] yshang,- x/ ?( W) m- D; c* d" b+ _
output reg [31:0] yyushu,1 G$ O3 r  B/ M* R4 D
9 ?1 R  ?- T  y% [
output reg done# c+ ^/ ?% d  ^; H
);
4 n& a6 l0 b/ l% g
: G+ ]( b8 M# }: |* K) R8 i2 [reg[31:0] tempa;# m+ T/ H4 O$ C3 J1 \
reg[31:0] tempb;
+ l! ?, e6 Q% |! ^+ j  `reg[63:0] temp_a;5 x, s+ u2 ]+ J& y4 l- w# T
reg[63:0] temp_b;) ~: Z- d% p$ C) `: `/ E$ ^7 {

; Q, z* m- v; g7 Lreg [5:0] status;/ _2 ?! c& Z$ [' x, [3 U
parameter s_idle =         6'b000000;
3 p- {( q- q8 z9 R' vparameter s_init =         6'b000001;/ p* B1 ?1 I5 N; _/ C
parameter s_calc1 = 6'b000010;
' R# D/ i9 b" T- uparameter s_calc2 = 6'b000100;
3 c3 K; F. l! a3 |. h& H9 Z7 ?! oparameter s_done =         6'b001000;6 _8 w* k3 [8 X# Z6 b7 A. j* U* G
# r# e! A1 g- O1 t% z3 l+ A3 S$ W2 \

7 a8 s" m; j; |reg [31:0] i;
; _8 k2 I2 C7 n3 ?% w, `# D# a, k" s, B* W
always @(posedge clk)
2 o5 P- i/ P" a2 tbegin
5 N2 z# K8 _0 q8 u4 M  P        if(rst), y: a+ `0 X; C: C$ j( Q+ L
                begin
6 @: n$ O, ^4 @% G1 ~- c& M                        i <= 32'h0;7 v9 f, P# X/ f) k- K5 ]$ i
                        tempa <= 32'h1;
9 N$ I, [$ w5 p; e/ T                        tempb <= 32'h1;
6 r* S# V( `7 G5 O) \                        yshang <= 32'h1;
, {' D3 T$ J0 s" q1 R                        yyushu <= 32'h1;" [: \4 F4 k% k3 b- f) m* q
                        done <= 1'b0;: {* h( V; ~1 f1 q" p
                        status <= s_idle;
$ Z/ G& {. K+ u' K( I2 [                end6 G: m) t4 Z: p. s6 B- L. @
        else
, s* ^( F  J6 q' [                begin
3 L3 w3 [! J7 G# `                        case (status)
' X5 O, ?  w, _                        s_idle:# N% L1 t+ z% I" N
                                begin: T8 m' a3 }9 P# P! R; [
                                        if(enable)
3 j. p) m* {0 u5 k                                                begin
* C9 r! g& a3 k7 V) P$ J                                                        tempa <= a;
' l% }5 ]4 q" A, i" Y                                                        tempb <= b;
) O8 u3 ^/ w' _* C) K* @                                                       
1 t% m6 A- c1 n' l: X0 m) j                                                        status <= s_init;" N3 b2 L# Q: M, ~$ H
                                                end
2 g) w2 Y0 N: Q* B/ t) w7 B                                        else- K5 Y# B1 \! X+ o' Q# N3 Q
                                                begin
. I/ A: S4 n' O9 B6 y: n                                                        i <= 32'h0;% H7 Y3 I, h. D$ X
                                                        tempa <= 32'h1;5 N4 M' V0 f, @7 ?; n3 N
                                                        tempb <= 32'h1;2 u& N9 z0 P" [) g* J) Q& k
                                                        yshang <= 32'h1;
& r/ `8 l/ R6 K# c5 u5 P                                                        yyushu <= 32'h1;! w  l2 ?0 k$ D4 r& [. k. H4 r7 G
                                                        done <= 1'b0;
) J# g3 O/ y) O6 S                                                       
. Y( a' J6 X: q9 F% h                                                        status <= s_idle;
4 J: `3 l. t, e" O                                                end
" F" y4 z7 Q8 G$ T, i                                end: e& v) {, I' d4 b
                               
+ \0 M1 h" C/ g  u6 c                        s_init:
+ u+ h- p8 O, L1 c5 R                                begin
. r2 N  m% t( L- v                                        temp_a = {32'h00000000,tempa};
0 Y- z3 \5 e4 `- [' s* j* l2 j$ A                                        temp_b = {tempb,32'h00000000};: D" y: f2 C% A' y- O2 |
                                        : I' o9 j& ?8 j2 Z: h& F
                                        status <= s_calc1;
" @1 J; B; j  A- k$ p" v                                end' [+ b# b; }4 x8 ]: C! Z
                               
) k5 W( W' E$ {4 b- u7 R' K                        s_calc1:, ?' m6 s, o3 {
                                begin+ K# U/ w$ H0 s) X7 Z
                                        if(i < 32)0 B0 @, H4 m) ^% o0 X3 l: q# u
                                                begin6 E$ [$ ^: Q" z9 t# C
                                                        temp_a = {temp_a[62:0],1'b0};
; j# {, G; d" V# `                                                       
5 ]0 @3 \, K" U6 b5 V                                                        status <= s_calc2;
( M4 l' u. \! }' d( M                                                end
4 ~  Z2 g7 G6 ?$ Y' M* W                                        else; @7 E5 U0 y  w2 m+ l
                                                begin
1 t# p4 b  g7 R& E! E/ g! Z                                                        status <= s_done;1 f0 n$ f1 U+ W5 j" X
                                                end( F3 C% X  |8 @# v1 a
                                        % Y2 `; V- @* B
                                end
  |) B  Z5 j- J                               
( O6 o& B, {" X' f7 B- a' m3 q                        s_calc2:
7 T2 B2 k. l" X5 _- t* a6 g2 p                                begin: \: q8 w# n  g5 ]% l
                                        if(temp_a[63:32] >= tempb)
" L2 Q3 B: z3 C9 I                                                begin; H- L' ]- n1 @4 m/ }
                                                        temp_a = temp_a - temp_b + 1'b1;$ a! e$ n3 V( J; F/ J, [3 }- y, u
                                                end" T9 n+ o$ K9 {" Q
                                        else. N- j& [! Z4 p3 o) w' A6 F
                                                begin& U- X; P# y  w- T, ~. N3 S( A
                                                        temp_a = temp_a;
$ R* ~1 Q3 H/ r; s2 z                                                end
4 ~4 @' K2 o) T2 A7 [! h7 j                                        i <= i + 1'b1;       
* V( Z# Z0 Z" X4 u) y. g6 C: X9 k                                        status <= s_calc1;
$ R' H" S7 z+ G' R6 |2 \                                end3 X; v9 ?7 o& O! }1 `
                       
3 X7 _4 L- ?. P0 i                        s_done:
' Z( P1 }% _( c5 [0 S7 g" \+ A                                begin
+ d/ l% t! R- G# z' k2 a  ^                                        yshang <= temp_a[31:0];
! B: Z/ ]% T8 \& Z' N                                        yyushu <= temp_a[63:32];
6 U+ J5 w6 u* C/ a$ `/ j                                        done <= 1'b1;. c: n6 e1 _$ f4 j
                                        + [9 Z0 l8 \6 M6 J: X: c6 \+ b
                                        status <= s_idle;: p& G9 P* l8 j1 F, O1 b
                                end
+ I- [" X8 |# C                       
7 l1 O& o5 k! t0 G; F+ X( R                        default:
- L) V# J8 I* U9 U' Y& p                                begin9 O) {/ N  X* m8 X6 s, l' u. }1 V
                                        status <= s_idle;
/ v2 D  J" V7 h8 Y                                end
! l+ t2 w$ H* u2 P& D, {9 M                        endcase& z9 h; y4 W- p/ |2 }
                end. D+ R1 C$ h$ d7 F

7 n8 O6 _* |: S* Hend; n* ]1 G. [6 @! M

" ]- N4 {" O$ d2 o  W4 d! Z( C
, ]2 |8 k8 c! T+ c! qendmodule
/ U: w4 v- [4 }! ?+ P
4 ~; k' D0 ^3 u4 x1 q6 h0 D
" t; X, l! P. B8 F4 Z) K: s; c7 @: w# |/*************** EOF ******************/
! f$ P9 [: ?( w- H) M6 v% D" l1 O

2 {# S( ]& E+ b" q8 ]
7 c. j; }0 l: ~* p
7 g5 o8 F6 B3 A, gb,div_rill_tb.v
, m& O  E1 O0 A' p; B  x
& C( L3 q1 `: Q8 |" Q& k4 ]9 i+ I# n# r( C% M( b) {& g- Z; K
/*: ?5 v! J1 P/ c* @, R
* module:div_rill_tb" _& [9 p2 D; m) O" f
* file name:div_rill_tb.v/ y" z, N: |5 D1 l/ K8 C
* syn:no6 K% ]" ^% T- r7 ~
* author:rill" }" H# f' k4 a  J1 d) h
* date:2014-04-10* t3 F  G* B' Z. Q
*/
; A( Q9 i; B. X# B& t" _0 ~; S# R3 r# C6 x9 J
5 ~5 j+ U; t. s/ ~4 N
`timescale 1ns/1ns  N+ t& H, y! w! O1 L4 X+ a
5 @2 y( ^  a$ @
module div_rill_tb;
+ n8 F) j- E  m" I& j- b- m( A! m- _
7 Y2 @. J% P( D& v" I8 H5 Preg clk;  u6 {' w+ `0 A+ x, i+ ~' i4 {  R
reg rst;; R$ w' d% g; I% f& j. @
reg enable;& z& k$ ~6 I1 z  d; ?5 ?% w5 q
8 D& T7 o6 h: J1 s0 t. K
reg [31:0] a;
( W. K& A, k) ?& b4 u" hreg [31:0] b;
& Y+ v, e/ j+ g- F4 ?3 j, Y2 h! K9 Swire [31:0] yshang;: c+ s7 p2 F% [0 G' Y7 T3 \+ P
wire [31:0] yyushu;
0 ^, h# r) `5 X$ R/ a% R1 j; O0 K! w  Z. V& k
wire done;
# l0 f( z: a9 N- |  s. H! E& ]# B! t# X7 o. F; \
initial
) N8 i3 K" m6 k1 Hbegin
  G- _% H2 r$ ]6 H7 r3 ^3 D7 ^        clk = 0;
; t: W  T) X5 x0 |* X' i        ! o* J! Y5 p  D- ^* M
        #10) a5 b& b4 K2 X: p9 r
        rst = 1;
' D2 S" Q) ^$ s. Z; j) P9 |, c        #20
- I; |# L6 t8 P$ t; o% }+ w0 u; U; D        rst = 0;
; ]9 q$ ?! @9 A, X+ w: N& z        ; M$ s, G9 [9 M& ^+ r) J& @
        #15
! D& Z3 [5 p% E4 _        enable =1;
1 n8 T* A2 l7 U% }        a = 2;//$random()%10000;
, P, h2 r: C0 P0 [  n2 ~2 Z, R        b = 7;//$random()%1000;6 H* N' v2 ~: T% _4 ~. F7 [
        #101 E7 s% }. @8 h# D4 q
        enable =0;3 s4 N2 x3 H9 U, `/ @; P
        % C$ X& @4 M* f/ u: {7 r7 B: v  S
        #1000* A+ S2 I/ t1 S! j
        enable =1;
6 h  _2 b2 |2 o& g3 q: H; M        a = 7;//$random()%1000;
2 o8 [! r. o# n6 h        b = 2;//$random()%100;
  u- L. e6 [. R! b8 w' h0 b2 v/ F        #109 [  ?1 E" w7 B1 v
        enable =0;
9 O9 H0 k) p  H3 H' f3 e! U        ; f' [* N+ ?3 u* v/ y
        #1000; C5 ?6 B+ q8 C
        enable =1;
( }6 l9 X( ^9 n' S1 l3 ?& n, d        a = 7;//$random()%100;
) {1 {+ ?% A( j9 t, K        b = 7;//$random()%10;        0 T& l( ^. @0 ~
        #10
2 ^; Q9 g& f) `2 W# w6 D        enable =0;# ^* ]0 K8 f+ y$ z5 i) `8 w
       
9 y& W/ F& h8 C3 {        #1000 $stop;
  Q' A" b4 v2 uend( `/ v4 Y7 F5 E' {6 ]& [
0 [& I0 a# |6 o% c4 K+ {+ U
always # 5 clk = ~clk;  ]" d( y, X6 ^7 h$ G% w2 @2 X

7 h3 b& P3 i! o. d0 y" Rdiv_rill DIV_RILL. P  b( N4 R: B) O
(, p$ A/ V/ `  O. h& E  q) V
.clk (clk),7 ?( R: d( u2 [( a
.rst (rst),4 `* c- d  t( @4 T! v3 K- ~

5 x: F4 Y9 X6 N8 N2 X.enable (enable),
) r( S0 y+ y0 h9 h/ S$ R.a (a),
7 V; Q3 W( j% k6 r.b (b),
: Y$ n1 m2 m/ Y
2 ?& p- u7 l- d* ^' h.yshang (yshang),
8 t* K9 V: D. T0 Y7 b- P2 j& d.yyushu (yyushu),
! K  S7 A& O8 `2 H; o6 ^: `+ z% p3 ?8 F9 Y% C3 D4 U8 w  r
.done (done)
! d$ V9 l, C# Z2 r. K);3 K1 j3 `2 P' P

; b0 ~% j& x; b' [4 H- Z( Yendmodule
5 G/ z! u2 d6 v+ l( \/******** EOF ******************/3 [2 b# U8 }7 T' S% r$ r- ?

3 V" ?- J, N0 @$ |5 i+ q
8 P- t2 n7 D6 Q0 P- ~. d2 W4 q! ^
$ ]7 g! A4 U" }, h, y
2,,验证结果7 k" \; F5 ~$ g8 A1 N) K- d; n
, M) Z: r. o6 n
" C& U) c# D/ o1 i  L. d

6 u5 [) @8 j. \5 N* x6 D
& U. E+ W& o3 c5 l# ^5 {2 O/ y
% q# A6 `2 D$ L2 d7 A5 g. u3 j0 w$ b/ {4 u$ k
' [2 K* \+ t' r2 B7 B# @2 R

1 R7 A. j# x* P% t, [

该用户从未签到

3#
发表于 2020-6-8 17:03 | 只看该作者
除法器的verilog简单实现

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-25 21:21 , Processed in 0.171875 second(s), 27 queries , Gzip On.

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

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

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