本文对原文的代码做了一些注释和微调,为的是更加方便理解!!!
一、逐次逼近算法逐次逼近算法流程如图 1所示,首先数据输入data[7:0],接着设置实验值D_z[3:0]和确定值D_q[3:0],然后按照从高往低的顺序,依次将每一位置1(如D_z[3]置1),再将实验值平方后与输入数据比较,若实验值的平方大于输入值(D_z^2 > data
),则此位为0(D_q[3]为0),反之(D_z^2 ≤ data
)此位为1(D_q[3]为1);以此迭代到最后一位。
可见,如果是n bit的数据,那么需要n/2次迭代,每次计算如果一个周期,则需要n/2个周期。
module sqrt
#( //8,4,5
parameter d_width = 8,
parameter q_width = d_width/2,
parameter r_width = q_width + 1 )
(
input wire clk,
input wire rst_n,
input wire i_vaild,
input wire [d_width-1:0] data_i, //输入
output reg o_vaild,
output reg [q_width-1:0] data_o, //输出
output reg [r_width-1:0] data_r //余数
);
//--------------------------------------------------------------------------------
// 注意这里使用了流水线操作,输出数据的位宽决定了流水线的级数,级数=q_width
reg [d_width-1:0] D [q_width:1]; //保存依次输入进来的被开方数据
reg [q_width-1:0] Q_z [q_width:1]; //保存每一级流水线的实验值
reg [q_width-1:0] Q_q [q_width:1]; //由实验值与真实值的比较结果确定的最终值
reg valid_flag [q_width:1]; //表示此时寄存器D中对应位置的数据是否有效
//--------------------------------------------------------------------------------
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
begin
D[q_width]
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?