Соответствует ли заданный дизайн синхронного сдвигового регистра на D-триггерах стандартным требованиям?

Как можно описать схему синхронного сдвигового регистра на D-триггерах с управлением по переднему фронту и асинхронным сбросом в "1010" в структурном стиле?
  • 4 мая 2024 г. 16:50
Ответы на вопрос 2
Для ответа на первый вопрос необходимо предоставить дизайн синхронного сдвигового регистра на D-триггерах, чтобы можно было оценить его соответствие стандартным требованиям. 

Опишем структурную схему синхронного сдвигового регистра на D-триггерах с управлением по переднему фронту и асинхронным сбросом в "1010":

```verilog
module shift_register(
    input wire clk, // вход тактового сигнала
    input wire rst, // вход сброса
    input wire shift_enable, // вход разрешения сдвига
    input wire data_in, // вход данных
    output reg [3:0] q // выход регистра
);

reg [3:0] d;

// Д-триггеры
always @(posedge clk or posedge rst)
begin
    if(rst)
        d <= 4'b1010; // сброс в "1010"
    else if(shift_enable)
        d <= {d[2:0], data_in}; // сдвиг данных влево
end

always @(posedge clk)
begin
    q <= d;
end

endmodule
```

В данной структурной схеме используются D-триггеры для реализации синхронного сдвигового регистра. Управление сдвигом осуществляется при наличии сигнала shift_enable, данные сдвигаются влево на каждом переднем фронте тактового сигнала. Асинхронный сброс в "1010" происходит при установке сигнала rst.
Хз, как там на этом старческом VHDL будет, но на system verilog как-то так: 
module sreg
(
	clk,
	nrst,
	
	q
);

input	clk, nrst;
output	logic [3:0] q;

always_ff @(posedge clk or negedge nrst)
if (~nrst)
	q <= 4'b1010;
else
	begin
	q[0] <= q[3];
	q[3:1] <= q[2:0];
	end

endmodule


Ну естественно, подгоните под своё. Т.к. мне вера не позволяет писать переменные с большой буквы, сброс писать как RESET (да ещё с активным нулём), ну и нумировать биты регистры с первого, а не с нулевого.
Похожие вопросы