- •Исполнители: Модуль rs_ff — асинхронный rs-триггер
- •Модуль d_latch — d-защелка
- •Модуль d_ff — d-триггер
- •Модуль jk_ff — jk-триггер
- •Модуль t_ff — t-триггер
- •* Модуль wrapper_ff — обертка для триггеров
- •Исполнители
- •Модуль par_rg — параллельный регистр
- •Модуль shift_rg — последовательный регистр
- •Модуль buf_rg — буферный регистр
- •Модуль shiftpar_rg — последовательно-параллельный регистр
- •Модуль parshift_rg — параллельно-последовательный регистр
- •Модуль ring_rg — кольцевой регистр
- •* Модуль wrapper_rg — обертка для регистров
- •Исполнители
- •Модуль inc_cnt — суммирующий счетчик
- •Модуль dec_cnt — вычитающий счетчик
- •Модуль rev_cnt — реверсивный счетчик
- •Модуль load_rev_cnt — реверсивный счетчик с загрузкой значений
- •Модуль div_cnt — делитель частоты
- •Модуль debounce_cnt — антидребезговый счетчик
- •Модуль pll_cnt — модуль фапч
- •* Модуль wrapper_cnt — обертка для счетчиков
- •Исполнители заключение
Модуль dec_cnt — вычитающий счетчик
<Описание устройства> |
|
Описание на Verilog <Код> module dec_cnt #( parameter N=4 ) ( input clk, R, en, output [N-1:0] Q );
reg [N-1:0] rq;
always @(posedge clk, negedge R) begin if (~R) rq <= {N{1'b0}}; else if (en) rq <= rq -1; else rq <= rq; end
assign Q = rq;
endmodule |
RTL-схема <RTL-схема>
|
Временная диаграмма
|
|
Модуль rev_cnt — реверсивный счетчик
<Описание устройства> |
|
Описание на Verilog <Код> module rev_cnt #( parameter N=4 ) ( input clk, R, en, rev, output [N-1:0] Q );
reg [N-1:0] rq;
always @(posedge clk, negedge R) begin if (~R) rq <= {N{1'b0}}; else if (~en) rq <= rq; else if (rev) rq <= rq -1; else rq <= rq + 1; end
assign Q = rq;
endmodule |
RTL-схема <RTL-схема>
|
Временная диаграмма
|
|
Модуль load_rev_cnt — реверсивный счетчик с загрузкой значений
<Описание устройства> |
|
Описание на Verilog <Код> module load_rev_cnt #( parameter N=4 ) ( input clk, R, en, rev, load, input [N-1:0] D, output [N-1:0] Q );
reg [N-1:0] rq;
always @(posedge clk, negedge R) begin if (~R) rq <= {N{1'b0}}; else if (load) rq <= D; else if (~en) rq <= rq; else if (rev) rq <= rq -1; else rq <= rq + 1; end
assign Q = rq;
endmodule |
RTL-схема <RTL-схема>
|
Временная диаграмма
|
|
Модуль div_cnt — делитель частоты
<Описание устройства> |
|
Описание на Verilog <Код> module div_cnt #( parameter N=4, parameter top=10 ) ( input clk, R, en, output clkp, clkp1 );
reg [N-1:0] rq; reg rclkp, rclkp1; assign clkp = (rq == top) ? 1 : 0; assign clkp1 = rclkp1;
always @(posedge clk, negedge R) begin if (~R) rq <= {N{1'b0}}; else if (~en) rq <= rq; else if (rq == top) rq <= {N{1'b0}}; else rq <= rq + 1; end
always @(posedge clkp) rclkp1 <= ~rclkp1;
endmodule |
RTL-схема <RTL-схема>
|
Временная диаграмма
|
|
