Перейти к содержанию
    

8-битный компаратор на Verilog

Всем привет!

Я новичок и разбираюсь с Verilog'ом, да и вообще с электроникой.

 

Задача такая: описать синхронную схему порогового сравнения 8-разрядных чисел с порогом, задаваемым через параметр.

 

Вот мой код и результат симуляции:

 

module comparator_8bit (compout_1, compout_2, A, B);

 

parameter size = 8;

parameter threshold = 64; //пороговая величина

 

input [size-1:0]A;

input [size-1:0]B;

output compout_1;

output compout_2;

 

assign compout_1 = (A == threshold);

assign compout_2 = (B == threshold);

 

endmodule

 

 

post-75637-1361015089_thumb.jpg

 

 

Вопрос: правильно ли работает программа, нужно что-то в коде менять ?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

 

В принципе правильно, но нужно уточнить понятие "пороговый" компаратор

поскольку у Вас скорее всего получился просто просто компаратор на фикс значение

 

наверное нужно было сделать

 

assign compout_1 = (A >= threshold);

или

assign compout_2 = (B < threshold);

 

это более соответствует термину "пороговый".

 

Но это Вам по условию задачи должно быть виднее.

 

Успехов! Rob.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы описали асинхронную схему, а по условию задачи вроде бы нужна синхронная. Поэтому, следует добавить вход частоты синхронизации, назвав его, например, clk, описать выходы как reg, а также добавить always @(posedge clk).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за замечания.

 

В общем, переделал прогу так:

 

module compare_8bit_v3 (A, B, clk, compout_A, compout_B);

 

parameter size = 8;

parameter threshold = 150;

 

input [size-1:0]A;

input [size-1:0]B;

input clk;

output compout_A;

output compout_B;

reg compout_A;

reg compout_B;

 

always @ (negedge clk)

 

begin

if (A >= threshold)

compout_A = 1;

else

compout_A = 0;

if (B >= threshold)

compout_B = 1;

else

compout_B = 0;

end

 

endmodule

 

 

post-75637-1361095842_thumb.jpg

 

 

Не совсем понимаю два момента:

1) Когда использую регистры, не работают конструкции с assign. Так и должно быть ?

2) У меня сейчас синхронизация по отрицательному фронту clk. Как правильнее - по отрицательному или по положительному фронту, или без разницы ?

Изменено пользователем Neadequant

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1) Когда использую регистры, не работают конструкции с assign. Так и должно быть ?

2) У меня сейчас синхронизация по отрицательному фронту clk. Как правильнее - по отрицательному или по положительному фронту, или без разницы ?

1 - Все правильно, assign это, грубо-говоря, подключение провода (wire) к комбинаторной конструкции. А если данные записываются в регистр - нужно указать по какому фронту какого клока это делать.

2 - Если абстрактно - то правильно по тому фронту, по которому у вас весь дизайн построен. Однако, в большинстве случаев работают по положительному.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...