对数的作用

log2是指2的对数,对于二进制的计算机系统来说非常有用。比如,10bits的地址线,可寻址的地址空间为2^10。那么反过来对于1024深的地址空间,需要多少bits的地址线?需要用log2(depth)来计算。

如何求对数

system verilog 有系统函数$clog2可以实现2的对数。但是系统函数使用上有一定的缺陷。比如1的对数,数学上 log2(1)=0 没有问题。但是工程上就有问题了。仍然拿memory举例,深度为1的memory,地址位宽仍然需要1bits(不存在0bit的信号)。因此在使用上需要有所调整,方法就是再加上一个运算:

real_width = (depth == 1 ? 1:$clog2(depth))

下面是clog2的计算表格,与数字的二进制长度的对比。

n integer_length $clog2
0 0 0
1 1 0
2 2 1
3 2 2
4 3 2
5 3 3
6 3 3
7 3 3
8 4 3
9 4 4
10 4 4

语法支持

$clog2是verilog 2005版本及以上才有的,因此工具编译的时候需要指定版本号。以vcs编译为例:

vcs +v2k xxx.v

或者:

vcs -sverilog xxx.v

自定义函数

如果其他老版本的工具不支持2005以上版本的语法,需要手动实现log2的函数。
在使用clog2的地方加入:

`include "clog2_function.vh"

clog2的函数体:

function integer clog2;input integer value;integer temp;begintemp = value - 1;for (clog2 = 0; temp > 0; clog2 = clog2 + 1) begintemp = temp >> 1;endend
endfunction

http://fpgacpu.ca/fpga/clog2_function.html

verilog 中的 log2相关推荐

  1. verilog中数组的定义_开源仿真工具Icarus Verilog中的verilog parser

    前面提到用flex和bison开处理命令行参数,回顾一下:开源仿真工具Icarus Verilog中的命令行参数处理方法. 那么Verilog的parser又是怎么实现的呢?简单地说,与做命令行参数的 ...

  2. FPGA的设计艺术(18)如何使用Verilog中的数组对存储器进行建模?

    前言 Verilog中的二维数组很有用,可以使用for以及generate for配合二维数组进行使用,可以代替大量寄存器的场合,其实大量同类寄存器可以使用存储器进行代替,Verilog中可以使用二维 ...

  3. Verilog初级教程(21)Verilog中的延迟控制语句

    文章目录 前言 正文 延迟控制语句 事件控制语句 Named Events Event or operator 往期回顾 参考资料及推荐关注 前言 Verilog中的延迟控制有两种类型–延迟和事件表达 ...

  4. Verilog初级教程(20)Verilog中的`ifdef 条件编译语句

    文章目录 前言 正文 语法 示例 Testbench文件 往期回顾 参考资料及推荐关注 前言 `ifdef条件编译语句在逻辑设计中还是很常见的,但也常见一些滥用的情况,这应该避免. 应该在什么情况下使 ...

  5. Verilog初级教程(15)Verilog中的阻塞与非阻塞语句

    文章目录 前言 正文 阻塞赋值 非阻塞赋值 往期回顾 参考资料以及推荐关注 前言 本文通过仿真的方式,形象的说明阻塞赋值以及非阻塞赋值的区别,希望和其他教程相辅相成,共同辅助理解. 正文 阻塞赋值 阻 ...

  6. Verilog初级教程(14)Verilog中的赋值语句

    文章目录 前言 正文 合理的左值 过程性赋值(Procedural assignment) 连续赋值 过程连续性赋值 往期回顾 前言 何为赋值语句?即将值放到线网或者变量上,这种操作称为赋值,英文:a ...

  7. Verilog初级教程(12)Verilog中的generate块

    文章目录 前言 正文 generate for generate if generate case 参考资料 本系列博文 前言 verilog中的generate块可以称为生成块,所谓生成,可以理解为 ...

  8. Verilog初级教程(11)Verilog中的initial块

    文章目录 前言 正文 语法格式 initial块是用来干什么的? initial块何时开始又何时结束? 一个模块中允许有多少个initial块? 参考资料 写在最后 前言 仿真中通常会依次执行一组Ve ...

  9. FPGA之道(37)Verilog中的编写注意事项

    文章目录 前言 Verilog中的编写注意事项 大小写敏感 Verilog中的关键字 范围定义的正确使用 不要省略begin与end 注释中斜杠的方向 编译指令中的前导符号 混用阻塞和非阻塞赋值的危害 ...

  10. FPGA之道(36)Verilog中的编译指令

    文章目录 前言 Verilog中的编译指令 define指令 timescale指令 inlcude指令 前言 本文摘自<FPGA之道>,一起来了解下Verilog中的编译指令. Veri ...

最新文章

  1. 64位win7安装vs2010出现“组件安装失败...”等问题的解决方法
  2. Java项目:仿小米电子产品售卖商城系统(java+SpringBoot+Vue+MySQL+Redis+ElementUI)
  3. 【初窥javascript奥秘之事件机制】论“点透”与“鬼点击”
  4. SAP行列转换的一个方法
  5. 为什么不可以使用哈曼顿距离_哈曼卡顿音乐琉璃1代2代评测,不但抓耳,还让你视线也难离开...
  6. 看懂SqlServer查询计划
  7. CentOS 5 全攻略 -- 一步一步配置详解
  8. java被放弃了_为什么学Java那么容易放弃?
  9. 2011-9-11 凌晨00:46
  10. eplan单线原理图多线原理图_EPLAN-文本
  11. windows和linux之间共享文件 samba的使用
  12. 流畅的 Python
  13. android多国语言包命名规则
  14. MFC编程 小说分割器
  15. SAP ABAP BDC调用
  16. python:实现连接mysql数据库(附完整源码)
  17. 生产制造业ERP系统模块
  18. Django3创建数据库表模型及 Django 管理页面
  19. 英语 | Day19、20 x 句句真研每日一句(去修饰、嵌套)
  20. MFC手动添加窗口 最大化 最小化 还原 关闭

热门文章

  1. 密码找回逻辑漏洞总结
  2. php中用div句子给背景图片添加文字,PHP给图片添加文字水印实例
  3. vue 图片写入文字,图片注入文字,图片添加文字
  4. 2021年年4月证券从业资格考试《金融市场基础知识》真题(考生回忆 版)
  5. 用js两张图片合并成一张图片
  6. 『数字信号处理实践』仅利用ArduinoUNO通过脉宽调制生成DTMF
  7. 外贸自建站优势渐明,你还要观望多久!2018加油
  8. Air780E模块PPP应用开发指南
  9. qq互联android sdk,qq互联.Android_SDK_V2.0使用说明.doc
  10. 吉他入门教程之吉他音阶训练——认识音阶