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

除法器的verilog简单实现

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
引言8 W& h: J9 S% w! _7 i
两年前,我写过一个简单的除法器,当时由于时间问题,只实现了一个简单的逻辑电路,但是实际中大多都是时序的,所以后面给出了修改意见,但是并没有进行进一步的测试,最近发现那个简单的除法器引起了很多讨论,本小节就做一个终结。. A$ h+ A( R; W9 u/ i+ }. G
5 P$ ]9 i+ J- t" n0 Z
( t) C+ V  i" z/ \' H
; Y* k+ s. O* {4 m. {3 u) q
1,RTL编码
: n$ z$ B" B4 ~" A2 H) Pa,div_rill.v6 x! |5 H9 g9 x. `& W$ Q" J

0 I: A7 F  i& n" J" K) M" H; \0 p9 P. H
/*
' Z4 c/ R& g: b* module:div_rill
( X' f4 A, d; ?2 p) G* file name:div_rill.v
1 K; V; d6 X  b1 W# b7 @* M& {+ V* syn:yes( _& T' C  t. \9 y' `, F6 U
* author:rill
# y+ q+ G- x' ?+ u. l$ l% [2 h& V* date:2014-04-10! d- |8 @8 P; E: V, ]% i
*/2 `5 n  V& e! J5 \; ?' y2 f

8 r2 q4 V% \# G: q+ r$ i  z! Y% w% P7 Z$ F- G  F
module div_rill3 Q5 F9 M2 R6 Y) c' {* M6 ?
(
6 C  p. A% b% d  }7 S' V6 n! Minput clk,1 j( s& G+ V) g( J7 E7 |6 I# k7 S  @
input rst,
. L4 P2 C7 t0 }" `# @1 v/ S/ B: j
input enable,
& W5 ?; ~5 y, u" D: I! vinput [31:0] a, ; q% d! I$ U* p9 o- K
input [31:0] b,! a+ X9 ^4 R/ [
( u: H4 a+ o* }1 U8 a
output reg [31:0] yshang,
; y6 p/ F6 S& v# L. I8 L5 S2 r5 Doutput reg [31:0] yyushu,
5 o: P  K. x" w  x' X* l! z* B
4 p$ E. E; Y( n: c; f& uoutput reg done% Y9 ]' [) }% E6 w3 D6 S% C
);* p3 C( t5 G4 t4 Z4 n

) P7 D# s( j0 p6 j! c" ]reg[31:0] tempa;+ {. d2 B5 C) T# f
reg[31:0] tempb;  c' K0 l3 t- l" X' O0 J/ p
reg[63:0] temp_a;
' U- r  v, I' r9 X. x$ N: u! v% V5 _) Treg[63:0] temp_b;
6 n' ^: ?0 @2 q
& [1 Q8 [0 a2 f; t9 m& D5 d0 l: Breg [5:0] status;5 }! y: d- f2 k9 {; {+ x/ E
parameter s_idle =         6'b000000;
5 `, z9 Z0 h: p8 e7 T2 {parameter s_init =         6'b000001;4 E6 g! A3 c2 x/ \! y
parameter s_calc1 = 6'b000010;( y: ?4 ~$ u  g. c, p, C2 u2 ^
parameter s_calc2 = 6'b000100;
. h% p3 S; S3 v5 D  O- vparameter s_done =         6'b001000;& f/ a6 y# r, G  j" u& C0 ~
# v8 Z0 z4 m) h) \4 G7 I
# {5 A$ z2 c7 h7 U. G
reg [31:0] i;! y  j# Y( m! s3 q
4 M- y$ j- i  w. Z* O
always @(posedge clk)
4 B0 P3 }+ N; W+ {  L7 zbegin
& a9 m/ F4 B; w! B" Q- @        if(rst)
+ D- }; r  K  i% l                begin6 K9 J0 @+ T  B  a" s
                        i <= 32'h0;
$ i  K; y* j3 e1 c% |6 F& B                        tempa <= 32'h1;
  \5 q. W3 O" p                        tempb <= 32'h1;
8 J2 L' i) u& T( `4 r                        yshang <= 32'h1;3 C+ u# u$ E6 Q1 q: d7 ]7 M2 {
                        yyushu <= 32'h1;
6 b0 p% H5 ]- A. ]# b( P& E9 c; N6 ]                        done <= 1'b0;
* C9 f- Y! S$ p! l                        status <= s_idle;2 B* R4 }* u) s7 S5 P1 |$ G* `- b+ I
                end* w- k' m3 {4 v- W2 J
        else- U2 A- I5 ?. U
                begin
9 n" ~  w: O: z4 e                        case (status), H5 c1 h& h! Z9 @3 {; X6 f
                        s_idle:5 s/ X0 J+ h9 y$ B0 A& V
                                begin
: @! D: ~& x0 x                                        if(enable)
& {4 e8 V) K6 f- u1 i; O2 {& C0 H* H                                                begin
4 |( p4 r* S0 J9 U! K+ i/ C, B* @) s6 R. Q                                                        tempa <= a;% Y" ]: C/ p* e6 W( O! l
                                                        tempb <= b;' \. A" l8 K) A
                                                       
: i, z9 n* C! N% j: S: V8 [                                                        status <= s_init;/ I# r/ [  O3 e# Z% U
                                                end
) ^. ?2 A5 f# N- _                                        else5 b5 H7 E" ]; S+ B7 |  c
                                                begin- p0 g8 G1 J4 ^' |
                                                        i <= 32'h0;) v8 [2 w$ B! w) ^# o
                                                        tempa <= 32'h1;, Y, G1 @* O* k! j
                                                        tempb <= 32'h1;1 v% f, ]( M1 }* ~9 ]! p6 S0 c; |
                                                        yshang <= 32'h1;& Z2 z+ y! j. Z+ ?
                                                        yyushu <= 32'h1;* K3 n! z8 g8 Y
                                                        done <= 1'b0;2 `3 B8 }, ]/ T  Y$ _0 P. ]4 O
                                                       
