我對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