Цитата(georgy31 @ Sep 12 2011, 16:14)

Спасибо, но это не смметричный меандр на 5, а 6 на 4, такой я сделал в первую очередь. На 5 оказалось всё намного серьёзней. Вот на 3 нашёл, теперь проблема как его на 5 переписать. Может кто подскажет, что поменять в программе?
module divide_by_3 (
clk_in , //Input Clock
reset , // Reset Input
clk_out // Output Clock
);
//-----------Input Ports---------------
input clk_in;
input reset;
//-----------Output Ports---------------
output clk_out;
//------------Internal Variables--------
reg [1:0] pos_cnt;
reg [1:0] neg_cnt;
//-------------Code Start-----------------
// Posedge counter
always @ (posedge clk_in)
if (reset) begin
pos_cnt <= 0;
end else begin
pos_cnt <= (pos_cnt == 2) ? 0 : pos_cnt + 1;
end
// Neg edge counter
always @ (negedge clk_in)
if (reset) begin
neg_cnt <= 0;
end else begin
neg_cnt <= (neg_cnt == 2) ? 0 : neg_cnt + 1;
end
assign clk_out = ((pos_cnt != 2) && (neg_cnt != 2));
endmodule
// Testbench to check the divide_by_3 logic
module test();
reg reset, clk_in;
wire clk_out;
divide_by_3 U (
.clk_in (clk_in),
.reset (reset),
.clk_out (clk_out)
);
initial begin
clk_in = 0;
reset = 0;
#2 reset = 1;
#2 reset = 0;
#100 $finish;
end
always #1 clk_in = ~clk_in;
endmodule
Цитата
вот так должно получиться кратно 5
Код
module divide_by_3 (
clk_in , //Input Clock
reset , // Reset Input
clk_out // Output Clock
);
//-----------Input Ports---------------
input clk_in;
input reset;
//-----------Output Ports---------------
output clk_out;
//------------Internal Variables--------
reg [2:0] pos_cnt;
reg [2:0] neg_cnt;
//-------------Code Start-----------------
// Posedge counter
always @ (posedge clk_in)
if (reset) begin
pos_cnt <= 0;
end else begin
pos_cnt <= (pos_cnt ==4) ? 0 : pos_cnt + 1;
end
// Neg edge counter
always @ (negedge clk_in)
if (reset) begin
neg_cnt <= 0;
end else begin
neg_cnt <= (neg_cnt ==4) ? 0 : neg_cnt + 1;
end
assign clk_out = ((pos_cnt != 3) && (neg_cnt !=3)&&(pos_cnt !=4) && (neg_cnt !=4));
endmodule