( O0 C: Y) K& Z4 }3 @9 w                                                        status <= s_idle;3 u( _/ z) y+ f7 f5 K
                                                end
* O- {6 v& H8 `                                end/ j3 I0 I- K6 l2 b$ l3 y) h* i
                               
3 k0 m; v6 _; C% m! N                        s_init:
- f# f& @. g8 r  V3 I  L9 ?1 [                                begin
" _, f- Q: t+ R- x( t; |3 ^                                        temp_a = {32'h00000000,tempa};! v+ C( p, O: |7 k/ ]
                                        temp_b = {tempb,32'h00000000};5 W7 t& D4 h* j7 A
                                        2 G$ b( H" y0 z) T' R2 ^0 m
                                        status <= s_calc1;
9 C- q  Z1 j5 `+ l  e                                end
6 b8 `% `0 C4 Q                               
$ A9 l1 C' G7 I. K                        s_calc1:; z+ g' R6 j0 j/ v% n
                                begin
% B0 |$ c; k4 O  \" b                                        if(i < 32): ?7 u! l- A3 H% `' ?/ @
                                                begin
3 N5 ]+ N) |& q8 k                                                        temp_a = {temp_a[62:0],1'b0};
" P' T9 Q: k7 n) c! K                                                       
4 u: [7 w3 K9 n' s3 _                                                        status <= s_calc2;4 C7 P" _! s( J1 E' K
                                                end
0 c2 B- `8 P! W! }0 ]- `                                        else8 C! M' \% h* J* a" J5 a; f
                                                begin- y* M* I' V' ?- s4 t! F. [& s
                                                        status <= s_done;
0 h  n* w& S7 V5 [, t$ ^  H                                                end% K5 o& X: Z; Q6 D1 T
                                       
: A. w, |! _  y                                end  L3 J, l9 m+ I
                               
& @9 e" s" x; `. d) Q                        s_calc2:
& B! v  N" O. L. |. H                                begin
" ]0 r2 `# g+ G: C# A                                        if(temp_a[63:32] >= tempb)& ?, I( j5 _' w3 s$ }
                                                begin
4 g  l+ A  I' C6 h$ q                                                        temp_a = temp_a - temp_b + 1'b1;; |. z  R5 X; `' Q3 l3 C% s; C
                                                end; I- d: b. I' C( B
                                        else
7 t( P5 w1 _( @# k                                                begin7 a+ X, Q& n8 g' A5 q# s
                                                        temp_a = temp_a;; I  I; G' E5 C' ?
                                                end
6 ?. M2 ?6 _1 c, e0 |5 H                                        i <= i + 1'b1;        ! `% t4 t* Z6 c! n1 o2 P- k
                                        status <= s_calc1;
5 Y- v/ K* n" V* o/ R                                end- ]2 l0 [$ V) S/ N+ S. Z
                       
! e; N# j1 V8 \                        s_done:
+ I, t! K+ x% }* A3 `7 o; T1 B3 u                                begin4 o( q6 R4 D, [* C9 [
                                        yshang <= temp_a[31:0];
3 B0 K7 n: T0 b                                        yyushu <= temp_a[63:32];$ C/ i) O& E/ y. O: H  L
                                        done <= 1'b1;! i4 b& `% F# M
                                        + D9 {% w/ ]# w$ G/ U, r
                                        status <= s_idle;
0 L+ \5 [, I* R; e0 `& C                                end
$ U1 h, t( i( ~2 E. J& C& j                       
+ c5 y5 Z2 j+ f; F. V                        default:
0 _$ r( N0 t2 {# s9 k+ ~                                begin; m" t& w* f/ t1 K* @" p' z
                                        status <= s_idle;5 }% |( N5 h: [& v6 x( v
                                end
+ F- ?, B" m5 ?8 j) m8 l/ J                        endcase
7 C. W5 K: A5 ?' i6 U' r                end3 M1 c  I0 y1 a) z: K" T
! Z0 M9 h6 K: D8 z. d
end5 E* i; @; |; b( |, w! O9 v+ p
2 x' r. ^# |' i9 J" D+ n2 ]
6 g( J. @: B# h
endmodule
! k' w  b% f& j0 X9 ?9 l( d# m
2 ~( z& q$ d+ r7 x* S
, Z2 {( s3 ?3 N2 j6 J) K& C/*************** EOF ******************/0 X. s5 t7 f- B

$ w+ K0 I( v7 \
" d" i: \, b7 `) f6 P# S4 s% J+ G) _$ Z6 m; d* Y; p
  u" k6 |! X0 X- ]' N
b,div_rill_tb.v
3 @9 H' J, Q$ C5 c+ m
& U- _$ v4 u4 ]$ ?3 G7 n! g
3 c+ j8 v9 J  u/*
# n! q! r0 a2 Z* module:div_rill_tb
5 @. r! A: w8 `9 T, p* file name:div_rill_tb.v* d; L! L2 x$ w4 C6 G5 ~
* syn:no
; K- S& }+ ~8 B* author:rill5 w& G, J0 Y0 ^7 S- s6 K
* date:2014-04-10  r7 x: m: a: g9 W: L+ w
*/
  |0 r2 F9 l9 l9 x+ r6 Q) {) C/ o% z  j* Q- Y

4 L+ p* L( L# d# j`timescale 1ns/1ns
6 Z' A  Q& Y# `$ y8 N" ^
6 p2 m( D! A# a8 amodule div_rill_tb;7 K- U2 m$ h; ?1 w6 }& \7 [
/ q# T% X% O; ^2 b4 o
reg clk;
/ R9 b9 [; K6 G, w8 X! b5 Sreg rst;
% X2 z9 Z" j6 x; u1 b1 K4 X& sreg enable;; c# L0 b7 O9 ]
, z" {3 t' H) Q+ X
reg [31:0] a;
9 j, R2 e/ ^' H7 kreg [31:0] b;
( K% ?/ w/ p1 v7 }+ awire [31:0] yshang;2 r9 o  Q6 Q' g# ^% C) D6 A  Q6 D
wire [31:0] yyushu;
% ^6 l" f6 U2 H' w- Z1 B& L0 ], S6 J9 o( F$ ^# J. I% l! ^
wire done;% l. U6 ?8 B: l. [8 a& j
  P3 [, W$ E- a( ~
initial
: O3 u9 Z" {2 z3 abegin
2 }4 O! U! Z4 j  E$ _% Z: j0 `# _        clk = 0;
$ R8 G* A( `3 C        * s1 ~, {: g; Y7 d- P0 X
        #10# @6 A) }8 l1 E2 q/ r8 M9 V3 d5 y
        rst = 1;
8 d  @* D: Q, O        #20# W0 c% C  O7 W( D7 Y: i
        rst = 0;1 E  [0 i2 l  M4 Z. ~; k% j
        . I# ?7 U) `3 Z6 J6 @4 Y
        #15
" y7 V; J4 e2 ~4 d" ^$ f3 l9 m3 D        enable =1;2 n+ b' d% r/ c  H7 q' X, B
        a = 2;//$random()%10000;; }  N$ f8 `) V7 Z) S0 ?
        b = 7;//$random()%1000;
- R" g. \( d. L! o7 W        #10$ J1 P4 U) u* s9 P3 C
        enable =0;
( J' N: G6 W& g       
- }1 b: r% q/ i, u: y( `0 R        #1000" D* t. Y# I! J5 o7 q& n
        enable =1;+ s, ~# u% N4 ~9 m
        a = 7;//$random()%1000;9 n- I& n- w; R! X
        b = 2;//$random()%100;
8 S9 T* z5 a2 S        #10" t) Y# }3 g/ V; P7 T7 n
        enable =0;
5 {- J/ b; R! q. C        6 W+ {' ~* d4 N1 B( h
        #1000' h1 _! a0 ]# v5 ~1 O3 ?" f
        enable =1;$ ]& s2 G) O, E  c
        a = 7;//$random()%100;
: n5 P: k( ?* Z( u$ R9 n        b = 7;//$random()%10;        / c8 L2 n1 f# A' j' A# b
        #106 I- ~5 `# z9 S8 ~; x3 v
        enable =0;0 `( p! Z; Q* ~& s/ \5 b
       
) D& [8 j2 z+ f        #1000 $stop;- R: `7 t6 A" r. W' ~2 C
end
8 T2 q; _  {% q9 j; Q
: \# @: v7 @( [" Xalways # 5 clk = ~clk;
* ?$ F, U9 j( z3 x1 P7 O
5 I! d. Y( Y( {* j) _, Pdiv_rill DIV_RILL
) {& F' H, B0 q" w, Z5 l(( I6 J4 r1 Y5 j3 J$ O# K% k7 S/ k
.clk (clk),
- x+ D4 S4 J. c6 p5 c# H.rst (rst),
- g/ h2 e& `, O) i- v; i* H) t' h. ^! @; J: f
.enable (enable),
* W8 g% E  {+ M; G. T6 ~.a (a), % |* q8 A. c: V  C  J- F$ m, p
.b (b),
0 N! E  ^; ]/ T8 y0 _$ G* f; {$ b, G( P
.yshang (yshang),
# y6 K0 f, K- t: o2 U0 N" T.yyushu (yyushu),$ z: q9 @) c& T! {' J4 N- Y8 s
& _0 p+ o0 Q! G4 s  _$ a
.done (done)
+ A1 s+ E4 Y) m. m5 X);; d/ K2 |* C4 T0 b$ U$ H7 R
* P2 U9 |1 I* F) z
endmodule
. y  i* A. G8 L. S5 H. ~1 u$ y' V/******** EOF ******************/( d( c# u. U( [/ w: T$ a

% b5 f% L: B+ ?  Y" Z2 V5 y) o
5 T4 k: q- t. N3 M4 `* ~/ U0 d
' A8 P3 c# ~- Z$ d2 X( c2 v: }7 t$ v
2,,验证结果
; D, |4 n6 ]# p- u) ^% d# g7 V7 a( F: x/ A9 z+ q; V  c
! j% z5 k! K: o) F5 g

0 q6 m1 Y3 _, B* \6 u3 ^7 u( B1 ?2 ]" L2 m# y0 P

0 j5 m+ {$ N' _/ f7 L4 m  D5 P
& H3 m& S7 d1 M& t1 ~% [
8 t) a8 d: q5 Y8 V5 p4 |# W/ I: m7 E$ E: H' f3 R

该用户从未签到

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

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

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

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