# 整数开根号开方sqrt运算 **Repository Path**: LR_Zhang-home/sqrt-operation ## Basic Information - **Project Name**: 整数开根号开方sqrt运算 - **Description**: Verilog编写,可用于FPGA的整数开根号计算模块 - **Primary Language**: Verilog - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2023-02-20 - **Last Updated**: 2023-02-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 整数开根号开方sqrt运算 ## 介绍 用于FPGA/ASIC的整数开根号sqrt计算模块。 算法参考B站视频[FPGA设计之verilog实现开根号](https://www.bilibili.com/video/BV1we4y1U7zW/) 具有以下特性: - 位宽任意调整 - 输出开方结果和余数 - busy状态位 - 可综合的verilog语法 逻辑框图如下所示,推荐和B站视频一起食用: ![框图](/%E5%8E%9F%E7%90%86%E5%9B%BE.svg) ## 端口说明与例化模板 `DW`是例化参数,决定了`din_i` `sqrt_o` `rem_o`的数据位宽 |端口|方向|位宽|功能| |-|-|-|-| |clk|入|1|时钟信号| |rst_n|入|1|低电平复位,异步复位同步释放| |din_i|入|DW|开方数据输入| |din_valid_i|入|1|数据输入有效位| |busy_o|出|1|繁忙状态指示| |sqrt_o|出|(DW+(DW%2))/2|开方结果输出| |rem_o|出|DW-1|开方余数输出| |busy_o状态|说明|输入输出状态| |-|-|-| |0|空闲|可读取结果,可计算新的数据| |1|繁忙|din_valid_i拉高不会计算新的数据| ``` sqrt #( .DW (DW )//输入数据的位宽 ) u_sqrt( .clk (clk ),//时钟 .rst_n (rst_n ),//低电平复位,异步复位同步释放 .din_i (din_i ),//开方数据输入 .din_valid_i (din_valid_i ),//数据输入有效,高有效 .busy_o (busy_o ),//sqrt单元繁忙 .sqrt_o (sqrt_o ),//开方结果输出 .rem_o (rem_o )//开方余数输出 ); ``` ## 仿真 需要安装iverilog,安装见[教程](https://gitee.com/xiaowuzxc/SparrowRV/blob/master/doc/%E4%BB%BF%E7%9C%9F%E6%89%8B%E5%86%8C/%E5%AE%89%E8%A3%85iverilog%E4%BB%BF%E7%9C%9F%E7%8E%AF%E5%A2%83.md) 对于Windows系统,打开`RTL/tb/make.bat`即可仿真 对于Linux系统,在`RTL/tb`目录下打开终端,输入`make`即可仿真 ## 综合报告 32bit位宽 |FPGA器件|Fmax| |-|-|-| |Lattice ECP5U-25F|117MHz| |高云GW2A-LV18|151MHz| |安路EG4S20|205MHz|