Verilog中两种位宽声明方式在赋值和例化时的思考

这篇具有很好参考价值的文章主要介绍了Verilog中两种位宽声明方式在赋值和例化时的思考。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


近来在学习VHDL时发现其有TO和DOWNTO两种声明位宽的方式,不同方式在赋值操作时存在差异,容易混淆。想来Verilog也存在这种问题,故在此进行一个简单的讨论。

众所周知,在Verilog中声明数据位宽有两种方式:
第一种为DOWNTO方式,这种方式是我们通常使用的声明位宽的方法,在声明时,左侧为高位,右侧为低位,即小端存储。

wire [7:0] DOWN_TO;        //声明一个8位的wire型变量DOWN_TO

第二种为TO方式,声明时左端为低位,即大端存储。

wire [0:7] TO;        //声明一个8位的wire型变量TO

下面就这两种声明方式讨论其在赋值和例化时的差异:

一、赋值

现在我们对TO和DOWN_TO赋值16进制数AA(二进制:10101010)。

assign TO = 8'haa;
assign DOWN_TO = 8'haa;

直接编译后编译器会提醒我们部分信号时钟为高或低。

Verilog中两种位宽声明方式在赋值和例化时的思考,fpga开发
可以发现DOWN_TO和TO信号值相等,但各位正好相反。小端存储赋值时高位对高位,大端存储赋值时高位对低位。

二、例化

1.大端->大端,小端->小端

仍然定义小端存储DOWN_TO,大端存储TO,包装成模块。
首先用大端接收大端,小端接收小端:

wire [0:7] TO1;
wire [7:0] DOWN_TO1;
TO_TEST U(
			.TO(TO1),
			.DOWN_TO(DOWN_TO1)
		  );
			

仿真结果如下

Verilog中两种位宽声明方式在赋值和例化时的思考,fpga开发
结果与上面一致,值相等但各位相反。

2.大端->小端,小端->大端

接下来用大端接收小端,小端接收大端:

wire [7:0] TO2;
wire [0:7] DOWN_TO2;
TO_TEST U(
			.TO(TO2),
			.DOWN_TO(DOWN_TO2)
		  );
			

Verilog中两种位宽声明方式在赋值和例化时的思考,fpga开发
值仍然不变,但TO2由大端变成了小端,DOWN_TO2由小端变成了大端。


总结

Verilog中有大端和小端两种位宽定义方式,在赋值时需要注意两种方式的差异(反转数据或许用得着)。
在进行例化时,值将会正常传递,但存储方式总取决于最外层的定义。文章来源地址https://www.toymoban.com/news/detail-642199.html

到了这里,关于Verilog中两种位宽声明方式在赋值和例化时的思考的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 011:Mapbox GL两种方式隐藏logo和版权,个性化版权的声明

    第011个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中用两种方式隐藏logo和版权,并个性化版权的声明 。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 示例效果

    2023年04月17日
    浏览(54)
  • Unity中两种播放器

    一、Animator动画播放器 1.简单搭建UI,通过Slider来控制Cube当前状态动画的播放 2.给Cube加上Animator组件,做两个简单的动画(随便做个来回移动的动画就行),注意要关闭动画的循环播放  3.给摄像机挂在脚本,并拖拽对应组件  4.给Slider挂载脚本 5.运行Unity即可 二、Video Player视

    2024年02月07日
    浏览(40)
  • Verilog基础:表达式位宽的确定(位宽拓展)

    相关文章 Verilog基础专栏 https://blog.csdn.net/weixin_45791458/category_12263729.html 表达式位宽         如果想要在计算表达式时获得和谐一致的结果,那么控制表达式中的位宽就很重要。很多时候方法很简单。例如,如果在两个16位数据的reg变量上做位与操作,那么计算结果很显然

    2023年04月18日
    浏览(31)
  • 记录一下verilog重复例化的两种方式

    0 前言 这段时间例化了挺多mem,过程中也了解到了一些新的东西,在这里记录一下 1 for循环方式例化方法 先给出 sub_module 要将这个module分别例化成 u_sub_0 和 u_sub_1 ,并且每个都例化四次 for循环的实现方式如下 来看看例化后的效果 可以看到,总共4组inst,每组inst中存在两个

    2024年02月11日
    浏览(42)
  • Verilog 实现优先编码器的两种方式

    1.1 定义:  为了防止多条线信号同时有效,规定只对序号最高的有效信号线进行编码,相当于该线的优先级别最高,称为优先编码器 。      优先编码器可以通过  if else 语句和case语句两种方式实现。 输入描述: ①输入描述: input      [8:0]         I_n 输出描述: ①输出

    2024年02月08日
    浏览(48)
  • verilog $clog2 取位宽函数

    问题在于: 1、每次使用到计算PIX位宽时都需要定义该函数,工作量重复、效率较低。 2、因为函数定义在模块内部,无法对输入输出信号使用该函数。 其功能就是对输入整数实现以2为底取对数,其结果向上取整。在Vivado 2017以后的版本中,可以直接使用系统函数$clog2()。且可

    2024年02月17日
    浏览(36)
  • JavaScript中两种定时器和清除定时器的使用

    ​ 定时器就是在一段特定的时间后执行某段程序代码。 以指定的时间间隔(时间单位为毫秒)调用一次函数的定时器。 轮循定时器是以指定的时间间隔(时间单位为毫秒)重复调用一个函数的定时器。 clearTimeout(timeoutID) :清除只执行一次的定时器(setTimeout函数)。 timeoutID 为

    2024年02月13日
    浏览(47)
  • Verilog手撕代码(7)数据位宽转换

    数据位宽转换器,一般常用于模块接口处,比如一个电路模块的输出数据位宽大于另一个模块的输入数据位宽,此时就需要进行数据位宽转换。比如SATA控制器中,内部数据位宽为32bit,但外部物理收发器PHY的接口通常为16bit,或者8bit,在不使用FIFO进行缓存的情况下,可以使用

    2024年02月10日
    浏览(46)
  • Verilog实现32位到8位数据位宽转换

    Verilog实现32位到8位数据位宽转换 数据位宽的转换在数字电路设计中是一项必要的任务。在FPGA中,通过Verilog语言实现数据位宽转换可以有效地减小硬件资源的占用,提高系统效率。本篇文章将介绍如何使用Verilog语言实现32位到8位的数据位宽转换。 首先,我们需要定义输入和

    2024年02月10日
    浏览(42)
  • (45)Verilog实现数据位宽转换【8位-32位】

    1)目录 2)FPGA简介 3)Verilog HDL简介 4)Verilog实现数据位宽转换【8位-32位】 5)结语 FPGA(Field Programmable Gate Array)是在PAL、GAL等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有

    2024年02月08日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包