您当前的位置: 首页 >  面试

FPGA硅农

暂无认证

  • 2浏览

    0关注

    282博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

数字IC面试手撕代码(八)

FPGA硅农 发布时间:2022-03-19 22:21:30 ,浏览量:2

问题

给定8bit无符号整数a,b,求a除以b(b不为0)的商q和余数r。

方法

第一种能够想到的方法,就是a一直减去b,一直减到差小于b为止,此时,这个最终的差即为余数,而减去b的次数即为商。然而,这个方法在商比较大的时候需要许多个周期才能得到结果,因此并不吸引人。 另一种方法如下图所示 在这里插入图片描述 步骤如下: 1.令a_r={N’d0,a},b_r={b,N’d0} 2.在每个时钟周期,将a_r左移一位,末尾补0,然后与b_r比较;若大于b_r,则a_r=a_r-b_r+1,否则继续比较 3.移位N次后,a_r的高N位为余数,低N位为商。 可以看到,该方法在求商和余数时,所需的时钟周期数恒为N(N为a,b的位宽),因此,相对于前一种方法,在商比较大的时候,具有明显的优势。

RTL代码实现

设计文件(以8bit无符号整数除法为例)

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2022/03/18 21:37:17
// Design Name: 
// Module Name: demo
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module demo
(
    input logic clk,
    input logic rst_n,
    input logic [7:0] a,
    input logic [7:0] b,
    input logic valid,
    output logic [7:0] q,
    output logic [7:0] r,
    output logic ready
);
logic [15:0] a_r;
logic [15:0] b_r;
logic [31:0] cnt;                //计数器
logic busy;
logic [15:0] a_shift;
assign a_shift={a_r[14:0],1'b0};                       //a_r左移一位
//
always_ff@(posedge clk,negedge rst_n)
if(~rst_n)
    a_r            
关注
打赏
1658642721
查看更多评论
0.0383s