verilog 中的 log2
对数的作用
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相关推荐
- verilog中数组的定义_开源仿真工具Icarus Verilog中的verilog parser
前面提到用flex和bison开处理命令行参数,回顾一下:开源仿真工具Icarus Verilog中的命令行参数处理方法. 那么Verilog的parser又是怎么实现的呢?简单地说,与做命令行参数的 ...
- FPGA的设计艺术(18)如何使用Verilog中的数组对存储器进行建模?
前言 Verilog中的二维数组很有用,可以使用for以及generate for配合二维数组进行使用,可以代替大量寄存器的场合,其实大量同类寄存器可以使用存储器进行代替,Verilog中可以使用二维 ...
- Verilog初级教程(21)Verilog中的延迟控制语句
文章目录 前言 正文 延迟控制语句 事件控制语句 Named Events Event or operator 往期回顾 参考资料及推荐关注 前言 Verilog中的延迟控制有两种类型–延迟和事件表达 ...
- Verilog初级教程(20)Verilog中的`ifdef 条件编译语句
文章目录 前言 正文 语法 示例 Testbench文件 往期回顾 参考资料及推荐关注 前言 `ifdef条件编译语句在逻辑设计中还是很常见的,但也常见一些滥用的情况,这应该避免. 应该在什么情况下使 ...
- Verilog初级教程(15)Verilog中的阻塞与非阻塞语句
文章目录 前言 正文 阻塞赋值 非阻塞赋值 往期回顾 参考资料以及推荐关注 前言 本文通过仿真的方式,形象的说明阻塞赋值以及非阻塞赋值的区别,希望和其他教程相辅相成,共同辅助理解. 正文 阻塞赋值 阻 ...
- Verilog初级教程(14)Verilog中的赋值语句
文章目录 前言 正文 合理的左值 过程性赋值(Procedural assignment) 连续赋值 过程连续性赋值 往期回顾 前言 何为赋值语句?即将值放到线网或者变量上,这种操作称为赋值,英文:a ...
- Verilog初级教程(12)Verilog中的generate块
文章目录 前言 正文 generate for generate if generate case 参考资料 本系列博文 前言 verilog中的generate块可以称为生成块,所谓生成,可以理解为 ...
- Verilog初级教程(11)Verilog中的initial块
文章目录 前言 正文 语法格式 initial块是用来干什么的? initial块何时开始又何时结束? 一个模块中允许有多少个initial块? 参考资料 写在最后 前言 仿真中通常会依次执行一组Ve ...
- FPGA之道(37)Verilog中的编写注意事项
文章目录 前言 Verilog中的编写注意事项 大小写敏感 Verilog中的关键字 范围定义的正确使用 不要省略begin与end 注释中斜杠的方向 编译指令中的前导符号 混用阻塞和非阻塞赋值的危害 ...
- FPGA之道(36)Verilog中的编译指令
文章目录 前言 Verilog中的编译指令 define指令 timescale指令 inlcude指令 前言 本文摘自<FPGA之道>,一起来了解下Verilog中的编译指令. Veri ...
最新文章
- 64位win7安装vs2010出现“组件安装失败...”等问题的解决方法
- Java项目:仿小米电子产品售卖商城系统(java+SpringBoot+Vue+MySQL+Redis+ElementUI)
- 【初窥javascript奥秘之事件机制】论“点透”与“鬼点击”
- SAP行列转换的一个方法
- 为什么不可以使用哈曼顿距离_哈曼卡顿音乐琉璃1代2代评测,不但抓耳,还让你视线也难离开...
- 看懂SqlServer查询计划
- CentOS 5 全攻略 -- 一步一步配置详解
- java被放弃了_为什么学Java那么容易放弃?
- 2011-9-11 凌晨00:46
- eplan单线原理图多线原理图_EPLAN-文本
- windows和linux之间共享文件 samba的使用
- 流畅的 Python
- android多国语言包命名规则
- MFC编程 小说分割器
- SAP ABAP BDC调用
- python:实现连接mysql数据库(附完整源码)
- 生产制造业ERP系统模块
- Django3创建数据库表模型及 Django 管理页面
- 英语 | Day19、20 x 句句真研每日一句(去修饰、嵌套)
- MFC手动添加窗口 最大化 最小化 还原 关闭
热门文章
- 密码找回逻辑漏洞总结
- php中用div句子给背景图片添加文字,PHP给图片添加文字水印实例
- vue 图片写入文字,图片注入文字,图片添加文字
- 2021年年4月证券从业资格考试《金融市场基础知识》真题(考生回忆 版)
- 用js两张图片合并成一张图片
- 『数字信号处理实践』仅利用ArduinoUNO通过脉宽调制生成DTMF
- 外贸自建站优势渐明,你还要观望多久!2018加油
- Air780E模块PPP应用开发指南
- qq互联android sdk,qq互联.Android_SDK_V2.0使用说明.doc
- 吉他入门教程之吉他音阶训练——认识音阶