我想根据设计编写乘数。它由两个16位输入组成,单个加法器用于计算部分乘积。一个输入的LSB与另一个输入的16位进行AND操作,AND门的输出重复地加到前一个输出。它的Verilog代码如下,但我似乎无法使输出正常工作。Verilog中的逻辑问题
module datapath(output reg [31:15]p_high,
output reg [14:0]p_low,
input [15:0]x, y,
input clk); // reset, start, x_ce, y_ce, y_load_en, p_reset,
//output done);
reg [15:0]q0;
reg [15:0]q1;
reg [15:0]and_output;
reg [16:0]sum, prev_sum;
reg d_in;
reg [3:0] count_er;
initial
begin
count_er <= 0;
sum <= 17'b0;
prev_sum <= 17'b0;
end
[email protected](posedge clk)
begin
q0 <= y;
q1 <= x;
and_output <= q0[count_er] & q1;
sum <= and_output + prev_sum;
prev_sum <= sum;
p_high <= sum;
d_in <= p_high[15];
p_low[14] <= d_in;
p_low <= p_low >> 1;
count_er <= count_er + 1;
end
endmodule
我创建了一个测试平台,测试电路和我看到的第一个问题是,我希望它与操作不起作用。 x操作数的16位与y操作数的LSB进行和操作。 y操作数在每个时钟周期后移位一位,并通过连续添加部分乘积来计算最终产品。
但是,我从sum和prev_sum行开始出现问题,它们的输出显示为xxxxxxxxxxxx。
* “具有获取输出工作的烦恼” *。你可以请更具体吗?如果我们首先了解发生了什么问题,那么更容易进行调试。 – Tim 2013-03-22 23:47:08
我添加了更多内容。 – GamingX 2013-03-23 01:17:35