У меня проблема с имитацией регистра MIPS уровня шлюза (16-битные данные). Вот код, с которым я работаю:
module register(D, CLK, W, Q);
input [15:0] D;
input CLK, W;
output [15:0] Q;
wire W_NOT;
or or1(W_NOT, CLK, W);
D_flip_flop D0(D[0], W_NOT, Q[0]),
D1(D[1], W_NOT, Q[1]),
D2(D[2], W_NOT, Q[2]),
D3(D[3], W_NOT, Q[3]),
D4(D[4], W_NOT, Q[4]),
D5(D[5], W_NOT, Q[5]),
D6(D[6], W_NOT, Q[6]),
D7(D[7], W_NOT, Q[7]),
D8(D[8], W_NOT, Q[8]),
D9(D[9], W_NOT, Q[9]),
D10(D[10], W_NOT, Q[10]),
D11(D[11], W_NOT, Q[11]),
D12(D[12], W_NOT, Q[12]),
D13(D[13], W_NOT, Q[13]),
D14(D[14], W_NOT, Q[14]),
D15(D[15], W_NOT, Q[15]);
endmodule
module D_flip_flop(D, W, Q);
input D,W;
output Q;
wire W1, Y;
not not1 (W1,W);
D_latch D1(D,W, Y),
D2(Y,W1,Q);
endmodule
module D_latch(D,C,Q);
input D,C;
output Q;
wire x,y,D1,Q1;
nand nand1 (x,D, C),
nand2 (y,D1,C),
nand3 (Q,x,Q1),
nand4 (Q1,y,Q);
not not1 (D1,D);
endmodule
К сожалению, когда я запускаю его с моим тестовым модулем, я получаю неправильный вывод. Входными строками для модуля регистров являются синхросигнал (CLK), D (16-битные данные), перезапись (W) и выход (Q). Я считаю, что неправильно то, как я комбинирую часы и пишу строки. Но диаграммы, которые я нашел в Интернете, похоже, не совсем понятны, что именно должно быть сделано с ними.