Регистры MIPS уровня шлюза в verilog - PullRequest
0 голосов
/ 05 октября 2019

У меня проблема с имитацией регистра 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). Я считаю, что неправильно то, как я комбинирую часы и пишу строки. Но диаграммы, которые я нашел в Интернете, похоже, не совсем понятны, что именно должно быть сделано с ними.

...