Я сделал базовый пример на игровой площадке eda, который получил.Допустим, у меня есть два часа 1x и 2x.2x делится с 1x с использованием делителя флопа.
У меня есть два регистра a и b.a синхронизируется в 1x, b синхронизируется в 2x.
b является значением выборки a.
Когда у нас есть нарастающий фронт в 1x и 2x тактах, b не принимает ожидаемое значениеa, но он принимает значение следующего цикла.
Это из-за этой схемы деления часов, если мы делаем деление с использованием icgs и en, он работает нормально.Но есть ли способ заставить его работать, используя эту схему делителей часов с флопами?
EDA игровая площадка: https://www.edaplayground.com/x/map#
module race_test;
logic clk1x = 0;
logic clk2x = 0;
always
#5ns clk1x = !clk1x;
int a, b;
always @(posedge clk1x) begin
a <= a+1;
clk2x <= !clk2x;
end
// Problem here is that b will sample postpone value of a
// clk2x is not triggering at the same time than clk1x but a bit later
// This can be workaround by putting blocking assignment for clock divider
always @(posedge clk2x) begin
b <= a;
end
initial begin
$dumpfile("test.vcd");
$dumpvars;
#1us
$stop;
end
endmodule