МАРСОХОД

Open Source Hardware Project

Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
  • Страница:
  • 1

ТЕМА: Делитель на 4 почему-то не работает

Делитель на 4 почему-то не работает 6 года 10 мес. назад #691

  • MichaelTLT
  • 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

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Делитель на 4 почему-то не работает 6 года 10 мес. назад #692

У вас counter 2-х битный, как он может равняться 4-м?
Спасибо сказали: MichaelTLT

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Делитель на 4 почему-то не работает 6 года 10 мес. назад #693

  • MichaelTLT
  • MichaelTLT аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 12
  • Спасибо получено: 0

leshabirukov пишет: У вас counter 2-х битный, как он может равняться 4-м?


Да, верно! ) Только что это понял и зашел сюда, чтобы поделиться. Спасибо за совет )

Исправил значение в if (counter == 3) и заработало. Может быть это еще кому-нибудь поможет: для отладки полезно вставлять в код строчки типа $display("counter %h", counter);

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Делитель на 4 почему-то не работает 6 года 10 мес. назад #694

  • MichaelTLT
  • MichaelTLT аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 12
  • Спасибо получено: 0
Кстати, хотел спросить: может быть есть какой-то более простой способ реализации делителя?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Делитель на 4 почему-то не работает 6 года 10 мес. назад #696

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

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Делитель на 4 почему-то не работает 6 года 10 мес. назад #697

  • MichaelTLT
  • MichaelTLT аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 12
  • Спасибо получено: 0
Большое спасибо. Действительно, элегантное решение )

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Страница:
  • 1
Время создания страницы: 0.155 секунд

facebook  GitHub  YouTube  Twitter
Вы здесь: Начало Forum Наш форум Языки программирования Делитель на 4 почему-то не работает