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

2023-05-16

文章目录

    • 一、赋值
    • 二、例化
      • 1.大端->大端,小端->小端
      • 2.大端->小端,小端->大端
    • 总结


近来在学习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;

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

在这里插入图片描述
可以发现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)
		  );
			

仿真结果如下

在这里插入图片描述
结果与上面一致,值相等但各位相反。

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

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

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

在这里插入图片描述
值仍然不变,但TO2由大端变成了小端,DOWN_TO2由小端变成了大端。


总结

Verilog中有大端和小端两种位宽定义方式,在赋值时需要注意两种方式的差异(反转数据或许用得着)。
在进行例化时,值将会正常传递,但存储方式总取决于最外层的定义。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • Verilog 位更改位置

    假设我有一个寄存器reg 15 0 my reg 其中包含一个16位signed sample 如何找到第一位变化的位置 意思是 如果假设my reg 16 b0001011011010111 我怎么知道第一个变化是0 to 1 is at
  • 带有always_comb结构的Systemverilog问题

    我对这个 SystemVerilog 代码有疑问 这是代码 module mult multiplicand multiplier Product clk clear Startm endm input 31 0 multiplicand
  • 如何使用触发器输出作为复位信号的输入

    我在柜台里放了 3D 触发器 一旦达到 5 101 我想将 FF 复位输入设置为高 使用或门 复位为低电平有效 这几乎可以工作 但是 当我最初运行程序时 触发器的 Q 输出都是未知的 因此 最初 或门的复位输入为低电平 但是 因为一开始 Q
  • 简单赋值时不输出期望值

    当我将一些值分配给具有四位的变量时 当我简单地输出该值时 我会得到意想不到的结果 我以前从未见过这个 想知道我是否在语法上做错了什么 module main reg 3 0 x initial begin monitor b x x 001
  • [Verilog] Verilog 基本格式和语法

    主页 元存储博客 全文 3000 字 文章目录 1 声明格式 1 1 模块声明 1 2 输入输出声明 1 3 内部信号声明 1 4 内部逻辑声明
  • 使用 Verilator 和 VPI 读取寄存器数组

    所以我在我的verilog中定义了以下寄存器 reg 31 0 register mem 0 15 verilator public 我的目标是从我的 verilator c 代码中读取存储在其中的 16 个值中的每一个 我发现有关 VPI
  • 将枚举转换为逻辑

    考虑以下模块声明 module DFF d q CLK RESET parameter W 2 input W 1 0 d input CLK input RESET output logic W 1 0 q endmodule 当 d 和
  • 在逻辑中使用单端端口期待差异对?

    我使用的逻辑被设置为需要一个差分对时钟端口 然而 对于一个特定的应用程序 我只能输入一个单端时钟 由于硬件限制 修改逻辑以接受单端时钟不是一种选择 因为涉及许多文件和代码行 有没有办法可以输入单端端口并以某种方式将其馈送到模块的差异对端口
  • Verilog 错误:必须连接到结构网络表达式

    我收到错误 output or inout port Qout must be connected to a structural net expression 我评论了下面代码中发生错误的行 代码被修剪 压缩 我搜索了答案 似乎我无法将输
  • 在verilog中将wire值转换为整数

    我想将电线中的数据转换为整数 例如 wire 2 0 w 3 b101 我想要一个将其转换为 5 并将其存储在整数中的方法 我怎样才能以比这更好的方式做到这一点 j 1 for i 0 i lt 2 i i 1 begin a a w i
  • 在 Verilog 设计中产生时钟故障

    我正在使用 Verilog 设计芯片 我有一个 3 位计数器 我希望当计数器处于第 8 次循环时 应该有一个时钟故障 之后就可以正常工作了 在 Verilog 设计中产生时钟故障的可能方法是什么 在时钟信号上注入毛刺的一种方法是使用forc
  • 为什么 Verilog 不被视为编程语言? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 教授在课堂上说学生不应该说他们学会了用Verilog 编程 他说 Verilog 之类的东西不是用来编程的 而是用来设计的 那么 Verilog
  • 标识符必须用端口模式声明:busy。 (Verilog)

    我有如下所示的 Verilog 代码 当我编译它时 我收到以下错误消息 并且代码的第一行突出显示 Error 标识符必须用端口模式声明 busy Code module main clk rst start busy ready cnt s
  • verilog 中的案例陈述

    我遇到了优先级编码器设计 并找到了一种使用 case 语句来实现它的新方法 唯一令人困惑的是 case语句是否优先考虑case 例子 case 1 b1 A 3 Y lt 4 b1000 A 2 Y lt 4 b0100 A 1 Y lt
  • Verilog 双向握手示例

    我正在完成一个项目 要求是处理器内部功能单元之间的双向握手 我知道它是什么 但是有没有任何 标准 或一个简单的例子 我唯一能想到的就是两个单元之间 当它们之间有一条数据线并且当 X 发送到 Y 时 会给出一个单独的 发送 信号 当 Y 接收
  • 如何在 icarus verilog 中包含文件?

    我知道基本的 include filename v 命令 但是 我试图包含另一个文件夹中的模块 现在 该模块还包括同一文件夹中存在的其他模块 但是 当我尝试在最顶层运行该模块时 出现错误 C Users Dell Desktop MIPS
  • 仿真输出全为零

    我的设计模块和测试平台代码已编译 但是 当我模拟时 我没有得到正确的输出 谁能告诉我我的代码哪里出了问题 这是测试平台的代码 module testbench reg 511 0 FROM LS reg CLK reg 63 0 TO IF
  • 修改verilog模式缩进

    我试图让 verilog 模式使用 2 个空格缩进除 decls 和always 之外的所有内容 这是我添加到 emacs 中的内容 define are not indented setq veril
  • 警告:(vsim-7)无法在读取模式下打开自述文件“mem_content_01.dat”

    我正在尝试在 ModelSim 中运行测试模拟 但收到标题中的错误 我已经仔细检查过 该文件与我的项目位于同一位置 并且名称匹配得很好 有谁知道问题可能是什么 如果您需要查看代码的某些部分或类似内容 请告诉我 啊明白了 好吧 ModelSi
  • Modelsim 中的参数问题

    最近我遇到了以下问题 在 Quartus 软件中 我定义了 Verilog 模块 如下所示 module module name input w1 1 0 in1 input w2 1 0 in2 output w1 1 0 out1 pa

随机推荐