当前位置: 首页 > news >正文

【【Verilog典型电路设计之log函数的Verilog HDL设计】】

Verilog典型电路设计之log函数的Verilog HDL设计

log函数是一种典型的单目计算函数,与其相应的还有指数函数、三角函数等。对于单目计算函数的硬件加速器设计一般两种简单方法:一种是查找表的方式;一种是使用泰勒级数展开成多项式进行近似计算。这两种方式在设计方法和精确度方面有很大的不同。查找表方式是通过存储器进行设计,设计方法简单,其精度需要通过提高存储器深度实现,在集成电路中占用面积大,因此着这种方式通常在精度要求不高的近似计算中使用。泰勒级数展开方式采用乘法器和加法器实现,可以通过增加展开级数提高计算精确度。例:用Verilog HDL设计采用查找表方式的log函数,输入信号位宽4bits,输出信号位宽8bits
在这里插入图片描述
其中输入数据为一位整数位三位小数位精确到2-3,输出结果两位整数位六位小数位精确到26。其Verilog HDL程序代码是:

module log_lookup(x,clk,out);
input [3:0] x;
input clk;
output [7:0] out;
reg[7:0] out;
always@(posedge clk)   begin
case(x)
4'b1000:out<=8'b00000000;
4'b1001:out<=8'b00000111;
4'b1010:out<=8'b00001110;
4'b1011:out<=8'b00010101;
4'b1100:out<=8'b00011001;
4'b1101:out<=8'b00100000;
4'b1110:out<=8'b00100100;
4'b1111:out<=8'b00101000;
default:out<=8'bz;
endcase
end  
endmodule

下面是testbench

module log_lookup_tb;
reg clk;
reg [3:0]x;
wire [7:0] out;
initial    begin
x=4'b1000;
clk=1'b0;
repeat(7)     
#10 x=x+1;
end
always  
#5 clk=~clk;
log_lookup U1(.x(x),.clk(clk),.out(out));
endmodule

例:用Verilog HDL设计采用泰勒级数展开方式的log函数,输入信号位宽4bits,输出信号位宽8bits
泰勒级数的定义:若函数f (x)在点的某一邻域内具有直到(n+1)阶导数,则在该邻域内f (x)的n阶泰勒公式为:
在这里插入图片描述
泰勒级数可以将一些复杂的函数用多项式相加的形式进行近似,从而简化其硬件的实现。
logax在x=b处的泰勒展开为
在这里插入图片描述
误差范围为:
在这里插入图片描述
电路结构图如图所示
在这里插入图片描述
上述的log函数在X=1处展开,并且要求X的取值范围为1<X<2,输入4位二进制数据X精确到2-3,其中一位整数位四位小数位,输出8位二进制数据精确到2-6,其中两位整数位六位小数位。设计当中所用到的乘法器和减法器均采用前文所给出的减法器和乘法器。

module log(x,out);
input[3:0]    x;
output[7:0]   out;
wire [3:0]   out1;
wire [7:0]   out2,out3, out5, out;
wire [3:0]     out4; 
assign out4={out3[7:4]};  
assign out1=x-4'b1000;//(x-1) 
wallace U1(.×(out1),.y(4'b0111),.out(out2));
wallace U2(.x(out1),.y(out1),.out(out3));
wallace u3(.x(out4),.y(4'b0011),.out(out5));
assign out=out2-out5;
endmodule

下面是所显示的testbench

module log_tb;
reg [3:0] x=4'b1000;
wire [7:0] out;
log U1(.x(x),.out(out));
always
#10x=x+1;
always@(x)begin
if(x==4'b0000)$stop;
end
endmodule
http://www.lryc.cn/news/138671.html

相关文章:

  • 数字放大(C++)
  • FOC控制框架图
  • Spring工具类(获取bean,发布事件)
  • 腾讯云和阿里云服务器折扣对比_看看哪家划算?
  • GO语言中的Defer与Error异常报错详细教程
  • AP6315 DC单节锂电池充电IC 同步2A锂电芯片
  • PDF校对工具正式上线,为用户提供卓越的文档校对解决方案
  • WSL 配置 Oracle 19c 客户端
  • ChatGPT⼊门到精通(1):ChatGPT 是什么
  • idea启动正常,打成jar包时,启动报错
  • 软考高级系统架构设计师系列论文八十九:论软件需求分析方法和工具的选用
  • java八股文面试[JVM]——类加载器
  • CSS中如何实现元素之间的间距(Margin)合并效果?
  • 【实操干货】如何开始用Qt Widgets编程?(三)
  • 基于深度学习的图像风格迁移发展总结
  • 小程序页面间有哪些传递数据的方法?
  • bh002- Blazor hybrid / Maui 保存设置快速教程
  • 同源政策与CORS
  • 科技资讯|三星再申请智能戒指商标,智能穿戴进入更小型化发展
  • HarmonyOS开发第一步,熟知开发工具DevEco Studio
  • 【应急响应】Linux常用基础命令
  • 什么是Pytorch?
  • Baidu World 2023,定了!
  • ProxySQL+MGR高可用搭建
  • 【Unity小技巧】在Unity中实现类似书的功能(附git源码)
  • STM32设置为I2C从机模式(HAL库版本)
  • 牛客网Verilog刷题 | 入门特别版本
  • ROS通信机制之话题(Topics)的发布与订阅以及自定义消息的实现
  • 容灾设备系统组成,容灾备份系统组成包括哪些
  • 腾讯云服务器租用价格表_一年、1个月和1小时报价明细