如何将X固定在非还原分频器输出中?

问题描述 投票:1回答:1

我设计了一个分频器,但结果是错误的。

module div(x,y,quotient,remainder);

parameter M=4;
parameter N=4;

input [M-1:0] x;
input [N-1:0] y;

output [N-1:0] quotient;
output [M-1:0] remainder;
wire [M-1:0] rem_carry;

wire sum[M-1:0][N-1:0];
wire carry[M-1:0][N-1:0];
genvar i, j;
generate for(i=N-1; i>=0; i=i-1) begin:
unsigned_divider

if(i==N-1)
for(j=0; j<M; j=j+1) begin: first_row
if(j==0)
assign {carry[j][i],sum[j][i]}=y[i]+!x[j]+1;
assign {carry[j][i],sum[j][i]}=!x[j]+carry[j-1][i];
end
else
for(j=0; j<M;j=j+1) begin:rest_rows
if(j==0)
assign{carry[j][i],sum[j][i]}=y[i]+(x[j]^carry[M-1][i+1])+carry[M-1][i+1];
else
assign {carry[j][i],sum[j][i]}=sum[j-1][i+1]+(x[j]^carry[M-1][i+1])+carry[j-1][i];
end
end endgenerate

generate for(i=0; i<N; i=i+1)
begin:product_quotient
assign quotient[i]=carry[M-1][i];
end endgenerate

generate for(j=0;j<M;j=j+1)
begin:remainder_adjust
if(j==0)
assign{rem_carry[j],remainder[j]} = sum[j][0]+(sum[M-1][0]&x[j]);
else
assign{rem_carry[j],remainder[j]} =sum[j][0]+(sum[M-1][0]&x[j])+rem_carry[j-1];
end endgenerate
endmodule

和测试台模拟代码

module tb_div();

parameter M = 4; // default divisor width
parameter N = 4; // default dividend width

reg [M-1:0] x;
reg [N-1:0] y;
wire[N-1:0] quotient;
wire[M-1:0] remainder;
wire[M-1:0] rem_carry;

div U0(.x(x), .y(y), .quotient(quotient), .remainder(remainder));

initial begin


    x = 0;  y = 0; 
    // Wait 100 ns for global reset to finish
    #100;

    // Add stimulus here
    x=4'b0001;y=4'b0000;
    #300 x=4'b0100;y=4'b0011;
    #300 x=4'b1101;y=4'b1010;
    #300 x=4'b1110;y=4'b1001;
    #300 x=4'b1111;y=4'b1010;

end

endmodule 

enter image description here

但是quotientremainderrem_carry不是值。

如何更改代码?我认为问题是测试平台。

verilog hdl
1个回答
0
投票

quotientremainder上的X值是由于设计中carrysum上的争用所致。更改:

assign {carry[j][i],sum[j][i]}=!x[j]+carry[j-1][i];

至:

else assign {carry[j][i],sum[j][i]}=!x[j]+carry[j-1][i];

缺少的else导致carry同时由2条assign语句驱动。 sum也是如此。我的模拟器在该行上给了我“超出声明范围的部分选择索引”的编译警告。适当的缩进将更容易捕获此错误。


您在测试台的rem_carry信号上获得Z,因为该信号未驱动。您需要向output模块添加div端口,并在测试台中进行正确的连接。

© www.soinside.com 2019 - 2024. All rights reserved.