Превращение 1-битного ALU в 8-битное ALU в Verilog

Ниже приведен мой 1-битный ALU, который доказал свою работоспособность. Теперь я хотел бы использовать этот 1-битный aLU в 8-битном alu, и он должен пройти тестовый стенд. Пока я скомпилировал 8-битный код ALU, но он, похоже, не работает. Любая помощь?

module ALUSlice(A,B,CI,M,S,F,CO); //Code for 1-bit
input A,B,CI,M,S;
output F,CO;
wire [3:0] TF;
wire [3:0] TC;

FullAdder F1(TF[3],TC[3],A,B,CI);
assign TF[0] = A & B;
assign TF[1] = A | B;
assign TF[2] = ~A;

assign TC[2:0] = 0;
Dual4to1Mux Mux1(F,CO,{M,S},TF,TC);
endmodule




module ALU8Bit(S1,S0, A, B, CarryIn, CarryOut, F);//What I have so far
input [7:0] A,B;
input S1,S0,CarryIn;
output [7:0] F;
output CarryOut;

wire [7:0] C;

ALUSlice A0(F[0],C[0],A[0],B[0],CarryIn,S0,S1);
ALUSlice A1(F[1],C[1],A[1],B[1],C[0],S0,S1);
ALUSlice A2(F[2],C[2],A[2],B[2],C[1],S0,S1);
ALUSlice A3(F[3],C[3],A[3],B[3],C[2],S0,S1);
ALUSlice A4(F[4],C[4],A[4],B[4],C[3],S0,S1);
ALUSlice A5(F[5],C[5],A[5],B[5],C[4],S0,S1);
ALUSlice A6(F[6],C[6],A[6],B[6],C[5],S0,S1);
ALUSlice A7(F[7],CarryOut,A[7],B[7],C[6],S0,S1);

endmodule

person beatsbyse    schedule 19.08.2017    source источник


Ответы (1)


Без более полной картины всего нелегко сказать, является ли это вашей единственной проблемой. Но одна из причин, по которой это может дать сбой, заключается в том, что кажется, что вы неправильно подключили свои ALUSlice модули в свой ALUBit. Порядок портов (io) модуля ALUSlice должен содержать входы, за которыми следуют выходы, но у вас есть выходы, за которыми следуют входы в ваших экземплярах. Лучший способ аннулировать подобные ошибки - явно подключить порты к соответствующим линиям, а не полагаться на порядок, например:

ALUSlice A0(.A(A[0]), .B(B[0]), .CI(CarryIn), .M(S1), .S(S0), .F(F[0]), .CO(C[0]));

Таким образом, все подключается точно так, как вы предполагаете (т.е. A[0] подключен к входу A, B[0] к B, CarryIn к CI и т. Д.) Без ошибок с порядком, или когда вы добавляете новые порты или убираете их, все все еще подключен, как и ожидалось.

person Unn    schedule 19.08.2017
comment
так что для строки ниже я бы написал тот же код со всем, кроме единиц, а не нулей в скобках? - person beatsbyse; 19.08.2017
comment
@itstgtc Отвечая на ваш первый вопрос, в основном да. Вместо того, чтобы использовать порядок портов для подключения линии, как в вашем вопросе, вы подключаете их явно, используя синтаксис, который я дал выше. Хотя не все просто X[n], у вас есть CarryIn и CarryOut, и убедитесь, что вы правильно подключили свою цепь переноса. Я не уверен, что сейчас не так; не могли бы вы опубликовать более подробную информацию об обнаруженной ошибке? - person Unn; 19.08.2017