verilog基础设计8-小米2022数字ic笔试编程题 16bit数除以8bit数 rtl实现

目录

1、除法器原理

2、无符号的除法器的实现

3、书写tb

4、仿真结果分析 


题目:除法器的verilog实现,16bit A,8bit B。C = A/B;

 1、除法器原理

          摘自别的博客,这里除法器的原理其实就是模拟人进行除法的过程,如下图以4bit数为例,抓要从以下几个方面考虑:

(1)为什么要扩展呢?

         个人理解,因为后面涉及到左移,会将实际参与运算的位数一位一位移到扩展位上参数运算,然后将每次运算的商通过+1/+0的操作,移到最低的bit位上,这也是后来取结果和余数的时候,为什么是低4位为商,高四位为最终的余数。

(2)a=a-b+1,是什么操作

        a-b其实就是模拟,人每次除法的操作,当a>b,就+1.将商移到LSB位,当a<b.其实就是那个位是0,就将0移到LSB位,每次右移操作,每次运算的商也会随之左移就依次得到0110,的结果。

2、无符号的除法器的实现

module division (
    input wire [15:0] A,
    input wire [7:0]  B,
    output wire [15:0] result,
    output wire  [15:0] odd
);
reg [15:0] a_reg;
reg [7:0] b_reg;


reg [31:0] temp_a;
reg [31:0] temp_b;

integer i;

//
always @(*) begin
    a_reg = A;
    b_reg = B;
end


always @(*) begin
    temp_a ={16'h0,a_reg};
    temp_b ={b_reg,16'h0};
    
    for(i =0;i < 16;i=i+1) begin
        temp_a = temp_a <<1;
        if(temp_a >= temp_b) begin
            temp_a = temp_a-temp_b +1;
        end
        else begin
            temp_a = temp_a;
        end
    end
end



assign  odd      = temp_a[31:16];
assign result    = temp_a[15:0];

endmodule 

3、书写tb

`timescale 1ns/1ps
module tb_division;


reg  [15:0] A;
reg  [7:0] B;
wire [15:0] result;
wire [15:0] odd;

integer i;

initial begin
    A=1;
    B=1;
    #100;
    for(i= 0;i <15;i=i+1) begin
        #20;
        A = {$random}% 65536;
        B =  {$random}% 256;
    end
    
    
end


division division_inst (
  .A(A),
  .B(B),
  .result(result),
  .odd(odd)
);



endmodule 

4、仿真结果分析 

分析一下仿真结果,

第一组: 123604/129=105......59

第二组:54793/99 = 553......46

第三组:........

仿真结果,与实际计算结果一致 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值