實現(xiàn)一個4bit的移位寄存器如下,不帶復(fù)位
module shift_reg(
input clk,
input rst,
input din,
output dout
);
reg [ 3:0] buff;
assign dout = buff[3];
always@(posedge clk) begin buff[3:0] <= {buff[2:0],din}; end
endmodule
下圖是ISE14.7實現(xiàn)后的結(jié)果如下圖所示,編譯器直接把他綜合進了一個SRL16里面,也就是專用的移位寄存器模塊,只需要一個LUT就可以實現(xiàn)16bit以內(nèi)的移位
這是不帶復(fù)位的資源,可以看到觸發(fā)器只用了一個,LUT也只用了一個,并且是作為存儲器用的,而且是作為存儲器里面的移位寄存器使用。
下面是帶有復(fù)位的移位寄存器代碼
module shift_reg(
input clk,
input rst,
input din,
output dout
);
reg [ 3:0] buff;
assign dout = buff[3];
always@(posedge clk)
begin
if(rst==1) buff<=0; else buff[3:0] <= {buff[2:0],din};
end
endmodule
ISE14.7綜合結(jié)果如下:
從上圖可以看出,他是用了4個觸發(fā)器級聯(lián)構(gòu)成,并且每個觸發(fā)器的復(fù)位端都是接了rst端的。
下圖是資源消耗,看的出來用了4個觸發(fā)器和0個LUT:
綜上:移位時間越長用沒有復(fù)位的方式越節(jié)約資源。
那么,對于寄存器初始狀態(tài)沒有復(fù)位怎么設(shè)置他呢?
verilog2001的標(biāo)準(zhǔn)已經(jīng)解決,ISE14.7和vivado也都支持
比如, reg [ 3:0] buff = 0;就是上電后寄存器buff為全0
而 reg [ 3:0] buff = 8'hff;就是上電后寄存器buff的值為全1
-
存儲器
+關(guān)注
關(guān)注
38文章
7440瀏覽量
163529 -
移位寄存器
+關(guān)注
關(guān)注
2文章
258瀏覽量
22212 -
觸發(fā)器
+關(guān)注
關(guān)注
14文章
1995瀏覽量
61014 -
LUT
+關(guān)注
關(guān)注
0文章
49瀏覽量
12476 -
SRL16
+關(guān)注
關(guān)注
0文章
2瀏覽量
1247
發(fā)布評論請先 登錄
相關(guān)推薦
評論