Моделирование T-триггера с положительным фронтом с асинхронным сбросом
Aug 19 2020
Я моделирую T-триггер с положительным фронтом с асинхронным сбросом. Вот код:
module t_flip_flop_exam (q,clk,clear,t);
input t ;
input clk;
input clear;
output reg q ;
reg internal_t;
always @ (clear)begin
if (clear==1)
q=0;
else
q=q;
end
always @ (posedge clk)begin
if (t==1)
q=~q;
else
q=q;
end
endmodule
Это эффективный код? Можно ли разделять always
блоки или есть способ включить поведенческий код clear
и clk
сигналы в один always
блок?
Ответы
1 toolic Aug 19 2020 at 17:33
Это распространенный способ объединения always
блоков:
module t_flip_flop_exam (q,clk,clear,t);
input t;
input clk;
input clear;
output reg q;
always @(posedge clk or posedge clear) begin
if (clear)
q <= 0;
else if (t)
q <= ~q;
end
endmodule
Назначения сигналу лучше делать из одного always
блока.
Активизируйте always
блок на posedge
из clear
так , что синтез может вывести нужную логику (асинхронное ясно, синхронное переключение).
Используйте неблокирующие присваивания ( <=
) для последовательной логики.
Нет необходимости делать q=q
это явно, потому что это подразумевается.