Я очень новичок в языке HDL. У меня вопрос о том, как программировать сдвиговый регистр. (я знаю, что я перехожу в другое направление). Почему книга использует wire[N-1:0] r_next
? что является недостатком моей реализации? благодаряРегистры сдвига Verilog
моя первая попытка выглядит следующим образом
module lesson04#(parameter N=8)(
input wire clk, reset,
input wire data,
output wire out
);
reg [N-1: 0] r_reg;
always @(posedge clk or negedge reset)
begin
if(!reset)
r_reg =0;
else
r_reg[0]=data;
r_reg = r_reg<<1;
end
assign out =r_reg[N-1];
endmodule
но книга дает:
module lesson04#(parameter N=8)(
input wire clk, reset,
input wire data,
output wire out
);
reg [N-1: 0] r_reg;
wire[N-1:0] r_next;
always @(posedge clk or negedge reset)
begin
if(!reset)
r_reg =0;
else
r_reg <= r_next;
end
assign r_next= {data, r_reg[N-1:1]};
assign out =r_reg[N-1];
endmodule
'begin/end' в' if/else 'скоро станет рефлексом! – Marty
Согласен. На самом деле, я даже создал макрос в своем редакторе для этого. – toolic
Ответ на книгу «не так», не так ли? Почему есть 8 флопов, если вы хотите отложить только за один такт? ... Если это не опечатка в стенограмме (в конце концов, есть доказательства copypasta). – Marty