МАРСОХОД

Open Source Hardware Project

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

ТЕМА: К155АГ3 на Verilog

К155АГ3 на Verilog 3 года 7 мес. назад #3140

  • sin313
  • sin313 аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 2
  • Спасибо получено: 0
Здравствуйте. Помогите реализовать мультивибратор АГ3 на Verilog. Имеется постоянная тактовая частота 2МГЦ, но не суть, относительно которой можно что то делать. Вся задача в том что бы на вход подать один импульс, который может быть любой длительности, а на выходе получить так же один импульс, только уже определенной длительности. Ребят, помогите пожалуйста. На работе дали схему перевести на ПЛИС в которой напихано куча АГ3 и в добавок у всех разные временные интервалы , а это без RC цепочки можно только счетчик+компоратор+триггер и схема будет расти до неузнаваемости ) .
Как вариант пытаюсь реализовать, но видимо чего то не до понимаю. Код ниже:
module ag3 (
input in_clk, input in_ag, output out_ag
);
reg [7:0] cnt;
always @ (posedge in_clk)
if (in_ag)
cnt <= 0;
else if (cnt < 7)
cnt <= cnt + 1;
assign out_ag = (in_ag == 1 || cnt < 7) ? 1:0;
endmodule

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

Последнее редактирование: от sin313.

К155АГ3 на Verilog 3 года 7 мес. назад #3163

  • Nick83
  • Nick83 аватар
  • Не в сети
  • Осваиваюсь на форуме
  • Осваиваюсь на форуме
  • Сообщений: 23
  • Спасибо получено: 0
Длительность выходного импульса может быть меньше входного?

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

К155АГ3 на Verilog 3 года 7 мес. назад #3213

  • sin313
  • sin313 аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 2
  • Спасибо получено: 0
Нашел одно решение как реализовать К155АГ3 на Verilog . Возможно кому ни будь пригодится. Составляем два небольших модуля и соединяем их последовательно. Получается идеальный АГ3.
Код для первого модуля:

module ag3_under_out (
input in_clk, input in_ag, output out_ag, output out_inv
);
reg [7:0] cnt;
always @ (posedge in_clk)
if (in_ag && cnt == 0)
cnt <= 25;
else if (cnt > 0)
cnt <= cnt - 1;
assign out_ag = (in_ag == 1 || cnt > 0) ? 1:0;
assign out_inv = (in_ag == 1 || cnt > 0) ? 0:1;
endmodule

Код для второго модуля:

module ag3 (
input in_clk, input in_ag, output out_ag, output out_inv
);
reg [7:0] cnt;
always @ (posedge in_clk)
if (cnt == 0 && in_ag == 0)
cnt <= 25;
else if (in_ag && cnt > 0)
cnt <= cnt - 1;
assign out_ag = (in_ag == 1 && cnt > 0) ? 1:0;
assign out_inv = (in_ag == 1 && cnt > 0) ? 0:1;
endmodule

Выход первого модуля out_ag соединяете со входом in_ag второго модуля. С выхода out_ag второго модуля соответственно снимается сигнал. На входы in_clk подаем тактовою частоту. Число записанное в cnt определяет длину импульса на выходе. В моем случае cnt <= 25 и тактовой частотой на входах in_clk = 2МГЦ дает импульс 12,25мкс.

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

К155АГ3 на Verilog 2 года 9 мес. назад #5333

  • mdg
  • mdg аватар
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 1
  • Спасибо получено: 0
module les40 (clk, in_pulse,out_pulse);
parameter tz = 4, ti = 3 ; // задержка и длительность импульса в периодах тактовой частоты 0,1,2,...
input clk, in_pulse;
output out_pulse ;
reg [clogb2(ti) - 1'b1 : 0] tii;
reg [clogb2(tz) - 1'b1 : 0] tzz;
reg front;
always @ (posedge clk)
begin
front <= in_pulse;
if (in_pulse && (~front)) begin
tzz <= tz;
tii <= ti;
end
else if(tzz) tzz <= tzz - 1'b1;
else if ((~|tzz) && tii) tii <= tii - 1'b1;

end

assign out_pulse = (~|tzz)&&(tii);

// define the clogb2 function
function integer clogb2;
input [31:0]z;
integer i , result = 1'b0;
begin
for (i = 0; 2**i <= z ; i = i + 1'b1)
result = i+1'b1;
clogb2 = result ;
end
endfunction
//

endmodule

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

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

facebook  GitHub  YouTube  Twitter