【发布时间】:2022-12-08 03:55:40
【问题描述】:
使用 2001 标准带符号乘法很容易。
wire signed [7:0] A,B;
wire signed [15:0] Y;
assign Y = A*B;
我想知道如何使用没有“签名”关键字的 Verilog 1995 标准来完成此操作。 有没有人记得?
我不知道如何在 1995 年的标准中实现这个
【问题讨论】:
使用 2001 标准带符号乘法很容易。
wire signed [7:0] A,B;
wire signed [15:0] Y;
assign Y = A*B;
我想知道如何使用没有“签名”关键字的 Verilog 1995 标准来完成此操作。 有没有人记得?
我不知道如何在 1995 年的标准中实现这个
【问题讨论】:
您必须明确签署扩展 A 和 B。
assign Y = {{8{A[7]}},A}*{{8{B[7]}},B};
我不会相信任何不至少实现 Verilog-2001 的工具。
【讨论】:
根据 Sutherland 的文章“Verilog-2001:“Verilog 硬件描述语言的新特性指南”
“Verilog-1995 只提供一种带符号的数据类型,即整数变量。reg、time 和所有 net 数据类型都是无符号的。整数变量的宽度固定为 32 位(IEEE 标准将整数定义为“至少 32 位” ',但在几乎所有的模拟器中,整数都是 32 位)。在 Verilog-1995 中只有一种带符号的数据类型,大多数带符号的操作被限制为 32 位宽。”
Wire 是一种网络数据类型。
再往下一点,他继续说:
“Verilog-1995 的局限性在于,要对有符号算术建模,只能使用 32 位整数。”
【讨论】: