Код
Код
module pcm_clocks(
input reset_n,
input clk,
output mclk,
output fs,
output bclk
);
reg [8:0] counter;
assign mclk = clk;
assign bclk = counter[4];
assign fs = !(counter[8:5]) & reset_n;
initial
begin
counter = 0;
end
always @(posedge clk)
begin
if (!reset_n)
begin
counter <= 0;
end
else
begin
counter <= counter + 9'd1;
end
end
endmodule
input reset_n,
input clk,
output mclk,
output fs,
output bclk
);
reg [8:0] counter;
assign mclk = clk;
assign bclk = counter[4];
assign fs = !(counter[8:5]) & reset_n;
initial
begin
counter = 0;
end
always @(posedge clk)
begin
if (!reset_n)
begin
counter <= 0;
end
else
begin
counter <= counter + 9'd1;
end
end
endmodule
clk и mclk - это 4МГц.
fs - это синхронизационный импульс,
bclk - это битовый клок.
так вот...
Казалось бы, fs должен быть единицей первые 32 счета счетчика, а потом нулем. И это работает.
Но! поскольку fs это НЕ ИЛИ 8:5 разрадов счетчика, то спад импульса fs должен совпадать со спадом импульса bclk
А получается...
В зависимости от непонятных мне причин иногда получается с точностью до наоборот. Т.е. приходится писать
assign bclk = ~counter[4];
что, на мой взгляд, не правильно.
Что сомое интересное, сие не зависит от времени появления reset_n -
он синхронен с clk и переходит в 1 по спадающему фронту clk
Вопрос(ы) -
- что я упустил?
- как это засинхронизировать програмно?
- или это глюк компилера?
- или глюк железа?
забыл добавить - моделсим показывает все как надо