数字IC除法器结构详解
创作时间:
作者:
@小白创作中心
数字IC除法器结构详解
引用
CSDN
1.
https://blog.csdn.net/qq_43433724/article/details/139069564
在数字电路设计中,除法器是一个重要的算术单元。本文将详细介绍如何通过Verilog实现一个简单的数字IC除法器,包括其工作原理、代码实现以及仿真测试。
在数字电路中,如何可以实现除法器呢?
我们先以二进制除法的运算过程为例:

上图中,蓝色表示被除数,红色表示商,紫色表示余数。
如1011(十进制11)除以0011(十进制3)的运算过程,首先从最高位开始,第一位是1,显然不够除以0011,因此本位的商为0,然后扩展下一位变为10依然不够,商继续为0,再扩展一位变为101,此时大于0011,因此将商置1,得到余数010;然后扩展下一位,变为0101,得到商为1,余数为010,因为到了最低位,因此计算完毕,最终结果商为011(十进制3),余数为010(十进制2)。
因此,我们可以通过将上述的算法过程用verilog实现,得到一个除法器。
核心要素如下:
移位
移位表示要从最高位开始和除数进行比较,每比较一次,就需要将下一bit扩展进来
比较器
判断扩展后的数是否大于除数,如果是则商置1
加法器/减法器
用于计算余数以及商
给出如下算法步骤:
①判断最高位temp是否大于除数,是则商加1,余数=temp-除数;否则temp={temp,被除数左移一位后的最高bit};
②循环判断n次。
Verilog如下:
module division(
input clk,
input rst,
input [3:0]a,
input [3:0]b,
input valid,
output reg [3:0]quotient,
output reg [3:0]remainder,
output reg result_valid
);
reg start;
reg start_dl;
reg start_dl2;
reg [1:0]cnt;
reg [3:0]temp;
reg [3:0]quotient_tmp;
always@(posedge clk or posedge rst)
begin
if(rst)
start<=0;
else if(cnt==3'd3)
start<=0;
else if(valid)
start<=1'b1;
else
start<=start;
end
always @(posedge clk or posedge rst)
begin
if(rst)
begin
start_dl <= 0 ;
start_dl2 <= 0 ;
end
else
begin
start_dl <= start ;
start_dl2 <= start_dl ;
end
end
reg [3:0]a_reg;
reg [3:0]b_reg;
always@(posedge clk or posedge rst)
begin
if(rst)
begin
a_reg<=0;
b_reg<=0;
end
else if(start)
a_reg<=a_reg<<1;
else if(valid)
begin
a_reg<=a;
b_reg<=b;
end
else
begin
a_reg<=0;
b_reg<=0;
end
end
always@(posedge clk or posedge rst)
begin
if(rst)
cnt<=0;
else if(start)
cnt<=cnt+1'b1;
else
cnt<=0;
end
always@(posedge clk or posedge rst)
begin
if(rst)
begin
temp<=0;
quotient_tmp<=0;
end
else if((start|start_dl)&&temp>=b_reg)
begin
temp<={temp-b_reg,a_reg[3]};
quotient_tmp<=(quotient_tmp<<1)+1'b1;
end
else if((start|start_dl))
begin
temp<={temp,a_reg[3]};
quotient_tmp<=quotient_tmp<<1;
end
else
begin
temp<=0;
quotient_tmp<=0;
end
end
always@(posedge clk or posedge rst)
begin
if(rst)
begin
quotient<=0;
remainder<=0;
result_valid<=0;
end
else if(start_dl2&&(!start_dl))
begin
quotient<=quotient_tmp;
remainder<=temp>>1;
result_valid<=1;
end
else
begin
quotient<=0;
remainder<=0;
result_valid<=0;
end
end
endmodule
tb如下:
module tb();
reg clk=1;
reg rst=1;
reg [3:0]a;
reg [3:0]b;
reg valid;
always #5 clk=~clk;
initial begin
#100 rst=0;
#100
a=4'b1011;
b=4'b0011;
valid=1'b1;
#10
valid=0;
end
division inst_division
(
.clk (clk),
.rst (rst),
.a (a),
.b (b),
.valid (valid),
.quotient (quotient),
.remainder (remainder),
.result_valid (result_valid)
);
endmodule
仿真结果如下:
热门推荐
探索天王星:美国天文学“十年计划”公布最新旗舰任务
老式油烟机清洗指南:如何彻底清洗老式油烟机
古生物学有助于解释大规模灭绝
卡贴机使用指南:优势、应用场景与选购建议
从新能源汽车到航空航天,高分子改性材料如何成为多行业创新的关键?
规则怪谈视频:探索未知领域的诡异规则与深层含义
高三孩子焦虑失眠该如何开导,国内哪个青少年心理疏导正规
大模型怎么搭建:从零开始的详细步骤与关键技巧
备用机选购指南:从需求分析到品牌推荐
房贷问题与家庭财务规划:如何有效管理与优化
生辰八字与小人运势:如何化解八字中的小人之气
研究揭示人脑如何通过语音韵律理解交际意图
苹果仓的费用是怎样计算的?这种计算方式对市场有何影响?
零缺陷质量管理:从技术问题到管理体系的全面升级
业主自治管理物业的多种方式解析
疤痕疙瘩的治疗方法
疤痕疙瘩的治疗方法有哪些
地图:它们在地理中的重要性及其在日常生活中的用处
医疗事故赔偿指南:证据准备、赔偿标准及解决途径
算力澎湃!中国算力网粤港澳大湾区算力服务平台上线
八字中的死木与活木:含义、作用与补救方法
传国玉玺在历史上有着什么样的故事?它最后去了哪里?
湖北浠水:谱好乡村振兴两重奏 唱响戴家洲村最强音
湖北浠水:强化生态文明示范 引领绿色发展新风尚
姐妹之间如何建立亲密友好的关系?
魔法和神秘学怎样催生了科学?从炼金术士牛顿到美人鱼死忠粉林奈…
如何合理计算房屋面积?这种计算对购房决策有何直接影响?
石敬瑭:儿皇帝之称与千古罪人之辩
【医疗问答】早餐吃什么能帮助提高工作效率?
家居装修常见增项漏项解析:教你精准控制预算避免踩坑