Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“与”的区别是什么;CSD乘法“&引用;verilog乘法;?_Verilog - Fatal编程技术网

“与”的区别是什么;CSD乘法“&引用;verilog乘法;?

“与”的区别是什么;CSD乘法“&引用;verilog乘法;?,verilog,Verilog,我在这里看到了2个帖子 及 正如你所能看到的,这些都是关于verilog分数乘法的。 但我不明白莫甘的答案 reg [7:0] a = 0010_1000; reg [7:0] b = 0010_1000; 他怎么能得到这个二进制文件?这是CSD条款吗 更新 我很了解INTEGER*CSD术语。它将转换为如下图(整数>>2)+(整数>>5)。。 但我想知道CSD术语*CSD术语 这个怎么样 wire [11:0] y; wire [11:0] x; wire [11:0] z; y= {3.

我在这里看到了2个帖子

正如你所能看到的,这些都是关于verilog分数乘法的。 但我不明白莫甘的答案

reg [7:0] a = 0010_1000; reg [7:0] b = 0010_1000;
他怎么能得到这个二进制文件?这是CSD条款吗

更新 我很了解INTEGER*CSD术语。它将转换为如下图(整数>>2)+(整数>>5)。。 但我想知道CSD术语*CSD术语

这个怎么样

wire [11:0] y;
wire [11:0] x;
wire [11:0] z;
y= {3.1, 10'b0}
x= {2.5, 10'b0}
z= y*x
z = z >> 10;
现在我觉得这比你的方式要贵一点。 你可以只用一次乘法。
但我的方法是需要向右移动。

回答评论中的一个问题,如何在有符号4 int 4 frac字长中乘以3.1*2.4

3.1 => 0011_0001 (actually 3.0625) .1 is very difficult to represent in fixed point.
2.5 => 0010_1000
:

结果细分:

     2^ 76543210 -1-2-3-4-5
  mul = 00000111_ 1 0 1 0 1 000
2^2 + 2^1 + 2^0 + 2^-1 + 2^-3 2^-5
  4 +   2 +   1 + 0.5 +0.125 + 0.03125
              =======
              7.65625
在普通计算器上:

3.0625 * 2.5 => 7.65625

从3.1四舍五入到3.0625导致此错误
3.1*2.5=>7.75
,量化错误为0.09375。

其中问题涉及乘以2.5*2.5。答案描述了如何解释由4个整数位和4个小数位组成的8位数字。使用
\uu
作为二进制点标记
0010\u 1000
表示2.5。CSD将包含由1 BAR(T)表示的负项。这只是一个有4个小数点的二进制字。如果你能详细说明你的卡滞部分,我可以试着更好地解释。@Morgan我的卡滞点是,如果我想乘法计算分数,比如2.5x2.5,那么我如何在verilog中使用CSD项呢?例如,2.5为0010_0111,可转换CSD 0010_100T。正如您已经知道的,T只是一个表达式,它不在verilog中使用。所以我的问题是,如何将CSD项数应用到verilog乘法中?CSD术语x CSD术语。您所说的CSD术语是什么意思,完整的CSD编号(
0010_100T
)还是它的一部分(
T
-2^4
)?@Morgan我指的是完整的数字T。您在verilog中如何表示
0010_100T
。我不知道为什么您最终会使用两种CSD乘法格式。由于数字的CSD转换是为了使乘法更容易。我有两个问题1。请告诉我如何使3.1=>0011_0001(实际上是3.0625)。1很难用定点表示。2.5 => 0010_1000 ?2. 用这种方法计算输入[9:0]a,wire[19:0]a_frac={a,10'b0}的乘法;请记住,Verilog认为这是一个整数,但我们必须以不同的方式解释这个数字。连线[19:0]y=(a_-frac>>1)-(a_-frac>>5)-(a_-frac>>7)+(a_-frac>>10);我的问题是哪种方法更好?你是在问如何从3.1到
0011_0001
?您对
0011_0001
表示3.0625这一事实感到满意吗?@bural如果两者功能相同,您如何更好地定义?你有没有比较过两者的合成结果,我建议你比较一下。先生,是的,我想问的是如何从3.1到0011_0001。你已经在申请CSD了吗?我的问题如果你是的,我该如何治疗T?
3.0625 * 2.5 => 7.65625