移位寄存器(左移、右移、雙向)的Verilog實現(xiàn)
移位寄存器的功能和電路形式較多,按移位方向分有左移、右移、和雙向移位寄存器;按接收數(shù)據(jù)方式分為串行輸入和并行輸入;按輸出方向分為串行輸出和并行輸出。
如果將若干個觸發(fā)器級聯(lián)成如下圖所示電路,則構(gòu)成基本的移位寄存器。圖中是一個4位移位寄存器,串行二進(jìn)制數(shù)據(jù)從輸入端Dsi輸入,左邊觸發(fā)器的輸出作為右鄰觸發(fā)器的數(shù)據(jù)輸入。若將串行數(shù)碼D3D2D1D0從高位(D3)至低位(D0)按時鐘脈沖間隔依次送到Dsi端,經(jīng)過第一個時鐘脈沖后,Q0=D3。由于跟隨D3后面的是D2,因此經(jīng)過第二個時鐘脈沖后,觸發(fā)器FF0的狀態(tài)移入觸發(fā)器FF1而FF0轉(zhuǎn)變?yōu)樾碌臓顟B(tài),即Q1=D3,Q0=D2。以此類推,輸入數(shù)碼依次由左側(cè)觸發(fā)器移到右側(cè)觸發(fā)器。經(jīng)過4個時鐘脈沖后,4個觸發(fā)器的輸出狀態(tài)Q3Q2Q1Q0與輸入數(shù)碼D3D2D1D0相對應(yīng)。這樣,就將串行輸人數(shù)據(jù)轉(zhuǎn)換為并行輸出數(shù)據(jù)Dpo。
一般來說,N位移位寄存器要由N個觸發(fā)器構(gòu)成,需要N·Tcp來完成串行到并行的數(shù)據(jù)轉(zhuǎn)換,同樣也需要N?Tcp來實現(xiàn)并行到串行的數(shù)據(jù)輸出。這里,Tcp為時鐘周期。從上述操作可以看出,移位寄存器只能用脈沖邊沿敏感的觸發(fā)器,而不能用電平敏感的鎖存器來構(gòu)成,因為在時鐘脈沖高電平期間,鎖存器輸出跟隨輸入變化的特性將使移位操作失去控制。顯然,移位寄存器屬于同步時序電路。
1.基本移位
首先說明“由于國家標(biāo)準(zhǔn)規(guī)定,邏輯圖中最低有效位(LSB)到最高有效位(MSB)的電路排列順序應(yīng)從上到下,從左到右。因此定義移位寄存器中的數(shù)據(jù)從低位觸發(fā)器移向高位為右移,反之則為左移。這一點與通常計算機程序中規(guī)定相反,后者從自然二進(jìn)制數(shù)的排列考慮,將數(shù)據(jù)移向高位定義為左移,反之為右移?!贝藘?nèi)容摘自《電子技術(shù)基礎(chǔ)-數(shù)字部分》康華光主編教材。
module shifter( din, clk, rst, dout,done);
input din, clk, rst;
output [7:0] dout;
output reg done; //完成移位
reg [7:0] dout;
reg [3:0] cnt;
always @(posedge clk)
begin
if(rst) //清零
dout <= 8’b0;
else if(cnt<=4’d7)
begin
dout<=dout>>1; //左移
dout[7]<=din;
/*dout <= dout<<1;
dout[0] <= din; */ //右移
end
else
dout<=dout;
end
always@(posedge clk)
begin
if(rst)
begin
cnt<=4'd0;
done<=1'b0;
end
else if(cnt==4'd7)
begin
cnt<=4'd0;
done<=1'b1;
end
else begin
cnt<=cnt+1'b1;
done<=1'b0;
end
end
endmodule
仿真結(jié)果圖
2.雙向移位
雙向移位實現(xiàn)數(shù)據(jù)保持、右移、左移、并行置數(shù)、并行輸出。
module two_way(
input clk,
input rst,
input s0,s1, //選擇輸入端口
input din1,din2, //串行數(shù)據(jù)輸入
input [3:0] d, //并行數(shù)據(jù)輸入
output reg [3:0] q //輸出端口
);
always@(posedge clk or negedge rst)
begin
if(!rst)
q<=4'd0;
else begin
case({s1,s0})
2'b00: q<=q;? //輸出保持不變
2'b01: q<={q[2:0],din1};? //右移
2'b10: q<={din2,q[3:1]};? //左移
2'b11: q<=d;? ? ? ? ?//并行置數(shù)
endcase
end
end
endmodule
仿真結(jié)果圖
總結(jié)一般掌握左移、右移方法即可,并根據(jù)實際需求加以應(yīng)用,串并轉(zhuǎn)換也適用。
-
Verilog
+關(guān)注
關(guān)注
29文章
1367瀏覽量
112305 -
移位寄存器
+關(guān)注
關(guān)注
3文章
293瀏覽量
22746 -
觸發(fā)器
+關(guān)注
關(guān)注
14文章
2039瀏覽量
62151
原文標(biāo)題:移位寄存器(左移、右移、雙向)的Verilog實現(xiàn)
文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設(shè)計論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄



55 0806_02 使用移位寄存器實現(xiàn)一行數(shù)據(jù)寄存 - 第2節(jié) #硬聲創(chuàng)作季

55 0806_02 使用移位寄存器實現(xiàn)一行數(shù)據(jù)寄存 - 第3節(jié) #硬聲創(chuàng)作季

55 0806_02 使用移位寄存器實現(xiàn)一行數(shù)據(jù)寄存 - 第4節(jié) #硬聲創(chuàng)作季


用labview模擬擲骰子次數(shù),只能用一個移位寄存器實現(xiàn)
labview移位寄存器實現(xiàn)閃燈報錯
Matlab移位寄存器的實現(xiàn)
一維數(shù)組自動在末尾添加元素,不使用移位寄存器怎么實現(xiàn)
線性反饋移位寄存器原理與實現(xiàn)

用移位寄存器實現(xiàn)邊沿檢測的技巧
基于線性反饋移位寄存器實現(xiàn)CMOS電路的低功耗設(shè)計

評論