原创 oc8051除法算法解析

2008-10-5 22:26 3424 4 6 分类: 汽车电子

// synopsys translate_off
`include "oc8051_timescale.v"
// synopsys translate_on


module oc8051_divide (clk, rst, enable, src1, src2, des1, des2, desOv);
//
// this module is part of alu
// clk          (in)
// rst          (in)
// enable       (in)  starts divison
// src1         (in)  first operand
// src2         (in)  second operand
// des1         (out) first result
// des2         (out) second result
// desOv        (out) Overflow output
//


input clk, rst, enable;
input [7:0] src1, src2;
output desOv;
output [7:0] des1, des2;


// wires
wire desOv;
wire div0, div1;
wire [7:0] rem0, rem1, rem2;
wire [8:0] sub0, sub1;
wire [15:0] cmp0, cmp1;
wire [7:0] div_out, rem_out;


// real registers
reg [1:0] cycle;
reg [5:0] tmp_div;
reg [7:0] tmp_rem;


//以下的代码采用典型的试商算法


// The main logic
assign cmp1 = src2 << ({2'h3 - cycle, 1'b0} + 3'h1);
assign cmp0 = src2 << ({2'h3 - cycle, 1'b0} + 3'h0);


assign rem2 = cycle != 0 ? tmp_rem : src1;


assign sub1 = {1'b0, rem2} - {1'b0, cmp1[7:0]};
assign div1 = |cmp1[15:8] ? 1'b0 : !sub1[8];//sub[8]为符号位,1代表负,0代表正
assign rem1 = div1 ? sub1[7:0] : rem2[7:0];


assign sub0 = {1'b0, rem1} - {1'b0, cmp0[7:0]};
assign div0 = |cmp0[15:8] ? 1'b0 : !sub0[8];
assign rem0 = div0 ? sub0[7:0] : rem1[7:0];


//
// in clock cycle 0 we first calculate two MSB bits, ...
// till finally in clock cycle 3 we calculate two LSB bits
assign div_out = {tmp_div, div1, div0};
assign rem_out = rem0;
assign desOv = src2 == 8'h0;


//
// divider works in four clock cycles -- 0, 1, 2 and 3
always @(posedge clk or posedge rst)
begin
  if (rst) begin
    cycle <= #1 2'b0;
    tmp_div <= #1 6'h0;
    tmp_rem <= #1 8'h0;
  end else begin
    if (enable) cycle <= #1 cycle + 2'b1;
    tmp_div <= #1 div_out[5:0];
    tmp_rem <= #1 rem_out;
  end
end


//
// assign outputs
assign des1 = rem_out;
assign des2 = div_out;


endmodule

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户430347 2014-8-30 23:45

博主,你好,学习完MC8051现在学习OC8051,能否一起交流交流2424569389qq.com

用户1106417 2010-9-27 19:26

博主,您好 在下目前也正在研究MCU的一些东东,主要还是从oc8051开始的,目前进展比较困难,碰到了 一些问题,不知道是否方便请教您, 在下的qq:361252105 谢谢了
相关推荐阅读
用户1335534 2010-03-20 21:58
install vcs2006 in ubuntu
when i exe installer setup.sh i came across this follow error:error1:/bin/csh: bad interpreter: No s...
用户1335534 2010-03-19 00:34
install verdi in ubuntu
I Get the Solution from THIS:http://graynoise.konfuzo.net/poots.phpI'm trying to install ING's Home'...
用户1335534 2009-02-08 22:49
test
http://imgcache.qq.com/qzone/client/photo/swf/vphoto.swf?uin=414855582&fid=25385...
用户1335534 2008-10-29 22:12
思源科技,變大了!SpringSoft成為亞洲最大EDA公司
電子設計自動化廠商思源科技,5月27日宣佈完成收購美國Novas軟體公司及其他四家EDA公司,成為亞洲最大的EDA公司。<?XML:NAMESPACE PREFIX = O />這項收購動...
用户1335534 2008-10-09 00:27
how to fake a cpu name GS? 1
      看了龙芯产生过程,令俺热血沸腾,很想亲自体会一下一颗龙芯是怎样产生的,在这个全民造假的时代里,究竟有什么是真实的?好久不喝牛奶了,喝口水继续。     某年某月末日的某一天,莫些人突然想干...
用户1335534 2008-10-07 00:39
龙芯,世纪大伪芯
在汉芯造假事件后不久,龙芯2E高调露脸了。先来看看龙芯2E的性能:  9月13日,中国科学家在北京宣布研制成功新一代通用中央处理器芯片——龙芯2E,性能达到了中档奔腾Ⅳ处理器的水平。龙芯2E包含470...
EE直播间
更多
我要评论
2
4
关闭 站长推荐上一条 /3 下一条