Я написал код Verilog для файла регистра, имеющего 4 регистра (каждый 32-битный).
Ожидаемый результат Запись в файл реестра должна осуществляться с падающего фронта часов. Часы, переданные в файл регистрации: regClk (стробированные часы). Пожалуйста, игнорируйте тот факт, что стробированные часы создают проблемы, потому что это для назначения, и я должен использовать эти часы
Проблема Как видно на диаграмме часов, напишите в reg0 происходит при t = 10 (задний фронт regClk [0] ). Но после t = 10 спадающего фронта нет, но запись в reg0 все же происходит при t = 18. Аналогичная схема повторяется до reg4 . Всякий раз, когда для reg_n имеется спадающий фронт, то же значение записывается в reg_n-1 , даже если в его часах нет спадающего фронта.
IЯ прилагаю код и схему часов:
DFF с асинхронной очисткой
module dff(q,d,clk,reset);
input d,clk,reset;
output q;
reg q;
always @(negedge clk , posedge reset)
begin
if(reset)
q<=1'b0;
else
q<=d;
end
endmodule
Регистр 32 бит
module reg_32bit(q,d,clk,reset);
input [31:0] d;
input clk,reset;
output [31:0] q;
genvar j;
generate for(j=0;j<32;j=j+1)
begin: reg_loop
dff flipflop (q[j],d[j],clk,reset);
end
endgenerate
endmodule
Файл регистрации
module regf(clk,reset,ReadReg1, ReadReg2, WriteData, WriteReg, RegWrite, ReadData1, ReadData2);
input clk,reset,RegWrite;
input [1:0] ReadReg1, ReadReg2, WriteReg;
input [31:0] WriteData;
output [31:0] ReadData1, ReadData2;
wire [3:0] decOut;
wire [3:0] regClk;
dec_2to4 dec1(decOut,WriteReg);
wire [31:0] RegFileAcc[0:3];
assign regClk[0]=(decOut[0] & RegWrite & clk);
assign regClk[1]=(decOut[1] & RegWrite & clk);
assign regClk[2]=(decOut[2] & RegWrite & clk);
assign regClk[3]=(decOut[3] & RegWrite & clk);
reg_32bit regs1 (RegFileAcc[0],WriteData,regClk[0],reset);
reg_32bit regs2 (RegFileAcc[1],WriteData,regClk[1],reset);
reg_32bit regs3 (RegFileAcc[2],WriteData,regClk[2],reset);
reg_32bit regs4 (RegFileAcc[3],WriteData,regClk[3],reset);
bit32_mux4to1 mux1(ReadData1,{RegFileAcc[3], RegFileAcc[2], RegFileAcc[1], RegFileAcc[0]}, ReadReg1);
bit32_mux4to1 mux2(ReadData2,{RegFileAcc[3], RegFileAcc[2], RegFileAcc[1], RegFileAcc[0]}, ReadReg2);
endmodule
Диаграмма времени для этого файла регистрации