小编Fai*_*ool的帖子

Verilog For Loop for Array Multiplication

这似乎是一个相当愚蠢的问题,但从软件到HDL的过渡有时候最初会令人沮丧!

我的问题:我有一个数组乘法我试图在Verilog中完成.这是两个阵列(逐点)的乘法,每个阵列长度为200.以下代码在testbench中运行良好:

for (k=0; k<200; k=k+1)
    result <= result + A[k] * B[k]; 
Run Code Online (Sandbox Code Playgroud)

但它甚至没有接近Verilog模块的工作.我认为原因是因为操作应该在很多个时钟周期内进行.因为它涉及写出200次乘法和199次加法,如果我手工做(!),我想知道是否有一个技巧使for循环工作(并可合成)?

谢谢,

费萨尔.

verilog

1
推荐指数
1
解决办法
3495
查看次数

Verilog 有符号乘法“丢失”有符号位

我正在编写一个使用乘法器模块的代码,当其中一个输入为负数时,该模块会返回奇怪的答案。我猜测这与 Verilog 处理带符号数字的方式有关,并且模块没有将结果正确存储在“regsigned out”声明中。我所有的输入/输出/wire/reg 声明都已签名,所以我不确定我缺少什么以及我还需要做什么来告诉 Verilog 处理这个问题。抱歉这个初学者的问题!

例如,

当 X[0] 为 1610 且 Theta1[1] 为 -123 时,我从乘法器模块得到的结果是: 6914897148530

以下是我的代码的相关部分:

module mult(in1, in2, out, mult_start); // multiplication module

input signed    [32-1:0]    in1, in2;
input               mult_start;

output      signed [64-1:0] out;
reg         signed [64-1:0] out;

always @(in1 or in2 or mult_start)
begin
    if (mult_start)
    begin
        out <= (in1 * in2) & {64{1'b1}};
    end
    else
        out <= out;
end
endmodule



module child_one (clk, rst_b, sig_start, Input_X, Input_Theta1)

// Internal Variables Memory
reg signed [`REG_LENGTH-1:0] …
Run Code Online (Sandbox Code Playgroud)

verilog

1
推荐指数
1
解决办法
8139
查看次数

标签 统计

verilog ×2