我对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
'if/else's中的'begin/end'很快成为反射! – Marty 2010-08-19 13:28:26
我同意。实际上,我甚至在编辑器中为此创建了一个宏。 – toolic 2010-08-19 13:30:20
那么这本书的答案是'错误',不是吗?如果只想延迟一个时钟周期,为什么会有8个触发器? ......除非是成绩单中的拼写错误(毕竟有copypasta证据).. – Marty 2010-08-19 18:09:42