Booth codent ne fonctionne pas, la simulation inclus
-
27-10-2019 - |
Question
Je suis en train d'écrire un encode Booth pour multiplicateur de tableau. Ceci est l'un des modules:
module add_input (M,pos,neg,C);
parameter n=8;
input [n-1:0]M;
input pos,neg;
output [2*n-1:0]C;
reg [2*n-1:0]C;
integer k;
always @ (*)
begin
for (k=0;k<=n-1;k=k+1)
begin
C[k]=(pos& (M[k]))|((~M[k])&neg);
end
C[2*n-1:n]={n{C[n-1]}};
end
endmodule
La simulation de banc d'essai pour ce module est ok:
un chat occupé http://img39.imageshack.us/img39/3444/ 74546414.jpg
Cependant, quand je mets ce module dans la conception de niveau supérieur, je ne vois aucune sortie du module add_input. Demande vraiment pourquoi, été débogage pour cette nuit entière.
Code:
module Array_Mutiplier (M,Q,outcome, t_pos, t_neg,t_Y1);
parameter n=8;
parameter m=16;
input [n-1:0]M,Q;
output [m-1:0]outcome;
//-----------------------------------------------------------
output [n-1:0] t_pos, t_neg;
output [m-1:0] t_Y1;
//-----------------------------------------------------------
//first part, got the booth code
wire [n-1:0]negative,positive;
booth_encode BE(Q,positive,negative);
//get the Y for the full adder
wire [m-1:0]Y1;
add_input row_1 (M,positive[0],negative[0],Y1);
wire [2*n-1:0]Y2;
add_input row_2 (M,positive[1],negative[1],Y2);
wire [2*n-1:0]Y3;
add_input row_3 (M,positive[2],negative[2],Y3);
wire [2*n-1:0]Y4;
add_input row_4 (M,positive[3],negative[3],Y4);
wire [2*n-1:0]Y5;
add_input row_5 (M,positive[4],negative[4],Y5);
wire [2*n-1:0]Y6;
add_input row_6 (M,positive[5],negative[5],Y6);
wire [2*n-1:0]Y7;
add_input row_7 (M,positive[6],negative[6],Y7);
wire [2*n-1:0]Y8;
add_input row_8 (M,positive[7],negative[7],Y8);
assign t_pos=positive;
assign t_neg=negative;
assign t_Y1=Y1;
endmodule
un chat occupé http://img855.imageshack.us/img855/3361/ 28395154.png
D'après la simulation, vous pouvez voir l'encodeur de cabine fonctionne correctement, mais pourquoi t_Y1 de sortie est toujours 0?
La solution
De votre 2ème forme d'onde, t_pos [0] et t_neg [0] sont tous deux à zéro, ce qui signifie que positif [0] et négatif [0] sont tous deux à zéro aussi bien. A l'intérieur de l'instance row_1, pos neg et sont égaux à zéro, ce qui signifie que tous les bits du C [7: 0] sont nulles ((pos& (M[k]))|((~M[k])&neg)
est évaluée à 0). Etant donné que C [7] = 0, cela signifie C [15: 8] = 0, et par conséquent C. [15: 0] = 0 et Y1 et t_Y1 sont aussi zéro