Скачиваний:
0
Добавлен:
16.06.2026
Размер:
2.53 Mб
Скачать

Модуль parshift_rg — параллельно-последовательный регистр

<Описание устройства>

Описание на Verilog

<Код>

module parshift_rg #(

parameter N=4

) (

input [N-1:0] D,

input clk, R, S, wr,

output Q

);

reg [N-1:0] rq;

assign Q = rq[N-1];

always @(posedge clk, negedge R, negedge S)

if (~R) rq <= {N{1'b0}};

else if (~S) rq <= {N{1'b1}};

else if (~wr) rq <= {rq[N-2:0], 1'b0};

else rq <= D;

endmodule

RTL-схема

<RTL-схема>

Временная диаграмма

Модуль ring_rg — кольцевой регистр

<Описание устройства>

Описание на Verilog

<Код>

module ring_rg #(

parameter N=4

) (

input clk, S,

output [N-1:0] Q

);

reg [N-1:0] rq;

assign Q = rq;

always @(posedge clk, negedge S)

if (~S) rq <= 1;

else begin

rq[N-1:1] <= rq[N-2:0];

rq[0] <= rq[N-1];

end

endmodule

RTL-схема

<RTL-схема>

Временная диаграмма

* Модуль wrapper_rg — обертка для регистров

<Описание устройства>

Описание на Verilog

<Код>

module wrapper_rg (

input R, S, clk,

input wr, rd,

input [3:0] D,

output [6:0] p7sout, b7sout,

output [3:0] spout, rout,

output sout, psout

);

par_rg inst0 (.R(R), .S(S), .clk(clk), .D(D), .Q(p7sout));

shift_rg inst1 (.R(R), .S(S), .clk(clk), .D(D), .Q(sout));

buf_rg inst2 (.R(R), .S(S), .clk(clk), .D(D), .wr(wr), .rd(rd), .Q(b7sout));

shiftpar_rg inst3 (.R(R), .S(S), .clk(clk), .D(D), .Q(spout));

parshift_rg inst4 (.R(R), .S(S), .clk(clk), .D(D), .wr(wr), .Q(psout));

ring_rg inst5 (.S(S), .clk(clk), .Q(rout));

endmodule

RTL-схема

<RTL-схема>

Исполнители

<фото исполнителей>

Модуль inc_cnt — суммирующий счетчик

<Описание устройства>

Описание на Verilog

<Код>

module inc_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-схема>

Временная диаграмма