-
MichaelTLT
-
Автор темы
-
Не в сети
-
Новый участник
-
-
Сообщений: 12
-
Спасибо получено: 0
-
-
|
Всем доброго вечера!
Почему-то у меня не работает модуль делителя частоты на 4. Взгляните, пожалуйста, на код. Где может быть ошибка? // Делитель частоты на 4
`timescale 1 ps / 1 ps
module counter (
clock,
reset,
data);
input wire reset;
input wire clock;
output reg data;
reg [1:0] counter;
reg temp;
always @(posedge clock or posedge reset)
begin
if (reset)
begin
data <= 0;
temp <= 0;
counter <= 0;
end
else
begin
if (counter == 4)
begin
counter = 0;
temp = ~temp;
end
else
begin
counter = counter + 1;
data = temp;
end
end
end
endmodule
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
leshabirukov
-
-
Не в сети
-
Захожу иногда
-
-
Сообщений: 56
-
Спасибо получено: 13
-
-
|
У вас counter 2-х битный, как он может равняться 4-м?
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
MichaelTLT
-
Автор темы
-
Не в сети
-
Новый участник
-
-
Сообщений: 12
-
Спасибо получено: 0
-
-
|
leshabirukov пишет: У вас counter 2-х битный, как он может равняться 4-м?
Да, верно! ) Только что это понял и зашел сюда, чтобы поделиться. Спасибо за совет )
Исправил значение в if (counter == 3) и заработало. Может быть это еще кому-нибудь поможет: для отладки полезно вставлять в код строчки типа $display("counter %h", counter);
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
MichaelTLT
-
Автор темы
-
Не в сети
-
Новый участник
-
-
Сообщений: 12
-
Спасибо получено: 0
-
-
|
Кстати, хотел спросить: может быть есть какой-то более простой способ реализации делителя?
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
leshabirukov
-
-
Не в сети
-
Захожу иногда
-
-
Сообщений: 56
-
Спасибо получено: 13
-
-
|
MichaelTLT пишет: Кстати, хотел спросить: может быть есть какой-то более простой способ реализации делителя?
Вообще-то да, проще так:
// Делитель частоты на 4
`timescale 1 ps / 1 ps
module counter (
clock,
reset,
data);
input wire reset;
input wire clock;
output wire data;
reg [2:0] counter;
always @(posedge clock or posedge reset)
begin
if (reset)
begin
counter <= 0;
end
else
begin
counter = counter + 1;
end
end
assign data = counter[2];
endmodule
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
MichaelTLT
-
Автор темы
-
Не в сети
-
Новый участник
-
-
Сообщений: 12
-
Спасибо получено: 0
-
-
|
Большое спасибо. Действительно, элегантное решение )
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
Время создания страницы: 0.102 секунд