移位暫存器之右移位暫存器(Verilog HDL語言描述)
阿新 • • 發佈:2018-12-18
目錄
背景
之所以單獨把這個簡單的東西拿出來,就是因為這個東西我可能要用到,不能眼高手低,以為簡單就一眼帶過,之後,用的時候就不能快速地拿出來,處於這個簡單的目的,這個知識點貼出來遛遛。
之所以強調非環形移位,很簡單,我不想讓它具有環形移位的功能唄,我不需要,需要的時候直接改一行程式碼即可。
測試一
這種移位暫存器,給一個輸入資料之後,在一個時鐘上升沿到來時,輸出等於輸入右移1位,高位補零,然後如果沒有輸入資料的話,輸出就不在變化了,直到又給一個輸入,然後時鐘上升沿到來時,輸入訊號右移1位作為輸出,如此下去。
Verilog HDL語言描述
//10 bit right shift register
module register(clk, din, dout);
input clk;
input [9:0] din;
output [9:0] dout;
reg [9:0] dout;
[email protected](posedge clk)
begin
dout <= {1'b0, din[9:1]};
end
endmodule
測試程式碼
//testbench file for 10 bit right shift register `timescale 1ns/1ps module register_tb; reg clk; reg [9:0] din; wire [9:0] dout; //clock generation of period 20 ns always begin #10 clk = ~clk; end //initialization initial begin clk = 1'b0; din = 10'b0010110110; #200 din = 10'b1110001010; end register u1(.clk(clk),.din(din), .dout(dout)); endmodule
模擬波形圖
測試二
如果需要右移3位,則
Verilog HDL語言描述
//10 bit right shift register
module a(clk, din, dout);
input clk;
input [9:0] din;
output [9:0] dout;
reg [9:0] dout;
[email protected](posedge clk)
begin
dout <= {3'b000, din[9:3]};
end
endmodule
測試程式碼
//testbench file for 10 bit right shift register `timescale 1ns/1ps module register_tb; reg clk; reg [9:0] din; wire [9:0] dout; //clock generation of period 20 ns always begin #10 clk = ~clk; end //initialization initial begin clk = 1'b0; din = 10'b0010110110; #200 din = 10'b1110001010; end register u1(.clk(clk),.din(din), .dout(dout)); endmodule
模擬圖
ISE綜合
RTL Schematic
測試三
環形移位暫存器(右移)
Verilog HDL描述
//10 bit right shift register
module register(clk, din, dout);
input clk;
input [9:0] din;
output [9:0] dout;
reg [9:0] dout;
[email protected](posedge clk)
begin
dout <= {din[0], din[9:1]};
end
endmodule
測試程式碼
//testbench file for 10 bit right shift register
`timescale 1ns/1ps
module register_tb;
reg clk;
reg [9:0] din;
wire [9:0] dout;
//clock generation of period 20 ns
always
begin
#10 clk = ~clk;
end
//initialization
initial
begin
clk = 1'b0;
din = 10'b0010110110;
#200 din = 10'b1110001010;
end
register u1(.clk(clk),.din(din), .dout(dout));
endmodule
模擬波形圖
ISE綜合
RTL Schematic
事實上,我以前做過移位暫存器的總結:移位暫存器專題